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