李曉芳
(太原科技大學 應科學院,太原 030024)
目前,無線傳感器網絡時間同步技術的研究重點已經從單跳網絡發展到多跳網絡?,F有的多跳時間同步算法充分體現了同步功耗和同步精度以及同步周期間的折衷,本文著重解決的問題就是在不顯著增加同步功耗的前提下擴展同步周期,本文的硬件平臺為Silicon Labs公司的Si1000無線MCU芯片。
無線傳感器網絡的拓撲結構主要有星型網、樹型網和網狀網,本文以應用較多的星型網和樹型網結合的多級網絡結構為例進行同步過程的設計。
一個典型的網絡結構如圖1所示。網絡中的節點可以分為根節點、樹枝節點和樹葉節點3種類型。其中,最上端的0-0為根節點,網絡中間的如0-1、0-2、5-8等為樹枝節點,網絡末端的1-3、4-7等為樹葉節點。每兩個相連接的節點互稱為父子節點,如0-1和1-4互為父子節點。其中0-1是1-4的父節點,1-4是0-1的子節點,而1-4是4-7的父節點,4-7是1-4的子節點。在對節點編址時,每
一般情況下,在網絡中,根節點為網關節點,樹葉節點和樹枝節點均為簇頭,每個簇頭在為其他簇頭作數據轉發的同時,均可以接收傳感器節點的數據。簇頭的數量由ID號的位數決定,如果用一個字節來表示ID號,則網絡一個節點都有兩個地址信息,其中低位地址表示本節點在網絡中的唯一的ID號,高位地址表示該節點的父節點在網絡中的ID號。這種表示方式的優勢在于,每個節點只跟自己的父節點和子節點通信,不與其他節點交互信息,即使收到其他節點的數據包,也會當作無效數據丟掉。這樣,每個節點的程序相對簡單,網絡的層數可以不受限制,網絡層數和網絡內節點數的增加,不會導致每個節點的程序復雜度的增加。中簇頭的最大數量為255個。

圖1 一個典型的樹型網絡
根據傳感器節點與簇頭節點的緊密程度,可以將傳感器節點劃分為若干個區域,每個區域設置一個簇頭,簇頭與采集節點之間采用星型網連接。
在無線傳感器網絡剛建立時,由于某些原因導致節點間的同步狀態丟失時,需要進行時鐘同步的“初始化”,采用即時同步的方式進行。
即時同步技術是星型網絡結構中一種高效的同步技術,同步以網關節點為起點,并由近及遠的同步樹型網絡結構中的各簇頭節點,之后簇頭節點再分別同步各自的傳感器節點。
下面以簇頭同步傳感器節點為例說明同步過程,同步的時序如圖2所示。

圖2 簇頭節點同步傳感器節點時序
一般情況下,傳感器節點在剛上電或復位之后,處于低功耗模式,實驗時,以5s為一個周期,即節點睡眠狀態4 995ms,接收狀態5ms,如果沒有有效數據,則繼續轉入睡眠狀態,如此循環下去。5ms稱為數據偵聽窗口。由于節點的個體差異、晶振的漂移等因素的影響,經過一段時間后,各個節點的數據接收窗口的起始時間差距就比較大了。如果簇頭要讓所有的傳感器節點都收到同步命令,必須連續發送5s。這個同步命令包括了簇頭的低位地址和一個不斷累加的序列號,共3個字節。若以115.2kbps的速率傳輸,發送一個同步命令需1.72ms,連續不斷地發送,從1開始,每發送一次,序列號加1。這樣,序列號本身就攜帶著時間信息。在實際編程中,共發送2 907次,約為5s。
簇頭連續發送5s同步序列后,轉入低功耗模式,5s結束時的時間點稱為同步時間點,即圖中的10s點的位置。如圖2所示,所有的傳感器節點在數據接收窗口內都至少能收到一條完整的喚醒命令。以收到的第一條完整的同步命令為有效命令,根據序列號,節點能夠判斷自己在時間軸上所處的位置,經過計算后,得到自己距同步時間點的時長t??梢钥吹剑涍^5s的持續同步后,所有傳感器節點均可以同步到同步時間點。
傳感器節點的同步流程圖如圖3所示。

圖3 傳感器節點的同步流程圖
網關節點同步簇頭節點的時序與傳感器節點類似,只是將通信速率降低到4 800bps,相對應的簇頭的偵聽窗口為50ms,睡眠4 950ms,網關發送的同步命令字為本地ID+末端簇頭ID+一個不斷累加的序列號,共3個字節。以4 800bps的波特率發送,每個同步命令需要22ms,實際編程中,共發送227次,約為5s。經過即時同步后,網絡中的各個節點均被同步到網關節點的時鐘上。
理想情況下,標稱值相同的晶振應該有相同的振蕩頻率,但是實際并非如此。晶振在標定頻率之外還有一個參數,稱之為精度,單位是ppm,即每百萬次中的誤差次數。一顆標定為32.768kHz,20ppm的晶振,意味著每振蕩一百萬次,會偏差20次,正負都有可能。在本實驗系統中,采用的是32.768kHz,20ppm的晶振。
如果第N級節點和第N+1級節點所采用的兩顆晶振的偏差方向相反,則10min后兩級節點的時鐘偏差至多為2×12=24ms。
時鐘偏差臨界點時刻示意圖如圖4所示。

圖4 時鐘偏差示意圖
這里選擇10min作為本算法的補償周期是由物理層的具體特性決定的。在低功耗模式中,簇頭的偵聽窗口為50ms,被上層節點喚醒的通信波特率是4.8kbps。經過試驗得出:物理層發送一個有效載荷為3個字節的同步命令幀所需的時間約為22ms。
即使10min后的同步偏差達到24ms,第N層節點和第N+1層節點仍然有50-24=26ms的偵測窗口重疊期。如果第N層節點以兩個命令幀的密度向第N+1層節點發送同步指令,底層節點仍有機會捕獲到其中一個命令幀,因為26ms>22ms。以上均屬臨界時間狀態,如果兩級節點的晶振偏差方向相同,則捕獲到上層同步指令的幾率還會增加。
要想保證兩級節點的可靠同步,必須在10min內執行一次同步算法,否則低層節點將偏離出高層節點的發送窗口,即高層發送的命令,低層節點將不會收到。
將第N+1層節點的時鐘同步到第N層節點并實現自校正的步驟如下:
① 由第N層節點發起同步。首先第N層節點利用即時同步技術將低層(N+1)節點的時鐘同步到同步時間點t0,同時第N層節點將t0作為自身時間的零時初始時刻。
② t0+600s后,第N層節點向第N+1層節點發送兩個時間校驗命令幀,幀格式如下所示。

同步命令頭(幀序號) 第N層節點時間 第N 層節點時間0x81或者0x82 tN高字節 tN 低字節
③ 第N+1層節點判斷收到的時間校驗命令幀的序號(第一個字節)和第N層節點的時間tN(后兩個字節)。
④ 計算出第N+1層節點的本地時鐘tN+1與tN的差值Δt。
⑤ 將Δt作為一個常數,每隔10min補償到tN+1中一次。
兩層節點以第N層和第N+1層節點為例說明軟件的流程。第N層節點的流程圖如圖5所示。
由于所有節點在上電后處于低功耗模式,且各層節點不同步,所以需要初始第一次同步動作。第N層簇頭連續發送“本地ID+時間序列”同步幀,利用即時同步技術,將兩層節點同步到“零時”。
Sync是一個unsigned char型變量,可以追蹤時間的增長。在實際中,采用芯片內部的RTC進行計時,Sync的初始值為0,每發生一次RTC中斷事件,Sync的值加1。RTC中斷事件每5s發生一次,所以當Sync=120時,意味著10min的補償時刻到了。
在發送本地時鐘時,為了保證第N+1層節點能可靠地收到時間校正信號,采用了兩次發送同樣內容的方法。兩次發送幀中所帶的時間信息完全相同,物理層完成兩次發送的時間差是22ms。幀頭0x81和0x82用來幫助下層節點區分收到的是哪一次發送的時間校正信號。
第N+1層節點的軟件流程圖如圖6所示。

圖6 第N+1層節點的軟件流程圖
當收到父節點ID幀頭時,利用即時同步機制第一次將本節點和上一層節點初始同步。當收到0x81或者0x82幀頭時,進行兩層節點間的時鐘校對:把本地時鐘和上一層時鐘的差值D_value保存,并把收到的上一層參考時鐘寫入本地RTC的CAPTUREn寄存器中。
本層節點每600s進行一次晶振偏移補償:將本地時鐘減去D_value,然后寫入RTC寄存器,完成校對。
由于傳感器節點的偵聽窗口為5ms,若同樣采用精度為20ppm的晶振,經過計算,需要在第1min的時候進行時鐘校驗,否則就會超出偵聽窗口。
實驗采用兩塊基于Si1000芯片的節點電路板,其中一塊作為第N層節點,另一塊作為第N+1層節點。
在兩級節點的軟件中加入測試信號輸出:每過5s,RTC中斷事件會把MCU喚醒,同時會在MCU的一個端口輸出一個低電平脈沖。將脈沖信號輸入到示波器的兩個輸入通道中,記錄波形。
將示波器的時域解析度放大至5μs,會發現在初始的即時同步后,兩個節點之間存在絕對誤差e=5.4μs,如圖7所示。如果不加以干預,兩節點的時鐘偏差會逐步擴大,最終導致網絡的不同步。

圖7 初始同步誤差e
數據采集的方法是,將這對節點每隔3min測量一次脈沖的時間差Δt,連續記錄一個小時,將結果保存到表1中(兩節點每10min誤差17ms)。
對比試驗:將上述兩節點軟件中的自校正機制移除,即僅用即時同步機制初始同步一次,其后的晶振偏移不再校正。每隔3min記錄一次Δt,將結果保存到表1中。

表1 兩級節點時鐘偏差對比分析表
用MATLAB繪制兩種同步方式的對比曲線如圖8所示。

圖8 兩級節點時鐘偏差對比分析曲線圖
由實驗結果可以看到,僅僅做了一次即時同步的一對節點,它們的時鐘偏差在不斷擴大,其呈現線性特征,每10min的時鐘偏差約為17ms。
采用了自校正技術的同步算法的一對節點,具有本地晶振振蕩偏差自動補償機制。每隔10min,它們之間的偏差就會被校正。節點間的同步有效時間顯著延長。在實際測試中,經過16個小時的實驗后觀測,仍能達到理想的同步效果。
本文基于Si1000芯片平臺,實現了一種將無線傳感器網絡節點的同步周期進行擴展的方法,利用即時同步技術進行節點間同步的初始化,隨后每間隔一段時間,節點主動校準自己的時鐘,從而實現了在沒有顯著增加能量消耗的前提下,擴展同步周期,提高同步精度。編者注:本文為期刊縮略版,全文見本刊網站www.mesnet.com.cn。
[1] Elson J,Rmer K.Wireless sensor networks:A new regime for time synchronization[J].ACM SIGCOMM Computer Communication Review,2003,33(1):149-154.
[2] Sivrikaya F,Yener B.Time synchronization in sensor networks:A survey[J].IEEE Network Magazine,Special Issue on Ad Hoc Networking:Data Communications &Topology Control,2004,18(4):45-50.
[3] 許劍新,馮冬芹.基于本地時鐘自校正的無線傳感器網絡同步方法[J].傳感技術學報,2008,21(8):1148-1152.
[4] 肖琳,程利娟,王福豹.一種低功耗無線傳感器網絡時間同步算法[J].計算機研究與發展,2008,45(1):126-130.