基于時(shí)鐘頻率調(diào)整的時(shí)間同步的FPGA實(shí)現(xiàn)及應(yīng)用
掃描二維碼
隨時(shí)隨地手機(jī)看文章
網(wǎng)絡(luò)化運(yùn)動(dòng)控制是未來運(yùn)動(dòng)控制的發(fā)展趨勢(shì),隨著高速加工技術(shù)的發(fā)展,對(duì)網(wǎng)絡(luò)節(jié)點(diǎn)間的時(shí)間同步精度提出了更高的要求。如造紙機(jī)械,運(yùn)行速度為1 500~1 800m/min,同步運(yùn)行的電機(jī)之間1μs的時(shí)間同步誤差將造成30 μm的運(yùn)動(dòng)誤差。高速加工中心中加工速度為120 m/min時(shí),伺服電機(jī)之間1μs的時(shí)間同步誤差,將造成2 μm的加工誤差,影響了加工精度的提高。
分布式網(wǎng)絡(luò)中節(jié)點(diǎn)的時(shí)鐘通常是采用晶振+計(jì)數(shù)器的方式來實(shí)現(xiàn),由于晶振本身的精度以及穩(wěn)定性問題,造成了時(shí)間運(yùn)行的誤差。時(shí)鐘同步通常是選定一個(gè)節(jié)點(diǎn)時(shí)鐘作為主時(shí)鐘,其他節(jié)點(diǎn)時(shí)鐘作為從時(shí)鐘。主節(jié)點(diǎn)周期性地通過報(bào)文將主時(shí)鐘時(shí)間發(fā)送給從節(jié)點(diǎn),從節(jié)點(diǎn)接收到報(bào)文后,以主時(shí)鐘為基準(zhǔn)進(jìn)行延遲補(bǔ)償,然后將計(jì)算出的新時(shí)鐘值賦給從時(shí)鐘。這種同步方法造成了從時(shí)鐘計(jì)數(shù)值的不連續(xù),即會(huì)出現(xiàn)重復(fù)(從時(shí)鐘晶振頻率快于主時(shí)鐘)或跳躍(從時(shí)鐘晶振頻率慢于主時(shí)鐘),而且這種方法并沒有從根本上解決時(shí)鐘頻率的不同步問題,因此要進(jìn)一步提高同步精度很困難。本文研究了一種可對(duì)頻率進(jìn)行動(dòng)態(tài)調(diào)整的時(shí)鐘,通過對(duì)時(shí)鐘頻率的動(dòng)態(tài)修正,實(shí)現(xiàn)主從時(shí)鐘頻率的同步,進(jìn)而實(shí)現(xiàn)時(shí)間同步。
1 時(shí)鐘同步原理
要實(shí)現(xiàn)兩個(gè)時(shí)鐘的同步,一是時(shí)鐘的計(jì)數(shù)值要相同,二是計(jì)數(shù)增長速率要相同。如圖1所示,設(shè)主時(shí)鐘的頻率為f,從時(shí)鐘頻率在Nn-1到Nn時(shí)間段為fn-1,在Nn到Nn+1為fn,SyncDelay為同步報(bào)文從主站到從站的延遲時(shí)間,可以通過延時(shí)測(cè)量幀采用往返法測(cè)量得到,從時(shí)鐘要在Nn+1時(shí)刻達(dá)到與主時(shí)鐘相等,那么有:
kn就是時(shí)鐘頻率調(diào)整系數(shù)。在每個(gè)同步周期可以計(jì)算出頻率調(diào)整系數(shù),然后通過相應(yīng)的硬件電路來實(shí)現(xiàn)頻率調(diào)節(jié)。
2 可調(diào)頻率的時(shí)鐘設(shè)計(jì)
可調(diào)頻率時(shí)鐘是一種完全由數(shù)字電路組成的時(shí)鐘計(jì)數(shù)器,構(gòu)造簡(jiǎn)單,可以很方便地在FPGA中實(shí)現(xiàn),原理如圖2所示。該頻率可調(diào)時(shí)鐘由一個(gè)戶位時(shí)鐘計(jì)數(shù)器,q位累加器和r位頻率補(bǔ)償值寄存器組成。每個(gè)晶振周期,累加器與頻率補(bǔ)償寄存器中的FreqCompValue相加,并將結(jié)果保存到累加器。如果累加器發(fā)生溢出,時(shí)鐘計(jì)數(shù)器的值就增加1;反之,時(shí)鐘計(jì)數(shù)器保持不變。由此可以看出,晶振頻率和頻率補(bǔ)償值FreqCompValue的大小決定了累加器的溢出速率,也決定了時(shí)鐘計(jì)數(shù)器的計(jì)數(shù)頻率。所以可以通過調(diào)整FreqCompValue來調(diào)節(jié)時(shí)鐘頻率。為了實(shí)現(xiàn)高精度時(shí)鐘,晶振頻率要比時(shí)鐘頻率高。設(shè)晶振頻率為FreqOsc,時(shí)鐘計(jì)數(shù)頻率為FreqClk,分頻比為DivRatio,同步周期為SyncInterval,補(bǔ)償精度為Precision,p、q、r可由下列公式得出:
DivRatio=FreqOsc/FreqClk (5)
在本系統(tǒng)中,取FreqClk為50 MHz,F(xiàn)reqOsc為60MHz,則DivRatio為1.2。當(dāng)同步周期為1 s時(shí),補(bǔ)償精度Precision可選10-9,由公式可選擇r=q=32,p=64。頻率補(bǔ)償初值由下式求出:
FreqCompValue=2q/DivRatio=232/1.2=32d3579139413
在時(shí)鐘輸出算法中,該值由頻率調(diào)整系數(shù)動(dòng)態(tài)調(diào)整:
FreqCompValuen=kn·FreqCompValuen-1 (10)3 頻率補(bǔ)償算法在FPGA中的實(shí)現(xiàn)頻率補(bǔ)償就是在每個(gè)同步周期計(jì)算FreqCompValuen,F(xiàn)PGA提供了參數(shù)化的乘法器兆函數(shù)(1pm_mult)和除法器兆函數(shù)(1pm_divide),可以快速實(shí)現(xiàn)上述算法。原理如圖3所示,在每個(gè)同步周期同步信號(hào)的驅(qū)使下,鎖存器B和C分別鎖存當(dāng)前時(shí)鐘讀數(shù)和上個(gè)同步周期時(shí)鐘讀數(shù),同時(shí)將主時(shí)鐘讀數(shù)輸入到加法器A中,經(jīng)過減法器E、F和乘法器G,以及除法器H后計(jì)算出新的FreqCompValuen,并在同步信號(hào)的驅(qū)動(dòng)下,將其鎖存到鎖存器D中。由于中間的計(jì)算結(jié)果要經(jīng)過一定的時(shí)鐘周期,所以鎖存器D的鎖存信號(hào)要延時(shí)一定的晶振周期。在本設(shè)計(jì)中延時(shí)50個(gè)FreqOsc,即在<1μs的情況下就可以得到新的頻率補(bǔ)償值。
同步報(bào)文的傳輸延遲SyncDelay理論上是不變的,而實(shí)際上報(bào)文在傳輸過程中有抖動(dòng)。參考文獻(xiàn)[3]對(duì)此進(jìn)行了分析,并指出同步周期越長,報(bào)文傳輸延遲抖動(dòng)的影響就越小,因此可以忽略不計(jì)。
實(shí)驗(yàn)驗(yàn)證
主時(shí)鐘采用50 MHz的有源晶振來實(shí)現(xiàn),并將其作為固定時(shí)鐘;從時(shí)鐘采用30 MHz有源晶振,通過FPGA的鎖相環(huán)PLL將其頻率倍頻到60 MHz,然后1.2分頻,實(shí)現(xiàn)可調(diào)頻率的50 MHz時(shí)鐘。
讓主時(shí)鐘和從時(shí)鐘以一定的時(shí)間間隔產(chǎn)生中斷,并通過邏輯分析儀采樣中斷信號(hào)分析其偏差。由于系統(tǒng)時(shí)鐘的分辨率為20 ns,采用廣州致遠(yuǎn)電子有限公司的邏輯分析儀LA1532,其最大采樣頻率為100 MHz,所以偏差測(cè)量精度可以達(dá)到10 ns。圖4(a)是未進(jìn)行同步前兩個(gè)時(shí)鐘的偏差分析,X軸表示主時(shí)鐘和從時(shí)鐘的計(jì)時(shí)長度,Y軸表示主時(shí)鐘和從時(shí)鐘的計(jì)時(shí)偏差。從圖中可以看出兩個(gè)時(shí)鐘的偏差大概為5×10-6,即1 s內(nèi)的偏差可以達(dá)到5μs。圖4(b)為同步后主時(shí)鐘和從時(shí)鐘偏差測(cè)量結(jié)果,共測(cè)量1 000次,其10 ms內(nèi)同步偏差在±20 ns。X軸表示測(cè)量時(shí)間,Y軸表示主從時(shí)鐘同步偏差。圖4(c)為同步后兩個(gè)從時(shí)鐘偏差測(cè)量結(jié)果,共測(cè)量1 000次,其10 ms內(nèi)同步偏差在±40 ns。X軸表示測(cè)量時(shí)間,Y軸表示從時(shí)鐘之間同步偏差。
結(jié) 語
基于時(shí)鐘頻率調(diào)整的時(shí)間同步方法,實(shí)現(xiàn)簡(jiǎn)單,而且沒有復(fù)雜的軟件同步協(xié)議,占用較小的網(wǎng)絡(luò)帶寬就可以實(shí)現(xiàn)高精度的時(shí)鐘同步,在硬件上只需要低成本的FPGA支持。