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
④ 無刷勵磁跟有刷勵磁的區別
前者有交流勵磁機和旋轉硅整流,但無碳刷,清潔維護工作量少。後者有碳刷滑環,但勵磁響應速度快。
唯一的區別是:有刷交流發電機的磁場燒組隨發電機轉子一起轉動;而無刷交流發電機的磁場繞組是靜止不動的,即不隨轉子一起轉動。因此,其磁場繞組的兩條引線可直接從後端蓋引出,省去了經常維護和檢修炭刷和滑環的工作。由於磁場繞組和電樞繞組一樣,都固裝在發電機後端蓋上,所以,工作中裝在轉子總成上的爪形磁極是在電樞繞組和班場繞組之間的空隙中旋轉。
無刷交流發電機的優點是:工作時無火花,對無線電設備干擾小,克服了有刷發電機因炭刷和滑環間的摩擦與磨損而引發的接觸不良、不發電或發電不穩等常見故障。其不足是:因磁路中增加了兩個附加空隙,使其低速運轉時的充電性能較有刷發電機略有下降。
發電機的原理都是一樣的
有刷和無刷只是結構形式的差別先說有刷的:有刷發電機
只有主定子和主轉子
最簡單的就是
發電機旋轉後通過主轉子的剩磁切割主定子線圈產生感應電動勢發出微弱的電壓
經過外部整流後形成直流電壓
再通過電刷
滑環
到主轉子形成更強的磁場
切割主定子線圈產生感應電動勢得到額定電壓無刷的就是:
無刷發電機有三部分
永磁發電機、勵磁發電機和主發電機組成。或者兩部分勵磁發電機和主發電機。
三部分:永磁發電機、勵磁發電機和主發電機的轉子是同軸的。由永磁發電機(因為他的主轉子是永磁的不需要勵磁)直接發出電壓經過外部整流後形成直流電壓。
該電壓接到勵磁發電機的定子,定子形成磁場,勵磁發電機的轉子線圈切割磁力線產生電壓
再經過在主軸上的旋轉二極體整流成直流電壓接到主發電機的主轉子上,主轉子形成磁場,主定子切割磁力線形得到發電電壓。
兩部分
勵磁發電機定子電壓有主發電機的剩磁電壓經整流後提供
.