1 引言 Philips公司的8XC552單片機(jī)以其體積小、功能強(qiáng)、價(jià)格低等優(yōu)勢(shì)而廣泛地使用在工業(yè)控制、DCS控制和智能儀器等領(lǐng)域。筆者在智能配電監(jiān)測(cè)儀的研制過(guò)程中,雖然采取了相應(yīng)的抗干擾措施,但由于工業(yè)現(xiàn)場(chǎng)環(huán)境中電磁場(chǎng)、電網(wǎng)尖峰、諧波、浪涌及雷電輻射等影響,仍有可能出現(xiàn)程序死循環(huán)、跑飛等失控現(xiàn)象。為此,筆者采用Watchdog技術(shù)保證了系統(tǒng)的正常運(yùn)行,通常Watchdog技術(shù)在單片機(jī)應(yīng)用系統(tǒng)中可分為軟件Watchdog和硬件Watchdog。Philips公司的8XC552、Intel的8098、Motorala的68C05以及Microchip的16C5X系列單片機(jī)本身已帶有軟件Watchdog功能,因此,只要硬件接法正確,在軟件設(shè)計(jì)中調(diào)用相應(yīng)語(yǔ)句進(jìn)行啟動(dòng)即可。 2 硬件組成原理 2.1系統(tǒng)工作原理 圖1所示是87C522單片機(jī)用于智能型配電儀的連接電路,本智能配電儀中的87C552為主控芯片,該芯片除具有三個(gè)16位定時(shí)器T0、T1及T2外,還有一個(gè)專作監(jiān)視8位定時(shí)器、簡(jiǎn)稱WDT(WatchdogTimer)的T3定時(shí)器。因?yàn)槲⒖刂破饔袝r(shí)會(huì)受噪音、射頻干擾等環(huán)境因素的影響而導(dǎo)入錯(cuò)誤的運(yùn)行狀態(tài)。監(jiān)視定時(shí)器的功能就是在某特定的時(shí)限內(nèi)使微控制器復(fù)位,從而將其從錯(cuò)誤的狀態(tài)中恢復(fù)過(guò)來(lái)以重新開(kāi)始正常運(yùn)行。當(dāng)T3用作Watchdog定時(shí)器并由軟件啟動(dòng)計(jì)時(shí)后,如果系統(tǒng)已達(dá)到所設(shè)定的預(yù)定時(shí)間而仍沒(méi)有重新啟動(dòng)定時(shí)器,此時(shí)就會(huì)產(chǎn)生溢出信號(hào)并停止計(jì)時(shí),表明系統(tǒng)出現(xiàn)異常。CPU可以對(duì)定時(shí)器重新啟動(dòng)、清零、設(shè)定計(jì)時(shí)值等操作。系統(tǒng)正常運(yùn)行時(shí),CPU將周期性地重新啟動(dòng)定時(shí)器,當(dāng)然其啟動(dòng)周期應(yīng)小于定時(shí)器的設(shè)定值,以保證定時(shí)器始終不能產(chǎn)生溢出信號(hào)。而當(dāng)系統(tǒng)運(yùn)行不正常時(shí),由于CPU不能周期性地啟動(dòng)定時(shí)器,因而定時(shí)器將產(chǎn)生溢出信號(hào),以強(qiáng)迫CPU恢復(fù)系統(tǒng)的正常運(yùn)行。 2.2 Watchdog的內(nèi)部結(jié)構(gòu)原理 監(jiān)視定時(shí)器的結(jié)構(gòu)原理如圖2所示。它的核心為一8位定時(shí)器,其前級(jí)是一個(gè)11位定標(biāo)器。后者的輸入信號(hào)為fosc/12,即定標(biāo)器對(duì)機(jī)器周期進(jìn)行遞增計(jì)數(shù)。這樣,每過(guò)2個(gè)機(jī)器周期,定時(shí)器T3的值便增加1000次。若用16MHz或24MHz晶體振蕩器,則監(jiān)視定時(shí)器的增值間隔將分別為1.536ms和1.024ms;其相應(yīng)的最大溢出周期分別為393.216ms和262.144ms。 當(dāng)監(jiān)視定時(shí)器溢出時(shí),系統(tǒng)將產(chǎn)生一個(gè)內(nèi)部復(fù)位脈沖以使8XC552復(fù)位。由圖2可以看出,T3溢出時(shí),RST引腳內(nèi)側(cè)的晶體管因柵極出現(xiàn)一個(gè)負(fù)脈沖而瞬時(shí)導(dǎo)通,從而在RST引腳上輸出一個(gè)復(fù)位正脈沖,其寬度為3個(gè)機(jī)器周期。如果RST引腳外接電容,則這么窄的輸出脈沖可能遭到破壞,因?yàn)殡娙莶辉试SRST引腳電壓產(chǎn)生突變,但這不會(huì)影響到內(nèi)部復(fù)位操作。 如果將8XC552的引腳接至低電平,則輸入信號(hào)至定標(biāo)器的通路將暢通無(wú)阻,于是監(jiān)視定時(shí)器便正常運(yùn)作。但若將引腳接高電平,輸入信號(hào)則會(huì)因與門被封鎖而不能通過(guò),這時(shí)監(jiān)視定時(shí)器處于關(guān)閉狀態(tài)。應(yīng)當(dāng)指出,一旦T3被開(kāi)啟,則無(wú)法用軟件使之關(guān)閉;同時(shí)如果T3被EW禁止,也無(wú)法用軟件啟動(dòng)。 如果=0,那么PCON寄存器的PD位便不可寫(xiě)入,其初值為0,無(wú)法置l,即不可進(jìn)入掉電方式。故監(jiān)視定時(shí)器和掉電方式兩者不可兼得。 3 調(diào)試中的常見(jiàn)問(wèn)題及其解決方法 在對(duì)系統(tǒng)進(jìn)行調(diào)試時(shí),有可能出現(xiàn)閃屏、無(wú)法顯示以及顯示雜亂等現(xiàn)象,現(xiàn)將這些問(wèn)題的解決方法介紹如下: (1)LCD出現(xiàn)閃屏,無(wú)法翻屏顯示現(xiàn)象 筆者在用仿真器運(yùn)行編程時(shí),LCD能夠翻屏并不斷顯示采集來(lái)的三相用電參數(shù),但離開(kāi)仿真器處于脫機(jī)運(yùn)行狀態(tài)時(shí),LCD只能顯示第一屏數(shù)據(jù)。經(jīng)查仿真器的引腳接高電平,而脫機(jī)時(shí)腳懸空,從而引起了腳的狀態(tài)不固定,并不斷產(chǎn)生內(nèi)部復(fù)位信號(hào)使單片機(jī)復(fù)位而出現(xiàn)了上述現(xiàn)象。后來(lái)把腳接低電平,仍然出現(xiàn)上述現(xiàn)象。而把腳接高電平后(即禁用Watchdog功能),則LCD顯示正常。因此,引腳應(yīng)嚴(yán)格禁止懸空以避免出現(xiàn)不穩(wěn)定的狀態(tài),同時(shí)在未載入Watchdog程序之前,其引腳也不能接低電平。 (2)LCD無(wú)顯示 RST端的電容應(yīng)確保連接正確,否則在高電平時(shí)將無(wú)法加到復(fù)位端而使CPU不能運(yùn)行程序,從而出現(xiàn)LCD無(wú)顯示的現(xiàn)象。 (3)LCD顯示數(shù)據(jù)雜 亂無(wú)章、數(shù)據(jù)死鎖把腳接低電平,可能會(huì)出現(xiàn)LCD顯示的數(shù)據(jù)雜亂無(wú)章、數(shù)據(jù)死鎖現(xiàn)象。其原因是源程序中未載入Watchdog程序,因此應(yīng)保證在源程序中加入Watchdog程序,以消除數(shù)據(jù)的死鎖或顯示雜亂無(wú)章等問(wèn)題。 4 軟件設(shè)計(jì) 4.1軟件設(shè)計(jì) 編寫(xiě)監(jiān)視定時(shí)器運(yùn)行軟件時(shí),程序員首先應(yīng)當(dāng)確定系統(tǒng)能夠在錯(cuò)誤狀態(tài)下支持的時(shí)間,也就是設(shè)定溢出周期的依據(jù)。例如能維持16ms,則把T3的初值設(shè)定為10,這樣,在16MHz晶振的情況下,溢出周期為15.36ms。此時(shí)程序員就可對(duì)其軟件進(jìn)行劃分,以確定把重寫(xiě)T3值的指令插在什么地方,才能使相鄰兩次重寫(xiě)操作間隔不超過(guò)監(jiān)視定時(shí)器的溢出周期,以保證正常運(yùn)作時(shí)T3不溢出。因此,程序員應(yīng)當(dāng)了解所有軟件模塊的執(zhí)行時(shí)間,同時(shí)也要考慮到出現(xiàn)條件跳轉(zhuǎn)、子程序及內(nèi)外中斷等因素所帶來(lái)的影響。對(duì)于那些很難估算其執(zhí)行時(shí)間的程序段落,應(yīng)按最壞情況估算。為防止誤寫(xiě),監(jiān)視定時(shí)器值的重寫(xiě)可分兩步進(jìn)行。首先將PCON.4(監(jiān)視定時(shí)器裝入允許位WLE)置1,以允許對(duì)T3進(jìn)行寫(xiě)入;第二步向T3寫(xiě)入新值。由圖2可知,對(duì)T3的寫(xiě)信號(hào)同時(shí)也會(huì)加到WLE的清0端,于是每當(dāng)T3被寫(xiě)入新值時(shí),WLE位便自動(dòng)復(fù)位。因此,當(dāng)該值為00H時(shí),溢出間隔最大;而FFH值則對(duì)應(yīng)最小溢出周期。若采用12MHz晶振,這兩值則分別為524ms和2ms。最大和最小溢出周期的計(jì)算公式分別為: 由于在空閑方式下,監(jiān)視定時(shí)器照常運(yùn)行。因此,該方式與掉電方式是矛盾的,因?yàn)榍罢咝枰獣r(shí)鐘,后者凍結(jié)時(shí)鐘。故當(dāng)=0而開(kāi)啟T3工作時(shí),8XC552將無(wú)法進(jìn)入掉電方式,此時(shí)向PCON.1寫(xiě)l的操作無(wú)效,因而它將保持為0。在軟件開(kāi)發(fā)調(diào)試的早期階段,可將引腳接高電平以關(guān)閉監(jiān)視定時(shí)器,而在后期改接低電平以完成調(diào)試過(guò)程。 4.2 定時(shí)間隔和訪問(wèn)時(shí)間的設(shè)定 數(shù)據(jù)采集及處理是程序中的關(guān)鍵部分,也是決定儀器精度的關(guān)鍵所在。本儀器采用電壓、電流、頻率、相位為主要采集參數(shù),且這些參數(shù)是連續(xù)變化的,因此采樣時(shí)間不宜設(shè)置得過(guò)長(zhǎng),否則會(huì)影響儀器的精度。筆者將電流與電壓的采樣時(shí)間定為5ms,頻率與相位的采集時(shí)間為20ms,這樣,Watchdog的定時(shí)間隔設(shè)置較佳,具體如圖3所示。圖3中,Watchdog在WDT1時(shí)間內(nèi)完成對(duì)采集頻率數(shù)據(jù)的監(jiān)控,而在WDT2、WDT3、WDT4內(nèi)分別負(fù)責(zé)對(duì)電壓、電流、相位數(shù)據(jù)采集的監(jiān)控。在設(shè)計(jì)程序時(shí),一般取1.1Ts<Tw<2Ts,其中Ts為采樣周期,Tw為Watchdog的定時(shí)時(shí)間,Ts分別為T1、T2、T3、T4的大小,Tw分別為WDT1、WDT2、WDT3、WDT4的大小。Tw設(shè)置太小會(huì)增加訪問(wèn)頻率,影響程序執(zhí)行效率;而設(shè)置太大則會(huì)干擾程序的正常運(yùn)行,且需等待很長(zhǎng)時(shí)間才可以恢復(fù)運(yùn)行,而采集或控制對(duì)象可能已在這一步偏離過(guò)大。因此,CPU訪問(wèn)時(shí)間原則上小于Tw就可以了,為防止時(shí)間估計(jì)不準(zhǔn),設(shè)計(jì)時(shí)應(yīng)小些為好,這樣可以防止系統(tǒng)異常而處于每經(jīng)過(guò)Tw時(shí)間啟動(dòng)一次的死循環(huán)中。 4.3 軟件程序 本智能監(jiān)控儀用C語(yǔ)言編寫(xiě)程序,并采用12MHz晶振時(shí),其溢出時(shí)間應(yīng)分別設(shè)置為6ms、20ms、524ms…,這樣,在源程序中應(yīng)適時(shí)加入的各Watchdog程序如下: 5 結(jié)束語(yǔ) 在智能配電儀的源程序中加入Watchdog后,其整個(gè)系統(tǒng)運(yùn)行將更加穩(wěn)定、可靠,從而有效地克服了來(lái)自工業(yè)用電現(xiàn)場(chǎng)的各種干擾。 |