理論上
只要是用晶振作為時基的單片機時間鐘,在常溫下做到日差1秒之內(nèi),甚至更精準是應(yīng)該極易達成的。
只是許多人并不知道如何達成這個目標的方案。
而且市面很多帶單片機的產(chǎn)品中,時間都做不準,這絕對是設(shè)計問題。例如:筆者車子上的時鐘日差有10秒多。
一般大多數(shù)人所設(shè)計的定時器時常,是根據(jù)晶振標出的數(shù)據(jù)(如12M)計算而成的,固定不變,設(shè)計呆板。但普通晶振的實際振蕩頻率是不可能與標出的數(shù)據(jù)完全相同的,例如:12.00043M,11.99985……,這個誤差必然積累,所以時鐘就不準了。另外絕大多數(shù)設(shè)計也沒有考慮微調(diào)方案,對于日差幾秒無法控制。
日差1秒要求的精準是:1秒/(24小時*60分*60秒),對應(yīng)12M晶振;當頻率是12.000014M或11.999986M,日差就有1.2秒。可見用普通晶振做的時間鐘,如果不采取修正措施,會因精度不夠,時鐘日差10多秒是很普遍的。
在筆者設(shè)計的有單片機時間產(chǎn)品中,隨機取10個,同時上電,3天后再看時鐘,它們之間的最大時間誤差,一般都不會超出1秒(普通晶振,不聯(lián)網(wǎng))。許多產(chǎn)品月差在1秒之內(nèi)。
1、實現(xiàn)方法:
1)將時間的定時中斷時常數(shù)做成可修正的,且加入微調(diào)常數(shù),定時時常數(shù)與微調(diào)時常數(shù)在FLASH中取得。微調(diào)時常數(shù)用于修正時常數(shù)的小數(shù)點之后的部分。
2)程序可以對某端口輸入的秒脈沖再進行計算,并據(jù)之修正定時器的時常數(shù),以及微調(diào)常數(shù),并存入FLASH中。達成利用外部精準脈沖源對時鐘進行校準的目的,說白了,就是用外校消除普通晶振的個體差異。同時程序也可以輸出自己的秒脈沖,這樣就可以達成產(chǎn)品之間的互校。
3)選擇一個產(chǎn)品,對其時鐘進行精確校準(這需要外部精準的時鐘源。如果手中沒有,可以多花點時間,用手機、電視、廣播上的報時進行校準),這樣就可以將它做成一個自己的【標準秒脈沖時鐘源】。
4)產(chǎn)品出貨前,用自己的【標準秒脈沖時鐘源】校一下(將輸出的標準秒脈沖送入其它產(chǎn)品的校準端口,讓其它產(chǎn)品自動完成定時器時常數(shù)及微調(diào)常數(shù)的修正。)
如此處理,時間鐘的精度就取決于晶振的穩(wěn)定度,而不是精度。而晶振的穩(wěn)定度普遍可以達到PPM級,當環(huán)境溫度變化不大時,極易保證《11.57PPM,這就達成了日差小于1秒的目的。
2、產(chǎn)品相關(guān)時間基準的程序:
(只提方案,不提程序代碼)
1)將端口輸入的秒脈沖與本體的晶振頻率進行比對,計算出定時器的時常數(shù)與微調(diào)時常數(shù)(只做一次即可,計算結(jié)果保存到FLASH了,其最初值是按晶振的標稱值計算確定的)。
2)時間微調(diào)補償。
3)秒脈沖輸出(用于互校,可以放棄不寫)。
要點:定時器的時常數(shù)不是程序直接賦值,而是從FLASH中調(diào)取的。
編輯:lyn
-
單片機
+關(guān)注
關(guān)注
6067文章
44992瀏覽量
650505 -
晶振
+關(guān)注
關(guān)注
35文章
3268瀏覽量
70142
原文標題:如何用單片機做一個高精度的時間鐘方案?
文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
時統(tǒng)設(shè)備高精度時間同步解決方案:為數(shù)字化時代注入精準時間基因
一種高精度單斜率AD及其單片機實現(xiàn)
方案分享 | 高精度時間同步技術(shù)的實現(xiàn)與應(yīng)用

單片機和伺服有什么區(qū)別
用dac7742y做一個高精度的鋸齒波,無波形輸出是怎么回事?
康謀方案 | BEV感知技術(shù):多相機數(shù)據(jù)采集與高精度時間同步方案

基于單片機的磁致伸縮位移傳感器的應(yīng)用

基于51單片機的手動數(shù)字時鐘

如何實現(xiàn)51單片機與PC機的串行通信
單片機&超聲波探傷儀
物聯(lián)網(wǎng)系統(tǒng)中高精度RTK定位方案的實現(xiàn)_高精度定位模塊

單片機方案開發(fā):如何給電子產(chǎn)品單片機選型?
藍牙模塊如何實現(xiàn)單片機和手機端數(shù)據(jù)互傳

評論