Watchdog在Philips 8XC552系列單片機系統中的應用
1 引言
philips公司的8xc552單片機以其體積小、功能強、價(jià)格低等優(yōu)勢而廣泛地使用在工業(yè)控制、dcs控制和智能儀器等領(lǐng)域。筆者在智能配電監測儀的研制過(guò)程中,雖然采取了相應的抗干擾措施,但由于工業(yè)現場(chǎng)環(huán)境中電磁場(chǎng)、電網(wǎng)尖峰、諧波、浪涌及雷電輻射等影響,仍有可能出現程序死循環(huán)、跑飛等失控現象。為此,筆者采用watchdog技術(shù)保證了系統的正常運行,通常watchdog技術(shù)在單片機應用系統中可分為軟件watchdog和硬件watchdog。philips公司的8xc552、intel的8098、motorala的68c05以及microchip的16c5x系列單片機本身已帶有軟件watchdog功能,因此,只要硬件接法正確,在軟件設計中調用相應語(yǔ)句進(jìn)行啟動(dòng)即可。
2 硬件組成原理
2.1系統工作原理
圖1所示是87c522單片機用于智能型配電儀的連接電路,本智能配電儀中的87c552為主控芯片,該芯片除具有三個(gè)16位定時(shí)器t0、t1及t2外,還有一個(gè)專(zhuān)作監視8位定時(shí)器、簡(jiǎn)稱(chēng)wdt(watchdogtimer)的t3定時(shí)器。因為微控制器有時(shí)會(huì )受噪音、射頻干擾等環(huán)境因素的影響而導入錯誤的運行狀態(tài)。監視定時(shí)器的功能就是在某特定的時(shí)限內使微控制器復位,從而將其從錯誤的狀態(tài)中恢復過(guò)來(lái)以重新開(kāi)始正常運行。當t3用作watchdog定時(shí)器并由軟件啟動(dòng)計時(shí)后,如果系統已達到所設定的預定時(shí)間而仍沒(méi)有重新啟動(dòng)定時(shí)器,此時(shí)就會(huì )產(chǎn)生溢出信號并停止計時(shí),表明系統出現異常。cpu可以對定時(shí)器重新啟動(dòng)、清零、設定計時(shí)值等操作。系統正常運行時(shí),cpu將周期性地重新啟動(dòng)定時(shí)器,當然其啟動(dòng)周期應小于定時(shí)器的設定值,以保證定時(shí)器始終不能產(chǎn)生溢出信號。而當系統運行不正常時(shí),由于cpu不能周期性地啟動(dòng)定時(shí)器,因而定時(shí)器將產(chǎn)生溢出信號,以強迫cpu恢復系統的正常運行。

2.2 watchdog的內部結構原理
監視定時(shí)器的結構原理如圖2所示。它的核心為一8位定時(shí)器,其前級是一個(gè)11位定標器。后者的輸入信號為fosc/12,即定標器對機器周期進(jìn)行遞增計數。這樣,每過(guò)2個(gè)機器周期,定時(shí)器t3的值便增加1000次。若用16mhz或24mhz晶體振蕩器,則監視定時(shí)器的增值間隔將分別為1.536ms和1.024ms;其相應的最大溢出周期分別為393.216ms和262.144ms。
當監視定時(shí)器溢出時(shí),系統將產(chǎn)生一個(gè)內部復位脈沖以使8xc552復位。由圖2可以看出,t3溢出時(shí),rst引腳內側的晶體管因柵極出現一個(gè)負脈沖而瞬時(shí)導通,從而在rst引腳上輸出一個(gè)復位正脈沖,其寬度為3個(gè)機器周期。如果rst引腳外接電容,則這么窄的輸出脈沖可能遭到破壞,因為電容不允許rst引腳電壓產(chǎn)生突變,但這不會(huì )影響到內部復位操作。
如果將8xc552的引腳接至低電平,則輸入信號至定標器的通路將暢通無(wú)阻,于是監視定時(shí)器便正常運作。但若將
引腳接高電平,輸入信號則會(huì )因與門(mén)被封鎖而不能通過(guò),這時(shí)監視定時(shí)器處于關(guān)閉狀態(tài)。應當指出,一旦t3被
開(kāi)啟,則無(wú)法用軟件使之關(guān)閉;同時(shí)如果t3被ew禁止,也無(wú)法用軟件啟動(dòng)。
如果=0,那么pcon寄存器的pd位便不可寫(xiě)入,其初值為0,無(wú)法置l,即不可進(jìn)入掉電方式。故監視定時(shí)器和掉電方式兩者不可兼得。

3 調試中的常見(jiàn)問(wèn)題及其解決方法
在對系統進(jìn)行調試時(shí),有可能出現閃屏、無(wú)法顯示以及顯示雜亂等現象,現將這些問(wèn)題的解決方法介紹如下:
(1)lcd出現閃屏,無(wú)法翻屏顯示現象
筆者在用仿真器運行編程時(shí),lcd能夠翻屏并不斷顯示采集來(lái)的三相用電參數,但離開(kāi)仿真器處于脫機運行狀態(tài)時(shí),lcd只能顯示第一屏數據。經(jīng)查仿真器的引腳接高電平,而脫機時(shí)
腳懸空,從而引起了
腳的狀態(tài)不固定,并不斷產(chǎn)生內部復位信號使單片機復位而出現了上述現象。后來(lái)把
腳接低電平,仍然出現上述現象。而把
腳接高電平后(即禁用watchdog功能),則lcd顯示正常。因此,
引腳應嚴格禁止懸空以避免出現不穩定的狀態(tài),同時(shí)在未載入watchdog程序之前,其
引腳也不能接低電平。
(2)lcd無(wú)顯示
rst端的電容應確保連接正確,否則在高電平時(shí)將無(wú)法加到復位端而使cpu不能運行程序,從而出現lcd無(wú)顯示的現象。
(3)lcd顯示數據雜
亂無(wú)章、數據死鎖
把腳接低電平,可能會(huì )出現lcd顯示的數據雜亂無(wú)章、數據死鎖現象。其原因是源程序中未載入watchdog程序,因此應保證在源程序中加入watchdog程序,以消除數據的死鎖或顯示雜亂無(wú)章等問(wèn)題。
4 軟件設計
4.1軟件設計
編寫(xiě)監視定時(shí)器運行軟件時(shí),程序員首先應當確定系統能夠在錯誤狀態(tài)下支持的時(shí)間,也就是設定溢出周期的依據。例如能維持16ms,則把t3的初值設定為10,這樣,在16mhz晶振的情況下,溢出周期為15.36ms。此時(shí)程序員就可對其軟件進(jìn)行劃分,以確定把重寫(xiě)t3值的指令插在什么地方,才能使相鄰兩次重寫(xiě)操作間隔不超過(guò)監視定時(shí)器的溢出周期,以保證正常運作時(shí)t3不溢出。因此,程序員應當了解所有軟件模塊的執行時(shí)間,同時(shí)也要考慮到出現條件跳轉、子程序及內外中斷等因素所帶來(lái)的影響。對于那些很難估算其執行時(shí)間的程序段落,應按最壞情況估算。為防止誤寫(xiě),監視定時(shí)器值的重寫(xiě)可分兩步進(jìn)行。首先將pcon.4(監視定時(shí)器裝入允許位wle)置1,以允許對t3進(jìn)行寫(xiě)入;第二步向t3寫(xiě)入新值。由圖2可知,對t3的寫(xiě)信號同時(shí)也會(huì )加到wle的清0端,于是每當t3被寫(xiě)入新值時(shí),wle位便自動(dòng)復位。因此,當該值為00h時(shí),溢出間隔最大;而ffh值則對應最小溢出周期。若采用12mhz晶振,這兩值則分別為524ms和2ms。最大和最小溢出周期的計算公式分別為:

由于在空閑方式下,監視定時(shí)器照常運行。因此,該方式與掉電方式是矛盾的,因為前者需要時(shí)鐘,后者凍結時(shí)鐘。故當=0而開(kāi)啟t3工作時(shí),8xc552將無(wú)法進(jìn)入掉電方式,此時(shí)向pcon.1寫(xiě)l的操作無(wú)效,因而它將保持為0。在軟件開(kāi)發(fā)調試的早期階段,可將
引腳接高電平以關(guān)閉監視定時(shí)器,而在后期改接低電平以完成調試過(guò)程。
4.2定時(shí)間隔和訪(fǎng)問(wèn)時(shí)間的設定
數據采集及處理是程序中的關(guān)鍵部分,也是決定儀器精度的關(guān)鍵所在。本儀器采用電壓、電流、頻率、相位為主要采集參數,且這些參數是連續變化的,因此采樣時(shí)間不宜設置得過(guò)長(cháng),否則會(huì )影響儀器的精度。筆者將電流與電壓的采樣時(shí)間定為5ms,頻率與相位的采集時(shí)間為20ms,這樣,watchdog的定時(shí)間隔設置較佳,具體如圖3所示。圖3中,watchdog在wdt1時(shí)間內完成對采集頻率數據的監控,而在wdt2、wdt3、wdt4內分別負責對電壓、電流、相位數據采集的監控。在設計程序時(shí),一般取1.1ts<tw<2ts,其中ts為采樣周期,tw為watchdog的定時(shí)時(shí)間,ts分別為t1、t2、t3、t4的大小,tw分別為wdt1、wdt2、wdt3、wdt4的大小。tw設置太小會(huì )增加訪(fǎng)問(wèn)頻率,影響程序執行效率;而設置太大則會(huì )干擾程序的正常運行,且需等待很長(cháng)時(shí)間才可以恢復運行,而采集或控制對象可能已在這一步偏離過(guò)大。因此,cpu訪(fǎng)問(wèn)時(shí)間原則上小于tw就可以了,為防止時(shí)間估計不準,設計時(shí)應小些為好,這樣可以防止系統異常而處于每經(jīng)過(guò)tw時(shí)間啟動(dòng)一次的死循環(huán)中。

4.3軟件程序
本智能監控儀用c語(yǔ)言編寫(xiě)程序,并采用12mhz晶振時(shí),其溢出時(shí)間應分別設置為6ms、20ms、524ms…,這樣,在源程序中應適時(shí)加入的各watchdog程序如下:

5結束語(yǔ)
在智能配電儀的源程序中加入watchdog后,其整個(gè)系統運行將更加穩定、可靠,從而有效地克服了來(lái)自工業(yè)用電現場(chǎng)的各種干擾。
評論