mpc5774时钟监控寄存器_单片机如何才能不死机之内外部时钟
1. 前言
時鐘是嵌入式系統(tǒng)中非常重要,但又常常被忽視的地方。它的成本只占整個系統(tǒng)的一個零頭,但由于時鐘的停振,或其它異常最終導致廠商付出高昂代價的案例卻并不少見。下面我們看一下在時鐘設計中應該注意的一些問題。
2. 寄存器配置
現(xiàn)在單片機一般會支持四種時鐘工作模式:內(nèi)部低頻時鐘,內(nèi)部高頻時鐘,外部低頻時鐘,外部高頻時鐘。低頻時鐘一般可經(jīng)由單片機內(nèi)部的鎖頻環(huán)倍頻到高頻時鐘。(為啥這么折騰,不直接用高頻時鐘呢?a. 用的最多的32.768 kHz 低頻時鐘,經(jīng)過15次分頻后正好是1 Hz,可以準確的計時。b. 低頻時鐘功耗更低。c. 提高EMC性能。在低頻時鐘被瞬間干擾掉幾個振蕩周期的情況下,鎖頻環(huán) (FLL) 仍能保證輸出穩(wěn)定,程序運行不受影響。)
一般單片機上電后默認工作在內(nèi)部時鐘,需要通過寄存器配置切換到其它時鐘模式。這里需要注意,需要通過查詢監(jiān)控寄存器狀態(tài),來確認時鐘工作模式。在實際項目中確實發(fā)生過電路板上加了外部晶振,但由于寄存器配置錯誤,系統(tǒng)仍工作在內(nèi)部時鐘的情況。如果配置中有不同的增益模式 (High Gain, Low Gain, or High Drive, Low Drive),要注意在不同模式下,單片機內(nèi)部時鐘電路對外部時鐘具有不同的驅(qū)動能力。以STM32F030R8為例,在LSE 的Low Drive模式下,內(nèi)部時鐘電路的跨導為5uA/V。在LSE 的High Drive模式下,內(nèi)部時鐘電路的跨導為25uA/V。當然高的驅(qū)動能力對應著更高些的功耗。如果對功耗沒有太多要求,又需要穩(wěn)定的時鐘振蕩,可以選擇High Gain, 或 High Drive 模式。
3. 時鐘精度
內(nèi)部時鐘一般由阻容振蕩電路構(gòu)成,精度相對要差一些。一般廠家出廠標定 (Trim, or Calibration) 后,全溫度范圍內(nèi)能達到 3 - 5% 的精度。如果我們基于內(nèi)部時鐘源去做串口通信等應用,要注意不能使用過高波特率,而且要考慮如果時鐘在精度變得最差的情況下仍能正常工作,而不是僅僅在常溫下進行一下簡單的測試。如果實際工作電壓與手冊中的標定電壓不同,還需要在燒寫代碼時重新做時鐘的標定。
外部時鐘以最常用的晶體振蕩器 (Crystal Quartz) 為例。晶體并不是精確的振蕩在標稱頻率上。如果需要高精度的計時,需要考慮其精度受以下幾方面影響:
a. 標稱公差 (Frequency Tolerance)。
b. 負載電容 (Load Capacitance)。如下圖所示的例子為一個負載電容為12.5pF的晶體,當負載電容變化時其振蕩頻率偏差的隨動特性:
c. 溫度漂移。下圖是一個比較典型的音叉型晶體振蕩頻率偏差隨溫度變化的曲線:
它可以用拋物線方程描述為:
Fdev = B( T - T0 ) + K
Fdev 為晶體在溫度 T 的頻率偏差 ?f/f0,單位為ppm,即百萬分之一。
B 為拋物線系數(shù),跟選取的晶體有關,上圖中的B為 -3.5×(10)^(-8)/℃2,即-0.035ppm/℃2 。
T0 是曲線的轉(zhuǎn)折溫度點,一般是 25 ±5 ℃ 。
K 為晶體在轉(zhuǎn)折溫度點的頻率偏差。
可以看到環(huán)境溫度的變化對晶體的振蕩頻率有較大的影響。如果需要高精度,就需要考慮溫度補償。我們千萬不要小看幾個ppm的影響。要知道如果有 5ppm 的偏差,那么一天會積累 60*60*24*5ppm = 0.432秒 的誤差。插句題外話:僅僅在智能電表領域,由于我們沒有性價比高的高精度時鐘芯片,日系廠商所獲得的壟斷利潤還是很驚人的。國貨當自強!
4. 可靠起振
下圖是一個典型的單片機使用外部晶體振蕩器的電路。
Rf: Feedback Resistor,反饋電阻。其作用是使反相放大器工作在線性放大工作區(qū)。
Rs:Series Resistor, 串行電阻。其作用是限制流過晶體的電流,以免損壞晶體。
CL1, CL2: 負載電容。
有的單片機內(nèi)部集成了其中一個,或多個元件。
可靠起振需要考慮以下幾個方面:
a. 反饋電阻 (Rf),選用單片機手冊中的推薦值即可。
b. 負載電容 (CL1, CL2),應該滿足公式
CL – Cs = CL1 x CL2 / (CL1 + CL2)
CL (Load Capacitance): 晶振廠家給出的負載電容值。
Cs (Stray Capacitance): 為晶振兩引腳之間的寄生電容(分路電容,shunt capacitance,晶體手冊中 會給出),加上PCB雜散電容。
CL1, CL2:晶振兩腳對地電容。其電容值需要我們根據(jù)前兩者計算得出。
此公式可理解為:
晶振兩引腳對地電容并聯(lián) + 晶振引腳間寄生電容 + PCB雜散電容 = 晶振負載電容
c. 增益裕量 (Gain Margin)
Gain Margin = gm / gmcrit
gm 為反相放大器的跨導。一般由單片機廠家給出。
gmcrit 由晶體參數(shù)決定。
gmcrit = 4 x ESR x (2πF)2 x (C0 + CL)2
ESR:Equivalent Series Resistance.
C0 :Shun Capacitance.
CL :Load Capacitance.
保證可靠起振需要Gain Margin > 5
d. 激勵功率 (Drive Level)
晶振手冊會給出最大值。我們要保證激勵功率不要超出此最大值。
Drive Level = ESR x I2
I: 為流經(jīng)晶振的電流??梢杂脦щ娏鞲袘獪y量探頭的示波器直接測量晶振管腳得出。也可以通過通過測量反相放大器輸入端引腳電壓,然后計算間接得出 (參考附錄應用手冊)。
e. 看門狗 (Watchdog)
單片機上電一般會工作在內(nèi)部時鐘,在上電過程中干擾會比較強。使能的看門狗能在時鐘沒有起振的情況下可以強制系統(tǒng)復位,時鐘再次起振。需要強調(diào)的是要注意檢查代碼中(包括廠家提供的啟動代碼)有沒有先停掉,之后再打開關門狗的地方。
在實際應用中,有的官方代碼也會犯這種錯誤:為了簡化啟動代碼,先把看門狗關掉,初始化完成后再打開。我們要知道這樣做是實驗室風格的,是有很大隱患的。在關掉的瞬間如果正好碰到強干擾,會導致單片機直接掛掉。這種問題很難發(fā)現(xiàn),但真的會發(fā)生!
TopSemic 讓芯片使用更簡單
總結(jié)
以上是生活随笔為你收集整理的mpc5774时钟监控寄存器_单片机如何才能不死机之内外部时钟的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python程序练习题第三章_pytho
- 下一篇: 花呗分期会占用额度吗