1、用CD4060制作看門狗報警電路
看門狗定時器(WDT,WatchDogTimer)是單片機的一個組成部分,它實際上是一個計數器,一般給看門狗一個大數,程序開始運行后看門狗開始倒計數。如果程序運行正常,過一段時間CPU應發出指令讓看門狗,重新開始倒計數。如果看門狗減到0就認為程序沒有正常工作,強制整個系統復位。
原理圖:
CD4060芯片特性
1)電壓范圍寬,應該可以工作在3V~15V,輸入阻抗高,驅動能力差外,跟74系列的功能基本沒有區別;
2)輸入時,1/2工作電壓以下為0,1/2工作電壓以上為1;
3)輸出時,1=工作電壓;0=0V;
4)驅動能力奇差,在設計時最多只能帶1個TTL負載;
5)如果加上拉電阻的話,至少要100K電阻;
6)唯一現在使用的可能就是計數器,CD4060的計數器可以到14級二進制串行計數。
看門狗電路由14位二進制計數器CD4060和三極管VT1、VT2等組成。
Vout接單片機AT89C51的引腳輸出口P1.7,由單片機的CPU向看門狗電路發送喂狗信號——正脈沖,在兩個正脈沖間隔內,P1.7保持為低電平(此功能要結合軟件才能實現,相應的軟件設計在下面介紹)。我們知道,單片機AT89C51的I/O口帶灌電流負載的能力比較大,每個引腳低電平時的吸入電流為20mA,帶拉電流負載的能力卻很小,實測情況是,每個引腳高電平時的輸出電流僅25μA,現在P1.7口被設計成帶拉電流負載的方式,為了提高P1.7口帶拉電流負載的能力,所以,電路中設置了上拉電阻R3。
14位二進制計數器CD4060的計數脈沖由其內部振蕩器和外接阻容元件R1、R2、C1組成的電路產生,振蕩周期為
T0SC=2.2×R1×C1=0.22ms
振蕩器產生的計數脈沖(矩形波)可以直接引出,同時還可以從CD4060的10個輸出端Q4~Q10和Q12~Q14得到不同分頻系數的方波輸出,各方波輸出信號的周期如表1所示。這樣,如果CD4060得不到CPU通過P1.7口發送來的喂狗信號——正脈沖,則CD4060的輸出端Q14在1.8S內將產生一個完整周期的方波信號,而且低電平在前,高電平在后,其高電平經三極管VT1、VT2處理后形成單片機AT89C51的復位信號,使單片機AT89C51復位。
由此可見,單片機AT89C51正常工作時,只要在0.9S內從P1.7口送出一個正脈沖,便可及時清零看門狗,輸出端Q14就不會產生定時溢出信號,從而使看門狗電路對單片機系統不起作用。并且,從CD4060的10個輸出端Q4~Q10和Q12~Q14可以得到不同周期的方波信號,經三極管VT1、VT2處理后形成單片機系統的復位信號,可以適應不同用戶應用程序,從而該硬件看門狗電路可以適應不同的單片機應用系統。
對MCS-51系列的單片機而言,它所需要的復位信號是高電平寬度大于2個機器周期的正脈沖,例如,單片機的時鐘脈沖頻率為12MHz時,則所需要的復位信號高電平寬度為2μs以上就可以了,而由上面的分析可知,CD4060的Q14輸出的是高電平寬度為0.9s的方波,如果讓它直接作為單片機的復位信號,則單片機的復位時間勢必在0.9s以上,這樣盡管可以使程序跑飛的單片機復位,但是顯然沒有做到盡快地引導跑飛的程序到正確的軌道來,如果這樣做的話,對于某些單片機應用系統而言可能帶來非常嚴重的后果。
圖1中的三極管VT1、VT2及其周圍阻容元件構成波形轉換電路,把較寬的正脈沖變換為較窄的正脈沖,從而較好地解決了上述的問題。三極管VT1、VT2構成的2級直接耦合放大器作為緩沖器使用,它是CD4060的輸出端Q14的灌電流負載,C2、R8是微分電路。
經分析后不難看出,電路中的R7、R8、C2還具有單片機上電復位的功能。
2、上電復位與看門狗信號復位的不同處理過程
由于程序跑飛很可能會造成一些隨機破壞事件,對某些系統而言,希望盡可能從斷點處恢復運行,因此,有必要妥善解決跑飛的程序回復后的處理。
單片機應用系統上電時,上電復位電路會使得單片機處于復位狀態,這一般稱為冷啟動,這種情況下,單片機處于復位狀態表現為:
(1)程序計數器PC的值為0000H。
(2)I/O口(P0、P1、P2、P3(1))為FFH狀態,即準雙向I/O口的輸入狀態。
(3)堆棧指示器SP=07H,即堆棧底為片內RAM的07H單元。
(4)除上述狀態外,所有特殊功能寄存器SFR的有效位均為0。
(5)上電復位時,由于是重新供電,RAM在斷電時數據丟失,上電復位后為隨機數。
單片機應用系統的程序跑飛時,看門狗產生復位信號,也會使得單片機處于復位狀態,這一般稱為熱啟動,這種情況下,單片機處于復位狀態表現為:
(1)程序計數器PC的值為0000H。
(2)I/O口(P0、P1、P2、P3)為FFH狀態,即準雙向I/O口的輸入狀態。
(3)堆棧指示器SP=07H,即堆棧底為片內RAM的07H單元。
(4)除上述狀態外,所有特殊功能寄存器SFR的有效位均為0。
(5)復位信號使得單片機處于復位狀態時,片內RAM中的數據不受影響。
比較上面兩種單片機復位方式可知,上電復位與信號復位不同之處是第(5)點,這正是我們區分兩種單片機復位方式的根據。具體方法是設置上電復位標志,例如,片內RAM的7EH單元和7FH單元分別為(7EH)=18H且(7FH)=81H時表示已完成上電復位。上面兩種單片機復位方式都使得程序從0000H入口。然而,上電復位后要進行系統的完全初始化,而程序跑飛回復后往往要求保留一些過程參數,不允許重新初始化,而且還要對一些關鍵參數進行檢查與修復。
因此,要根據不同情況進行不同的初始化處理。圖2是上電復位與程序跑飛回復初始化處理框圖。0000H是MCU的復位人口,程序啟動后,首先判斷是上電復位(冷啟動),還是程序跑飛回復(熱啟動)。上電復位是開機操作,要建立上電標志,并進行系統的完全初始化。程序跑飛回復應進行相關資源的檢查與修復,以防止系統運行出錯。另外,根據系統特點,需要保留一些過程數據,不得進行完全初始化。
3、喂狗指令插入原理與位置
單片機應用系統運行正常時,單片機的CPU應在0.9s內從P1.7口送出一個正脈沖,使看門狗及時清零,也就是說,CPU要在0.9s以內執行一次下面的喂狗程序段(喂狗指令):
SETBP1.7
NOP
NOP
CLRP1.7
喂狗程序段插入到用戶應用程序之中。單片機系統的用戶應用程序一般由循環結構的主程序和中斷服務子程序組成。首先,應盡可能準確地估算各應用功能模塊的運行時間,估算運行時間的時候,應考慮程序可能被中斷,應把中斷程序的運行時間也計算在內。然后,在若干個應用功能模塊的運行時間小于0.9s的兩個應用功能模塊之間插入上面的喂狗程序段。
為了防止看門狗非正常失效(即:已發生程序跑飛但看門狗不“叫”——不產生單片機所需要的復位信號),在用戶應用程序中插入喂狗程序段時應注意下面3點。
(1)避免在中斷服務子程序中插入喂狗程序段。
當MCU受干擾而發生程序跑飛,只要MCU片內中斷允許控制寄存器不遭破壞,則不論程序飛到什么地方,CPU仍能像程序正常運行時一樣響應和執行中斷服務子程序。因此,在各中斷服務子程序中都不應該插入喂狗程序段。
(2)避免在用戶應用程序中的局部循環圈內插入喂狗程序段。
這樣的話,即使程序跑飛后非正常進入該循環圈內,并且跑飛后的程序在該循環圈內“死循環”,也會因為看門狗接收不到喂狗信號,發生看門狗定時計數溢出,進而使系統恢復正常運行。
(3)對P1口的其它7根I/O線的輸入和輸出操作全部采用位操作指令,這樣的話,對P1口的所有操作都是采用的位操作指令。因為如果對P1.0~P1.6的輸入和輸出操作采用直接尋址的方式完成,則勢必會有可能影響到P1.7的輸出操作,從而可能導致看門狗非正常失效。
4、結論
在用戶應用程序中插入喂狗程序段后,相當于啟動了看門狗,就無法再使用各類單片機開發系統或單片機仿真器對該應用系統進行仿真調試。所以,單片機應用系統在開始設計和調試用戶應用程序時,通常不連接看門狗電路,也不在用戶應用程序中插入喂狗程序段,而是在用戶應用程序研發成功后,再將看門狗電路連接到硬件系統中,并在用戶應用程序中插入喂狗程序段,并且進行系統的現場試驗,以檢驗系統的抗干擾能力是否滿足系統的設計要求。
將采用了CD4060的硬件看門狗技術的單片機應用系統放置在具有較強電磁干擾的環境中工作,如果能長時間連續正常地工作,則說明系統具有較強的抗干擾能力。曾在采用了基于CD4060的硬件看門狗技術的單片機應用系統的交流電源插座處,較頻繁地插撥其它用電設備的交流電源插頭,沒有發現系統程序跑飛的現象。相反地,把系統中的硬件看門狗電路拆掉,則系統在多次插撥其它用電設備的交流電源插頭的情況下,有時會出現系統程序跑飛的現象。由此可見,基于CD4060的硬件看門狗技術確實提高了單片機應用系統的抗干擾能力。本文所介紹的看門狗技術,已成功地使用在多個實際的MCU應用系統中,保證了系統的可靠運行。
電路工作的時候只要給CD4060復位脈沖,就能保證Q1處于截止狀態,從而使受控的NMOS管處于導通狀態給處理器電路系統供電。
該電路的優點是定時的時間可以比較長,幾分鐘都沒問題,可以給那些需要較長時間初始化工作。脈沖觸發喂狗,上電通過R2、C1、R3自動給計數器一個復位脈沖,確保Vout有輸出。電路成本也低廉。
該電路的最大缺點是喂狗脈沖要求比較寬。
評論