我們在設計闆子的時候,往往注意那些看起來比較核心,比較關鍵的部分, 對于那些邊邊角角的地方可能不夠注意,但是這些地方往往帶來災難性的後果。
比如說電源的上電時序,我們需要注意系統電源的上升時間,很多人不理解, 上電就上電啊,為啥一定規定上升時間? 告訴你,這裡面處理不好,問題可就大了。
下面舉個例子:
很多簡單的基于MCU的産品采用下面的方式來做Reset,這樣做行不行呢? 當然可以, 為什麼呢? 因為那麼多産品都這麼做了,也沒有聽說過有什麼問題,當然OK啦。
今天我們就來用最簡單的方式來描述這個究竟會不會有問題。
首先我們來看理想情況下的上電複位是什麼情況:
當VCC到達MCU的工作電壓阈值的時候,MCU開始工作,複位信号20ms以後拉高, Perfect !問題是現實和理想總是有距離的,我們先來看看采用上圖RC充電的複位方式會得到什麼樣的波形:
我們可以看到即便當VCC上電完美的時候,我們也需要确保Reset充電充到Vih的時候,時間要大于20ms,可是現實真的如此嗎?
可惜理想和現實還有一點距離,請看上面這張圖,從VCC上電到達工作電壓阈值,到Reset慢慢充電到達Vih,這段時間就是我們需要的複位時間,可是這種情況其實很脆弱,假設VCC上升沿時有台階或者倒鈎怎麼辦?哈哈,第一個問題出現了:
1. 複位時間變短
我們可以看到,VCC上電時,第一次到達阈值電壓後, 芯片已經開始工作,也就是開始複位了,可是偏偏電源不争氣, 又倒回來回到阈值以下,所以複位的時間隻能從VCC第二次上升到阈值電壓開始算, 那麼可以明顯看到複位時間變短了,因為每一個芯片對複位的時間是有要求的, 如果複位時間不夠,帶來的後果是每次上電不一樣, 有時候起來,有時候起不來,高低溫測試時情況可能會更糟糕。
2. 快速熱插拔
當用戶快速拔出然後插入電源時, VCC上會有一個跌落, 但是這個跌落由于阻容RC的平滑作用, 在Reset上并沒有得到足夠深的跌落,由于VCC的跌落把MCU内部已經搞亂了,但是複位信号卻沒有起作用, 芯片會産生lock out或者latch up。
在産品的使用過程中,很常見的現象是,很多人會快速插拔一下電源,結果導緻的現象是起不來了,隻有再次拔出電源,然後稍等一會兒再插入電源才行。
這種快速熱插拔導緻的問題,在我原來C公司的ASR***系列路由器上導緻I2C expander lockout,此問題出現在已經銷售出去的産品上, 而且軟件解決不了,所以引發的後果是非常嚴重的,至于為什麼EVT沒有測試出來,這個可以理解的,因為隻有樣本多了,才會出現林子大了什麼鳥都有的故事。
3. 電源上出現Glitch
這種情況在系統工作過程中,如果受到外界的幹擾或者電源太爛,VCC有時候會出現Glitch,此時如果有專門的POR芯片來trigger Reset,那當然沒問題了,可惜我們使用的是阻容RC的Reset方式。
由于電源上的Glitch時間短,經過RC積分 後的Reset信号跌落變得更加小,小到不足以觸發複位(這一點和上面的快速熱插拔原理相同),所以很明顯系統會死機,而且死機了就隻能插拔電源,并且不能快速插拔才能恢複正常。
為了證明本人沒有胡說八道,我把大牛Howard Johnson的一段話摘錄一下,請讀者仔細品味。
Power interruptions drive power-on-reset circuits crazy. Consider what a power dropout does to the circuit in Figure 1. Imagine that the RC time constant in this figure is 1 sec. Let VCC come up and stabilize at full voltage for perhaps 10 sec.
Next, apply an ac power interruption just long enough to drop VCC to 0V for about 100 msec. If a processor is involved, the dropout is long enough to make scrambled eggs of the processor's internal state machines but not long enough to discharge the RC circuit. If the RC circuit doesn't discharge, ~RESET doesn't activate, and the processor spins out of control, powered on, but lost in space.
4. 上電順序被破壞
這裡有人想不通了,我上電慢一點和上電順序有啥關系啊, 請聽我圖文并茂的說明如下:
MCU的上電時序要求如下:5V -> 1.8V -> 3.3V -> Reset.
當在5V上面出現下面兩種情況時,就會産生問題(事實USB 5V供電時,有些産品的電源質量很差,我們無法預料5V輸出的情況)。
1) 上電時5V有台階或者回溝
2) 運行過程中5V有Dip或者Glitch
我們看到由于5V電源的快速跌落, 1.8V由于負載重電流大,很快電就放光了,跌落到0V, 而且3.3V由于輕載,來不及放電,跌落很小, 所以上電順序變成了 3.3V = Reset -> 5V -> 1.8V, 帶來的問題有兩個:
1) 重新上電後, 由于3.3V一直在,所以變成3.3V先上電了,這個和第一次上電的1.8V先上電的要求反過來了,後果很簡單,芯片很容易latch up, 起不來,或者燒毀
2) 由于采用的3.3V RC 複位,那麼此次由于3.3V來不及放電, Reset信号也根本沒有反應,你想想CPU内核的電源都掉過了,系統居然沒有複位信号,這也太說不過去了吧,不隻芯片起不來,而且非常的危險。
總結一下,當我們在簡單的MCU系統采用RC的方式産生Reset時,要評估好風險,對于電源輸出質量很好, 并且不會出現客戶經常熱插拔的産品是OK的。反之,如果是一些客戶經常即插即用的周邊設備,就要注意小心選擇你的R和C的值,在滿足複位時間的基礎上,盡量短,越長越不安全, 另外注意測試你使用電源電路确保不要出現台階,倒鈎,還有太長的上升時間。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!