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