摘? 要: 通過對引起實(shí)時時鐘" title="實(shí)時時鐘">實(shí)時時鐘計時誤差因數(shù)的分析,給出了一種提高實(shí)時時鐘長期計時準(zhǔn)確度的實(shí)用而有效的軟件方法。該方法具有成本低,、易實(shí)現(xiàn),、通用性強(qiáng)、徹底校正等優(yōu)點(diǎn),。
關(guān)鍵詞: 實(shí)時時鐘? 準(zhǔn)確度? 定時器? 軟件校正
?
電子計時器" title="計時器">計時器通常以石英晶振" title="晶振">晶振為時鐘源。時鐘源的頻率通常為幾十kHz乃至幾十MHz,而常用時鐘的最小計時單位一般在0.01s~1s,。高頻的時鐘源脈沖通過分頻" title="分頻">分頻器后產(chǎn)生基本定時脈沖。電子計時器的計時部分就是對基本定時脈沖進(jìn)行累加,,產(chǎn)生秒,、分、時等時間信息乃至日,、月,、年等日期信息。
1 引起計時誤差的因數(shù)
一個常規(guī)電子計時器的計時準(zhǔn)確度,,取決于晶振標(biāo)稱頻率(fs)與實(shí)際頻率(fo)的頻率偏差和晶振頻率的時漂,、溫漂等離散參數(shù)。普通晶振的實(shí)際頻率與標(biāo)稱頻率有較大的偏差,,可達(dá)萬分之五(5‰),,折算到一天計時誤差就是43.2s。一般室內(nèi)氣溫變化在每天10℃左右,,對應(yīng)晶振頻率溫漂<10-5,,若以一段較長的時間取溫漂的平均值則更小。因此電子計時器的誤差主要取決于晶振實(shí)際頻率與標(biāo)稱頻率的偏差,。
2 減少計時誤差的方法
2.1 純硬件方法
對于純硬件計時電路,,因分頻系數(shù)N固定不變,要提高計時準(zhǔn)確度只能調(diào)整fo,,使得它盡可能接近于fs,。常規(guī)減少計時誤差的方法是:微調(diào)元件L、C,、R的參數(shù),,調(diào)節(jié)硬件頻率,使得時鐘源的頻率誤差減小,。但此方法操作復(fù)雜,,沒有一定的電子技術(shù)知識和專用儀器很難校準(zhǔn),而且會降低晶振頻率穩(wěn)定度,。
2.2 純軟件方法
由微控制器控制的實(shí)時時鐘,,可以采用軟件的方法消除晶振實(shí)際頻率與標(biāo)稱頻率間誤差引起的計時誤差,。
由微控制器控制的實(shí)時時鐘,可以用軟件模擬,,將歸入總的計時程序中,,從而消除fs和fo間偏差引來的計時誤差。對于專用硬件時鐘電路如:DS1320,、PCF8583等,,可以采用每小時或每10分鐘讀出時間,然后乘上再寫回芯片的方法校正,。對于采用可編程分頻定時器,,由軟件模擬時鐘功能的軟件實(shí)時時鐘,則有更好的提高計時準(zhǔn)確度的方法,。因?yàn)槎〞r器的分頻系數(shù)是可以動態(tài)改變的,,如89C52內(nèi)置的16位計數(shù)器,分頻系數(shù)可以在1~216內(nèi)任意選取,。令N=Ns作為分頻系數(shù)寫入計數(shù)器,這樣每個基本計時周期TN=TNS,,從而實(shí)現(xiàn)軟件校正定時周期,。
在×Ns剛好為整數(shù)時,可以使得計時誤差為0,。大部分的情況×Ns并不是整數(shù),,若將四舍五入后的值作為Ns,就會帶來量化誤差" title="量化誤差">量化誤差,,最大可達(dá),,這是一個不容忽視的問題。以12MHz的89C52 T2定時器定時10ms為例,,每天最大量化誤差累加是:24×3600÷(2×10000)=4.32s,。若在片內(nèi)RAM中定義1個字節(jié)尾數(shù),令它的滿碼值為,,則最大量化誤差就從原來的下降到,。對應(yīng)于上述的10ms定時程序,其最大量化誤差的累加值由原來的4.32秒/天減少到0.016875秒/天,,這是很大的改進(jìn),。根據(jù)精度要求,可以在片內(nèi)RAM中定義2個字節(jié),,令它的滿碼值為,,這樣最大量化誤差就可降為。減少量化誤差的具體算法是:對于使用89C52的T2定時器,,若標(biāo)稱為12MHz的晶振實(shí)際長期平均振蕩頻率fo=12.0006MHz,,量化精度取1字節(jié),,取TNS=10ms,則分頻系數(shù)為:
Ni為第i次定時值,,可能是10000或10001,,這取決于NTi的進(jìn)位;NTi為第i次尾數(shù)暫存值。?
每次定時中斷服務(wù)程序均執(zhí)行(1)式,,取得第i 次的定時計數(shù)值,,然后實(shí)時時鐘增加10ms,完成時鐘功能,。值得注意的是,,Ni是實(shí)際的計數(shù)值,至于實(shí)際寫入特定定時器的數(shù)值,,則須根據(jù)具體定時器的遞減,、遞加計時性質(zhì)分別寫入Ni或Ni的補(bǔ)碼,同時定時器 在溢出到新的定時值裝入并開始新定時周期這段時間,,將TLOAD考慮在內(nèi),。例如89C52 T2工作于自動重裝定時初值、遞加定時方式時,,實(shí)際寫入定時器T2的捕獲/自動重裝載寄存器(Rcap2H,,Rcap2L)的值是Ni的補(bǔ)碼,即65536-Ni;而對于89C52 T0和T1定時器則實(shí)際寫入的定時初值是:Ni的補(bǔ)碼+TLOAD對應(yīng)的機(jī)器周期數(shù),。
3? 測量晶振實(shí)際長期振蕩頻率
沒有專用儀器,,怎樣測得晶振實(shí)際長期振蕩頻率?有一個很簡單的方法。以標(biāo)稱頻率下的定時計數(shù)值Ns作為實(shí)際計數(shù)值,,在電臺報時時將時間設(shè)置正確,,然后讓它運(yùn)行一段較長的時間,再與電臺的報時比較求出誤差的秒數(shù),,即可算出實(shí)際頻率,。例如晶振標(biāo)稱頻率是12MHz,時鐘運(yùn)行了10天,,快了432s,,則
若將上述算法編成程序,讓用戶直接輸入N和NT的值;或輸入運(yùn)行了多少天,、時,、分、秒,,快或慢了多少秒,,讓系統(tǒng)自動算出N和NT,將會為從根本上校準(zhǔn)時鐘帶來極大方便,。任何人都可以輕松地提高時鐘準(zhǔn)確度而無需專業(yè)知識和專用儀器,。
現(xiàn)在微控制器已廣泛應(yīng)用于人們?nèi)粘I畹母鱾€方面,,電子時鐘也隨著它融入到各種電器和設(shè)備中,如專門時鐘功能的石英表和各種附帶電子計時器的電器如手機(jī),、普通液晶顯示電話,、VCD機(jī)、DVD機(jī),、電視及高檔音響,、空調(diào)遙控器、電力系統(tǒng)微機(jī)自動化設(shè)備等,。高檔專用計時器如高檔石英表,,因?yàn)橛嫊r是它的主功能,須保證計時準(zhǔn)確度而對計時時鐘源準(zhǔn)確度要求嚴(yán)格,,每天誤差在1s以下,。以上提到的其它電器,其時鐘只是它的一個附帶功能,,出廠時一般不嚴(yán)格校正,,甚至根本不做任何校正。所以誤差通常在1秒/天以上,,有些達(dá)10秒/天以上,,每天都需校正,否則運(yùn)行幾天就會因誤差太大而變得不可信,,令用戶不勝煩惱。
在電力系統(tǒng)中,,無人值班變電站須安裝無功自動控制設(shè)備,。它根據(jù)一天中的不同時間段和電網(wǎng)無功情況自動投退電容器組,使得電網(wǎng)的功率因數(shù)盡可能接近于1,,以利于經(jīng)濟(jì)運(yùn)行,。但有些設(shè)備內(nèi)部時鐘每天誤差>5分鐘。若將本文算法編入計時程序中,,讓用戶自己校正定時參數(shù),,將大大提高各種附帶時鐘的計時準(zhǔn)確度。
將基于軟件提高實(shí)時時鐘準(zhǔn)確度的算法應(yīng)用于普通石英晶振,,利用89C52 T2定時器的軟實(shí)時時鐘,,未作校正前每天快11s;進(jìn)行軟件計時校正后,每10天的計時誤差<1s,。本文提出的基于軟件提高時鐘準(zhǔn)確度的算法,,具有極高的實(shí)用價值。
?
參考文獻(xiàn)
1 何立民.單片機(jī)應(yīng)用技術(shù)選編(1).北京:北京航空航天大學(xué)出版社,,1994
2 羅 娟.計算機(jī)時間校準(zhǔn)方法.微計算機(jī)信息,,1999;(4)