看門(mén)狗技術(shù)與單片機(jī)應(yīng)用系統(tǒng)抗干擾措施
1 引言
隨著工業(yè)自動(dòng)化水平的不斷提高,以MCS-51單片機(jī)為核心所構(gòu)成的單片機(jī)應(yīng)用系統(tǒng)得到了廣泛應(yīng)用,如水泥生料配料系統(tǒng)、電子皮帶秤給料控制、各種現(xiàn)場(chǎng)智能測(cè)量?jī)x表等。但其工作現(xiàn)場(chǎng)條件惡劣,干擾多而且幅度大,嚴(yán)重影響著應(yīng)用系統(tǒng)的正常運(yùn)行與可靠性,甚至使應(yīng)用系統(tǒng)計(jì)算機(jī)進(jìn)入死循環(huán)而癱瘓,通常稱(chēng)為程序“跑飛”。由此引出的計(jì)算機(jī)可靠性問(wèn)題,一直是人們研究的重要課題。
采用屏蔽、濾波、退耦、隔離、接地等措施能有效地提高系統(tǒng)的抗干擾能力,但很難在強(qiáng)干擾發(fā)生時(shí)消除因程序“跑飛”而死機(jī)情況的發(fā)生!翱撮T(mén)狗”技術(shù)能在程序“跑飛”時(shí)實(shí)現(xiàn)自我診斷并使系統(tǒng)恢復(fù)運(yùn)行,是單片機(jī)應(yīng)用系統(tǒng)抗干擾的有力武器。當(dāng)然,它是以系統(tǒng)的硬、軟件設(shè)計(jì)開(kāi)發(fā)的合理和成熟為條件的,否則將掩蓋系統(tǒng)設(shè)計(jì)開(kāi)發(fā)過(guò)程中的人為缺陷與不足。
2 “看門(mén)狗”技術(shù)及其對(duì)干擾的抑制
2.1 程序“跑飛”對(duì)系統(tǒng)的攻擊
(1)程序計(jì)數(shù)器PC的值被攻擊,成為一隨機(jī)拼合的數(shù)據(jù)。
(2)系統(tǒng)設(shè)置的控制字與標(biāo)志參數(shù)因“跑飛”后可能被訪問(wèn)而被攻擊。
(3)數(shù)據(jù)存儲(chǔ)器RAM內(nèi)容被攻擊等。
2.2 “看門(mén)狗”技術(shù)
“看門(mén)狗”源于“Watch dog、Watch dog timer”,或稱(chēng)定時(shí)監(jiān)視技術(shù),其本質(zhì)是一可復(fù)位的定時(shí)器,其原理如圖1、2所示。
圖1 原理框圖
圖2 原理波形圖
在程序正常運(yùn)行時(shí),計(jì)算機(jī)通過(guò)程序以周期T1向定時(shí)器發(fā)送脈沖觸發(fā)定時(shí)器(或通過(guò)軟件以T1為周期初始化定時(shí)器),而由定時(shí)脈沖控制的定時(shí)器動(dòng)作時(shí)間為T(mén)2(T3),在T1<T2(T3)時(shí),定時(shí)器不會(huì)動(dòng)作,處于休眠狀態(tài)。當(dāng)計(jì)算機(jī)受到強(qiáng)干擾等作用破壞后,程序計(jì)數(shù)器PC中內(nèi)容不再是程序的正確代碼,而可能為一隨機(jī)拼合的數(shù)據(jù),這樣會(huì)使取指不正確,必然導(dǎo)致程序運(yùn)行混亂“跑飛”,進(jìn)入死循環(huán)而死機(jī)。反過(guò)來(lái)由于程序脫離正常循環(huán),也使定時(shí)器觸發(fā)脈沖丟失,在經(jīng)過(guò)T2(T3)時(shí)間后,“看門(mén)狗”定時(shí)器被激活,向CPU發(fā)出Reset信號(hào)使其復(fù)位,將“跑飛”的程序從PC=0000H開(kāi)始,納入正常軌道。但有些生產(chǎn)過(guò)程是不能從頭開(kāi)始的,應(yīng)用程序均是一循環(huán)體,且在開(kāi)始處均有初始化程序,包含各種寄存器、指針、變量、控制字等。此時(shí)狀態(tài)不能反應(yīng)“跑飛”時(shí)的狀態(tài),有時(shí)還有人身、設(shè)備等方面的安全危險(xiǎn)。在這種情況下,程序“跑飛”后應(yīng)設(shè)法找到出錯(cuò)時(shí)的斷點(diǎn),此時(shí)就可以采用二級(jí)“看門(mén)狗”的方式。由程序設(shè)計(jì)時(shí)優(yōu)先級(jí)設(shè)置為最高級(jí)的定時(shí)器一先發(fā)出中斷請(qǐng)求信號(hào),CPU響應(yīng)中斷轉(zhuǎn)向中斷處理程序,進(jìn)而恢復(fù)系統(tǒng)。第二級(jí)“看門(mén)狗”電路只有在第一級(jí)未起作用時(shí)經(jīng)過(guò)T3才起動(dòng)Reset信號(hào)。
2.3 “看門(mén)狗”技術(shù)的實(shí)施方法
(1)在系統(tǒng)構(gòu)成時(shí)選用芯片內(nèi)帶有“看門(mén)狗”電路的單片機(jī),如ATMEL公司的89C52等。
(2)選配專(zhuān)門(mén)的“看門(mén)狗”電路,如美國(guó)Xicor公司的X25043/45、MAXIM公司的MAX813L等,它們均可構(gòu)成獨(dú)立的“看門(mén)狗”電路。
(3)采用計(jì)數(shù)器、單穩(wěn)態(tài)觸發(fā)器、定時(shí)器等器件構(gòu)成。在圖3中用4060構(gòu)成了一個(gè)二級(jí)“看門(mén)狗”電路。
因中斷入口0003H處僅有0003H~000AH單元可為中斷服務(wù)程序所用,很可能容納不下中斷服務(wù)程序,故應(yīng)在其內(nèi)安排一條JMP Watch dog指令。由于“跑飛”,PC值在響應(yīng)中斷前已被破壞,在響應(yīng)中斷后,該內(nèi)容自動(dòng)被壓入堆棧,故一定要用兩條POP A指令將無(wú)用內(nèi)容彈出,以便為中斷返回時(shí)由堆棧給PC賦予“跑飛”處的正確值,這一點(diǎn)在設(shè)計(jì)中斷服務(wù)程序時(shí)尤其要引起重視。通過(guò)對(duì)P1.0取反,恢復(fù)對(duì)4060的觸發(fā)脈沖。在中斷服務(wù)中應(yīng)安排被破壞數(shù)據(jù)的診斷、修復(fù)以及查找“跑飛”處的地址正確入口,并在返回前將其壓棧。當(dāng)執(zhí)行RETI時(shí),“跑飛”處斷點(diǎn)地址入口自動(dòng)彈棧到PC,恢復(fù)正常運(yùn)行。P1.0取反指令在何處插入應(yīng)通過(guò)計(jì)算指令周期讓兩條CLR P1.0指令間隔小于定時(shí)器的定時(shí)時(shí)間T1<T2,可取T2=(1.5~2)T1。
圖3 二級(jí)“看門(mén)狗”電路
(4)利用8031片內(nèi)定時(shí)器/計(jì)數(shù)器 8031片內(nèi)有兩個(gè)十六位的定時(shí)器/計(jì)數(shù)器,可用定時(shí)器T0。在應(yīng)用程序?qū)0初始化時(shí),將其定時(shí)時(shí)間T2設(shè)置得比應(yīng)用程序循環(huán)體執(zhí)行時(shí)間T1長(zhǎng),可。篢2=(1.5~2)T1。當(dāng)程序正常時(shí),T0不會(huì)溢出,“跑飛”時(shí)溢出,定時(shí)器/計(jì)數(shù)器控制寄存器TCON的TF0(TCON.5)由8031內(nèi)部硬件置位TF0=1,發(fā)出中斷信號(hào)。設(shè)8031采用12MHz晶振,經(jīng)定時(shí)器內(nèi)部12分頻后得1MHz的定時(shí)時(shí)鐘,對(duì)應(yīng)定時(shí)時(shí)間1μs,最長(zhǎng)可定時(shí)約65.5ms,如應(yīng)用程序循環(huán)時(shí)間T1=10ms,則可取T2=2T1=20ms,定時(shí)器的初值X可由下式確定:
(216-X)×1μs=20ms
X=45536D=B1EOH
定時(shí)器的初始化程序:
MOV TLO,#OEOH
MOV THO,#OB1H;定時(shí)器/計(jì)數(shù)器T0寫(xiě)入初值
MOV TMOD,#O1H;設(shè)置定時(shí)器/計(jì)數(shù)器工作方式1
SETB TRO; 起動(dòng)定時(shí)器/計(jì)數(shù)器T0
在應(yīng)用程序的系統(tǒng)初始化時(shí)用下面指令設(shè)定T0優(yōu)先級(jí):
SETB EA; 開(kāi)放中斷
SETB ETO; 允許T0中斷
SETB PTO; 置T0中斷優(yōu)先級(jí)最高
T0中斷服務(wù)流程與中斷服務(wù)流程(見(jiàn)圖4)相比,其中斷入口為000BH,去掉P1.0取反的指令,其余相同??jī)?yōu)先級(jí)別最高的中斷將控制權(quán)重新奪回交給CPU,使系統(tǒng)恢復(fù)正常。
圖4 中斷服務(wù)流程
2.4 斷點(diǎn)的查找與恢復(fù)
斷點(diǎn)的查找與恢復(fù)是人們最關(guān)注的問(wèn)題,我們的方法是擴(kuò)展一外部數(shù)據(jù)存儲(chǔ)器,用以存儲(chǔ)“跑飛”前斷點(diǎn)(或接近斷點(diǎn))的PC之值以及一些重要的變量、指針及控制字的值。利用正常工作時(shí)P1.0向“看門(mén)狗”發(fā)送的觸發(fā)脈沖經(jīng)反向、延時(shí)等作為外部擴(kuò)展RAM的片選信號(hào)以T1為周期定時(shí)對(duì)外部RAM中內(nèi)容進(jìn)行刷新。當(dāng)“跑飛”后因觸發(fā)脈沖丟失而避免了外部RAM被攻擊,保證其內(nèi)容的可靠性。隨著T1的減少,被恢復(fù)的值就愈趨近斷點(diǎn)值,但要非常準(zhǔn)確找到斷點(diǎn),還值得人們研究。在中斷響應(yīng)時(shí)由于P1.0恢復(fù)了輸出觸發(fā)脈沖,故可將斷點(diǎn)值讀出。
3 結(jié)束語(yǔ)
“看門(mén)狗”是對(duì)付“跑飛”的有力手段,在生產(chǎn)過(guò)程中由于特定的生產(chǎn)條件使得“看門(mén)狗”技術(shù)有其相當(dāng)?shù)淖饔。我們(cè)趯?duì)某水泥廠微機(jī)配料系統(tǒng)的技術(shù)改造過(guò)程中采用了二級(jí)“看門(mén)狗”技術(shù),該系統(tǒng)運(yùn)行兩年多來(lái)經(jīng)受住了各種強(qiáng)干擾的考驗(yàn),取得了令人滿(mǎn)意的效果。
對(duì)于“跑飛”后的診斷、恢復(fù),尤其是如何更準(zhǔn)確地找到程序“跑飛”斷點(diǎn),對(duì)被損數(shù)據(jù)加以恢復(fù)等方面盡管有許多軟件可以利用,但還是值得人們多加關(guān)注的問(wèn)題。
編輯:admin 最后修改時(shí)間:2018-05-08