新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STM32F101xx and STM32F103xx RTC 校準(zhǔn)

STM32F101xx and STM32F103xx RTC 校準(zhǔn)

作者: 時(shí)間:2016-11-24 來源:網(wǎng)絡(luò) 收藏
AN2604
應(yīng)用筆記
STM32F101xx and STM32F103xx RTC 校準(zhǔn)
總體介紹
實(shí)時(shí)時(shí)鐘在很多嵌入式應(yīng)用中是必不可少的,但是由于外部環(huán)境溫度的改變,驅(qū)動(dòng)RTC的晶體頻率會(huì)發(fā)生變化,因此RTC就沒有預(yù)想的那么準(zhǔn)確了!
STM32F101xx and STM32F103xx附帶有數(shù)字時(shí)鐘校準(zhǔn)電路,因此可以適應(yīng)與變化的環(huán)境,它主要是來補(bǔ)償晶體由于環(huán)境的變化,這篇應(yīng)用筆記主要討論了RTC校準(zhǔn)的基本原理以及解釋了如何利用RTC校準(zhǔn)來提高計(jì)時(shí)精度。
1 RTC校準(zhǔn)基本原理
1.1 晶體的準(zhǔn)確性
在很多計(jì)時(shí)領(lǐng)域,通常都是用“石英精確度”這么一個(gè)術(shù)語來描述的,石英晶體振蕩器提供了一個(gè)遠(yuǎn)遠(yuǎn)優(yōu)于其他類型振蕩器的精確度,但是它并不是完美的,石英晶體振蕩器對溫度十分敏感, Figure 1 展示了一個(gè)32.768HZ晶體的頻率精確度(acc)和溫度(T)以及曲率(K)的關(guān)系,這個(gè)曲線可以用下面的公式給出:
注:曲率K由于不同的晶體而不同,這里是針對 STM3210B-EVAL開發(fā)板來說的,關(guān)于這部分可以參考相關(guān)晶體制造商提供的詳細(xì)信息。
在很多應(yīng)用領(lǐng)域需要一個(gè)高準(zhǔn)確度的時(shí)鐘,但是在實(shí)際中有好多綜合因素限制著精度的提高,通常,典型的方法是通過調(diào)節(jié)晶體的負(fù)載電容來調(diào)節(jié)精度,這一方法,雖然十分有效,但是也存在這一些缺點(diǎn):
1 它需要多加一個(gè)外部器件(可調(diào)電容)。
2 其增大了電流消耗(這在電池供電的場合尤為突出)。
取代這種傳統(tǒng)的模擬的方法,STM32F10xxx系列提供了一個(gè)數(shù)字校準(zhǔn)器,允許用戶用軟件控制的方法進(jìn)行校準(zhǔn),非常的好用!
1.2 具體方法
STM32F10xxx 的RTC模塊是用一個(gè)32768HZ的通常石英晶體驅(qū)動(dòng)的,其實(shí)石英晶體是一種能夠提供非常固定頻率的,但是有以下兩種情況導(dǎo)致了其頻率的不穩(wěn)定:
1 溫度變化; 2 晶體本身的變化。前面講述了一般通常的方法都是用一個(gè)麻煩的可調(diào)電容來補(bǔ)償誤差,這里STM32F10xxx 使用的是一個(gè)周期計(jì)數(shù)器來進(jìn)行校正,這個(gè)數(shù)字校正器通過從220個(gè)時(shí)鐘周期中減去0到127個(gè)周期的方法來校正的,如圖所示:
究竟有多少個(gè)時(shí)鐘節(jié)拍是空白的取決于最近一次向備份寄存區(qū)域RTC校準(zhǔn)寄存器最后七位加載的值, 之所以這個(gè)校準(zhǔn)寄存器放在備份區(qū)域是因?yàn)檫@個(gè)寄存器即使在系統(tǒng)掉電情況下仍然可以通過后備電池進(jìn)行供電(譯者注:如果后背電池也掉電,當(dāng)然這個(gè)寄存器的值也會(huì)丟失的),注意:從上圖中可以看出時(shí)鐘輸出引腳是在校準(zhǔn)之前的頻率,所以這個(gè)值是不會(huì)被校準(zhǔn)所改變的,盡管已經(jīng)進(jìn)行了校準(zhǔn),但是這個(gè)輸出是在校準(zhǔn)之前的頻率。
每一個(gè)校準(zhǔn)節(jié)拍將會(huì)從220個(gè)時(shí)鐘周期中減去一個(gè)周期,這意味著每一個(gè)校準(zhǔn)節(jié)拍將會(huì)有0.954PPM的調(diào)整值(譯者注:Ppm指的是每百萬個(gè)赫茲會(huì)偏移多少赫茲,即真實(shí)頻率值為標(biāo)稱頻率值加上或者減去百萬分之一的XXX,其中XXX指的是晶體廠商提供的頻率穩(wěn)定度),結(jié)果,振蕩器將會(huì)減慢0到121個(gè)ppm,下面的一個(gè)表格顯示了當(dāng)校準(zhǔn)寄存器變化一位是會(huì)變化多少個(gè)ppm或者說30天中會(huì)放慢多少秒:




上面所描述的都是基于一下條件的:
STM32F10xxx RTC的數(shù)字校準(zhǔn)電路只是從晶體時(shí)鐘周期里減去了若干個(gè)周期,而且RTC的預(yù)分頻器假定設(shè)置為32768,所以說時(shí)鐘快于32868HZ的晶體可以被校準(zhǔn),而慢于32768HZ的晶體不能被校準(zhǔn),因此校準(zhǔn)范圍是32772HZ 到32768HZ(譯者注:為什么是32772呢,因?yàn)樽畲蟮男?zhǔn)PPM是121,121的意思是一百萬HZ時(shí)候會(huì)變化(調(diào)整)121HZ,所以32768HZ時(shí)候便可以調(diào)整{32768*(121/10 00000)}即:3.964HZ,將近4HZ,而且這個(gè)校準(zhǔn)只是調(diào)慢的,所以能夠從32772HZ校準(zhǔn)到32768HZ,所以是32772)。
前面我們所講的都是以預(yù)分頻為32768,但是晶體頻率范圍是變化的,所以當(dāng)晶體頻率快于32768HZ是可以被校準(zhǔn)的(可以放慢),但是當(dāng)晶體頻率慢于32768HZ呢?雖然不能被校準(zhǔn),但是并不是無能為力,我們可以把校準(zhǔn)預(yù)分頻器改為32766,這樣只要晶體頻率不低于32766HZ就可以校準(zhǔn)了,這樣總的可以校準(zhǔn)(放慢){32766*(121/10 00000)}即3.96HZ,也將近4HZ,于是調(diào)整范圍就變成了(32766HZ到32770HZ)。
注:在這篇應(yīng)用筆記中,默認(rèn)都是預(yù)分頻位32766。
2 計(jì)算校準(zhǔn)偏差量
對于一個(gè)給定的應(yīng)用,如何確定我們所需要的校準(zhǔn)值呢?這里有一個(gè)很好的方法就是利用到了RTC的時(shí)鐘輸出模式,就是如上圖2所示的器件提供了一個(gè)RTC時(shí)鐘經(jīng)過一個(gè)64分屏器輸出的的信號,這個(gè)信號可以用來精確的測量晶體產(chǎn)生的頻率,如果是準(zhǔn)32768HZ時(shí),輸出正好是512HZ。
   這個(gè)方法我們可以分一下幾步來做:
第一步:使能LSE,并且將LSE作為RTC時(shí)鐘,然后使能RTC;
第二步:使能RTC時(shí)鐘經(jīng)過64分頻輸出,然后在器件的ANTI_TAMP 管腳就可以測得頻率輸出,不過這需要設(shè)置一下
BKP_RTCCR寄存器的CCO位,讓其置一使能輸出。
第三步:算出晶體頻率偏差多少個(gè)ppm,怎么算呢?因?yàn)槲覀兦懊嬲f過,校準(zhǔn)值是32766,因而理論上64分頻后輸出為511.968HZ,所以我們將實(shí)際測量出來的頻率作出與理論值的差值,然后將這個(gè)差值轉(zhuǎn)化為ppm,如何轉(zhuǎn)化成ppm,知道ppm定義之后就可以知道,ppm是每一百萬赫茲所偏差的赫茲數(shù),那現(xiàn)在相對511.96875的偏差值的ppm就可以計(jì)算出來了:△f(HZ)*10 00000.
第四步:到表中去找同計(jì)算結(jié)果最相近的ppm數(shù)所對應(yīng)的校準(zhǔn)值寫入寄存器就可以了!
注意:讓RTC分頻32766,它的分頻寄存器里面要寫32765的,因?yàn)樗?jì)數(shù)到0.
舉個(gè)例子:我們現(xiàn)在從ANTI_TAMP管腳測得頻率為: 511.982HZ,那么算出來同511.968HZ的偏差位0.14HZ,用上面公式換算出來為 27.35 ppm,在表中找到最近的為28ppm,得出的值寫入校準(zhǔn)寄存器,當(dāng)然,這里還有誤差0.65個(gè)ppm,由于表中給出了27個(gè)ppm的話每個(gè)月會(huì)誤差69秒,那么現(xiàn)在27.35大約誤差71秒左右,那么0.65ppm的話每個(gè)月只會(huì)誤差1.7秒左右了,所以說我們將27.35個(gè)ppm誤差降到0.65個(gè)ppm的結(jié)果是把每個(gè)月誤差69秒降到每個(gè)月誤差1.7秒左右了,已經(jīng)非常可觀。
注意:本方法由于是基于時(shí)鐘周期削去的方法校準(zhǔn)的,因此是針對長期進(jìn)行補(bǔ)償,在有限時(shí)間內(nèi)補(bǔ)償未必發(fā)生作用。
3 在溫度變化范圍上校準(zhǔn)
現(xiàn)在我們講在溫度變化方面如何計(jì)算校準(zhǔn)值,這一部分提供了這樣一個(gè)步驟來最大限度的降低在最大溫度變化范圍內(nèi)的頻率變化,這包括調(diào)整溫度曲線以至于讓它在0ppm邊緣有等量的誤差點(diǎn),下圖3演示了如何將溫度變化帶來的頻率誤差減小到最?。?br />這個(gè)校準(zhǔn)公式為: ,式中變量如下:
acc:溫度轉(zhuǎn)變時(shí)的偏差,單位是ppm
K:曲率常量,值為-0.14ppm/℃
T0:溫度轉(zhuǎn)變時(shí)的攝氏度
T:工作環(huán)境的攝氏度
例如:一個(gè)器件在室溫時(shí)體現(xiàn)出來的是27ppm的偏差,但是應(yīng)用在40攝氏度的環(huán)境中,那么用這個(gè)等式就可以計(jì)算出來溫度轉(zhuǎn)變時(shí)的偏差為
因?yàn)榫绕剖?8ppm,那么依然從上表中可以找出校準(zhǔn)值為19。
4 結(jié)論
STM32F10xxx 的RTC數(shù)字時(shí)鐘校準(zhǔn)特性允許用戶以最低微的成本來調(diào)整時(shí)鐘的精度,這個(gè)特性也提供了一種方法和思路:那就是為什么溫度漂移也可以被校正或者說被預(yù)先估計(jì)出來,當(dāng)然啦,這一系列的數(shù)據(jù)和結(jié)論都是建立在分頻為32766(而不是32768)之上的(分頻寄存器里面寫32765).


關(guān)鍵詞: STM32F101xxSTM32F103xxRTC校

評論


技術(shù)專區(qū)

關(guān)閉