基于MSP430和NRF2401的WSN節(jié)點設計
0 引 言
無線傳感器網(wǎng)絡WSN(wireless sensor network)是一種自組織網(wǎng)絡,它由大量低成本、資源有限的傳感節(jié)點設備組成,節(jié)點間協(xié)同工作實現(xiàn)某一特定任務。由于無線傳感網(wǎng)絡所具有的易擴展、自組織、分布式結(jié)構(gòu)和實時性的特點,無線傳感網(wǎng)絡的應用已經(jīng)由軍事領域擴展到其他許多領域,例如環(huán)境監(jiān)測、氣候監(jiān)測、目標追蹤、工業(yè)自動化等方面,此外還為未來的遠程醫(yī)療和空間探索提供了很大的應用空間。
無線傳感器網(wǎng)絡體系結(jié)構(gòu)如圖1所示,通常包括傳感器節(jié)點、匯聚節(jié)點(sinknode)、外部網(wǎng)絡和用戶界面。大量傳感器節(jié)點隨機部署在感知區(qū)域(Sensorfield)內(nèi)部或附近,能夠通過自組織方式構(gòu)成網(wǎng)絡,傳感器節(jié)點將采集到的數(shù)據(jù)沿著其他傳感器節(jié)點逐跳進行傳輸,在傳輸過程中所采集的數(shù)據(jù)可能被多個節(jié)點處理,經(jīng)過多跳路由后到匯聚節(jié)點,再由匯聚節(jié)點通過外部網(wǎng)絡把數(shù)據(jù)傳送到處理中心進行集中處理。
1 系統(tǒng)硬件設計
無線傳感器網(wǎng)絡終端節(jié)點的硬件一般包括數(shù)據(jù)處理單元、無線傳輸單元、傳感采集單元和電源供應單元。如圖2所示,傳感采集單元可以根據(jù)應用背景選擇相應的測量物理量的傳感器,電源供應單元部分由于系統(tǒng)大部分處于低功耗模式,可以采用7號電池解決。下面著重介紹數(shù)據(jù)處理單元、無線傳輸單元。
1.1 數(shù)據(jù)處理單元
MSP430是具有超低功耗特點的16位單片機,本方案選用MSP430F148,其功耗電流已經(jīng)達到了μA級。16位CPU和高效的RISC指令系統(tǒng),無外擴的數(shù)據(jù)地址總線,在8MHz時可達到125ns的指令周期,具有16個快速響應中斷,能及時處理各種緊急事件。豐富的片內(nèi)外圍功能模塊:12位的A/D轉(zhuǎn)換器ADC12內(nèi)包括采樣/保持功能的ADC內(nèi)核、轉(zhuǎn)換存儲邏輯、內(nèi)部參考電平發(fā)生器、多種時鐘源、采樣及轉(zhuǎn)換時序電路。有8個外通道,4個內(nèi)通道,高達200kbps的采樣速率,多種采樣方式。兩路USART通信串口,可用于UART和SPI模式;片內(nèi)有精密硬件乘法器、兩個16位定時器,6個并行口P1~P6,48條I/O口線,其具有64KB的閃存,用于存儲采集數(shù)據(jù)。[!--empirenews.page--]
1.2 無線傳輸單元
本系統(tǒng)采用2.4GHz無線單片收發(fā)芯片nRF2401,它具有體積小、功耗低,外設少的特點,非常適合于無線傳輸應用系統(tǒng)。nRF2401可以由SPI接口與微處理器連接,通過這個接口完成設置和收發(fā)數(shù)據(jù)工作。許多單片機都集成了SPI控制器,例如MSP430,可以非常方便地通過軟件設置最多40bit地址,只有收到本機地址時才會輸出數(shù)據(jù)(提供一個中斷指示),并且支持點對多點的操作,編程很方便。nRF2401與單片機采用SPI接口連接,原理圖如圖3所示。SPI總線接口技術是一種高速、高效率的串行接口技術,主要用于擴展外設和進行數(shù)據(jù)交換。
2 軟件設計
軟件開發(fā)以IAR Workbench V3.1為平臺,采用C語言編寫,軟件編程的基本思路是:先對SPI、nRF2401控制端口初始化;使能SPI、UART端口,使能ADC,對nRF2401芯片初始化;開啟接收機后,就可以運行任務程序了,以實現(xiàn)接收或發(fā)送數(shù)據(jù),對nRF2401操作流程如下:
nRF2401有4種工作模式:收發(fā)模式、配置模式、空閑模式和關機模式。nRF2401的工作模式由PWR_UP、CE、TX_EN和CS三個引腳決定。對nRF2401的操作主要是配置其工作方式和讀寫數(shù)據(jù),所有配置命令字和數(shù)據(jù)都是通過同步串行口的CLK和DATA兩個引腳完成的。要將nRF2401設置于ShockBurstTM方式,首先使PWR_UP引腳為高電平,CE引腳為低電平。配置字從最高位開始,依次送入nRF2401,CLK下降沿鎖定數(shù)據(jù)。配置命令字發(fā)送完后,在CS的下降沿按新配置字的設置開始工作。使用nRF2401進行發(fā)送數(shù)據(jù)時,采用以下的步驟:1)CE置高,使nRF2401開始工作;2)逐位寫入接收機的地址;3)逐位寫入要傳送的數(shù)據(jù);4)CE置低,激發(fā)nRF2401進行ShockBurstTM發(fā)射。nRF2401的ShockBurstTM發(fā)射過程是:給射頻前端供電,射頻數(shù)據(jù)打包(加字頭、CRC校驗碼),高速發(fā)射數(shù)據(jù)包,發(fā)射完成,nRF2401進入空閑狀態(tài)。nRF2401的接口模塊引腳包括CE、DR1、CLK1和DATA(接收通道1),接收端依照以下流程進行數(shù)的接收:1)配置本機地址和即將接收的數(shù)據(jù)包大?。?)進入接收狀態(tài),CE置高;3)200μs后,nRF2401進入監(jiān)視狀態(tài),等待數(shù)據(jù)包的到來;4)當接收到正確的數(shù)據(jù)包時,nRF2401自動除去字頭、地址和CRC;5)nRF2401通過把DR1(可用作中斷信號)置高來通知微控制器;6)微控制器把數(shù)據(jù)從nRF2401逐位移出;7)所有數(shù)據(jù)移完,nRF2401把DR1置低,此時如果CE為高,則等待下一個數(shù)據(jù)包,如果CE為低,開始其他工作流程。[!--empirenews.page--]
程序中用到的部分代碼如下:
/*invariable*/
unsigned char Comm_ok_flag;/*主從機連接OK標志*/
unsigned char DR1_flag;/*DR1為高標志*/
unsigned char Nrf_on_flag;/*2401開關標志*/
unsigned char Shake_hand_flag;//握手成功標志
unsigned char Config_word[W_CFGWORD];/*存儲配置字15字節(jié)*/
unsigned char Shock_word[W_SHOCKWORD];/*存儲一幀協(xié)議數(shù)據(jù)30字節(jié)*/
unsigned char Rxdata_buffer[W_PAYLOAD];/*存儲接收數(shù)據(jù)按協(xié)議26字節(jié)*/
unsigned char Txdata_buffer[N_DATA];/*存儲發(fā)送數(shù)據(jù)暫定10字節(jié)*/
unsigned char Order;/*提取數(shù)據(jù)幀功能碼*/
unsigned char Frq_set_value;/*頻道設置數(shù)據(jù)*/
/*function*/
void Buildspiword(void);
void Spinrf2401(void);
void Shockburst(void);
void Receiveshock(void);
void Dospiclk(void);
void Nrf2401_on(void);
void Nrf2401_off(void);
void Set_config(void);
void Set_standby(void);
void Set_tx(void);
void Set_rx(void);
void Clr_Payload(void);
void Soft_delay_01ms(int iUs);
void Set_address(void);
void Clr_shock_word(void);
考慮到點對多點通信的可靠性,數(shù)據(jù)在底層無線傳輸中需要增加必要的協(xié)議規(guī)范。設計中對有效數(shù)據(jù)進行打包,格式為:前導碼、地址、有效數(shù)據(jù)載荷、校驗碼。
3 結(jié)束語
基于MSP430和NRF2401的無線傳感器網(wǎng)絡節(jié)點設計在實驗中表現(xiàn)出比較好的效果,可以實現(xiàn)監(jiān)測區(qū)域內(nèi)信號的采集傳輸與處理。但是由于射頻芯片本身的原因,傳輸距離會受到障礙物的影響和設置頻率而有變化,這些問題都有待更深入的研究。隨著無線網(wǎng)絡技術的成熟無線傳感器網(wǎng)絡的應用必將廣泛深入環(huán)境監(jiān)測、目標追蹤、工業(yè)自動化等各領域。