看門狗定時器(wdt,watch dog timer)是單片機的一個組成部分,它實際上是一個計數(shù)器,一般給看門狗一個數(shù)字,程序開始運行后看門狗開始倒計數(shù)。如果程序運行正常,過一段時間cpu應(yīng)發(fā)出指令讓看門狗復(fù)位,重新開始倒計數(shù)。如果看門狗減到0就認為程序沒有正常工作,強制整個系統(tǒng)復(fù)位。
為了給初學(xué)者一個系統(tǒng)的概念,先介紹一下看門狗的基本概念。當(dāng)嵌入式系統(tǒng)運行時受到外部干擾或者系統(tǒng)錯誤,程序有時會出現(xiàn)“跑飛”,導(dǎo)致整個系統(tǒng)癱瘓。為了防止這一現(xiàn)象的發(fā)生,在對系統(tǒng)穩(wěn)定性要求較高的場合往往要加入看門狗(watchdog)電路。看門狗的作用就是當(dāng)系統(tǒng)“跑飛”而進入死循環(huán)時,恢復(fù)系統(tǒng)的運行。
看門狗定時器的功能作用
看門狗定時器(wdt,watch dog timer)是單片機的一個組成部分,在單片機程序的調(diào)試和運行中都有著重要的意義。它的主要功能是在發(fā)生軟件故障時,通過使器件復(fù)位(如果軟件未將器件清零)將單片機復(fù)位。也可以用于將器件從休眠或空閑??撮T狗定時器對微控制器提供了獨立的保護系統(tǒng),當(dāng)系統(tǒng)出現(xiàn)故障時,在可選的超時周期之后,看門狗將以reset信號作出響應(yīng),像x25045就可選超時周期為1.4秒、600毫秒、200毫秒三種。當(dāng)你的程序死機時,x25045就會使單片機復(fù)位。
大多數(shù)看門狗定時器ic產(chǎn)生一個單一的,有限的輸出脈沖持續(xù)時間當(dāng)看門狗超時。這適用于觸發(fā)復(fù)位或中斷微處理器,但有些應(yīng)用需要輸出(故障指示燈)的鎖存器。
考慮到安全性問題,汽車電子系統(tǒng)需要監(jiān)控電路監(jiān)測故障容限或安全性。看門狗定時器可理想滿足這類需求,通過對微控制器正常工作條件下產(chǎn)生的周期脈沖進行檢測,偵測電路或?c的失效狀態(tài),一旦發(fā)生故障可立即切換到備份/冗余系統(tǒng)。式喚醒。
看門狗工作原理
1. 其基本原理為:設(shè)本系統(tǒng)程序完整運行一周期的時間是tp,看門狗的定時周期為ti,ti》tp,在程序運行一周期后就修改定時器的計數(shù)值,只要程序正常運行,定時器就不會溢出,若由于干擾等原因使系統(tǒng)不能在tp 時刻修改定時器的計數(shù)值,定時器將在ti 時刻溢出,引發(fā)系統(tǒng)復(fù)位,使系統(tǒng)得以重新運行,從而起到監(jiān)控作用。
2. 在一個完整的嵌入式系統(tǒng)或單片機小系統(tǒng)中通常都有看門狗定時器,且一般集成在處理器芯片中,看門狗實際上就是一個定時器,只是它在期滿后將自動引起系統(tǒng)復(fù)位。
使用時,wdt將遞增,直到溢出,或稱“超時”。除非處于休眠或空閑模式,wdt 超時會強制器件復(fù)位。為避免wdt超時復(fù)位,用戶必須定期用pwrsav 或clrwdt 指令將看門狗定時器清零。如果wdt 在休眠或空閑模式下超時,器件將喚醒并從pwrsav 指令執(zhí)行處繼續(xù)執(zhí)行代碼。在上述兩種情況下,wdto 位(rcon《4》)都會置1,表示該器件復(fù)位或喚醒事件是由于wdt超時引起的。如果wdt 將cpu從休眠或空閑模式喚醒,“休眠”狀態(tài)位(rcon《3》)或“空閑”狀態(tài)位(rcon《2》)也會置1,表示器件之前處于省電模式。
在正常操作期間,一次wdt超時溢出將產(chǎn)生一次器件復(fù)位。當(dāng)器件處于休眠狀態(tài)時,一次wdt超時溢出將喚醒器件,使其繼續(xù)正常操作(即稱作wdt 喚醒)。對wdte 設(shè)置位清零可以永久性地關(guān)閉wdt。
后分頻器分配完全是由軟件控制,即它可在程序執(zhí)行期間隨時更改。
為避免發(fā)生不可預(yù)測的器件復(fù)位,當(dāng)從timer0 預(yù)分頻器的分配改為wdt 后分頻器的分配時,必須執(zhí)行下列指令序列。即使wdt 被禁止,也要執(zhí)行這個指令序列。
由看門狗wdt引發(fā)系統(tǒng)復(fù)位的電路結(jié)構(gòu)等效圖如圖所示。從該圖中可以看出,只有當(dāng)狀態(tài)信號sleep=1,即單片機處于非睡眠狀態(tài)時,看門狗超時溢出才會引發(fā)單片機的復(fù)位操作。而在單片機處于睡眠狀態(tài),即狀態(tài)信號sleep=0時,看門狗超時溢出會喚醒單片機
看門狗就是一個用獨立時鐘源提供的脈沖進行累加計數(shù)的計數(shù)器,無需任何外部元件。獨立的rc時鐘信號源是指rc振蕩器與osc1(ulkiin)引腳的外接rc振蕩器,osc1和osc2外接晶體振蕩器/陶瓷諧振器構(gòu)成的單片機系統(tǒng)時鐘是分離的。這就意味著,即使單片機進入系統(tǒng)時鐘停振的睡眠狀態(tài),監(jiān)視定時器wdt仍然能夠運行。
在單片機執(zhí)行程序期間,一次看門狗wdt超時溢出,將使單片機產(chǎn)生復(fù)位操作(稱為wdt復(fù)位)。如果單片機處于睡眠狀態(tài),一次看門狗wdt超時溢出將使單片機被喚醒,恢復(fù)正常運行狀態(tài),并且繼續(xù)執(zhí)行在進入睡眠之前被擱置的程序(稱為wdt喚醒)。
每次看門狗超時溢出,都會使得狀態(tài)寄存器status中的了t0位被清0,以記錄曾經(jīng)發(fā)生的這次看門狗溢出事件,供作程序查詢判斷用。
即當(dāng)wdte=0時,看門狗wdt將被永久禁止;當(dāng)wdte=1時,看門狗wdt將被永久啟用。就是說,只要wdte被定義成1,以后在用戶程序中將再也無法禁止看門狗的運行。
若想不讓看門狗wdt發(fā)生超時溢出,在用戶程序中只能不停地、周期性地將看門狗計時器清0,使它不會因計數(shù)到超過最大值而溢出。
看門狗計時器的計時周期取決于獨立rc振蕩源的頻率和計時器的寬度,同時在一定程度上受到工作電壓、環(huán)蟑溫度、制作工藝等因素的影響。
另外,看門狗的超時周期還可以借助于分頻器以及分頻器的分頻比,在一定范圍內(nèi)改變和延長。分頻器是否配置給看門狗使用,可以通過用戶程序定義選項寄存器option keg的psa位進行設(shè)置。
看門狗設(shè)計原理
在看門狗( watchdog timer),是一個定時器電路, 一般有一個輸入,叫喂狗(kicking the dog or service the dog),一個輸出到mcu的rst端,mcu正常工作的時候,每隔一段時間輸出一個信號到喂狗端,給wdt清零,如果超過規(guī)定的時間不喂狗,(一般在程序跑飛時),wdt 定時超過,就會給出一個復(fù)位信號到mcu,使mcu復(fù)位。 防止mcu死機。 看門狗的作用就是防止程序發(fā)生死循環(huán),或者說程序跑飛。 出于對單片機運行狀態(tài)進行實時監(jiān)測的考慮,產(chǎn)生了一種專門用于監(jiān)測單片機程序運行狀態(tài)的芯片,俗稱“看門狗”(watchdog))集成電路(max*9)的基礎(chǔ)上,該電路提供了響應(yīng)的輸入脈沖流損失鎖存故障指示。該電路可以監(jiān)控風(fēng)扇(上風(fēng)扇的轉(zhuǎn)速輸出計算),振蕩電路,或一個微處理器軟件執(zhí)行。
一個簡單的電路提供了響應(yīng)的輸入脈沖流損失鎖存故障指示。在μp-supervisor/watchdog集成電路(max*9)的基礎(chǔ)上,該電路用于監(jiān)測風(fēng)扇(在風(fēng)扇的轉(zhuǎn)速輸出計算),振蕩電路,或一個合適的微處理器軟件執(zhí)行。
在上電期間,低電平有效復(fù)位仍然很低,直到vcc的穩(wěn)定和復(fù)位超時時間到期。電容器c通過r,直到fet的柵極電壓達到閾值(電壓vth),它開啟了場效應(yīng)管,使鎖存能力。為了防止誤觸發(fā),你應(yīng)該設(shè)置rc延遲的時間遠遠超過了復(fù)位超時。
wdi輸入(引腳6)必須按切換電容器cswt設(shè)立最低速率。如果這沒有發(fā)生,低電平有效復(fù)位變低,在led指示燈,在連接和低拉復(fù)位,從而鎖定低電平復(fù)位。該電路仍然有效,直到你循環(huán)vcc或推開關(guān)在此條件。要么關(guān)閉fet的行動,并允許重置變高。
為了監(jiān)測風(fēng)扇開漏測速信號,從世界發(fā)展指標(biāo)10kω的連接到vcc(引腳8)上拉電阻器。由于風(fēng)扇需要一些時間來旋轉(zhuǎn)起來,看門狗電路需要為一個短暫的延遲時間間隔停用。您可以通過將本延遲電容(c2)從對地復(fù)位。請注意,此延遲必須小于上述rc延遲,或低電平有效復(fù)位鎖存過早會較短。
對于一個風(fēng)扇監(jiān)控,對cswt值設(shè)置最大轉(zhuǎn)速脈沖周期根據(jù)公式5.06×106 × cswt,其中在幾秒鐘內(nèi)cswt。如果轉(zhuǎn)速低于這個閾值時,低電平有效復(fù)位輸出低和插銷。