趙 海,呂超英,梅 平
(無(wú)錫華潤(rùn)矽科微電子有限公司,江蘇無(wú)錫 214135)
一種數(shù)字高精度秒脈沖生成方法
趙 海,呂超英,梅 平
(無(wú)錫華潤(rùn)矽科微電子有限公司,江蘇無(wú)錫 214135)
提出了一種高精度的秒脈沖生成方法,依據(jù)晶體的溫度特性,采用分段擬合的方法估算晶振誤差。在不同工作溫度下對(duì)振蕩頻率進(jìn)行時(shí)間補(bǔ)償,產(chǎn)生高精度秒脈沖信號(hào)。該方法可應(yīng)用于低功耗SoC的實(shí)時(shí)時(shí)鐘設(shè)計(jì)中。
秒脈沖;分段擬合;時(shí)間補(bǔ)償;實(shí)時(shí)時(shí)鐘
基于可穿戴SoC(System on Chip,系統(tǒng)級(jí)芯片)的RTC(Real-Time Clock,實(shí)時(shí)時(shí)鐘)需要滿足在寬溫范圍內(nèi)進(jìn)行準(zhǔn)確計(jì)時(shí)的要求。準(zhǔn)確計(jì)時(shí)取決于幾個(gè)重要參數(shù),包括初始精度(指器件在常規(guī)條件下最初使用的精度)和溫度系數(shù)(估算溫度變化造成的誤差)。
其中,初始精度主要受晶振質(zhì)量的影響,精度越高價(jià)格也越貴,通常比較經(jīng)濟(jì)的方法是根據(jù)具體情況對(duì)晶振的初始頻率進(jìn)行簡(jiǎn)單的補(bǔ)償。由于晶體頻率隨環(huán)境溫度發(fā)生變化,要使RTC在不同溫度下都能保持較高的精度,最有效的辦法是對(duì)時(shí)間進(jìn)行補(bǔ)償,而時(shí)間的補(bǔ)償其本質(zhì)為晶振的頻率補(bǔ)償。
現(xiàn)有技術(shù)主要分為模擬補(bǔ)償和數(shù)字補(bǔ)償兩種。其中模擬溫度補(bǔ)償通過(guò)改變石英晶體振蕩器兩端并聯(lián)接地的負(fù)載電容大小,來(lái)改變晶振諧振頻率[1]。數(shù)字溫度補(bǔ)償通過(guò)實(shí)時(shí)時(shí)鐘芯片、外部MCU、溫度傳感器組成一個(gè)溫度誤差補(bǔ)償網(wǎng)絡(luò),通過(guò)配置時(shí)鐘芯片內(nèi)部數(shù)字調(diào)整寄存器來(lái)實(shí)現(xiàn)晶振的頻率補(bǔ)償[2]。這些方法需要大量的緩存,而且占用CPU。本文提出的修正方法是一種純硬件結(jié)構(gòu),工作過(guò)程中無(wú)需CPU干預(yù),且不需要占用大量的緩存空間,具有相對(duì)精度高、功耗低和成本低的特點(diǎn)。
石英晶體特性隨環(huán)境溫度的變化而變化,一般來(lái)說(shuō),晶振誤差與環(huán)境溫度的關(guān)系[3]如圖1所示,基本上可以用一個(gè)二次曲線來(lái)表示,即與常溫情況相比,環(huán)境溫度升高和降低都會(huì)引起晶振頻率變慢。
圖1 晶振誤差曲線圖
一般的石英晶體可以用二次曲線擬合,很多廠商篩選整體都是根據(jù)二次曲線的二次方系數(shù)來(lái)進(jìn)行晶振篩選,選擇一致性較好的晶振。二次曲線函數(shù)如式(1)所示,其中y是溫度轉(zhuǎn)變時(shí)的偏差,單位是×10-6,x是環(huán)境溫度。
表1記錄了某晶振在不同溫度下的精度誤差,后面的分析先以這組參數(shù)為基礎(chǔ)進(jìn)行。
表1 精度誤差實(shí)測(cè)表
采用matlab二次曲線擬合函數(shù)polyfit(x,y,2)求得晶體誤差式(1)的相關(guān)系數(shù),其中a2=-0.0347,a1=1.6969,a0=-20.9772,由此可見(jiàn),二次曲線的中心溫度為24.4℃。
圖2為該晶體二次曲線擬合圖,橫軸表示溫度(單位攝氏度),縱軸表示晶體誤差(×10-6)。
圖2 晶振誤差Matlab擬合圖
根據(jù)文獻(xiàn)[4],晶振誤差可以用式(2)表示,其中f為實(shí)際的振蕩頻率,f0為標(biāo)準(zhǔn)頻率(即32768 Hz):
也可以描述為1 s用頻率為f0的晶振需要振動(dòng)32768個(gè)周期,用頻率為f的晶振需要振動(dòng)32768+comp_value個(gè)周期,所以可以得到式(3):
可以用式(4)得到的值,補(bǔ)償當(dāng)前工作的晶振f中得到標(biāo)準(zhǔn)的工作頻率f0。由于一般晶振誤差的絕對(duì)值不會(huì)超過(guò)500×10-6,所以comp_value的值不會(huì)超過(guò)16.384個(gè)脈沖,所以每秒鐘補(bǔ)償?shù)拿}沖個(gè)數(shù)不會(huì)超過(guò)17個(gè)。如果希望任何時(shí)候測(cè)量的時(shí)間都準(zhǔn)確,那么每1/2秒的脈沖補(bǔ)償個(gè)數(shù)不會(huì)超過(guò)9個(gè),每1/4秒的脈沖補(bǔ)償個(gè)數(shù)不會(huì)超過(guò)5個(gè),每1/8秒的脈沖補(bǔ)償個(gè)數(shù)不會(huì)超過(guò)3個(gè),每1/16秒的脈沖補(bǔ)償個(gè)數(shù)不會(huì)超過(guò)2個(gè),每1/32秒的脈沖補(bǔ)償個(gè)數(shù)小于1個(gè)。
高精度秒脈沖生成流程框圖如圖3所示,采用12 bit ADC溫度檢測(cè)模塊獲取當(dāng)前晶振的工作環(huán)境溫度,根據(jù)當(dāng)前溫度求得精度誤差,根據(jù)精度誤差求得補(bǔ)償值,最后生成秒脈沖。
圖3 高精度秒脈沖生成設(shè)計(jì)流程
實(shí)際應(yīng)用中很多晶體并不是簡(jiǎn)單的二次曲線,特別是在溫度較低和溫度較高的地方差別更大。所以這個(gè)模塊設(shè)計(jì)的時(shí)候?qū)M合曲線分成了三段,如式(5)所示。
當(dāng)一個(gè)二次曲線就可以擬合得很好時(shí),三段二次曲線可以用同一個(gè)表達(dá)式表示,即la2=ma2=ra2,la1=ma1=ra1,la0=ma0=ra0。當(dāng)出現(xiàn)低溫部分?jǐn)M合曲線與常溫部分?jǐn)M合曲線偏差較大時(shí),la2、la1、la0就可以描述低溫部分的曲線。同理,當(dāng)高溫部分?jǐn)M合曲線與常溫部分?jǐn)M合曲線差異較大時(shí),ra2、ra1、ra0就可以描述高溫部分的曲線。其中x<low_temp表示低溫部分,x>high_temp表示高溫部分。可以參考圖4。圖4中的二次曲線可以分為3段,左邊的一段對(duì)應(yīng)圖中l(wèi)eft標(biāo)記處,表示溫度較低時(shí)的擬合曲線,中間的一段對(duì)應(yīng)圖中middle標(biāo)記處,表示常溫時(shí)的擬合曲線,右邊一段對(duì)應(yīng)圖中right標(biāo)記處,表示溫度較高時(shí)的擬合曲線。
圖4 三段式擬合曲線圖
將晶振誤差CrystalError值代入補(bǔ)償值式(4)中,該公式中的f0為標(biāo)準(zhǔn)震蕩頻率,其值是32768 Hz,從而由補(bǔ)償值計(jì)算電路計(jì)算出每秒鐘補(bǔ)償?shù)拿}沖個(gè)數(shù),即秒脈沖補(bǔ)償個(gè)數(shù)。由于硬件除法器耗費(fèi)面積大,因此采用式(6)的等價(jià)表達(dá)方法代替32768/1000000,選定 n=28,x=8796093=0x8637bd。
由于晶振誤差不會(huì)超過(guò)500×10-6,所以用32768/1000000計(jì)算出來(lái)的補(bǔ)償值是16.384,用8796093/(2的28次方)計(jì)算出來(lái)的補(bǔ)償值也是16.384。
用標(biāo)準(zhǔn)32768 Hz的時(shí)鐘源,1 s需要32768個(gè)時(shí)鐘周期。當(dāng)溫度變化導(dǎo)致晶體輸出的時(shí)鐘源不是標(biāo)準(zhǔn)的32768 Hz時(shí),由2.2節(jié)介紹知道這個(gè)時(shí)候1 s需要32768補(bǔ)償n(n為補(bǔ)償值)個(gè)時(shí)鐘周期。知道每1/32秒的脈沖補(bǔ)償個(gè)數(shù)小于1個(gè)。每計(jì)數(shù)到1024時(shí),將final_comp_value值的小數(shù)部分與1/32秒對(duì)應(yīng)的脈沖補(bǔ)償個(gè)數(shù)相加,如果final_comp_value的整數(shù)部分大于等于1,那么時(shí)鐘計(jì)數(shù)器就停一拍不加或者加2,然后將final_comp_value的整數(shù)部分清零,將final_comp_value的小數(shù)部分繼續(xù)保留,留給后面進(jìn)行誤差累加。實(shí)現(xiàn)框圖見(jiàn)圖5。
圖5 秒脈沖生成框圖
本文采用三段式二次曲線晶振誤差擬合的方法,采用Verilog HDL硬件設(shè)計(jì)語(yǔ)言完成RTL設(shè)計(jì)。仿真波形圖如圖6所示,clk表示原始晶體,頻率在32768Hz附近,頻率會(huì)隨溫度產(chǎn)生偏移。temp_in表示的是當(dāng)前ADC測(cè)試到的溫度值,temp_in的數(shù)值為實(shí)際溫度的16倍,溫度值更新周期最小為1 s,只有在溫度發(fā)生變化時(shí),才重新計(jì)算補(bǔ)償值。error_out為精度誤差計(jì)算模塊的輸出,ppm_out為補(bǔ)償值計(jì)算模塊的輸出。rtc_1hz為補(bǔ)償后的1 s時(shí)間。
圖6 秒脈沖生成仿真
本文采用三段式二次曲線晶振誤差擬合的方法,原始晶體的頻率在32768 Hz附近,頻率會(huì)隨溫度產(chǎn)生偏移。隨著周圍環(huán)境的溫度變化,用來(lái)檢測(cè)溫度的ADC測(cè)量的溫度值也會(huì)發(fā)生變化,該電路會(huì)重新計(jì)算補(bǔ)償值,修正補(bǔ)償誤差,產(chǎn)生精準(zhǔn)的秒脈沖。
本文的精度誤差控制在1/32768,也就是30.517578125×10-6,如果進(jìn)一步采用四舍五入法,誤差精度再縮小一半,也就是15.2587890625×10-6。如果不考慮曲線擬合誤差和溫度切換過(guò)程中引入的誤差,并假設(shè)final_comp_value在實(shí)際運(yùn)算中可以保留小數(shù)點(diǎn)后無(wú)窮位長(zhǎng),長(zhǎng)期累加后不存在累計(jì)誤差,誤差值一直保持在 15.2587890625×10-6。
[1]Huang Qiuting,Basedau P.Design considerations for highfrequency crystal oscillators digital trimmable to sub-ppm accuracy[C].IEEE,transactions on VLSI systems.
[2]梁世清,包海泉,季海濤,等.內(nèi)置RTC作為電能表計(jì)時(shí)時(shí)鐘的應(yīng)用[J].自動(dòng)化儀表,2013,33(1):76-78.
[3]王永紅,徐煒,郝立平.STM32系列ARM Cortex-M3微控制器原理與實(shí)踐[M].北京:北京航空航天大學(xué)出版社,2008.
[4]吳培才,劉進(jìn)忙,胡國(guó)平.溫度補(bǔ)償晶體振蕩器[M].北京:國(guó)防工業(yè)出版社,1994.
趙 海(1974—),男,江蘇江陰人,高級(jí)工程師,1997年畢業(yè)于浙江大學(xué)電子工程專業(yè),無(wú)錫華潤(rùn)矽科微電子有限公司研發(fā)總監(jiān),多年來(lái)一直專注于集成電路的設(shè)計(jì)與開(kāi)發(fā),其負(fù)責(zé)和參與的項(xiàng)目先后兩次獲得江蘇省科技進(jìn)步獎(jiǎng)。
A Digital High Precision Pulses Generation Method
ZHAO Hai,LV Chaoying,MEI Ping
(Wuxi China Resources Semico Co.,Ltd,Wuxi 214135,China)
The paper presents a high precision pulses generation method.Based on the temperature characteristics of crystal oscillator,a piecewise fitting method is used to estimate the vibration error,the frequency of oscillations is compensated at different working temperatures,generates high precision pulses per secondsignalafter compensation.Itcanbe usedinRTCdesignoflow power SoC.
pulsesper second;piecewise fitting;time compensation;RTC
TN402
A
1681-1070(2017)11-0023-03
2017-06-27