1. 前言
時鐘是嵌入式系統中很是重要,但又經常被忽視的地方。它的成本只佔整個系統的一個零頭,但因爲時鐘的停振,或其它異常最終致使廠商付出高昂代價的案例卻並很多見。下面咱們看一下在時鐘設計中應該注意的一些問題。web
2. 寄存器配置
如今單片機通常會支持四種時鐘工做模式:內部低頻時鐘,內部高頻時鐘,外部低頻時鐘,外部高頻時鐘。低頻時鐘通常可經由單片機內部的鎖頻環倍頻到高頻時鐘。(爲啥這麼折騰,不直接用高頻時鐘呢?a. 用的最多的32.768 kHz 低頻時鐘,通過15次分頻後正好是1 Hz,能夠準確的計時。b. 低頻時鐘功耗更低。c. 提升EMC性能。在低頻時鐘被瞬間干擾掉幾個振盪週期的狀況下,鎖頻環 (FLL) 仍能保證輸出穩定,程序運行不受影響。)微信
通常單片機上電後默認工做在內部時鐘,須要經過寄存器配置切換到其它時鐘模式。這裏須要注意,須要經過查詢監控寄存器狀態,來確認時鐘工做模式。在實際項目中確實發生過電路板上加了外部晶振,但因爲寄存器配置錯誤,系統仍工做在內部時鐘的狀況。若是配置中有不一樣的增益模式 (High Gain, Low Gain, or High Drive, Low Drive),要注意在不一樣模式下,單片機內部時鐘電路對外部時鐘具備不一樣的驅動能力。以STM32F030R8爲例,在LSE 的Low Drive模式下,內部時鐘電路的跨導爲5uA/V。在LSE 的High Drive模式下,內部時鐘電路的跨導爲25uA/V。固然高的驅動能力對應着更高些的功耗。若是對功耗沒有太多要求,又須要穩定的時鐘振盪,能夠選擇High Gain, 或 High Drive 模式。性能
3. 時鐘精度
內部時鐘通常由阻容振盪電路構成,精度相對要差一些。通常廠家出廠標定 (Trim, or Calibration) 後,全溫度範圍內能達到 3 - 5% 的精度。若是咱們基於內部時鐘源去作串口通訊等應用,要注意不能使用太高波特率,並且要考慮若是時鐘在精度變得最差的狀況下仍能正常工做,而不是僅僅在常溫下進行一下簡單的測試。若是實際工做電壓與手冊中的標定電壓不一樣,還須要在燒寫代碼時從新作時鐘的標定。測試
外部時鐘以最經常使用的晶體振盪器 (Crystal Quartz) 爲例。晶體並非精確的振盪在標稱頻率上。若是須要高精度的計時,須要考慮其精度受如下幾方面影響:ui
a. 標稱公差 (Frequency Tolerance)。spa
b. 負載電容 (Load Capacitance)。以下圖所示的例子爲一個負載電容爲12.5pF的晶體,當負載電容變化時其振盪頻率誤差的隨動特性:.net
c. 溫度漂移。下圖是一個比較典型的音叉型晶體振盪頻率誤差隨溫度變化的曲線:設計
它能夠用拋物線方程描述爲:orm
Fdev = B( T - T0 ) + Kblog
Fdev 爲晶體在溫度 T 的頻率誤差 ∆f/f0,單位爲ppm,即百萬分之一。
B 爲拋物線係數,跟選取的晶體有關,上圖中的B爲 -3.5×(10)^(-8)/℃²,即-0.035ppm/℃² 。
T0 是曲線的轉折溫度點,通常是 25 ±5 ℃ 。
K 爲晶體在轉折溫度點的頻率誤差。
能夠看到環境溫度的變化對晶體的振盪頻率有較大的影響。若是須要高精度,就須要考慮溫度補償。咱們千萬不要小看幾個ppm的影響。要知道若是有 5ppm 的誤差,那麼一天會積累 60*60*24*5ppm = 0.432秒 的偏差。插句題外話:僅僅在智能電錶領域,因爲咱們沒有性價比高的高精度時鐘芯片,日系廠商所得到的壟斷利潤仍是很驚人的。國貨當自強!
4. 可靠起振
下圖是一個典型的單片機使用外部晶體振盪器的電路。
Rf: Feedback Resistor,反饋電阻。其做用是使反相放大器工做在線性放大工做區。
Rs:Series Resistor, 串行電阻。其做用是限制流過晶體的電流,以避免損壞晶體。
CL1, CL2: 負載電容。
有的單片機內部集成了其中一個,或多個元件。
可靠起振須要考慮如下幾個方面:
a. 反饋電阻 (Rf),選用單片機手冊中的推薦值便可。
b. 負載電容 (CL1, CL2),應該知足公式
CL – Cs = CL1 x CL2 / (CL1 + CL2)
CL (Load Capacitance): 晶振廠家給出的負載電容值。
Cs (Stray Capacitance): 爲晶振兩引腳之間的寄生電容(分路電容,shunt capacitance,晶體手冊中 會給出),加上PCB雜散電容。
CL1, CL2:晶振兩腳對地電容。其電容值須要咱們根據前二者計算得出。
此公式可理解爲:
晶振兩引腳對地電容並聯 + 晶振引腳間寄生電容 + PCB雜散電容 = 晶振負載電容
c. 增益裕量 (Gain Margin)
Gain Margin = gm / gmcrit
gm 爲反相放大器的跨導。通常由單片機廠家給出。
gmcrit 由晶體參數決定。
gmcrit = 4 x ESR x (2πF)² x (C0 + CL)²
ESR:Equivalent Series Resistance.
C0 :Shun Capacitance.
CL :Load Capacitance.
保證可靠起振須要Gain Margin > 5
d. 激勵功率 (Drive Level)
晶振手冊會給出最大值。咱們要保證激勵功率不要超出此最大值。
Drive Level = ESR x I²
I: 爲流經晶振的電流。能夠用帶電流感應測量探頭的示波器直接測量晶振管腳得出。也能夠經過經過測量反相放大器輸入端引腳電壓,而後計算間接得出 (參考附錄應用手冊)。
e. 看門狗 (Watchdog)
單片機上電通常會工做在內部時鐘,在上電過程當中干擾會比較強。使能的看門狗能在時鐘沒有起振的狀況下能夠強制系統復位,時鐘再次起振。須要強調的是要注意檢查代碼中(包括廠家提供的啓動代碼)有沒有先停掉,以後再打開關門狗的地方。
在實際應用中,有的官方代碼也會犯這種錯誤:爲了簡化啓動代碼,先把看門狗關掉,初始化完成後再打開。咱們要知道這樣作是實驗室風格的,是有很大隱患的。在關掉的瞬間若是正好碰到強幹擾,會致使單片機直接掛掉。這種問題很難發現,但真的會發生!
歡迎掃碼關注咱們:
本文分享自微信公衆號 - TopSemic嵌入式(TopSemic)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。