單片計(jì)算機(jī)系統(tǒng)抗干擾的軟件途徑
2.3 重復(fù)執(zhí)行
程序指令在執(zhí)行的過程中或者保持(鎖存)之后,都有可能被噪聲修改而導(dǎo)致控制失效乃至引發(fā)事故,為此應(yīng)當(dāng)盡量增加重要指信紙的執(zhí)行次數(shù)以糾正干擾造成的錯誤。對于頻率較低的傳感器數(shù)據(jù),建議在有效時間內(nèi)多次采集并比較;對于控制外部設(shè)備的指令,則需要多次重復(fù)執(zhí)行以確保有關(guān)信號的可靠性。為達(dá)此目的,可把重要的指令設(shè)計(jì)成定時掃描模塊,使其在整個程序的循環(huán)運(yùn)行過程中反復(fù)執(zhí)行。如此即使干擾信號改寫了指令內(nèi)容,也能在受控設(shè)備的反應(yīng)時間內(nèi)自動恢復(fù)正常。
2.4 重要數(shù)據(jù)的保護(hù)和恢復(fù)
編寫專門的數(shù)據(jù)保護(hù)子程序,是提高工控微機(jī)系統(tǒng)可靠性的有效途徑。在編寫程序的過程中,對于由指令改變結(jié)果性質(zhì)的數(shù)據(jù),可以考慮在每次改變后都盡可能地保護(hù)起來,以便在需要時能夠恢復(fù)正確值。對于大多數(shù)工控微處理機(jī)而言,在運(yùn)行錯誤而強(qiáng)制“復(fù)位”之后,I/O端口和特殊寄存器SFR中的內(nèi)容都將變成芯片出廠時的設(shè)定值[4],這很可能會引起整個系統(tǒng)的運(yùn)行混亂。因此計(jì)算機(jī)在重新啟動后,應(yīng)當(dāng)首先執(zhí)行數(shù)據(jù)恢復(fù)程序,把控制端口等重要寄存器被保護(hù)的內(nèi)容恢復(fù)還原?;谇笆龅脑囼?yàn)結(jié)果,保護(hù)數(shù)據(jù)最可靠的地址位于微處理機(jī)的片內(nèi) RAM;若數(shù)據(jù)的保護(hù)量較大,則建議擴(kuò)展非易失性的SRAM作為片外數(shù)據(jù)存儲器。這種新型芯片具有很高的抗干擾性能,其缺點(diǎn)是目前的價位較高。
3 片內(nèi)軟WDT監(jiān)控
“看門狗”(WDT)已經(jīng)成為工控微機(jī)必不可少的成員之一,其通常采用軟件與片外專門電路相結(jié)合的技術(shù),來防止CPU程序的“跑飛”。我們在課題的研究過程中注意到,利用微處理機(jī)內(nèi)部閑置的定時/計(jì)數(shù)器,配合以適當(dāng)?shù)某绦蚓涂梢苑奖愕貥?gòu)成WDT,在PC異常時能夠及時有效地強(qiáng)制“軟復(fù)位”而恢復(fù)系統(tǒng)的正常運(yùn)行。
3.1 基本原理
與前面提及的軟件補(bǔ)償措施相配合,此WDT可以有效地防止由于CPU的PC“飛出”正常運(yùn)行的程序區(qū)域而導(dǎo)致的系統(tǒng)癱瘓。用微處理機(jī)片內(nèi)的一個定時器單元接收內(nèi)部時鐘提供的穩(wěn)定脈沖,當(dāng)此定時器溢出(加法型)或者為零(減法型)時提出中斷請求;對應(yīng)的中斷服務(wù)程序使PC回到初始化程序的第一行,從而實(shí)現(xiàn)強(qiáng)制性“軟復(fù)位”。程序正常運(yùn)行時,軟件每隔一定的時間(小于定時器的溢出周期)給定時器清零或置數(shù),即可預(yù)防溢出中斷而引起的誤復(fù)位。
3.2 設(shè)計(jì)示例
下面以常用的MCS-51系列單片機(jī)的T0為例,介紹軟WDT的設(shè)計(jì)思路。
首先,在初始化程序塊中設(shè)置T0的工作方式,并開啟其中斷和計(jì)數(shù)功能。設(shè)主頻為12MHz,T0為8位計(jì)數(shù)器,則:
最大計(jì)數(shù)值為(2的8次方)=255
計(jì)數(shù)速率是主頻的1/12(1次/μs),故:
溢出周期為(255+1)÷1=256μs
其次,計(jì)算各條指令的執(zhí)行耗時,以適當(dāng)?shù)拈g隔設(shè)置T0=0。由于MCS-51系列單片機(jī)的指令集中只有“乘”、“除”兩條指令耗用4個機(jī)器周期,其它均只耗用1~2個機(jī)器周期,為保險起見簡化為“每條指令均耗用2個機(jī)器周期”,即每執(zhí)行一條指令耗用2μs。據(jù)此可以推算出“清零定時器T0”的指令執(zhí)行間隔應(yīng)當(dāng)少于:
256÷2=128(條)
即每執(zhí)行不多于128條程序指令(計(jì)入多次循環(huán)執(zhí)行的指令),就應(yīng)當(dāng)執(zhí)行一條清零T0的指令,以防止軟復(fù)位被誤執(zhí)行。
第三,設(shè)計(jì)T0溢出所對應(yīng)的中斷服務(wù)程序。此子程序只須一條指令,即在T0對應(yīng)的中斷向量地址(000BH)寫入“無條件轉(zhuǎn)移”命令,把PC拖回整個程序的第1行,對單片機(jī)重新進(jìn)行初始化并獲得正確的執(zhí)行順序。由于這條中斷指令并沒有結(jié)束中斷子程序就轉(zhuǎn)出去了,為了能夠繼續(xù)響應(yīng)其它的中斷請求,可以在程序的初始化功能塊中把SP定高2字節(jié),在此2字節(jié)中寫入“中斷返回”(RETI)之后應(yīng)執(zhí)行指令的地址,以便RETI執(zhí)行后自動彈棧裝入PC,并在初始化程序結(jié)束前寫上RETI指令。
在工業(yè)控制系統(tǒng)的研制過程中,微機(jī)的抗干擾性能是系統(tǒng)成敗的關(guān)鍵之一。數(shù)十年來,人們已經(jīng)研究出了許多抗干擾的硬件措施,包括采用凈化電源、接地、屏蔽、光電耦合、數(shù)據(jù)濾波及延時除顫等等。本文針對微處理機(jī)易受干擾的部件提出了軟件抗干擾的一些方案,實(shí)用表明具有較高的經(jīng)濟(jì)性和可靠性,很容易將結(jié)合進(jìn)行工業(yè)控制程序之中,不失為一類簡便而有效的抗擾手段。
評論