一種即時(shí)同步與時(shí)鐘自校準(zhǔn)結(jié)合的全網(wǎng)同步技術(shù)
3.1 理論分析
理想情況下,標(biāo)稱值相同的晶振應(yīng)該有相同的振蕩頻率,但是實(shí)際并非如此。晶振在標(biāo)定頻率之外還有一個(gè)參數(shù),稱之為精度,單位是ppm,即每百萬(wàn)次中的誤差次數(shù)。一顆標(biāo)定為32.768 kHz,20 ppm的晶振,意味著每振蕩一百萬(wàn)次,會(huì)偏差20次,正負(fù)都有可能。在本實(shí)驗(yàn)系統(tǒng)中,采用的是32.768 kHz,20 ppm的晶振。
如果第N級(jí)節(jié)點(diǎn)和第N+1級(jí)節(jié)點(diǎn)所采用的兩顆晶振的偏差方向相反,則10 min后兩級(jí)節(jié)點(diǎn)的時(shí)鐘偏差至多為2×12=24 ms。
時(shí)鐘偏差臨界點(diǎn)時(shí)刻示意圖如圖4所示。
這里選擇10 min作為本算法的補(bǔ)償周期是由物理層的具體特性決定的。在低功耗模式中,簇頭的偵聽(tīng)窗口為50 ms,被上層節(jié)點(diǎn)喚醒的通信波特率是4.8 kbps。經(jīng)過(guò)試驗(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的偵測(cè)窗口重疊期。如果第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),如果兩級(jí)節(jié)點(diǎn)的晶振偏差方向相同,則捕獲到上層同步指令的幾率還會(huì)增加。
要想保證兩級(jí)節(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)命令幀的序號(hào)(第一個(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)為例說(shuō)明軟件的流程。第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í)間的增長(zhǎng)。在實(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í)間校正信號(hào),采用了兩次發(fā)送同樣內(nèi)容的方法。兩次發(fā)送幀中所帶的時(shí)間信息完全相同,物理層完成兩次發(fā)送的時(shí)間差是22 ms。幀頭0x81和0x82用來(lái)幫助下層節(jié)點(diǎn)區(qū)分收到的是哪一次發(fā)送的時(shí)間校正信號(hào)。
第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í)鐘校對(duì):把本地時(shí)鐘和上一層時(shí)鐘的差值D_value保存,并把收到的上一層參考時(shí)鐘寫(xiě)入本地RTC的CAPTUREn寄存器中。
本層節(jié)點(diǎn)每600 s進(jìn)行一次晶振偏移補(bǔ)償:將本地時(shí)鐘減去D_value,然后寫(xiě)入RTC寄存器,完成校對(duì)。
由于傳感器節(jié)點(diǎn)的偵聽(tīng)窗口為5 ms,若同樣采用精度為20 ppm的晶振,經(jīng)過(guò)計(jì)算,需要在第1 min的時(shí)候進(jìn)行時(shí)鐘校驗(yàn),否則就會(huì)超出偵聽(tīng)窗口。
評(píng)論