基于nRF24L01的無線溫濕度測試系統(tǒng)
3 系統(tǒng)的軟件設(shè)計
3.1 無線發(fā)送模式流程
1)MCU控制引腳CE為低,使nRF24L01進入待機模式I,配置其寄存器:
2)當MCU有數(shù)據(jù)要發(fā)送時,接收節(jié)點地址(TX_ADDR)和有效數(shù)據(jù)(TX_PLD)通過SPI接口寫入nRF24L01,當CSN為低時數(shù)據(jù)被不斷地寫入。發(fā)送端發(fā)送完數(shù)據(jù)后,將通道0設(shè)置為接收模式來接收應(yīng)答信號,其接收地址(RX_ADDR_P0)與接收端地址(TX_ADDR)相同;
3)設(shè)置PRIM_RX為低、CE為高,啟動發(fā)射模塊,CE高電平持續(xù)時間最小為10μs;
4)nRF24L01 ShockBurst發(fā)送模式:無線系統(tǒng)上電、啟動內(nèi)部16 MHz時鐘、無線發(fā)送數(shù)據(jù)打包、高速發(fā)送數(shù)據(jù);
5)數(shù)據(jù)發(fā)送完后,立即進入接收模式。如果在有效應(yīng)答時間范圍內(nèi)收到應(yīng)答信號,則認為數(shù)據(jù)成功發(fā)送到了接收端,此時狀態(tài)寄存器的TX_DS位置高并把數(shù)據(jù)從TX_FIFO中清除掉;如果在設(shè)定時間范圍內(nèi)沒有接收到應(yīng)答信號,則重新發(fā)送數(shù)據(jù),如果自動重發(fā)計數(shù)器溢出,則狀態(tài)寄存器的MAX_RT位置高,不清除TX_FIFO中的數(shù)據(jù)。當MAX_RT或TX_DS為高電平時IRQ引腳產(chǎn)生中斷,IRQ中斷通過寫狀態(tài)寄存器來復位。如果重發(fā)次數(shù)在達到設(shè)定的最大重發(fā)次數(shù)時還沒有收到應(yīng)答信號的話,在MAX_RX中斷清除之前不會重發(fā)數(shù)據(jù)包,數(shù)據(jù)包丟失計數(shù)器(PLOS_CNT)在每次產(chǎn)生MAX_RT中斷后加一;
6)如果CE置低,則系統(tǒng)進入待機模式I,如果不設(shè)置CE為低,則系統(tǒng)會發(fā)送TX_FIFO寄存器中下一包數(shù)據(jù),如果TX_FIFO寄存器為空且CE為高則系統(tǒng)進入待機模式II;
7)如果系統(tǒng)在待機模式Ⅱ,當CE置低后系統(tǒng)立即進入待機模式I。
nRF24L01的發(fā)送模式的程序流程圖如圖4所示。本文引用地址:http://cafeforensic.com/article/155242.htm
3.2 無線接收模式流程
1)MCU將nRF24L01的CE引腳置低,使其進入待機模式I,并對其寄存器進行配置;
2)將PWR_UP、PRIM_RX、CE引腳置高,使nRF24L01進入接收模式;
3)130μs后nRF24L01開始檢測空中信息;
4)接收到有效的數(shù)據(jù)包后(地址匹配、CRC校驗正確),將數(shù)據(jù)存儲在RX_FIFO中,同時RX_DR位置高,并產(chǎn)生中斷;
5)發(fā)送確認信號;
6)MCU設(shè)置CE腳為低,使nRF24L01進入待機模式I;
7)MCU通過SPI口以合適的速率將數(shù)據(jù)讀出。
nRF24L01的接收模式的程序流程圖如圖5所示。
4 結(jié)論
文中設(shè)計了一種低功耗、高可靠性的溫濕度測試系統(tǒng)。經(jīng)測試本系統(tǒng)在空曠環(huán)境下可靠通信距離達到220 m,可以滿足實際測試需要。
評論