基于nRF24E1無線傳輸?shù)脑O計與應用
引言
隨著科技的進步,越來越多的無線技術正快速應用到各種產品中。nrf24e1是挪威nordic公司推出的一款單片2.4ghz無線收發(fā)芯片,采用0.18
m cmos技術制造,以增強型51為內核,9路10bitadc,采樣率可達100k,具有125個頻道,傳輸速率可達1mbps,內置crc校驗并支持多點通信。1.9~3.6v低功耗工作,內置電壓監(jiān)視和復位電路,多種省電模式可供選擇,待機電流僅為2
a。nrf24e1可廣泛應用于無線水表、煤氣、電表;無線智能傳感器;無線數(shù)據采集裝置;無線身份識別智能卡;無線火警探頭;無線耳機、麥克風;無線鼠標、無線鍵盤;pda手持終端等短距離無線通信場所。
概述
nrf24e1功能介紹
nrf24e1結構框圖如圖1所示。
微處理器nrf24e1微處理器的指令系統(tǒng)與工業(yè)標準的8051相兼容,但兩者的執(zhí)行時序稍有不同。通常,nrf24e1片內微控制器、的指令周期為4到20個指令周期,而工業(yè)標準的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ù)據指針,以便于和外部ram進行數(shù)據傳遞。晶振直接為nrf24e1的微控制器提供了時鐘來源。
nrf24e1的微控制器中有256字節(jié)的數(shù)據ram和512字節(jié)的rom。上電復位或經軟件初始化后,處理器自動加載rom引導區(qū)中的代碼。用戶程序通常是在引導區(qū)的引導下,從外部串口eeprom加載到1個4kb的ram中,這個4kb的ram也可作存儲數(shù)據用。如果不使用掩膜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(通用輸入輸出端口)。多數(shù)gpio在程序控制下可復用,這些復用功能包括兩個外部中斷,uart rxd和txd,一個spi主機端口,三個定時器和pwm輸出。
rtc喚醒定時器、wtd(看門狗)和rc振蕩器
nrf24e1內有一個低功耗的rc振蕩器。該振蕩器在vdd≥1.8v時,會持續(xù)工作。rtc喚醒定時器和wtd(看門狗)是2個16位的可編程定時器,它們的工作時鐘為rc振蕩器的lp_osc。喚醒定時器和看門狗的定時時間約為300 s~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接收器輸出的數(shù)據準備信號,可通過程序使其作為微處理器的中斷或通過gpio口傳給cpu。nrf24e1工作于全球開放的2.4~2.5ghz頻段。收發(fā)器由1個完整的頻率合成器、1個功率放大器、1個調節(jié)器和2個接收器組成。輸出功率、頻道和其它射頻參數(shù)可通過對radio寄存器(sfr 0xa0)編程進行控制。發(fā)射模式下,射頻電流消耗僅為10.5ma,接收模式下為18ma。為了節(jié)能,可通過軟件程序控制收發(fā)器的開/關。
硬件設計
nrf24e1收發(fā)核心電路如圖2所示。
由于本設計要求pcb板越小越好而且成品要密封,所以如何供電成了這次設計的難點。若使用電池則有持續(xù)時間短、占用面積大和易震動脫落等缺點。nrf24e1電源電壓是1.9~3.6v,且功耗很低。max2323及串口eeprom25aa320均可工作在3.0v,因此在該設計中摒棄了由電池供電的做法,而采用了從串口取電源作為整個電路的供電系統(tǒng)。其串口取電源電路如圖3所示。
軟件設計
nrf24e1具有增強型8051內核,keil c51支持nrf24e1開發(fā),因此利用c51開發(fā)經驗即可編出高效優(yōu)質的代碼。此程序是經keil c51 v7.05編譯并調試通過,篇幅有限,僅列出主要功能函數(shù)。
(1)初始化程序如下:
void init(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 (計數(shù)器時鐘為cpu時鐘的1/4)
pcon = 0x80; // smod=1 (雙倍波特率)
scon = 0x52; // 采用串口模式1,使能接收器
tmod = 0x20; // 使用計數(shù)器1,8位計數(shù)值自動重載
tcon = 0x40; // 啟動計數(shù)器
}
(2)接收器配置函數(shù)
void init_receiver(void){
unsigned char b;
cs = 1; //打開配置方式
delay100us(0);
for(b=0;b
spireadwrite(rconf.buf[b]); //發(fā)送接收器配置字
}
cs = 0; // 關配置方式
ce = 1; // 使能收發(fā)功能
} (3)接收函數(shù)
void receiver(void){
unsigned char b;
cs = 1; //打開配置模式
delay100us(0);
for(b=0;b
}
cs = 0; //關配置模式
for(;;){
b = receivepacket(); //接收數(shù)據包
putchar(b); //串口通信函數(shù),將接收到的數(shù)據通過串口傳送
}
}
(4)發(fā)送函數(shù)
void transmitter(void){
unsigned char b;
cs = 1;
delay100us(0);
for(b=0;b
}
cs = 0;
for(;;){
b= readadc(); // 讀a/d轉換結果
putchar(b);
transmitpacket(b); // 發(fā)送數(shù)據包
}
}
此程序除了以上函數(shù)外,還有串口通訊函數(shù)、讀a/d轉換結果函數(shù)、接收包處理函數(shù)和發(fā)送包處理函數(shù)等。
結論
本設計電路簡單,易于實現(xiàn)。經實際調試應用完全可用于點對點及點對多點的無線數(shù)據傳輸,收到了良好的效果。1mbps完全滿足一般無線傳輸?shù)囊?。若進行批量生產時可將程序寫進nrf24e1的內部ram中,從而省去了外部串口eeprom,節(jié)約了成本。
評論