基于nRF24E1無線傳輸?shù)脑O(shè)計(jì)與應(yīng)用
引言
隨著科技的進(jìn)步,越來越多的無線技術(shù)正快速應(yīng)用到各種產(chǎn)品中。nRF24E1是挪威Nordic公司推出的一款單片2.4GHz無線收發(fā)芯片,采用0.18mCMOS技術(shù)制造,以增強(qiáng)型51為內(nèi)核,9路10bitADC,采樣率可達(dá)100K,具有125個頻道,傳輸速率可達(dá)1Mbps,內(nèi)置CRC校驗(yàn)并支持多點(diǎn)通信。1.9~3.6V低功耗工作,內(nèi)置電壓監(jiān)視和復(fù)位電路,多種省電模式可供選擇,待機(jī)電流僅為2A。nRF24E1可廣泛應(yīng)用于無線水表、煤氣、電表;無線智能傳感器;無線數(shù)據(jù)采集裝置;無線身份識別智能卡;無線火警探頭;無線耳機(jī)、麥克風(fēng);無線鼠標(biāo)、無線鍵盤;PDA手持終端等短距離無線通信場所。
概述
nRF24E1功能介紹
nRF24E1結(jié)構(gòu)框圖如圖1所示。
微處理器
nRF24E1微處理器的指令系統(tǒng)與工業(yè)標(biāo)準(zhǔn)的8051相兼容,但兩者的執(zhí)行時序稍有不同。通常,nRF24E1片內(nèi)微控制器、的指令周期為4到20個指令周期,而工業(yè)標(biāo)準(zhǔn)的8051為12~48個時鐘周期。nRF24E1的中斷控制器支持ADC、SPI、RF接收器1、RF接收器2、喚醒定時器、5個中斷源。nRF24E1擁有3個與8052一樣的定時器。在傳統(tǒng)的異步通信方式下,與8051兼容的UART可用作定時器1和定時器2的波特率發(fā)生器。nRF24E1的CPU集成了2個數(shù)據(jù)指針,以便于和外部RAM進(jìn)行數(shù)據(jù)傳遞。晶振直接為nRF24E1的微控制器提供了時鐘來源。
nRF24E1的微控制器中有256字節(jié)的數(shù)據(jù)RAM和512字節(jié)的ROM。上電復(fù)位或經(jīng)軟件初始化后,處理器自動加載ROM引導(dǎo)區(qū)中的代碼。用戶程序通常是在引導(dǎo)區(qū)的引導(dǎo)下,從外部串口EEPROM加載到1個4KB的RAM中,這個4KB的RAM也可作存儲數(shù)據(jù)用。如果不使用掩膜ROM(即內(nèi)含的ROM),程序代碼必須從外部非易失性存儲器中加載。這時,默認(rèn)的啟動引導(dǎo)區(qū)使用SPI接口的“通用25320”EEPROM。為了控制標(biāo)準(zhǔn)8051沒有的功能,nRF24E1增加了一些特殊功能寄存器,如RADIO(P2)、ADCCON、ADCDATAH、PWMCON、PWMDUTY、RSTREAS等。其P0和P1也和標(biāo)準(zhǔn)8051有所不同,其它大部分的SFRs均與標(biāo)準(zhǔn)8051相同。
PWM
nRF24E1有一個可編程PWM輸出,它和DIO9共同復(fù)用P0.7引腳,并可軟件編程決定PWM工作于6、7或8位。
SPI(串行外設(shè)接口)
SPI的3個口(SDI、SCK和SDO)與GPIO(DIN0、DIO0和DIO1)共同復(fù)用P1口的三個引腳(P1.0、P1.1、P1.2)。SPI硬件不產(chǎn)生任何片選信號,通常用GPIO位(P0口)來作為外部SPI設(shè)備的片選口。
端口邏輯
nRF24E1有1個輸入,10個輸出引腳。P0(DIO2~DIO9)和P1(DIO0、DIO1、DIN0)默認(rèn)配置為GPIO(通用輸入輸出端口)。多數(shù)GPIO在程序控制下可復(fù)用,這些復(fù)用功能包括兩個外部中斷,UARTRXD和TXD,一個SPI主機(jī)端口,三個定時器和PWM輸出。
RTC喚醒定時器、WTD(看門狗)和RC振蕩器
nRF24E1內(nèi)有一個低功耗的RC振蕩器。該振蕩器在VDD≥1.8V時,會持續(xù)工作。RTC喚醒定時器和WTD(看門狗)是2個16位的可編程定時器,它們的工作時鐘為RC振蕩器的LP_OSC。喚醒定時器和看門狗的定時時間約為300s~80ms,其默認(rèn)值為10ms。喚醒定時器由用戶軟件控制啟動和停止??撮T狗在復(fù)位后被禁止,再次復(fù)位后才能被激活。
A/D轉(zhuǎn)換器
nRF24E1內(nèi)有9通道10位ADC,線性轉(zhuǎn)換時間為每10位48個CPU指令周期。A/D轉(zhuǎn)換器可在ARFE輸入和內(nèi)部1.22V的帶隙參考之間進(jìn)行軟件選擇。轉(zhuǎn)換器的9個輸入可由軟件進(jìn)行選擇。通道0~7可以轉(zhuǎn)換對應(yīng)引腳AIN0~AIN7上的電壓值,通道8用于對nRF24E1工作電壓的監(jiān)控。A/D轉(zhuǎn)換器默認(rèn)配置為10位,為滿足需要,可通過軟件使其工作于6位、8位或12位方式。
無線收發(fā)器
nRF24E1收發(fā)器通過內(nèi)部并行口或內(nèi)部SPI口與其他模塊進(jìn)行通信,同單片射頻收發(fā)器nRF2401具有相同的功能。DuoCeiver接收器輸出的數(shù)據(jù)準(zhǔn)備信號,可通過程序使其作為微處理器的中斷或通過GPIO口傳給CPU。nRF24E1工作于全球開放的2.4~2.5GHz頻段。收發(fā)器由1個完整的頻率合成器、1個功率放大器、1個調(diào)節(jié)器和2個接收器組成。輸出功率、頻道和其它射頻參數(shù)可通過對RADIO寄存器(SFR0xA0)編程進(jìn)行控制。發(fā)射模式下,射頻電流消耗僅為10.5mA,接收模式下為18mA。為了節(jié)能,可通過軟件程序控制收發(fā)器的開/關(guān)。
硬件設(shè)計(jì)
nRF24E1收發(fā)核心電路如圖2所示。
由于本設(shè)計(jì)要求PCB板越小越好而且成品要密封,所以如何供電成了這次設(shè)計(jì)的難點(diǎn)。若使用電池則有持續(xù)時間短、占用面積大和易震動脫落等缺點(diǎn)。nRF24E1電源電壓是1.9~3.6V,且功耗很低。MAX2323及串口EEPROM25AA320均可工作在3.0V,因此在該設(shè)計(jì)中摒棄了由電池供電的做法,而采用了從串口取電源作為整個電路的供電系統(tǒng)。其串口取電源電路如圖3所示。
軟件設(shè)計(jì)
nRF24E1具有增強(qiáng)型8051內(nèi)核,KeilC51支持nRF24E1開發(fā),因此利用C51開發(fā)經(jīng)驗(yàn)即可編出高效優(yōu)質(zhì)的代碼。此程序是經(jīng)KeilC51V7.05編譯并調(diào)試通過,篇幅有限,僅列出主要功能函數(shù)。
(1)初始化程序如下:
voidInit(void){
//配置I/O口
P0_ALT=0x06;//P0.1為RXD,P0.2為TXD
P0_DIR=0x09;//P0.0和P0.3設(shè)為輸入
P1_DIR=0x03;//P1.0和P1.1設(shè)為輸入
PWR_UP=1;//開Radio,讀時不用,寫時為電源
SPICLK=0;//SPI時鐘為XTAL/8
SPI_CTRL=0x02;//把SPI與收發(fā)通道1(CH1)相連
//串口通訊初始化
TH1=0x0F3;//晶振為16MHz,波特率為19200(當(dāng)T1M=1且SMOD=1時)
CKCON|=0x10;//T1M=1(計(jì)數(shù)器時鐘為CPU時鐘的1/4)
PCON=0x80;//SMOD=1(雙倍波特率)
SCON=0x52;//采用串口模式1,使能接收器
TMOD=0x20;//使用計(jì)數(shù)器1,8位計(jì)數(shù)值自動重載
TCON=0x40;//啟動計(jì)數(shù)器
}
(2)接收器配置函數(shù)
[!--empirenews.page--]voidInit_Receiver(void){
unsignedcharb;
CS=1;//打開配置方式
Delay100us(0);
for(b=0;b
{
SpiReadWrite(rconf.buf[b]);//發(fā)送接收器配置字
}
CS=0;//關(guān)配置方式
CE=1;//使能收發(fā)功能
}(3)接收函數(shù)
voidReceiver(void){
unsignedcharb;
CS=1;//打開配置模式
Delay100us(0);
for(b=0;b
SpiReadWrite(rconf.buf[b]);//發(fā)送接收器配置字
}
CS=0;//關(guān)配置模式
for(;;){
b=ReceivePacket();//接收數(shù)據(jù)包
PutChar(b);//串口通信函數(shù),將接收到的數(shù)據(jù)通過串口傳送
}
}
(4)發(fā)送函數(shù)
voidTransmitter(void){
unsignedcharb;
CS=1;
Delay100us(0);
for(b=0;b
SpiReadWrite(tconf.buf[b]);//發(fā)送發(fā)送器配置字
}
CS=0;
for(;;){
b=ReadADC();//讀A/D轉(zhuǎn)換結(jié)果
PutChar(b);
TransmitPacket(b);//發(fā)送數(shù)據(jù)包
}
}
此程序除了以上函數(shù)外,還有串口通訊函數(shù)、讀A/D轉(zhuǎn)換結(jié)果函數(shù)、接收包處理函數(shù)和發(fā)送包處理函數(shù)等。
結(jié)論
本設(shè)計(jì)電路簡單,易于實(shí)現(xiàn)。經(jīng)實(shí)際調(diào)試應(yīng)用完全可用于點(diǎn)對點(diǎn)及點(diǎn)對多點(diǎn)的無線數(shù)據(jù)傳輸,收到了良好的效果。1Mbps完全滿足一般無線傳輸的要求。若進(jìn)行批量生產(chǎn)時可將程序?qū)戇M(jìn)nRF24E1的內(nèi)部RAM中,從而省去了外部串口EEPROM,節(jié)約了成本。