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





