吳天強(qiáng) 葉敏 朱劍 潘超
摘 要:根據(jù)實(shí)時時鐘運(yùn)行的日差大小,在計時控制程序中,設(shè)置自動補(bǔ)償并校正參數(shù)的功能,使系統(tǒng)的計時運(yùn)行誤差,在連續(xù)較長的一段時間內(nèi),保持在較小的波動范圍,以減少計時的累積誤差,提高計時精度。該算法適用于低成本的單片機(jī)或嵌入式系統(tǒng),使用軟件控制自動補(bǔ)償計時日差,代替人工校正過程。其缺點(diǎn)是不同時鐘芯片的計時日差,各不相同,首次運(yùn)行時,需要與標(biāo)準(zhǔn)計時進(jìn)行校對,以確定其合適的補(bǔ)償量。
關(guān)鍵詞:單片機(jī);實(shí)時時鐘;日差;算法設(shè)計
1 問題提出
實(shí)時時鐘(RTC)也稱為時鐘芯片,是一種廣泛應(yīng)用的電子器件,用于提供精確的實(shí)時時間,或者為電子系統(tǒng)提供時間基準(zhǔn)。大多數(shù)時鐘芯片,均采用精度較高的晶體振蕩器作為時鐘源,因此,晶振的頻率誤差大小,決定了計時系統(tǒng)的性能。
時鐘芯片和晶振組成的計時系統(tǒng),短期內(nèi)有較高的精度,長期運(yùn)行,因累積誤差,導(dǎo)致其計時誤差越來越大。例如,獨(dú)立應(yīng)用實(shí)時時鐘的各種電子產(chǎn)品,運(yùn)行一段時間后,與標(biāo)準(zhǔn)時間會有較大差異,需要人工手動調(diào)整計時參數(shù),以適合計時需求。
單片機(jī)或嵌入式芯片組成的實(shí)時時鐘系統(tǒng),若在控制程序中,設(shè)置計時自動補(bǔ)償功能,用以代替人工手動校正,能夠減少計時系統(tǒng)的累積誤差,達(dá)到優(yōu)化產(chǎn)品性能目的。本文將從晶振的參數(shù)、補(bǔ)償方法、算法設(shè)計等三個方面說明實(shí)時時鐘計時補(bǔ)償?shù)姆椒ā?/p>
2 晶振的參數(shù)
石英晶體振蕩器(以下簡稱晶振)是利用石英晶體的壓電效應(yīng)制成。晶振可以分為普通晶振、溫補(bǔ)晶振和恒溫晶振。不同類型的晶振,其技術(shù)指標(biāo)有較大差異。文獻(xiàn)[1]指出晶振的性能參數(shù)有開機(jī)特性(10-6~10-11)、日頻率波動(10-6~10-11)、日老化率(10-6~10-11)、頻率復(fù)現(xiàn)率(10-6~10-11)、頻率準(zhǔn)確度(10-5~10-10)和1秒頻率穩(wěn)定度(10-8~10-12)。
從上述指標(biāo)系數(shù)中可以看出,符合規(guī)格要求的晶振,其1秒頻率穩(wěn)定度相對較高,而頻率準(zhǔn)確度的指標(biāo)系數(shù)則相對較低,故頻率準(zhǔn)確度是判別晶振好環(huán)的一個重要因素。另外,由于溫漂影響,晶振的頻率準(zhǔn)確度也與運(yùn)行環(huán)境溫度相關(guān),因此,溫度補(bǔ)償,是提高晶振頻率準(zhǔn)確度的有效方法。
3 補(bǔ)償方法
3.1 溫度補(bǔ)償
溫度補(bǔ)償是為消除溫度變化引起晶振的頻率誤差。恒溫晶振使用具有單層或雙層的恒溫裝置,以及對應(yīng)的溫控電路,使晶振工作過程溫度盡可能保持不變,減少溫度變化對頻率穩(wěn)定度的影響。
溫補(bǔ)晶振則是把溫度變化對振蕩所產(chǎn)生的頻率誤差進(jìn)行補(bǔ)償,以提高晶振的頻率穩(wěn)定度?!霸诔叵拢?5℃),實(shí)時時鐘精度約為±20ppm,針對晶體振蕩器的溫漂特性,設(shè)計了一種分頻鏈的頻率校準(zhǔn)算法,校準(zhǔn)精度達(dá)±0.25ppm”[2]。集成溫補(bǔ)晶振具有更寬溫度范圍的工作性能,“其輸出信號的頻率穩(wěn)定性可在寬溫范圍(-30℃~+85℃),達(dá)到±1×10-6”[3]。以上案例表明,溫補(bǔ)晶振能有效提高頻率穩(wěn)定度的指標(biāo)系數(shù)。
溫補(bǔ)晶振和恒溫晶振均通過輔助電路或裝置,來減小或消除溫度的影響,提高晶振的頻率穩(wěn)定度,但是也不能完全消除頻率誤差。獲得更高精度時鐘的另一種方法,是采用同步時鐘。
3.2 同步時鐘
同步時鐘精度高,一般用于對時鐘有嚴(yán)格要求的系統(tǒng)。常用的同步時鐘有衛(wèi)星同步時鐘和網(wǎng)絡(luò)同步時鐘。
衛(wèi)星時鐘同步,是利用晶振短期計時精度高的特點(diǎn),與衛(wèi)星時鐘進(jìn)行同步,可以得到高性能價格比的高精度時鐘發(fā)生裝置[4]?!皩PS信號的長期穩(wěn)定度和準(zhǔn)確度與晶振的短期穩(wěn)定度相結(jié)合,大大提高了頻率源的性能”[5],若“使用全球定位系統(tǒng)(GPS)接收機(jī)的整秒脈沖信號和串口時間信息,作為高精度的時間源,同步精度優(yōu)于500μs”[6]。衛(wèi)星“時間同步在航天測控、衛(wèi)星遙感、軍事靶場、視覺測量、電力運(yùn)輸?shù)阮I(lǐng)域有重要意義”[6]!
網(wǎng)絡(luò)時鐘同步,也是一種獲得高精度時鐘的方法。基于“IEEE1588高精度時間同步算法,通過晶振補(bǔ)償和OffsetTime濾波,達(dá)到了微秒級高精度同步系統(tǒng)的要求,適用于機(jī)電控制、通信等領(lǐng)域”[7]。
除了上述的溫度補(bǔ)償、同步時鐘以外,在時鐘同步精度要求不高的場合,也可用采用日差補(bǔ)償?shù)姆椒?,來提高時鐘芯片的計時精度。
3.3 日差補(bǔ)償
計時器一天的走時誤差,稱為日差。由于時鐘芯片所使用的晶振,存在頻率誤差,因而獨(dú)立使用時鐘芯片的計時器,一定存在走時誤差。對于時鐘同步要求不高的場合,存在走時偏差的時鐘,可以人工校準(zhǔn),也可以由程序自動校正。
如圖1實(shí)時時鐘偏慢補(bǔ)償示意圖所示,將實(shí)時時鐘與標(biāo)準(zhǔn)時鐘進(jìn)行比較,可以得到補(bǔ)償量,將此補(bǔ)償量,向前疊加到實(shí)時時鐘(加快實(shí)時時鐘)的計時數(shù)據(jù)中,可完成實(shí)時時鐘的偏差調(diào)整。若實(shí)時時鐘偏快,則需要將得到的補(bǔ)償量,向后疊加到實(shí)時時鐘(減慢實(shí)時時鐘)的計時數(shù)據(jù),以完成計時校正。
對于以獨(dú)立時鐘芯片的作為計時依據(jù)的各種電子產(chǎn)品,可以采用日差補(bǔ)償?shù)姆椒?,提高計時的準(zhǔn)確度。具體實(shí)施方法是,經(jīng)24小時實(shí)走,與標(biāo)準(zhǔn)時鐘進(jìn)行比較,得到日差補(bǔ)償量,在程序中設(shè)置對應(yīng)補(bǔ)償參數(shù)。然后,在實(shí)際計時過程中,每天由軟件自動校正偏差,減少計時的累積誤差,達(dá)到優(yōu)化計時性能目的。
日差測試所需時間較長,應(yīng)用不方便。如果計時系統(tǒng)顯示最小位是秒的產(chǎn)品,可以在首次運(yùn)行時,由用戶根據(jù)實(shí)際運(yùn)行天數(shù)的走時誤差,估算出日差補(bǔ)償量,并進(jìn)行參數(shù)設(shè)置即可。實(shí)時時鐘的日差補(bǔ)償量,也可以通過測量瞬時日差得到。
4 算法設(shè)計
單片機(jī)系統(tǒng)實(shí)時時鐘日差補(bǔ)償,如圖2日差自動校正流程圖所示,根據(jù)時鐘校正的時刻點(diǎn)不同,可以分為(a)、(b)兩種情況。程序設(shè)計中,這兩種情況都需要設(shè)定一個“標(biāo)記位”的變量,其作用是記錄能否進(jìn)行日差補(bǔ)償?shù)臓顟B(tài),防止程序循環(huán)執(zhí)行中,多次連續(xù)、重復(fù)進(jìn)行日差補(bǔ)償,而使計時出錯。
以圖2日差自動校正流程圖(a)為例,說明“標(biāo)記位”變量的作用。程序運(yùn)行時,“標(biāo)記位”變量初始狀態(tài)被置1,以及計時到達(dá)“時間點(diǎn)1”的時刻,“標(biāo)記位”變量也置1,置1表示允許進(jìn)行日差補(bǔ)償。計時到了“時間點(diǎn)2”的時刻,并且“標(biāo)記位”變量是1時,則由程序自動將設(shè)置好的補(bǔ)償量,向前(加快)或向后(減慢)疊加到當(dāng)前時鐘數(shù)據(jù)上,得到新的時鐘數(shù)值,同時將新的時鐘數(shù)值,寫入實(shí)時時鐘芯片,完成以上調(diào)整后,將“標(biāo)記位”變量置0,以確保每天的日差補(bǔ)償有且只有一次。
在圖2時鐘校正流程圖(a)和(b)中,“時間點(diǎn)1”和“時間點(diǎn)2”之間的時間間隔值(以下稱間隔值),應(yīng)該要大于可能設(shè)定的補(bǔ)償量,否則,在自動調(diào)整時鐘過程中,向前(加快)或向后(減慢)調(diào)整后的時鐘值,有可能會跳至“時間點(diǎn)1”和“時間點(diǎn)2”的時刻所界定的時鐘區(qū)間之外,使程序運(yùn)行出錯。因此,以下兩種可能,在程序編程中,應(yīng)該避免發(fā)生。
第一種情況,如圖2日差自動校正流程圖(a)所示,在“時間點(diǎn)2”時刻,自動向后(減慢)調(diào)整時鐘數(shù)值,完成調(diào)整后,“標(biāo)記位”變量被置0。若補(bǔ)償量超過“間隔值”,必定使新時鐘的數(shù)值,指向“時間點(diǎn)1”前的某一個時刻,使“標(biāo)記位”置1的程序又被觸發(fā),導(dǎo)致程序反復(fù)進(jìn)行日差補(bǔ)償,進(jìn)入死循環(huán)。
第二種情況,如圖2日差自動校正流程圖(b)所示,若在“時間點(diǎn)1”時刻,自動向前(加快)調(diào)整時鐘數(shù)值時,補(bǔ)償量大到超過“時間點(diǎn)2”的時刻,則程序會跳過“標(biāo)記位”變量置1的執(zhí)行流程,使日差補(bǔ)償動作,只執(zhí)行一次,程序失去計時補(bǔ)償功能。
因此,程序流程中的“間隔值”,必須大于日差補(bǔ)償量,且要留有一定裕量。非專用型的液晶數(shù)字秒表,其瞬時日差為±1.5S/d[8],參考此數(shù)據(jù)值,程序中的補(bǔ)償量范圍,可以限值在60S以內(nèi),間隔值則應(yīng)大于60S。對于某些家用產(chǎn)品上的獨(dú)立時鐘,進(jìn)行日差自動補(bǔ)償調(diào)整的時刻,宜選在凌晨兩、三點(diǎn)鐘較為合適。
5 仿真結(jié)果
圖3是PROTEUS日差補(bǔ)償仿真圖,仿真時鐘芯片為DS1302,截圖中的LCD顯示,當(dāng)前設(shè)定的日差補(bǔ)償量為+2秒/天,“+”表示是加快時鐘的補(bǔ)償量。對于計時最小單位是秒的時鐘芯片,若遇到實(shí)際走時日差不足1S時,應(yīng)增加天數(shù),直至誤差達(dá)到1秒以上,才進(jìn)行時鐘校正。對于計時顯示最小單位是分鐘的產(chǎn)品,也可以考慮將月差作為自動調(diào)整的周期。將“標(biāo)記位”變量的置、復(fù)位控制,改成日期計數(shù)功能,可以實(shí)現(xiàn)對于任意周期天數(shù)的計時偏差進(jìn)行補(bǔ)償。
6 結(jié)語
上述提出的日差補(bǔ)償算法,是對獨(dú)立時鐘芯片的計時系統(tǒng),在實(shí)際應(yīng)用環(huán)境,綜合運(yùn)行一段時間后產(chǎn)生的誤差,進(jìn)行補(bǔ)償?shù)姆椒ǎm用于低成本的單片機(jī)和嵌入式系統(tǒng),由軟件程序設(shè)置自動補(bǔ)償功能,代替人工校準(zhǔn)過程,在不提高產(chǎn)品器件成本的前提下,優(yōu)化計時性能,提高產(chǎn)品的用戶滿意度。其缺點(diǎn)是不同器件的計時誤差,各不相同,首次運(yùn)行時,需要與標(biāo)準(zhǔn)計時進(jìn)行比對,以確定其合適的補(bǔ)償量。
參考文獻(xiàn):
[1]JJG180-2002,電子測量儀器內(nèi)石英晶體振蕩器檢定規(guī)程[S].北京:中國計量出版社,2003.
[2]李根岱.可校準(zhǔn)實(shí)時時鐘芯片的研究和設(shè)計[D].華中科技大學(xué),2007.
[3]江玉潔,陳辰,等.一種全集成化的溫補(bǔ)晶體振蕩器[J].宇航計測技術(shù),2003(03):52-57.
[4]曾祥君,尹項根,等.GPS時鐘在線監(jiān)測與修正方法[J].中國電機(jī)工程學(xué)報,2002(12):42-47.
[5]馬彥青.恒溫晶振OCXO自適應(yīng)馴服保持技術(shù)研究[D].西安電子科技大學(xué),2011.
[6]王向軍,張亞元,等.基于GPS和高精度實(shí)時時鐘的時間同步方法[J].納米技術(shù)與精密工程,2016,14(01):66-70.
[7]桂本烜,馮冬芹,等.IEEE1588的高精度時間同步算法的分析與實(shí)現(xiàn)[J].工業(yè)儀表與自動化裝置,2006(04):20-23.
[8]GB/T22778-2008,液晶數(shù)字式石英秒表[S].北京:中國標(biāo)準(zhǔn)出版社,2008.
基金項目:2018年度高校訪問工程師“校企合作項目”(項目編號:FG2018242)
作者簡介:吳天強(qiáng)(1977-),男,工程碩士,講師,從事電子電路教學(xué)研究工作。