一種即時同步與時鐘自校準結(jié)合的全網(wǎng)同步技術(shù)
3.1 理論分析
理想情況下,標稱值相同的晶振應該有相同的振蕩頻率,但是實際并非如此。晶振在標定頻率之外還有一個參數(shù),稱之為精度,單位是ppm,即每百萬次中的誤差次數(shù)。一顆標定為32.768 kHz,20 ppm的晶振,意味著每振蕩一百萬次,會偏差20次,正負都有可能。在本實驗系統(tǒng)中,采用的是32.768 kHz,20 ppm的晶振。
如果第N級節(jié)點和第N+1級節(jié)點所采用的兩顆晶振的偏差方向相反,則10 min后兩級節(jié)點的時鐘偏差至多為2×12=24 ms。
時鐘偏差臨界點時刻示意圖如圖4所示。
這里選擇10 min作為本算法的補償周期是由物理層的具體特性決定的。在低功耗模式中,簇頭的偵聽窗口為50 ms,被上層節(jié)點喚醒的通信波特率是4.8 kbps。經(jīng)過試驗得出:物理層發(fā)送一個有效載荷為3個字節(jié)的同步命令幀所需的時間約為22 ms。
即使10 min后的同步偏差達到24 ms,第N層節(jié)點和第N+1層節(jié)點仍然有50-24=26 ms的偵測窗口重疊期。如果第N層節(jié)點以兩個命令幀的密度向第N+1層節(jié)點發(fā)送同步指令,底層節(jié)點仍有機會捕獲到其中一個命令幀,因為26 ms>22 ms。以上均屬臨界時間狀態(tài),如果兩級節(jié)點的晶振偏差方向相同,則捕獲到上層同步指令的幾率還會增加。
要想保證兩級節(jié)點的可靠同步,必須在10 min內(nèi)執(zhí)行一次同步算法,否則低層節(jié)點將偏離出高層節(jié)點的發(fā)送窗口,即高層發(fā)送的命令,低層節(jié)點將不會收到。
將第N+1層節(jié)點的時鐘同步到第N層節(jié)點并實現(xiàn)自校正的步驟如下:
①由第N層節(jié)點發(fā)起同步。首先第N層節(jié)點利用即時同步技術(shù)將低層(N+1)節(jié)點的時鐘同步到同步時間點t0,同時第N層節(jié)點將t0作為自身時間的零時初始時刻。
②t0+600 s后,第N層節(jié)點向第N+1層節(jié)點發(fā)送兩個時間校驗命令幀,幀格式如下所示。
③第N+1層節(jié)點判斷收到的時間校驗命令幀的序號(第一個字節(jié))和第N層節(jié)點的時間tN(后兩個字節(jié))。
④計算出第N+1層節(jié)點的本地時鐘tN+1與tN的差值△t。
⑤將△t作為一個常數(shù),每隔10 min補償?shù)絫N+1中一次。
3.2 軟件流程
兩層節(jié)點以第N層和第N+1層節(jié)點為例說明軟件的流程。第N層節(jié)點的流程圖如圖5所示。
由于所有節(jié)點在上電后處于低功耗模式,且各層節(jié)點不同步,所以需要初始第一次同步動作。第N層簇頭連續(xù)發(fā)送“本地ID+時間序列”同步幀,利用即時同步技術(shù),將兩層節(jié)點同步到“零時”。
Sync是一個unsigned char型變量,可以追蹤時間的增長。在實際中,采用芯片內(nèi)部的RTC進行計時,Sync的初始值為0,每發(fā)生一次RTC中斷事件,Sync的值加1。RTC中斷事件每5 s發(fā)生一次,所以當Sync=120時,意味著10min的補償時刻到了。
在發(fā)送本地時鐘時,為了保證第N+1層節(jié)點能可靠地收到時間校正信號,采用了兩次發(fā)送同樣內(nèi)容的方法。兩次發(fā)送幀中所帶的時間信息完全相同,物理層完成兩次發(fā)送的時間差是22 ms。幀頭0x81和0x82用來幫助下層節(jié)點區(qū)分收到的是哪一次發(fā)送的時間校正信號。
第N+1層節(jié)點的軟件流程圖如圖6所示。
當收到父節(jié)點ID幀頭時,利用即時同步機制第一次將本節(jié)點和上一層節(jié)點初始同步。當收到0x81或者0x82幀頭時,進行兩層節(jié)點間的時鐘校對:把本地時鐘和上一層時鐘的差值D_value保存,并把收到的上一層參考時鐘寫入本地RTC的CAPTUREn寄存器中。
本層節(jié)點每600 s進行一次晶振偏移補償:將本地時鐘減去D_value,然后寫入RTC寄存器,完成校對。
由于傳感器節(jié)點的偵聽窗口為5 ms,若同樣采用精度為20 ppm的晶振,經(jīng)過計算,需要在第1 min的時候進行時鐘校驗,否則就會超出偵聽窗口。
評論