<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 調整單片機時(shí)鐘精度的解決方案

調整單片機時(shí)鐘精度的解決方案

作者: 時(shí)間:2014-11-14 來(lái)源:網(wǎng)絡(luò ) 收藏

  本文針對用制作電子鐘或要求根據時(shí)鐘啟控的控制系統時(shí),出現的校準了的電子時(shí)鐘的時(shí)間竟然變快或是變慢了的情況而提出的一種解決方案。

本文引用地址:http://dyxdggzs.com/article/265384.htm

  應用中,常常會(huì )遇到這種情況,在用制作電子鐘或要求根據時(shí)鐘啟控的控制系統時(shí),會(huì )突然發(fā)現當初校準了的電子時(shí)鐘的時(shí)間竟然變快或是變慢了。

  于是,嘗試用各種方法來(lái)調整它的走時(shí)精度,但是最終的效果還是不盡人意,只好每過(guò)一段時(shí)間手動(dòng)調整一次。那么,是否可使時(shí)鐘走時(shí)更精確些呢?現探討如下:

  一、誤差原因分析

  1.單片機電子時(shí)鐘的計時(shí)脈沖基準,是由外部晶振的頻率經(jīng)過(guò)12分頻后提供的,采用內部的定時(shí),計數器來(lái)實(shí)現計時(shí)功能。所以,外接晶振頻率的精確度直接影響電子鐘計時(shí)的準確性。

  2.單片機電子時(shí)鐘利用內部定時(shí),計數器溢出產(chǎn)生中斷(12MHz晶振一般為50ms)再乘以相應的倍率,來(lái)實(shí)現秒、分、時(shí)的轉換。大家都知道,從定時(shí),計數器產(chǎn)生中斷請求到響應中斷,需要3_8個(gè)機器周期。定時(shí)中斷子程序中的數據人棧和重裝定時(shí),計數器的初值還需要占用數個(gè)機器周期。此外。從中斷人口轉到中斷子程序也要占用一定的機器周期。例如:

  

 

  從上述程序可以看出,從中斷人口到定時(shí)/計數器初值的低8位裝入需要占用2+2+2=6個(gè)機器周期。所以,在編程時(shí)一般會(huì )把這6個(gè)機器周期加入定時(shí)/計數器的初值中。但是,從定時(shí),計數器溢出中斷請求到執行中斷需要幾個(gè)機器周期(3~8個(gè)機器周期)。就很難確定準確值,正是這一原因導致了電子時(shí)鐘計時(shí)的不準。

  二、解決方法

  1、采用高精度晶振方案

  雖然采用高精度的晶振可以稍微提高電子鐘計時(shí)的精確度,但是晶振并不是導致電子鐘計時(shí)不準的主要因素,而且高精度的晶振價(jià)格較高,所以不必采用此方案。

  2、動(dòng)態(tài)同步修正方案

  從程序人手,采用動(dòng)態(tài)同步修正方法給定時(shí),計數器賦初值。動(dòng)態(tài)同步修正方法如下:由于定時(shí),計數器溢出后,又會(huì )從O開(kāi)始自動(dòng)加數,故在給定時(shí)/計數器再次賦值前,先將定時(shí),計數器低位(TLO)中的值和初始值相加,然后送人定時(shí),計數器中,此時(shí)定時(shí),計數器中的值即為動(dòng)態(tài)同步修正后的準確值。具體程序如下:

  

 

  采用此種方法后,相信制作的電子時(shí)鐘的精度已有提高了。

  3.自動(dòng)調整方案

  采用同步修正方案后,電子時(shí)鐘的精度雖然提高了很多,但是由于晶振頻率的偏差和一些其他未知因素的影響(同一塊電路板、同樣的程序換了一片單片機后,走時(shí)誤差不一樣,不知是何原因),時(shí)間長(cháng)了仍然會(huì )有積累誤差。為此,可采用自動(dòng)調整方案。實(shí)際上是一種容錯技術(shù)。其自動(dòng)調整原理為:實(shí)測出誤差I(lǐng)s所需的時(shí)間,然后每隔這樣一段時(shí)間后就對秒進(jìn)行加“1”或減“1”調整。例如:電子鐘每過(guò)50小時(shí)就慢1秒,其自動(dòng)調整程序如下:

  

 

  以下是一個(gè)完整實(shí)例:

  

 

  

 

  結語(yǔ)

  使用此方法調整較費時(shí)間,但效果非常好。經(jīng)實(shí)驗,一次調整可/以將月誤差控制在Is左右,如按此方法再次測出誤差I(lǐng)s所需的天數并進(jìn)行二次調整,其精度會(huì )更高。



關(guān)鍵詞: 單片機 時(shí)鐘精度

相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>