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

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

基于單片機的磁致伸縮位移傳感器的應用

評論