無(wú)線傳感器網(wǎng)絡(luò)時(shí)間同步協(xié)議的實(shí)現(xiàn)
1.2 改進(jìn)的時(shí)間同步協(xié)議
由于ZigBee無(wú)線傳感器網(wǎng)絡(luò)的傳輸速率小,帶寬小等特點(diǎn),便采用了降低PTP協(xié)議在網(wǎng)絡(luò)中的開(kāi)銷來(lái)實(shí)現(xiàn)本系統(tǒng)的時(shí)間的精準(zhǔn)時(shí)間同步。即減少握手次數(shù),使PTP協(xié)議的偏移測(cè)量和延時(shí)測(cè)量在一次通信過(guò)程完成。這個(gè)時(shí)鐘同步原理示意圖如圖3所示。本文引用地址:http://www.butianyuan.cn/article/159475.htm
該協(xié)議也包括偏移測(cè)量和延遲測(cè)量:
(1)偏移測(cè)量:南于ZigBee網(wǎng)絡(luò)允許節(jié)點(diǎn)是即時(shí)加入和脫離的,故不能使用主節(jié)點(diǎn)周期性組播發(fā)送同步報(bào)文的方式,而采取子節(jié)點(diǎn)周期性地向主節(jié)點(diǎn)發(fā)送同步報(bào)文的方式,主節(jié)點(diǎn)收到此同步報(bào)文經(jīng)過(guò)處理后將白己的時(shí)間信息(包括處理時(shí)間,如下式Tm1~Tm2)發(fā)送給相應(yīng)的子節(jié)點(diǎn),該子節(jié)點(diǎn)收到此時(shí)間信息后,就可以計(jì)算出與Master的時(shí)鐘偏移量。Offset=Ts2-Tm2 (1)
(2)延時(shí)測(cè)量:從下式可以看出,同步報(bào)文發(fā)送之后,子節(jié)點(diǎn)并沒(méi)有再發(fā)送延時(shí)請(qǐng)求報(bào)文,這是因?yàn)槔闷茰y(cè)量過(guò)程中的時(shí)間信息就可以計(jì)算出子節(jié)點(diǎn)到主節(jié)點(diǎn)的傳輸延時(shí)。這里計(jì)算延時(shí)的方法與PTP協(xié)議不同,子節(jié)點(diǎn)記錄同步報(bào)文的發(fā)送時(shí)間和應(yīng)答報(bào)文的接收時(shí)間,計(jì)算出2個(gè)時(shí)間的間隔,如下式的Ts2~Ts1,然后減去主節(jié)點(diǎn)的包處理時(shí)間,如下式的Tm1~Tm2,把網(wǎng)絡(luò)當(dāng)成對(duì)稱網(wǎng)絡(luò),再除以2就得出從時(shí)鐘與主時(shí)鐘的延遲時(shí)間。即
偏移和延時(shí)都已經(jīng)計(jì)算出來(lái),子節(jié)點(diǎn)再調(diào)整時(shí)間Tb,從而達(dá)到主從時(shí)鐘的同步。調(diào)整時(shí)間的公式
Tb=Tb-Offset+Delay (3)
2 時(shí)間同步的實(shí)現(xiàn)
ZigBee適用于開(kāi)放和互操作的設(shè)備,標(biāo)準(zhǔn)從物理層開(kāi)始定義。但是目前一般物理層和MAC層采用IEEE 802.15.4標(biāo)準(zhǔn),網(wǎng)絡(luò)層、安全層和應(yīng)用層由ZigBee聯(lián)盟開(kāi)發(fā),ZigBee協(xié)議的構(gòu)架如圖4所示。
2.1 本地時(shí)鐘設(shè)計(jì)
我們采用的硬件是意法半導(dǎo)體(ST)公司最新推出的一個(gè)完全集成的系統(tǒng)芯片(SoC)STM32W108。它集成了32位ARM Cortex—M3微處理器、符合IEEE 802.15.4標(biāo)準(zhǔn)的2.4 G的收發(fā)器、1 28 KB的flash、8 KB的RAM以及各種通用外設(shè)。
STM32W108的定時(shí)器示意圖如圖5所示。
具體實(shí)現(xiàn)有以下幾個(gè)步驟:
(1)通過(guò)TIM2_CR1,設(shè)置邊緣對(duì)齊,向上計(jì)數(shù)模式,TIM2_ARR不使用緩沖;
(2)選擇定時(shí)器時(shí)鐘clock(本課內(nèi)部時(shí)鐘Fpclk=12 MHz);
(3)沒(méi)置預(yù)分頻值TIM2_PSC,給TIM2_PSC賦值0,不分頻;
(4)裝載TIM2_ARR和TIM2_CCR2,計(jì)數(shù)器清0;
(5)軟件產(chǎn)生事件更新,重新裝載TIM2_ARR;
(6)將GPIOA的引腳3定義為復(fù)用推挽輸出,用timer2的通道2(映射到引腳PA3)作為輸出比較;
(7)TIM2_CCR2和TIM2_CNT匹配時(shí),翻轉(zhuǎn)OC2REF信號(hào);
(8)設(shè)置定時(shí)器中斷方式,使能timer2的全局中斷,開(kāi)始計(jì)數(shù)。
(9)產(chǎn)生中斷后,進(jìn)入中斷服務(wù)函數(shù)。
在中斷服務(wù)函數(shù)里,使軟件變量counter++,通過(guò)判斷counter是否等于1000000;如果條件滿足,UTC時(shí)間加1,counter和TIM2_CNT清0,清除timer2的所有中斷標(biāo)志。
我們將程序下載到芯片中,將數(shù)字示波器的探頭連接到定時(shí)器的比較輸出管腳PA3,經(jīng)過(guò)實(shí)驗(yàn)的到本地時(shí)鐘的情況如下圖所示:
通過(guò)定時(shí)器和從網(wǎng)關(guān)獲取UTC時(shí)間,可確保主節(jié)點(diǎn)有一個(gè)絕對(duì)時(shí)間,由于不能從節(jié)點(diǎn)獲取UTC時(shí)間,所以從節(jié)點(diǎn)可能只有一個(gè)微秒級(jí)的相對(duì)時(shí)間。這就要求每次從節(jié)點(diǎn)定時(shí)喚醒后首要任務(wù)就是校時(shí),確保其和它的父節(jié)點(diǎn)時(shí)間同步上。整個(gè)網(wǎng)絡(luò)在最終對(duì)采集到的數(shù)據(jù)進(jìn)行融合時(shí)不出現(xiàn)錯(cuò)誤或誤差減少。
評(píng)論