trx4电机碳刷
① 两片单片机的无线传输用NRF905 接收端 发送端 程序分别怎么写 好困惑
NRF905的程序中只有nRF905Init();Config905();RX();前两个初始化,后个传输函数,执行后在TRXBUF数组中会有相应的值。以下是接收的主函数,这是控制电机左右转动的程序。(小车部分)
voidmain(void)
{
nRF905Init();
Config905();
while(1)
{
RX();
if(TxRxBuf[0]==0x11){in1=1;in2=0;in5=1;in6=0;}//从左往右
if(TxRxBuf[1]==0x11){in3=1;in4=0;in7=1;in8=0;}//从右往左
if(TxRxBuf[0]==0x22){in1=1;in2=1;in5=1;in6=1;}//从左往右
if(TxRxBuf[1]==0x22){in3=1;in4=1;in7=1;in8=1;}//从右往左
in1=1;in2=0;
}
}
遥控部分:就俩按键一个做转一个右转这是无线遥控小车的遥控部分。
voidmain(void)
{
nRF905Init();
Config905();
while(1)
{
if(KEY0==0){TxRxBuf[0]=0x11;}
if(KEY0==1){TxRxBuf[0]=0x22;}
if(KEY1==0){TxRxBuf[1]=0x11;}
if(KEY1==1){TxRxBuf[1]=0x22;}
SetTxMode();//SetnRF905inTxmode
TxPacket(TxRxBuf);//SenddatabynRF905
}
}
那么在设置上:就按以下设置:
#include<reg52.h>
#include<ABSACC.h>
#include<intrins.h>
#include<stdio.h>
//----------------------------------------------------------------------------------------------------------------
#defineuintunsignedint
#defineucharunsignedchar
//----------------------------------------------------------------------------------------------------------------
#defineBYTE_BIT0 0x01
#defineBYTE_BIT1 0x02
#defineBYTE_BIT2 0x04
#defineBYTE_BIT3 0x08
#defineBYTE_BIT4 0x10
#defineBYTE_BIT5 0x20
#defineBYTE_BIT6 0x40
#defineBYTE_BIT7 0x80
//----------------------------------------------------------------------------------------------------------------
bdataunsignedcharDATA_BUF;
#defineDATA7 ((DATA_BUF&BYTE_BIT7)!=0)
#defineDATA0((DATA_BUF&BYTE_BIT0)!=0)
sbit flag =DATA_BUF^7;
sbit flag1 =DATA_BUF^0;
//---------------------------------------------------发送数据缓冲区-------------------------------------------------
#defineTxRxBuf_Len4
unsignedcharTxRxBuf[TxRxBuf_Len]=
{
0x29,0x30,0x31,0x32,
};
//----------------------------------------------NRF905控制IO------------------------------------------------------
sbit TXEN=P1^0;
sbit TRX_CE=P3^2;
sbit PWR=P1^1;
//----------------------------------------------NRF905SPI接口---------------------------------------------------
sbit MISO=P1^6;
sbit MOSI=P1^5;
sbit SCK=P1^7;
sbit CSN=P1^3;
//----------------------------------------nrf905状态标志---------------------------------------------------------
sbit AM=P1^4;
sbit DR=P3^3;
sbit CD=P1^2;
//---------------------------------------------------------------------------------------------------------------
sbit led3=P2^0;
sbit led2=P2^1;
sbit led1=P2^2;
sbit led0=P2^3;
//--------------------------------------------------------------------------------------------------------------
sbit KEY0=P3^6;
sbit KEY1=P3^7;
//--------------------------------------------------------------------------------
sbit BELL=P3^4;
//-----------------------------------------------------------------------------------------------------------------
ucharseg[10]={0xC0,0xCF,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//0~~9段码
//-------------------------------------------------------nrf905控制指令-------------------------------------------
#defineWC 0x00
#defineRC 0x10
#defineWTP 0x20
#defineRTP 0x21
#defineWTA 0x22
#defineRTA 0x23
#defineRRP 0x24
//------------------------------------------------NRF905寄存器配置------------------------------------------------
unsignedcharidataRFConf[11]=
{
0x00,//配置命令//
0x4c,//CH_NO,配置频段在430MHZ
0x0c,//输出功率为10db,不重发,节电为正常模式
0x44,//地址宽度设置,为4字节
0x04,0x04,//接收发送有效数据长度为32字节
0xCC,0xCC,0xCC,0xCC,//接收地址
0x58,//CRC充许,8位CRC校验,外部时钟信号不使能,16M晶振
};
codeTxAddress[4]={0xcc,0xcc,0xcc,0xcc};
chartf;
//------------------------------------------------延时------------------------------------------------------------
staticvoidDelay(ucharn)
{
uinti;
while(n--)
for(i=0;i<80;i++);
}
//---------------------------------------------------SPI读函数-----------------------------------------------------
unsignedcharSpiRead(void)
{
unsignedcharj;
for(j=0;j<8;j++)
{
DATA_BUF=DATA_BUF<<1;
SCK=1;
if(MISO) //读取最高位,保存至最末尾,通过左移位完成整个字节
{
DATA_BUF|=BYTE_BIT0;
}
else
{
DATA_BUF&=~BYTE_BIT0;
}
SCK=0;
}
returnDATA_BUF;
}
//-------------------------------------------------SPI写函数----------------------------------------------------------
voidSpiWrite(unsignedcharsend)
{
unsignedchari;
DATA_BUF=send;
for(i=0;i<8;i++)
{
if(DATA7) //总是发送最高位
{
MOSI=1;
}
else
{
MOSI=0;
}
SCK=1;
DATA_BUF=DATA_BUF<<1;
SCK=0;
}
}
//------------------------------------------------------初始化nRF905---------------------------------------------
voidnRF905Init(void)
{
CSN=1; //Spi disable
SCK=0; //Spiclocklineinitlow
DR=0; //InitDRforinput
AM=0; //InitAMforinput
CD=0; //InitCDforinput
PWR=1; //nRF905poweron
TRX_CE=0; //SetnRF905instandbymode
TXEN=0; //setradioinRxmode
}
//-----------------------------------------------------初始化寄存器-----------------------------------------------
voidConfig905(void)
{
uchari;
CSN=0; //Spienableforwriteaspicommand
//SpiWrite(WC); //Writeconfigcommand写放配置命令
for(i=0;i<11;i++) //Writeconfigrationwords写放配置字
{
SpiWrite(RFConf[i]);
}
CSN=1; //DisableSpi
}
//-----------------------------------------------------发送数据打包---------------------------------------------------
voidTxPacket(uchar*TxRxBuf)
{
uchari;
//Config905();
CSN=0;
SpiWrite(WTP); //Writepayloadcommand
for(i=0;i<4;i++)
{
SpiWrite(TxRxBuf[i]); //Write32bytesTxdata
}//Spienableforwriteaspicommand
CSN=1;
Delay(1); //Spidisable
CSN=0; //Spienableforwriteaspicommand
SpiWrite(WTA); //Writeaddresscommand
for(i=0;i<4;i++) //Write4bytesaddress
{
SpiWrite(TxAddress[i]);
}
CSN=1; //Spidisable
TRX_CE=1; //SetTRX_CEhigh,startTxdatatransmission
Delay(1); //while(DR!=1);
TRX_CE=0; //SetTRX_CElow
}
//----------------------------------------------------------设置发送状态---------------------------------------------
voidSetTxMode(void)
{
TRX_CE=0;
TXEN=1;
Delay(1); //delayformodechange(>=650us)
}
//-----------------------------------------------设置发送状态---------------------------------------------------
voidSetRxMode(void)
{
TXEN=0;
TRX_CE=1;
Delay(1); //delayformodechange(>=650us)
}
//-------------------------------------------------判断数据接收状态-----------------------------------------------------
unsignedcharCheckDR(void) //检查是否有新数据传入DataReady
{
if(DR=1&&TRX_CE==1&&TXEN==0)
{
//Delay(50);
return1;
}
else
{
return0;
}
}
//----------------------------------------------------读NRF905接收数据------------------------------------------------------------
voidRxPacket(void)
{
uchari;
Delay(1);
// TRX_CE=0; //SetnRF905instandbymode
Delay(100);
TRX_CE=0;
CSN=0; //Spienableforwriteaspicommand
Delay(1);
SpiWrite(RRP);
for(i=0;i<4;i++)
{
TxRxBuf[i]=SpiRead(); //Readdataandsavetobuffer
}
CSN=1;
Delay(10);
TRX_CE=1;
}
//--------------------------------------------------------数据接收------------------------------------------------
voidRX(void)
{
SetRxMode(); //SetnRF905inRxmode
while(CheckDR()==0);
Delay(10);
RxPacket();
}
这些是子函数。只要把一些关于电机的sbit定义去掉,剩下的就是真正的子函数了。
那么,需注意的就只有nRF905Init();Config905();RX();SetTxMode();和一个TXbuf数组,把这几个用好了,程序就跳出来了。nRF905Init();Config905();收发都需要,SetTxMode();发送要,RX();接收要。就是这样了,最起码我看是这样。
② 步进电机的升降频编程,请大家指点一下思路,不胜感激
定时中断,中断一次,转动一步。
中断函数如下:
void dianji()
{
// uchar j; //变量j,放在最前面 去定义,初始值为0
j++;
if(j == 4) j = 0;
PORTB = a[j];
TCNT1H = 0XFF; //这两个数字,代表“中断时间”,
TCNT1L = 0XFE; //也代表转动“一步”的时间.
}
提速、降速,就是 需要改变 这两行 的 数值:
TCNT1H = 0XFF;
TCNT1L = 0XFE;
③ 我老公在工厂做事被电机电伤,工厂应怎样负责任呢
算的,
请参考 劳动法工伤认定范围,里面有赔偿标准,下面就是
http://wenku..com/link?url=n-pOLkT_9ZerPvmiToG9jLp8r2fvb-soQNJeW
④ 无刷励磁跟有刷励磁的区别
前者有交流励磁机和旋转硅整流,但无碳刷,清洁维护工作量少。后者有碳刷滑环,但励磁响应速度快。
唯一的区别是:有刷交流发电机的磁场烧组随发电机转子一起转动;而无刷交流发电机的磁场绕组是静止不动的,即不随转子一起转动。因此,其磁场绕组的两条引线可直接从后端盖引出,省去了经常维护和检修炭刷和滑环的工作。由于磁场绕组和电枢绕组一样,都固装在发电机后端盖上,所以,工作中装在转子总成上的爪形磁极是在电枢绕组和班场绕组之间的空隙中旋转。
无刷交流发电机的优点是:工作时无火花,对无线电设备干扰小,克服了有刷发电机因炭刷和滑环间的摩擦与磨损而引发的接触不良、不发电或发电不稳等常见故障。其不足是:因磁路中增加了两个附加空隙,使其低速运转时的充电性能较有刷发电机略有下降。
发电机的原理都是一样的
有刷和无刷只是结构形式的差别先说有刷的:有刷发电机
只有主定子和主转子
最简单的就是
发电机旋转后通过主转子的剩磁切割主定子线圈产生感应电动势发出微弱的电压
经过外部整流后形成直流电压
再通过电刷
滑环
到主转子形成更强的磁场
切割主定子线圈产生感应电动势得到额定电压无刷的就是:
无刷发电机有三部分
永磁发电机、励磁发电机和主发电机组成。或者两部分励磁发电机和主发电机。
三部分:永磁发电机、励磁发电机和主发电机的转子是同轴的。由永磁发电机(因为他的主转子是永磁的不需要励磁)直接发出电压经过外部整流后形成直流电压。
该电压接到励磁发电机的定子,定子形成磁场,励磁发电机的转子线圈切割磁力线产生电压
再经过在主轴上的旋转二极管整流成直流电压接到主发电机的主转子上,主转子形成磁场,主定子切割磁力线形得到发电电压。
两部分
励磁发电机定子电压有主发电机的剩磁电压经整流后提供
.