摘 要: 以STC12系列單片機和nRF905射頻收發(fā)器為核心,設(shè)計了一種無線傳感器網(wǎng)絡(luò)節(jié)點和基于這種節(jié)點的自組織通信協(xié)議。給出了節(jié)點的整體結(jié)構(gòu),詳細闡述了軟件設(shè)計流程。試驗表明該節(jié)點實現(xiàn)了自組織和多跳數(shù)傳,通信穩(wěn)定可靠,網(wǎng)絡(luò)吞吐率達到無線傳感器網(wǎng)絡(luò)的要求。
關(guān)鍵詞: nRF905;無線傳感器網(wǎng)絡(luò);自組織
無線傳感器網(wǎng)絡(luò)是計算機技術(shù)、傳感器技術(shù)和網(wǎng)絡(luò)通信技術(shù)相結(jié)合的產(chǎn)物。它由大量隨機分布的、具有實時感知、無線通信和自組織能力的傳感器節(jié)點組成[1]。隨著無線技術(shù)的高速發(fā)展,無線傳感器網(wǎng)絡(luò)越來越多地走進人們的視野中。與有線技術(shù)相比,無線技術(shù)具有成本低、體積小、省去復(fù)雜的布線等優(yōu)點。但是由于現(xiàn)有的無線傳感器節(jié)點大都采用電池供電,放置地點隨機變動,隨時可能出現(xiàn)節(jié)點中斷的情況,通信能力十分有限,需要經(jīng)常性的人工維護。因此,無線傳感器網(wǎng)絡(luò)節(jié)點要具有自組織、中斷自我修復(fù)的功能,需要設(shè)計合適的通信協(xié)議和路由算法,以提高系統(tǒng)通信的可靠性。為此,本文采用無線射頻芯片nRF905和STC12系列單片機設(shè)計了一種無線傳感器節(jié)點,并且在典型自組織網(wǎng)絡(luò)的通信協(xié)議-動態(tài)源路由協(xié)議DSR(Dynamic Source Routing)[2-4]的基礎(chǔ)上,針對路由維護算法做出改進,設(shè)計出一種易于實現(xiàn)且實用性高的通信協(xié)議,實現(xiàn)了自組織和多跳傳輸數(shù)據(jù)的無線通信系統(tǒng)。
1 節(jié)點硬件設(shè)計
節(jié)點分為協(xié)調(diào)器節(jié)點和普通節(jié)點,普通節(jié)點帶有傳感器,負責(zé)采集需要的數(shù)據(jù)并組成網(wǎng)絡(luò),協(xié)調(diào)器節(jié)點負責(zé)整個網(wǎng)絡(luò)的控制和數(shù)據(jù)的匯總、分析、處理等。圖1為協(xié)調(diào)器和普通節(jié)點的結(jié)構(gòu)圖。
1.1 MCU
STC12LE5410AD單片機是單時鐘/機器周期(1T)的兼容8051內(nèi)核單片機,是高速、低功耗的新一代8051單片機,指令代碼完全兼容傳統(tǒng)8051,而速度快8~12倍,內(nèi)部集成硬件高速SPI(Serial Peripheral Interface)接口、2 KB EEPROM、A/D轉(zhuǎn)換模塊和MAX810專用復(fù)位電路。工作電壓2.4~3.8 V,因此可用電池工作,并可長時間工作。器件在少于6 μs的時間內(nèi)可以從低功耗模式迅速喚醒。STC12LE5410AD的超小封裝、高度集成、精簡外部電路可設(shè)計出更小的節(jié)點,超低的價格可以大規(guī)模鋪設(shè)傳感器節(jié)點。STC12LE5410AD單片機的這些特征,非常適合應(yīng)用在無線傳感器網(wǎng)絡(luò)中。
1.2 射頻收發(fā)器件nRF905[5]
nRF905由挪威Nordic公司生產(chǎn),是一個為433/868/915 MHz-ISM(工業(yè)、科學(xué)、醫(yī)療)頻段設(shè)計的單片無線收發(fā)芯片,32腳QFN封裝,工作電壓為1.9~3.6 V,最大發(fā)射功率為10 dBm。該收發(fā)芯片由頻率合成器、接收解調(diào)器、功率放大器、晶體振蕩器和調(diào)制器組成,片內(nèi)自動完成曼徹斯特編碼/解碼。nRF905有兩種活動(TX/RX)模式和兩種節(jié)電模式?;顒幽J街g轉(zhuǎn)換時間小于550 μs,活動模式與節(jié)電模式之間的轉(zhuǎn)換時間小于650 μs。
nRF905通過SPI與微控制器通信,自動處理字頭和循環(huán)冗余碼校驗(CRC)。當進行數(shù)據(jù)發(fā)送時,只需將配置寄存器信息、所要發(fā)送的數(shù)據(jù)和接收地址送給nRF905,它就會自動完成數(shù)據(jù)打包(加字頭和CRC校驗碼)和發(fā)送。接收數(shù)據(jù)時,nRF905自動檢測載波并進行地址匹配,接收到正確數(shù)據(jù)后自動移去字頭、地址和CRC校驗碼,再通過SPI將數(shù)據(jù)傳送到微控制器。
1.3 硬件連接設(shè)置
STC單片機通過內(nèi)部集成的硬件高速串行外設(shè)接口SPI與nRF905連接,最快可達3 Mb/s,比軟件模擬SPI方式快30倍左右,大大減少了程序執(zhí)行時間,提高了網(wǎng)絡(luò)的吞吐率。同時在設(shè)計協(xié)調(diào)器節(jié)點與PC上位機軟件通信程序時,利用STC單片機1T時鐘的優(yōu)勢,設(shè)置串口波特率使用的定時器12倍速方式,使串口波特率提高至115 200 b/s,提高了協(xié)調(diào)器節(jié)點的反應(yīng)速度,減少了等待時間,提高了系統(tǒng)的吞吐率。
2 節(jié)點軟件設(shè)計
本系統(tǒng)的軟件設(shè)計分為協(xié)調(diào)器節(jié)點Connector軟件和普通節(jié)點Node軟件的設(shè)計,其中協(xié)調(diào)器節(jié)點作為整個網(wǎng)絡(luò)系統(tǒng)的主節(jié)點,起著控制全網(wǎng)絡(luò)的作用,通過PC機的上位機軟件,可以對協(xié)調(diào)器進行接收和發(fā)送命令及數(shù)據(jù),從而實現(xiàn)對整個系統(tǒng)網(wǎng)絡(luò)的控制。而每個普通節(jié)點也預(yù)留通信接口,可以在需要的時候與其他設(shè)備相連接。
由于本系統(tǒng)實現(xiàn)自組織網(wǎng)絡(luò)的需要,在物理層中為每個節(jié)點(包括協(xié)調(diào)器和普通節(jié)點)定義了相同的物理地址,實現(xiàn)全網(wǎng)的廣播功能。在網(wǎng)絡(luò)層為每個節(jié)點分配唯一的網(wǎng)絡(luò)地址,通過軟件判斷接收數(shù)據(jù)的目的節(jié)點是否是本機。
圖2為節(jié)點自組織流程圖。當網(wǎng)絡(luò)中增加一個新節(jié)點,新節(jié)點上電初始化后,首先會向協(xié)調(diào)器發(fā)送路由請求RREQ請求加入網(wǎng)絡(luò),并打開定時器;協(xié)調(diào)器收到RREQ后,記錄新節(jié)點信息,并通過反路由發(fā)送應(yīng)答信號ACK至源節(jié)點;如果新節(jié)點在設(shè)定的時間內(nèi)收到ACK信號,表示加入網(wǎng)絡(luò)成功,并且記錄本節(jié)點至協(xié)調(diào)器的路由信息;如果在設(shè)定的時間內(nèi)沒有收到ACK信號,那么重新發(fā)送路由請求RREQ至協(xié)調(diào)器,如此循環(huán)直至收到ACK信號。如果重發(fā)次數(shù)達到設(shè)定的上線,仍沒有收到ACK信號,則進行全網(wǎng)廣播RREQ,并打開定時器,等待返回RREP命令;在設(shè)定時間后進行重新廣播RREQ,直到到達重發(fā)上限。新節(jié)點收到RREP表示加入網(wǎng)絡(luò)成功,同時保存RREP命令幀中的路由信息。
2.1 路由協(xié)議
現(xiàn)有無線網(wǎng)狀網(wǎng)絡(luò)的路由協(xié)議通常可分為:表驅(qū)動式路由協(xié)議和按需路由協(xié)議。前者需要網(wǎng)絡(luò)中的每個節(jié)點維護一張或多張路由表,以記錄到其他節(jié)點的路由,增加了路由開銷。而按需路由協(xié)議——動態(tài)源路由協(xié)議(DSR)使用了源路由,每一個數(shù)據(jù)分組的幀頭中包含整條路由的信息,中間節(jié)點不需要維持當前的路由信息,分組自己帶有路由信息,按需路由的特性避免了周期性路由廣播和鄰居節(jié)點的檢測。
DSR協(xié)議包括兩個過程:路由發(fā)現(xiàn)和路由維護。路由發(fā)現(xiàn)過程使用泛洪路由(Flooding Routing)。為了減少路由發(fā)現(xiàn)過程的開銷,每一個節(jié)點都包括一個緩存器,存放最近學(xué)到的和用過的路由信息。路由維護過程是源節(jié)點用來檢測網(wǎng)絡(luò)拓撲是否發(fā)生變化的機制。若拓撲發(fā)生變化、源路由發(fā)生中斷,源節(jié)點就會收到路由錯誤信息。其他節(jié)點收到路由錯誤信息后刪除中斷路由,并且重新發(fā)起廣播尋找路由。
本系統(tǒng)中的路由協(xié)議采用DSR協(xié)議,并對DSR協(xié)議進行一些改進。
(1)每個節(jié)點中到達目的節(jié)點含有最多兩個路由緩存。
(2)查到中斷節(jié)點后先檢查本節(jié)點中有無到中斷節(jié)點下級節(jié)點的信息,若有,則直接使用此路由,若無,則立即廣播發(fā)送RRER。
(3)所有節(jié)點收到RRER后,檢查是否含有終端路由,有則刪除中斷路由。
系統(tǒng)通信協(xié)議格式如表1所示。其中,F(xiàn)RAME_TYPE表示命令幀類型,SOURCE_ADDR表示源地址,F(xiàn)IRE_ADDR表示目的地址,MID表示路由節(jié)點地址,REMIAN表示最大跳數(shù)下剩余跳數(shù),MAX表示最大跳數(shù),DATA表示要傳輸?shù)臄?shù)據(jù),ODD代表奇校驗。
2.2 程序設(shè)計
2.2.1 廣播
在廣播RREQ時,為了避免廣播沖突,利用nRF905的載波檢測多路訪問機制CSMA/CA,發(fā)送前先進入接收模式,監(jiān)聽該信道是否空閑。如果檢測到CD信號為高,則表示該信道被占用,根據(jù)退避延時一段時間,再檢測CD信號是否為高。
而根據(jù)檢測,數(shù)據(jù)包接收的時間大致為20 μs,時隙為60 μs,加上程序運行的時間,定義短幀空間SIFS和時隙分別為50 μs及100 μs,分散幀空間DIFS為SIFS加2個時隙即250 μs。CSMA/CA程序流程如圖3所示,定義NB、CW和BE。
后退次數(shù)(NB):NB的初始值為0,當設(shè)備有數(shù)據(jù)要傳送時,經(jīng)過一段后退時間(2BE-1)×100 μs后,檢測CD,若檢測到信道忙,則會再一次產(chǎn)生倒退時間。此時NB值會加1,NB值最大定義為4。當信道在經(jīng)過4次的后退延遲時間后仍為忙,則放棄此次的傳送,以避免過大開銷。
嘗試次數(shù)(CW):循環(huán)判斷當前頻道是否空閑,當判斷到了一定次數(shù)后該頻道依然空閑則跳出循環(huán),開始傳送數(shù)據(jù),設(shè)初值為2。
后退指數(shù)(BE):初值設(shè)為2。
本設(shè)計中,CD信號為高時必須通過切換至standby模式來使CD信號復(fù)位,以保證下次CD信號的檢測。
根據(jù)nRF905模塊的時序可知,模塊從standby模式切換至接收或發(fā)送模式的時間為650 μs,發(fā)送和接收模式之間的切換需要550 μs,切換時間遠大于時隙及DIFS的值。因此,BE設(shè)置為2,最大為4。
2.2.2 數(shù)據(jù)傳輸
在進行數(shù)據(jù)傳輸時,源節(jié)點首先檢查自己的緩存中是否有到目的節(jié)點的路由信息,如果沒有,則先進行路由發(fā)現(xiàn),與廣播模式相同。如果有至目的節(jié)點的路由信息,則根據(jù)路由信息,先發(fā)送數(shù)據(jù)請求命令RTS。當目的節(jié)點接收到返回的允許發(fā)送命令CTS信號時,則表示已經(jīng)建立了數(shù)據(jù)傳輸通道,由請求節(jié)點開始傳輸數(shù)據(jù),傳輸完畢后,由目的節(jié)點發(fā)送DATA_ACK給源節(jié)點,表示數(shù)據(jù)發(fā)送完畢。其工作流程如圖4所示。
2.2.3 路由修復(fù)
數(shù)據(jù)傳輸時,每個節(jié)點收到數(shù)據(jù)后,都要先回復(fù)應(yīng)答ACK信號給其前一個節(jié)點,再轉(zhuǎn)發(fā)至下一個中繼節(jié)點,節(jié)點中設(shè)置超時定時器,約等待1 633 μs ACK信號,前一個節(jié)點沒有收到ACK,則重發(fā)數(shù)據(jù),設(shè)置重發(fā)次數(shù)為3。假若重發(fā)3次都沒有收到ACK信號,則判斷下一個節(jié)點為中斷節(jié)點。查詢緩存路由中是否有其他到達中斷節(jié)點下游節(jié)點的信息,有則使用這個備用路由,無則廣播發(fā)送RERR給所有包含中斷節(jié)點路由的源節(jié)點,每個節(jié)點在收到該RERR后,就會從它的路由緩存中刪除所有包含該中斷節(jié)點的路由。
路由修復(fù)示例如圖5所示。節(jié)點0需要發(fā)送數(shù)據(jù)給節(jié)點5,節(jié)點0中含有到節(jié)點5的路由信息,0→1→2→5;節(jié)點0開始發(fā)送RTS,每個節(jié)點收到RTS后返回給前一個節(jié)點ACK,表示路由無中斷;假若節(jié)點1沒有收到ACK,重發(fā)3次后仍沒有ACK返回,則判斷節(jié)點2是中斷節(jié)點;這時查詢節(jié)點1中有無到達節(jié)點5的路由,發(fā)現(xiàn)1→3→4→5,則按照此路由繼續(xù)發(fā)送RTS;當節(jié)點1返回DATA_ACK,表示數(shù)據(jù)傳輸完成,延遲10×跳數(shù)(ms)后,廣播發(fā)送RRER,收到RRER的每個節(jié)點查詢本節(jié)點是否含有中斷路由,有則從路由緩存中刪除包含中斷節(jié)點的路由。
3 試驗結(jié)果
試驗網(wǎng)絡(luò)系統(tǒng)由10個普通節(jié)點和1個協(xié)調(diào)器節(jié)點組成,采用人工隨機安放的方式把所有節(jié)點放置在約200 m的空曠地帶。首先,把協(xié)調(diào)器節(jié)點通過串口與主控PC機連接,打開上位機控制軟件,并給協(xié)調(diào)器節(jié)點上電;隨后在隨機放置普通節(jié)點的同時一一打開節(jié)點的電源。
通過上位機軟件可以清楚地看到,每當有新節(jié)點加入網(wǎng)絡(luò)(打開電源),上位機會實時顯示出新加入節(jié)點的地址和路由信息,并且通過反向路由返回應(yīng)答信號給新節(jié)點,表示成功加入網(wǎng)絡(luò)。當所有節(jié)點都加入網(wǎng)絡(luò)后,可以通過上位機軟件看到整個網(wǎng)絡(luò)中各個節(jié)點的路由信息,并且可以對每個節(jié)點或多個節(jié)點進行遠程控制。
為了實時監(jiān)測到每個節(jié)點的運行情況,每個節(jié)點程序都加入定時掃描程序,定時時間1 min,檢測節(jié)點本身在1 min內(nèi)是否為空閑狀態(tài),如果是空閑狀態(tài),則向協(xié)調(diào)器節(jié)點發(fā)送節(jié)點信號,保證本鏈路無中斷;協(xié)調(diào)器在一定時間周期內(nèi),檢測接收到的每個節(jié)點信號,如果缺少某個節(jié)點的信息,則由協(xié)調(diào)器發(fā)送檢測信號給這個節(jié)點,尋找中斷節(jié)點并進行路由維護。也可以直接通過主控電腦的上位機軟件手動發(fā)送檢測信號給每個節(jié)點,從而檢測每個節(jié)點的運行情況。
nRF905的空中傳輸速率峰值為100 kb/s,有效傳輸速率為50 kb/s。
通過上位機軟件對整個網(wǎng)絡(luò)進行連續(xù)數(shù)據(jù)傳輸試驗,測試在本協(xié)議下的網(wǎng)絡(luò)吞吐率。測試條件:200 m空曠地帶,分別測試一個節(jié)點至10節(jié)點網(wǎng)絡(luò)中點對點,1跳、2跳、3跳情況下的吞吐率,數(shù)據(jù)包大小32 B。傳輸要求一個包到達目的節(jié)點后返回到應(yīng)答表示傳輸完成,其吞吐率計算[6]如下:
測得的網(wǎng)絡(luò)吞吐率如圖6所示??梢钥闯?,網(wǎng)絡(luò)中進行點對點的數(shù)據(jù)傳輸,吞吐率約為16 kb/s,并且隨著節(jié)點數(shù)的增多,影響很??;隨著跳數(shù)的增加,網(wǎng)絡(luò)吞吐率降低,但是網(wǎng)絡(luò)中節(jié)點數(shù)量增多,同時節(jié)點傳輸幾率增加,因此逐漸趨于穩(wěn)定值。最后在網(wǎng)絡(luò)設(shè)定最大跳數(shù)(3跳)、10個節(jié)點網(wǎng)絡(luò)的情況下,網(wǎng)絡(luò)吞吐率約為4 kb/s。
通過實驗測得數(shù)據(jù)表明,在短距離的無線通信網(wǎng)絡(luò)中,該系統(tǒng)可以穩(wěn)定可靠地運行,數(shù)據(jù)傳輸率高,網(wǎng)絡(luò)吞吐率完全可以達到一般的無線傳感器網(wǎng)絡(luò)的要求。并且該系統(tǒng)具有良好的擴展性、移植性和實用性,可廣泛運用于溫度、濕度、光傳感器采集數(shù)據(jù)、能量監(jiān)測及電路控制等技術(shù)。
參考文獻
[1] 孫利民,李建中,陳渝,等.無線傳感器網(wǎng)絡(luò)[M].北京:清華大學(xué)出版社,2005.
[2] 陳???,陳勤,羅敏,等.DSR本地修復(fù)算法的改進[J].微電子學(xué)與計算機,2009(26):142-145.
[3] JAWHAR I, TRABELSI Z, Al-JAROODI J. Towards more reliable source routing in wireless networks[C]. Proc. IEEE Int. Conf. Networking, Archit., Storage-IEEE NAS 2008, 2008.
[4] 屠梓浩,吳榮泉,錢立群.無線Ad Hoc網(wǎng)絡(luò)DSR路由協(xié)議的優(yōu)化設(shè)計[J].計算機工程,2009,35(4):97-99.
[5] Nordic VLSIASA. Single Chip 433/868/915MHz Transceiver nRF905. 2004-01.
[6] 柯欣,孫利民.多跳無限傳感器網(wǎng)絡(luò)吞吐量分析[J].通信學(xué)報,2007,28(9):78-84.