今天我們來聊聊正經的“狗”,屬于單片機的專屬Dog
從字面的意思來看,就是負責看門的,那在單片機的系統中是如何實現“看門”的本領的?
看門狗,簡寫WDT,屬于定時器的一種,當出現計時溢出的時候,就會觸發系統復位,使程序重新開始執行,是一種保護機制。當運行的系統遇到強磁場,導致系統跑飛(正常系統中會定時喂狗)而不能正常喂狗時,看門狗就能強制復位整個系統,使程序重頭執行。這樣就能避免系統停滯帶來的風險和事故。特別是在工業領域,非常常用。
那如何讓這個“定時器”不溢出呢?
正常狀態下,我們使用的時候是不允許看門狗溢出的,不然系統一直復位,還怎么運行程序呢?
所以我們要定時定點的給對應的寄存器“置一次值”,就是我們常說的“喂狗”。
現實中我們養的寵物狗,如果長時間不喂,它會不會一直叫,或者一直以各種方式騷擾你,讓你無法正常工作,所以要想避免這種情況出現,就得按時“喂狗”。
單片機中的“喂狗”和實現中的“喂狗”是不一樣的。
單片機中的“看門狗”自然也和實現中的狗沒有任何的關系。一個是物理上的,一個是生物上的。
但是我們完全可以借助現實中的狗來理解單片機中看門狗的概念
從STM32的手冊中我們可以看到,STM32中簡稱為IWDG,中文名:獨立看門狗。(這里看不懂的可以直接跳過)
當IWDG看門狗模塊監測到計數溢出時,IWDG reset信號輸出低,經過與邏輯電路觸發脈沖發生器,產生一個正向窄脈沖以控制MOSFET在該脈沖寬度期間導通,并經由濾波電路產生系統復位事件信號,進而觸發STM32復位。
至于軟件上如何配置相應的寄存器來啟動“看門狗”的本文就不展開講解了,今天核桃主要想和小伙伴們分享一下外置的“硬件看門狗”是如何工作的。
我們先看圖1所示:
圖1
先理清SP706各個管腳的作用
MR 手動復位輸入端:也就是當MR電壓低于0.6V時,RESET輸出有效復位信號。
PFI 門限檢測器輸入端:當電壓跌落低于1.25V時,PFO輸出低電平。
WDI 看門狗輸入端: 也就是常說的喂狗,當WDI維持高電平或者低電平超過1.6S后,看門狗定時器就會溢出,WDO直接輸出低電平。只有WDI的電平在1.6S有跳變,看門狗的定時器才會被清零。(就是說1.6s內得給你家狗狗吃的,不然它會叫)
RESET 復位輸出管腳:受VCC和MR控制。
WDO 看門狗輸出端:當計時溢出和VCC低于復位的門限時,WDO輸出低電平,正常情況下輸出高電平。
工作原理:
PFI和PFO我們可以暫時不管,都是用來監測電壓的。
WDI 我們知道是看門狗的輸入管腳,也就是說芯片一上電工作,定時器就開始計時,如果超過1.6S,WDI管腳的電平沒有任何跳變的話,定時器就會溢出,WDO輸出低電平,由于WDO是直接連接到MR的,所以MR也會同時被拉低0.6V以上,此時RESET管腳也會輸出復位信號,使整個單片機系統復位。SW1就是按鍵,實現手動復位的。
那圖1這個電路就沒有任何問題了嗎?
答:圖1這個電路是有缺陷的!
如果單片機是新的,沒有任何程序的,這個時候你需要往單片機里面燒錄程序的,能保證1.6S內燒錄完程序嗎?顯然不太現實的,所以這個時候就無法燒錄程序了,因為單片機一直在復位,是無法正常燒錄程序的。
那該怎么辦呢?
其實很簡單,只需要WDO和MR之間的連接是人為可控的就行。具體實現方法如下圖2圖3所示:
圖2
當在需要燒錄程序時,通過跳線帽把MR和WDO斷開即可。燒錄完成后再把跳線帽插回去即可。
或者采用圖3的這種方式,都是沒有問題的。
圖3
圖3這個電路大伙可以自行分析一下,原理基本一樣!
那假如整個系統真正跑起來需要的時間遠遠超過1.6S了呢?看門狗電路又該如何設計呢?
好了,今天就先寫到這吧!