上面討論了在一個固定的溫度下如何做時鐘的補償及其原理,現(xiàn)在我們討論在溫度變化的情況下如何做時鐘的自動補償。如前所述,晶體的頻率偏差可以用拋物線方程來描述,如果我們確定出拋物線,那么就可以通過溫度(溫度的測量可以用集成溫度傳感器或NTC電阻來完成)來確定出頻率偏差從而對其進行補償。比較常用的一種方法就是測出一些點然后用最小二乘法擬合。簡要描述如下:
由一些已知點擬合拋物線方程:
已知點:(X1,Y1), (X2,Y2), (X3,Y3) … (Xn,Yn)。
確定拋物線方程y=ax2 + bx + c 的系數(shù)。
最小二乘法:

至少需要三個點來確定此拋物線。
晶振典型溫漂曲線形式如下:
y = a(x-t)2 + k = ax2 - 2atx + at2 + k
對于同一個型號的晶體,假定拋物線二次系數(shù)不變,可由公式(2)(3)求得b c,然后得出t, k。從而實現(xiàn)兩點校正。由于拋物線越遠離頂點變化率越大,所以在拋物線的兩端進行校正可以得到更好的補償精度。
t = -b/2a
k = c - b2/4a
如果晶體的一致性比較好,系數(shù)a和t偏差不大,可以只對系數(shù)k進行標定。即單點校正。
4 使用FTM 模塊產(chǎn)生秒脈沖
在一些應(yīng)用中,實時時鐘輸出的秒脈沖需要用光耦隔離。過窄的時鐘脈沖難以通過低速光耦。在這一節(jié)中,將討論一種使用FTM 模塊來校正實時時鐘iRTC輸出的秒脈沖的方法。校正后的秒脈沖將具有:
更高的精度(每個秒脈沖)
50% 的占空比
4.1 以RTCCLKOUT做時鐘源產(chǎn)生秒脈沖
在上述討論的實時時鐘(iRTC)的校準方法中,RTCCLKOUT時鐘在長的時間內(nèi)精度得到了保證。在圖2-1中可以看到,由于補償間隔是M(M》1)秒,補償間隔內(nèi)的第一秒長度和其它秒長度是不一樣的,因為第一秒包含了補償時間。如果我們能把此補償時間平均分配到補償間隔內(nèi)的每一秒鐘,使每一秒的長度相等(每一秒都得到補償),那么我們將得到均勻的高精度秒脈沖輸出。
單片機中的程序計算補償間隔內(nèi)每一秒的補償時間并對每一秒進行補償。如果補償間隔是M,補償值是N,那么每一秒鐘的補償值就是N/(32768 ×M)秒。N/(32768×M)可能是一個很小的值,因此我們需要一個高精度的時鐘來得到高分辨率(精度)。
在此方案中我們使用總線時鐘(bus clock),該總線時鐘由外部的32768Hz 晶體(XOSC1)組成的振蕩器產(chǎn)生參考頻率,然后經(jīng)由片內(nèi)倍頻電路鎖頻環(huán)(FLL)倍頻獲得。鎖頻環(huán)(FLL) 和實時時鐘(iRTC)共用同一外部振蕩源。鎖頻環(huán)(FLL)的倍頻系數(shù)設(shè)置為512,所以總線頻率最大為16.78MHz(512×32768)。每一秒的補償時間為(512×N)/M 總線時鐘周期,它消除掉了溫度和晶體老化的影響。
從圖2-1(補償后的實時時鐘秒脈沖輸出)中我們可以看出,當前補償周期的最后一個時鐘沿就是下一個補償周期的第一個時鐘沿。用第一個時鐘沿做對齊,實時時鐘的補償精度得到繼承(上升沿和下降沿都可以用來做對齊;由軟件來設(shè)定)。
MC9S08GW64 的FTM模塊的每個通道可以單獨工作在輸入捕捉或者輸出比較模式。我們可以使用一個FTM模塊的兩個通道,其中的一個通道來捕捉iRTC輸出的窄脈沖,另一個通道輸出50%占空比的秒脈沖。
當 FTM模塊的通道1捕捉IRTCCLKOUT的上升沿(或下降沿)時使用總線時鐘,在FTMCH1中斷觸發(fā)后保存FTM計數(shù)器的捕獲值到FTMCH1V。在FTMCH1中斷程序中,F(xiàn)TMCH0被設(shè)置為輸出比較模式,輸出比較值設(shè)置為FTMCH1V加一個偏移Ф。Ф為一個常量加每一個脈沖周期的調(diào)整值。表3列出了IRTCCLKOUT和FTM輸出邊沿的上升時刻,以及兩者的脈沖寬度。
表3 IRTCCLKOUT 和FTM 輸出時序

TAVG = V ÷ M(晶體振蕩周期)
= 512 × V ÷ M(總線時鐘周期)
從表3可以看出,RTCCLKOUT先右移了σ。每一個秒脈沖用平均的補償值進行補償。
圖4-1和圖4-2對這種補償方法做了詳細地說明。圖4-1演示了加入一些振蕩周期的情形。

在圖4-1中:

圖4-2 說明了減少一些振蕩周期的情形。

圖4-2:

偏移量 σ(延遲)有兩個作用:
對實時時鐘iRTC 輸出進行移相;每個秒脈沖的補償都基于這個值
有足夠的時間處理FTMCH1中斷
每一個秒脈沖的補償時間都被加上σ,在例程中σ 被設(shè)置為0x8000,在總線時鐘為32768 ×512Hz時這相當于1.9ms。σ值的大小取決于補償間隔(compensation period)和補償值(compensation value)。
0 《 σ - (M-1)(512 × V/M) 《 0xFFFF
-128 《 V 《 127
一般來講,當溫度變化時晶體的誤差總是負的,所以σ 可以設(shè)置為一個比較小的值,比如0x2000,0x1000,補償?shù)姆秶靡栽龃蟆?/p>
FTMCH0設(shè)置為輸出比較模式(匹配時設(shè)置輸出為高),當FTM 計數(shù)器的值和FTMCH0V 寄存器的值匹配時FTMCH0引腳被置高,F(xiàn)TMCH0中斷被觸發(fā)。FTM 設(shè)置為128分頻,0.5秒后FTMCH0輸出變低。當輸出變低時FTM的分頻比設(shè)置為1。
電子發(fā)燒友App
















評論