一種即時(shí)同步與時(shí)鐘自校準(zhǔn)結(jié)合的全網(wǎng)同步技術(shù)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
摘要:基于一種樹型網(wǎng)絡(luò)和星型網(wǎng)絡(luò)相結(jié)合的混合型網(wǎng)絡(luò)結(jié)構(gòu),采用即時(shí)同步技術(shù)和時(shí)鐘自校準(zhǔn)技術(shù),以很低的同步代價(jià),實(shí)現(xiàn)了同步周期的擴(kuò)展。在周圍環(huán)境不變的情況下,擴(kuò)展了近100倍,為采用低成本石英晶體振蕩器的網(wǎng)絡(luò)節(jié)點(diǎn)間的同步需求提供了一種高效的方法。
關(guān)鍵詞:同步;自校準(zhǔn);無線傳感器網(wǎng)絡(luò);Si1000
引言
目前,無線傳感器網(wǎng)絡(luò)時(shí)間同步技術(shù)的研究重點(diǎn)已經(jīng)從單跳網(wǎng)絡(luò)發(fā)展到多跳網(wǎng)絡(luò)?,F(xiàn)有的多跳時(shí)間同步算法充分體現(xiàn)了同步功耗和同步精度以及同步周期間的折衷,本文著重解決的問題就是在不顯著增加同步功耗的前提下擴(kuò)展同步周期,本文的硬件平臺為Silicon Labs公司的Si1000無線MCU芯片。
1 網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)
無線傳感器網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu)主要有星型網(wǎng)、樹型網(wǎng)和網(wǎng)狀網(wǎng),本文以應(yīng)用較多的星型網(wǎng)和樹型網(wǎng)結(jié)合的多級網(wǎng)絡(luò)結(jié)構(gòu)為例進(jìn)行同步過程的設(shè)計(jì)。
一個(gè)典型的網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示。網(wǎng)絡(luò)中的節(jié)點(diǎn)可以分為根節(jié)點(diǎn)、樹枝節(jié)點(diǎn)和樹葉節(jié)點(diǎn)3種類型。其中,最上端的0-0為根節(jié)點(diǎn),網(wǎng)絡(luò)中間的如0-1、0-2、5-8等為樹枝節(jié)點(diǎn),網(wǎng)絡(luò)末端的1-3、4-7等為樹葉節(jié)點(diǎn)。每兩個(gè)相連接的節(jié)點(diǎn)互稱為父子節(jié)點(diǎn),如0-1和1-4互為父子節(jié)點(diǎn)。其中0-1是1-4的父節(jié)點(diǎn),1-4是0-1的子節(jié)點(diǎn),而1-4是4-7的父節(jié)點(diǎn),4-7是1-4的子節(jié)點(diǎn)。在對節(jié)點(diǎn)編址時(shí),每一個(gè)節(jié)點(diǎn)都有兩個(gè)地址信息,其中低位地址表示本節(jié)點(diǎn)在網(wǎng)絡(luò)中的唯一的ID號,高位地址表示該節(jié)點(diǎn)的父節(jié)點(diǎn)在網(wǎng)絡(luò)中的ID號。這種表示方式的優(yōu)勢在于,每個(gè)節(jié)點(diǎn)只跟自己的父節(jié)點(diǎn)和子節(jié)點(diǎn)通信,不與其他節(jié)點(diǎn)交互信息,即使收到其他節(jié)點(diǎn)的數(shù)據(jù)包,也會(huì)當(dāng)作無效數(shù)據(jù)丟掉。這樣,每個(gè)節(jié)點(diǎn)的程序相對簡單,網(wǎng)絡(luò)的層數(shù)可以不受限制,網(wǎng)絡(luò)層數(shù)和網(wǎng)絡(luò)內(nèi)節(jié)點(diǎn)數(shù)的增加,不會(huì)導(dǎo)致每個(gè)節(jié)點(diǎn)的程序復(fù)雜度的增加。
一般情況下,在網(wǎng)絡(luò)中,根節(jié)點(diǎn)為網(wǎng)關(guān)節(jié)點(diǎn),樹葉節(jié)點(diǎn)和樹枝節(jié)點(diǎn)均為簇頭,每個(gè)簇頭在為其他簇頭作數(shù)據(jù)轉(zhuǎn)發(fā)的同時(shí),均可以接收傳感器節(jié)點(diǎn)的數(shù)據(jù)。簇頭的數(shù)量由ID號的位數(shù)決定,如果用一個(gè)字節(jié)來表示ID號,則網(wǎng)絡(luò)中簇頭的最大數(shù)量為255個(gè)。
根據(jù)傳感器節(jié)點(diǎn)與簇頭節(jié)點(diǎn)的緊密程度,可以將傳感器節(jié)點(diǎn)劃分為若干個(gè)區(qū)域,每個(gè)區(qū)域設(shè)置一個(gè)簇頭,簇頭與采集節(jié)點(diǎn)之間采用星型網(wǎng)連接。
2 即時(shí)同步技術(shù)
在無線傳感器網(wǎng)絡(luò)剛建立時(shí),由于某些原因?qū)е鹿?jié)點(diǎn)間的同步狀態(tài)丟失時(shí),需要進(jìn)行時(shí)鐘同步的“初始化”,采用即時(shí)同步的方式進(jìn)行。
即時(shí)同步技術(shù)是星型網(wǎng)絡(luò)結(jié)構(gòu)中一種高效的同步技術(shù),同步以網(wǎng)關(guān)節(jié)點(diǎn)為起點(diǎn),并由近及遠(yuǎn)的同步樹型網(wǎng)絡(luò)結(jié)構(gòu)中的各簇頭節(jié)點(diǎn),之后簇頭節(jié)點(diǎn)再分別同步各自的傳感器節(jié)點(diǎn)。
下面以簇頭同步傳感器節(jié)點(diǎn)為例說明同步過程,同步的時(shí)序如圖2所示。
一般情況下,傳感器節(jié)點(diǎn)在剛上電或復(fù)位之后,處于低功耗模式,實(shí)驗(yàn)時(shí),以5 s為一個(gè)周期,即節(jié)點(diǎn)睡眠狀態(tài)4 995 ms,接收狀態(tài)5 ms,如果沒有有效數(shù)據(jù)。則繼續(xù)轉(zhuǎn)入睡眠狀態(tài),如此循環(huán)下去。5 ms稱為數(shù)據(jù)偵聽窗口。由于節(jié)點(diǎn)的個(gè)體差異、晶振的漂移等因素的影響,經(jīng)過一段時(shí)間后,各個(gè)節(jié)點(diǎn)的數(shù)據(jù)接收窗口的起始時(shí)間差距就比較大了。如果簇頭要讓所有的傳感器節(jié)點(diǎn)都收到同步命令,必須連續(xù)發(fā)送5 s。這個(gè)同步命令包括了簇頭的低位地址和一個(gè)不斷累加的序列號,共3個(gè)字節(jié)。若以115.2 kbps的速率傳輸,發(fā)送一個(gè)同步命令需1.72 ms,連續(xù)不斷地發(fā)送,從1開始,每發(fā)送一次,序列號加1。這樣,序列號本身就攜帶著時(shí)間信息。在實(shí)際編程中,共發(fā)送2907次,約為5s。
簇頭連續(xù)發(fā)送5 s同步序列后,轉(zhuǎn)入低功耗模式,5 s結(jié)束時(shí)的時(shí)間點(diǎn)稱為同步時(shí)間點(diǎn),即圖中的10 s點(diǎn)的位置。如圖2所示,所有的傳感器節(jié)點(diǎn)在數(shù)據(jù)接收窗口內(nèi)都至少能收到一條完整的喚醒命令。以收到的第一條完整的同步命令為有效命令,根據(jù)序列號,節(jié)點(diǎn)能夠判斷自己在時(shí)間軸上所處的位置,經(jīng)過計(jì)算后,得到自己距同步時(shí)間點(diǎn)的時(shí)長t??梢钥吹?,經(jīng)過5 s的持續(xù)同步后,所有傳感器節(jié)點(diǎn)均可以同步到同步時(shí)間點(diǎn)。
傳感器節(jié)點(diǎn)的同步流程圖如圖3所示。
網(wǎng)關(guān)節(jié)點(diǎn)同步簇頭節(jié)點(diǎn)的時(shí)序與傳感器節(jié)點(diǎn)類似,只是將通信速率降低到4 800 bps,相對應(yīng)的簇頭的偵聽窗口為50 ms,睡眠4 950 ms,網(wǎng)關(guān)發(fā)送的同步命令字為本地ID+末端簇頭ID+一個(gè)不斷累加的序列號,共3個(gè)字節(jié)。以4 800 bps的波特率發(fā)送,每個(gè)同步命令需要22 ms,實(shí)際編程中,共發(fā)送227次,約為5 s。經(jīng)過即時(shí)同步后,網(wǎng)絡(luò)中的各個(gè)節(jié)點(diǎn)均被同步到網(wǎng)關(guān)節(jié)點(diǎn)的時(shí)鐘上。
3 時(shí)鐘自校準(zhǔn)技術(shù)
3.1 理論分析
理想情況下,標(biāo)稱值相同的晶振應(yīng)該有相同的振蕩頻率,但是實(shí)際并非如此。晶振在標(biāo)定頻率之外還有一個(gè)參數(shù),稱之為精度,單位是ppm,即每百萬次中的誤差次數(shù)。一顆標(biāo)定為32.768 kHz,20 ppm的晶振,意味著每振蕩一百萬次,會(huì)偏差20次,正負(fù)都有可能。在本實(shí)驗(yàn)系統(tǒng)中,采用的是32.768 kHz,20 ppm的晶振。
如果第N級節(jié)點(diǎn)和第N+1級節(jié)點(diǎn)所采用的兩顆晶振的偏差方向相反,則10 min后兩級節(jié)點(diǎn)的時(shí)鐘偏差至多為2×12=24 ms。
時(shí)鐘偏差臨界點(diǎn)時(shí)刻示意圖如圖4所示。
這里選擇10 min作為本算法的補(bǔ)償周期是由物理層的具體特性決定的。在低功耗模式中,簇頭的偵聽窗口為50 ms,被上層節(jié)點(diǎn)喚醒的通信波特率是4.8 kbps。經(jīng)過試驗(yàn)得出:物理層發(fā)送一個(gè)有效載荷為3個(gè)字節(jié)的同步命令幀所需的時(shí)間約為22 ms。
即使10 min后的同步偏差達(dá)到24 ms,第N層節(jié)點(diǎn)和第N+1層節(jié)點(diǎn)仍然有50-24=26 ms的偵測窗口重疊期。如果第N層節(jié)點(diǎn)以兩個(gè)命令幀的密度向第N+1層節(jié)點(diǎn)發(fā)送同步指令,底層節(jié)點(diǎn)仍有機(jī)會(huì)捕獲到其中一個(gè)命令幀,因?yàn)?6 ms>22 ms。以上均屬臨界時(shí)間狀態(tài),如果兩級節(jié)點(diǎn)的晶振偏差方向相同,則捕獲到上層同步指令的幾率還會(huì)增加。
要想保證兩級節(jié)點(diǎn)的可靠同步,必須在10 min內(nèi)執(zhí)行一次同步算法,否則低層節(jié)點(diǎn)將偏離出高層節(jié)點(diǎn)的發(fā)送窗口,即高層發(fā)送的命令,低層節(jié)點(diǎn)將不會(huì)收到。
將第N+1層節(jié)點(diǎn)的時(shí)鐘同步到第N層節(jié)點(diǎn)并實(shí)現(xiàn)自校正的步驟如下:
①由第N層節(jié)點(diǎn)發(fā)起同步。首先第N層節(jié)點(diǎn)利用即時(shí)同步技術(shù)將低層(N+1)節(jié)點(diǎn)的時(shí)鐘同步到同步時(shí)間點(diǎn)t0,同時(shí)第N層節(jié)點(diǎn)將t0作為自身時(shí)間的零時(shí)初始時(shí)刻。
②t0+600 s后,第N層節(jié)點(diǎn)向第N+1層節(jié)點(diǎn)發(fā)送兩個(gè)時(shí)間校驗(yàn)命令幀,幀格式如下所示。
③第N+1層節(jié)點(diǎn)判斷收到的時(shí)間校驗(yàn)命令幀的序號(第一個(gè)字節(jié))和第N層節(jié)點(diǎn)的時(shí)間tN(后兩個(gè)字節(jié))。
④計(jì)算出第N+1層節(jié)點(diǎn)的本地時(shí)鐘tN+1與tN的差值△t。
⑤將△t作為一個(gè)常數(shù),每隔10 min補(bǔ)償?shù)絫N+1中一次。
3.2 軟件流程
兩層節(jié)點(diǎn)以第N層和第N+1層節(jié)點(diǎn)為例說明軟件的流程。第N層節(jié)點(diǎn)的流程圖如圖5所示。
由于所有節(jié)點(diǎn)在上電后處于低功耗模式,且各層節(jié)點(diǎn)不同步,所以需要初始第一次同步動(dòng)作。第N層簇頭連續(xù)發(fā)送“本地ID+時(shí)間序列”同步幀,利用即時(shí)同步技術(shù),將兩層節(jié)點(diǎn)同步到“零時(shí)”。
Sync是一個(gè)unsigned char型變量,可以追蹤時(shí)間的增長。在實(shí)際中,采用芯片內(nèi)部的RTC進(jìn)行計(jì)時(shí),Sync的初始值為0,每發(fā)生一次RTC中斷事件,Sync的值加1。RTC中斷事件每5 s發(fā)生一次,所以當(dāng)Sync=120時(shí),意味著10min的補(bǔ)償時(shí)刻到了。
在發(fā)送本地時(shí)鐘時(shí),為了保證第N+1層節(jié)點(diǎn)能可靠地收到時(shí)間校正信號,采用了兩次發(fā)送同樣內(nèi)容的方法。兩次發(fā)送幀中所帶的時(shí)間信息完全相同,物理層完成兩次發(fā)送的時(shí)間差是22 ms。幀頭0x81和0x82用來幫助下層節(jié)點(diǎn)區(qū)分收到的是哪一次發(fā)送的時(shí)間校正信號。
第N+1層節(jié)點(diǎn)的軟件流程圖如圖6所示。
當(dāng)收到父節(jié)點(diǎn)ID幀頭時(shí),利用即時(shí)同步機(jī)制第一次將本節(jié)點(diǎn)和上一層節(jié)點(diǎn)初始同步。當(dāng)收到0x81或者0x82幀頭時(shí),進(jìn)行兩層節(jié)點(diǎn)間的時(shí)鐘校對:把本地時(shí)鐘和上一層時(shí)鐘的差值D_value保存,并把收到的上一層參考時(shí)鐘寫入本地RTC的CAPTUREn寄存器中。
本層節(jié)點(diǎn)每600 s進(jìn)行一次晶振偏移補(bǔ)償:將本地時(shí)鐘減去D_value,然后寫入RTC寄存器,完成校對。
由于傳感器節(jié)點(diǎn)的偵聽窗口為5 ms,若同樣采用精度為20 ppm的晶振,經(jīng)過計(jì)算,需要在第1 min的時(shí)候進(jìn)行時(shí)鐘校驗(yàn),否則就會(huì)超出偵聽窗口。
4 實(shí)驗(yàn)結(jié)果
實(shí)驗(yàn)采用兩塊基于Si1000芯片的節(jié)點(diǎn)電路板,其中一塊作為第N層節(jié)點(diǎn),另一塊作為第N+1層節(jié)點(diǎn)。
在兩級節(jié)點(diǎn)的軟件中加入測試信號輸出:每過5 s,RTC中斷事件會(huì)把MCU喚醒,同時(shí)會(huì)在MCU的一個(gè)端口輸出一個(gè)低電平脈沖。將脈沖信號輸入到示波器的兩個(gè)輸入通道中,記錄波形。
將示波器的時(shí)域解析度放大至5μs,會(huì)發(fā)現(xiàn)在初始的即時(shí)同步后,兩個(gè)節(jié)點(diǎn)之間存在絕對誤差e=5.4μs,如圖7所示。如果不加以干預(yù),兩節(jié)點(diǎn)的時(shí)鐘偏差會(huì)逐步擴(kuò)大,最終導(dǎo)致網(wǎng)絡(luò)的不同步。
數(shù)據(jù)采集的方法是,將這對節(jié)點(diǎn)每隔3 min測量一次脈沖的時(shí)間差△t,連續(xù)記錄一個(gè)小時(shí),將結(jié)果保存到表1中(兩節(jié)點(diǎn)每10 min誤差17 ms)。
對比試驗(yàn):將上述兩節(jié)點(diǎn)軟件中的自校正機(jī)制移除,即僅用即時(shí)同步機(jī)制初始同步一次,其后的晶振偏移不再校正。每隔3 min記錄一次△t,將結(jié)果保存到表1中。
用MATLAB繪制兩種同步方式的對比曲線如圖8所示。
由實(shí)驗(yàn)結(jié)果可以看到,僅僅做了一次即時(shí)同步的一對節(jié)點(diǎn),它們的時(shí)鐘偏差在不斷擴(kuò)大,其呈現(xiàn)線性特征,每10 min的時(shí)鐘偏差約為17 ms。
采用了自校正技術(shù)的同步算法的一對節(jié)點(diǎn),具有本地晶振振蕩偏差自動(dòng)補(bǔ)償機(jī)制。每隔10 min,它們之間的偏差就會(huì)被校正。節(jié)點(diǎn)間的同步有效時(shí)間顯著延長。在實(shí)際測試中,經(jīng)過16個(gè)小時(shí)的實(shí)驗(yàn)后觀測,仍能達(dá)到理想的同步效果。
5 結(jié)論
本文基于Si1000芯片平臺,實(shí)現(xiàn)了一種將無線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)的同步周期進(jìn)行擴(kuò)展的方法,利用即時(shí)同步技術(shù)進(jìn)行節(jié)點(diǎn)間同步的初始化,隨后每間隔一段時(shí)間,節(jié)點(diǎn)主動(dòng)校準(zhǔn)自己的時(shí)鐘,從而實(shí)現(xiàn)了在沒有顯著增加能量消耗的前提下,擴(kuò)展同步周期,提高同步精度。