新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 一種即時同步與時鐘自校準結合的全網同步技術

        一種即時同步與時鐘自校準結合的全網同步技術

        作者: 時間:2013-10-09 來源:網絡 收藏
        3 時鐘技術
        3.1 理論分析
        理想情況下,標稱值相同的晶振應該有相同的振蕩頻率,但是實際并非如此。晶振在標定頻率之外還有一個參數,稱之為精度,單位是ppm,即每百萬次中的誤差次數。一顆標定為32.768 kHz,20 ppm的晶振,意味著每振蕩一百萬次,會偏差20次,正負都有可能。在本實驗系統中,采用的是32.768 kHz,20 ppm的晶振。
        如果第N級節點和第N+1級節點所采用的兩顆晶振的偏差方向相反,則10 min后兩級節點的時鐘偏差至多為2×12=24 ms。
        時鐘偏差臨界點時刻示意圖如圖4所示。

        d.jpg


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

        e.jpg


        ③第N+1層節點判斷收到的時間校驗命令幀的序號(第一個字節)和第N層節點的時間tN(后兩個字節)。
        ④計算出第N+1層節點的本地時鐘tN+1與tN的差值△t。
        ⑤將△t作為一個常數,每隔10 min補償到tN+1中一次。
        3.2 軟件流程
        兩層節點以第N層和第N+1層節點為例說明軟件的流程。第N層節點的流程圖如圖5所示。

        f.jpg


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

        g.jpg


        當收到父節點ID幀頭時,利用即時同步機制第一次將本節點和上一層節點初始同步。當收到0x81或者0x82幀頭時,進行兩層節點間的時鐘校對:把本地時鐘和上一層時鐘的差值D_value保存,并把收到的上一層參考時鐘寫入本地RTC的CAPTUREn寄存器中。
        本層節點每600 s進行一次晶振偏移補償:將本地時鐘減去D_value,然后寫入RTC寄存器,完成校對。
        由于傳感器節點的偵聽窗口為5 ms,若同樣采用精度為20 ppm的晶振,經過計算,需要在第1 min的時候進行時鐘校驗,否則就會超出偵聽窗口。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 石河子市| 蓝田县| 平度市| 津南区| 陈巴尔虎旗| 包头市| 平昌县| 保德县| 吉水县| 通州区| 齐齐哈尔市| 井研县| 女性| 牙克石市| 宿州市| 衡阳市| 政和县| 荔波县| 奎屯市| 伊金霍洛旗| 尖扎县| 津南区| 呈贡县| 铜鼓县| 鄂托克前旗| 连州市| 吉水县| 宁城县| 炉霍县| 通州市| 镇原县| 丰城市| 越西县| 同江市| 南岸区| 叶城县| 古交市| 南乐县| 万源市| 吐鲁番市| 突泉县|