《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 業(yè)界動(dòng)態(tài) > 單片計(jì)算機(jī)系統(tǒng)抗干擾的軟件途徑

單片計(jì)算機(jī)系統(tǒng)抗干擾的軟件途徑

2009-03-24
作者:楊華舒 楮福濤

  摘? 要: 基于微機(jī)主要部件的抗擾性能試驗(yàn),提出了幾種在單片微機(jī)上行之有效的軟件抗干擾對(duì)策,探索了抗干擾程序的原理及設(shè)計(jì)方法。

  關(guān)鍵詞: 工業(yè)控制? 單片計(jì)算機(jī)? 軟件抗干擾

?

  對(duì)于研制微機(jī)工控系統(tǒng)的科技人員而言,系統(tǒng)自身及應(yīng)用環(huán)境產(chǎn)生的各種電磁噪聲仍是普遍的困擾因素。許多應(yīng)用系統(tǒng)在進(jìn)行仿真調(diào)試和實(shí)驗(yàn)室內(nèi)的聯(lián)機(jī)試運(yùn)行時(shí)都是成功的,然而一旦進(jìn)入現(xiàn)場(chǎng)使用,系統(tǒng)則會(huì)產(chǎn)生預(yù)料以外的誤動(dòng)作或誤顯示,嚴(yán)重時(shí)甚至導(dǎo)致前期研制成果基本失效,浪費(fèi)了寶貴的時(shí)間和人力物力。因此,如何在系統(tǒng)研制的過(guò)程中對(duì)干擾源進(jìn)行正確的分析,如何提高系統(tǒng)各部分及整體抗電磁干擾的能力,已經(jīng)日益引起人們的高度重視。以往對(duì)于電磁干擾的抑制主要側(cè)重于采取硬件措施,例如電磁隔離、去耦濾波、噪聲補(bǔ)償、CPU“看門(mén)狗”等。

  筆者在研制數(shù)控設(shè)備的過(guò)程中對(duì)單片機(jī)受到的常見(jiàn)干擾進(jìn)行了試驗(yàn)分析,采用了相應(yīng)的軟件抑制及補(bǔ)償措施,室內(nèi)模擬噪聲測(cè)試和現(xiàn)場(chǎng)使用均證明了這些方法的有效性。

1 單片機(jī)的各部分對(duì)干擾信號(hào)的反應(yīng)

  單片機(jī)屬于數(shù)字系統(tǒng),各邏輯元件都有相應(yīng)的閾電平和噪聲容限,外來(lái)噪聲只要不超過(guò)邏輯元件的容限值,整個(gè)系統(tǒng)就能維持正常。然而一旦侵入系統(tǒng)的噪聲超過(guò)了某種容限,此干擾信號(hào)就會(huì)被邏輯器件放大、整形,成為產(chǎn)生誤動(dòng)作的重要原因。倘若干擾改變了觸發(fā)器或存儲(chǔ)器的信息,則在噪聲消失后系統(tǒng)也不能恢復(fù)正常運(yùn)行。因此,在分析計(jì)算機(jī)系統(tǒng)受干擾的原因時(shí),應(yīng)當(dāng)注意其對(duì)噪聲信號(hào)的存儲(chǔ)或滯留特性。

  我們借鑒美國(guó)電器制造商協(xié)會(huì)(NEMA)提出的工控微機(jī)抗擾度試驗(yàn)標(biāo)準(zhǔn),將放電干擾電壓提高到2kV,檢測(cè)常用的MCS—51系列芯片各部分的超??箶_能力和受擾結(jié)果,以分析確定相應(yīng)的軟件對(duì)策。試驗(yàn)原理及觸點(diǎn)的放電波形、電纜感應(yīng)的干擾電流波形分別如圖1~圖3所示,試驗(yàn)時(shí)將圖1中剩余的電纜芯線分別接到集成電路的受試引腳上,每次干擾試驗(yàn)持續(xù)6min。

?

1.1 中央處理器CPU

  CPU屬于高速數(shù)字器件,易受干擾的有運(yùn)算器、控制器和控制寄存器。當(dāng)電磁干擾信號(hào)竄入時(shí),CPU將錯(cuò)誤地執(zhí)行指令,引起誤動(dòng)作或者錯(cuò)誤的結(jié)果;而控制寄存器中的信息如果被噪聲修改,將導(dǎo)致初始化錯(cuò)誤、尋址失敗乃至系統(tǒng)癱瘓。試驗(yàn)表明,干擾信號(hào)大多數(shù)由總線導(dǎo)入CPU內(nèi);其中與外界聯(lián)系最頻繁、因而最容易受干擾的是程序指針PC,這種干擾往往引發(fā)致命錯(cuò)誤,屬于重點(diǎn)防范和重點(diǎn)糾錯(cuò)的對(duì)象。

1.2 特殊功能寄存器SFR

  SFR包括各種I/O端口的寄存器、各種片內(nèi)部件的工作方式寄存器,以及堆棧指針、數(shù)據(jù)指針等等,其特點(diǎn)是傳遞數(shù)據(jù)的速度高,能夠與CPU的運(yùn)行密切配合。如果某個(gè)SFR被干擾信號(hào)改寫(xiě),則意味著程序運(yùn)行的結(jié)果異常,輕者改變單片機(jī)內(nèi)各部件的操作控制,重則導(dǎo)致整個(gè)系統(tǒng)的輸出紊亂,引發(fā)故障或安全事故。因此,對(duì)于與程序有關(guān)的SFR內(nèi)容必須提供及時(shí)有效的保護(hù)。

1.3 存儲(chǔ)器MEM

  微處理機(jī)的存儲(chǔ)器包括片內(nèi)存儲(chǔ)器及片外擴(kuò)展的存儲(chǔ)器。為了增強(qiáng)抑制噪聲的能力,工控計(jì)算機(jī)的數(shù)據(jù)存儲(chǔ)器和程序存儲(chǔ)器一般分屬兩個(gè)器件。噪聲試驗(yàn)表明:程序存儲(chǔ)器(EEPROM或者EPROM)的抗擾度最高,經(jīng)過(guò)引腳噪聲超常耦合試驗(yàn)后芯片內(nèi)容毫無(wú)變化;單片機(jī)內(nèi)部的數(shù)據(jù)存儲(chǔ)器(片內(nèi)RAM)抗擾度也較為滿(mǎn)意,經(jīng)過(guò)9次試驗(yàn)后僅有兩個(gè)字節(jié)的內(nèi)容發(fā)生了改變,累積變化率不到1%;片外RAM(6264)的抗擾性能相對(duì)較差,在6次試驗(yàn)后,其內(nèi)容的累計(jì)變化率已達(dá)8.05%。因此,在干擾信號(hào)較強(qiáng)的環(huán)境中運(yùn)行的工控微機(jī),其較持久的和重要的數(shù)據(jù)應(yīng)當(dāng)保存在片內(nèi)RAM之中,在擴(kuò)展的RAM中只宜保存臨時(shí)數(shù)據(jù)(中間變量),否則應(yīng)當(dāng)采用后述方法在應(yīng)用程序中實(shí)施數(shù)據(jù)恢復(fù)。

2 軟件補(bǔ)償措施

  對(duì)于已經(jīng)侵入微處理機(jī)的噪聲,必須采取能夠維持系統(tǒng)功能的對(duì)應(yīng)措施,以免出現(xiàn)意外停機(jī)或意外啟動(dòng),甚至引起惡性事故。對(duì)CPU的誤動(dòng)作和各種存儲(chǔ)器內(nèi)容的誤修改,在應(yīng)用軟件中插入相應(yīng)的程序模塊,進(jìn)行主動(dòng)補(bǔ)償是一種簡(jiǎn)便而可靠的方法。

2.1 主動(dòng)初始化

  這里的“初始化”泛指在各段程序中,對(duì)單片機(jī)及片外擴(kuò)展器件的各種功能、端口或者方式、狀態(tài)等采取的永久性的或者臨時(shí)的設(shè)置。我們不僅要保證上電或復(fù)位后軟件能夠正確地實(shí)現(xiàn)各種級(jí)別的初始化,而且在程序中每次使用某種功能前,都要再一次對(duì)相應(yīng)的控制寄存器設(shè)定動(dòng)作模式。實(shí)踐證明,這一措施可以大大提高系統(tǒng)對(duì)于入侵干擾的自恢復(fù)性能。

2.2 數(shù)據(jù)冗余化

  在噪聲幅度較大的環(huán)境中,采用冗余數(shù)據(jù)法可以明顯地增加系統(tǒng)的可靠性,這種方法對(duì)于傳輸系統(tǒng)的永久性硬件故障或者干擾引入的數(shù)據(jù)錯(cuò)誤都具有明顯的糾錯(cuò)效果。采用的主要措施是給重要的數(shù)據(jù)添加冗余位,延長(zhǎng)數(shù)據(jù)—代碼之間的漢明(hamming)距離以增強(qiáng)檢測(cè)和糾正錯(cuò)誤的能力。圖4表明了這種方式的原理,完全無(wú)冗余性的代碼漢明距離為1。

  冗余化碼系在遠(yuǎn)距離數(shù)字通訊傳輸技術(shù)中應(yīng)用較為普遍,但在工業(yè)控制中的應(yīng)用尚不多見(jiàn)。圖4A代表工控技術(shù)中的一般數(shù)據(jù)碼,無(wú)檢測(cè)錯(cuò)誤的能力。奇偶校驗(yàn)則是在數(shù)據(jù)中增加1位冗余位(圖4B),使?jié)h明距離變?yōu)?,因此可以檢測(cè)奇數(shù)位錯(cuò)誤。若再增加冗余位使碼系間的漢明距離延長(zhǎng)為3(圖4C),還可具有校正1位錯(cuò)誤的能力。在干擾信號(hào)特別強(qiáng)烈的場(chǎng)合中,控制或采集終端與上位機(jī)之間的串行傳送還可以考慮采用循環(huán)冗余校驗(yàn)(CRC)手段來(lái)增加數(shù)據(jù)的可靠性。

2.3 重復(fù)執(zhí)行

  程序指令在執(zhí)行的過(guò)程中或者保持(鎖存)之后,都有可能被噪聲修改而導(dǎo)致控制失效乃至引發(fā)事故,為此應(yīng)當(dāng)盡量增加重要指令的執(zhí)行次數(shù)以糾正干擾造成的錯(cuò)誤。對(duì)于頻率較低的傳感器數(shù)據(jù),建議在有效時(shí)間內(nèi)多次采集并比較;對(duì)于控制外部設(shè)備的指令,則需要多次重復(fù)執(zhí)行以確保有關(guān)信號(hào)的可靠性。為達(dá)此目的,可把重要的指令設(shè)計(jì)成定時(shí)掃描模塊,使其在整個(gè)程序的循環(huán)運(yùn)行過(guò)程中反復(fù)執(zhí)行。如此即使干擾信號(hào)改寫(xiě)了指令內(nèi)容,也能在受控設(shè)備的反應(yīng)時(shí)間內(nèi)自動(dòng)恢復(fù)正常。

2.4 重要數(shù)據(jù)的保護(hù)和恢復(fù)

  編寫(xiě)專(zhuān)門(mén)的數(shù)據(jù)保護(hù)子程序,是提高工控微機(jī)系統(tǒng)可靠性的有效途徑。在編寫(xiě)程序的過(guò)程中,對(duì)于由指令改變結(jié)果性質(zhì)的數(shù)據(jù),可以考慮在每次改變后都盡可能地保護(hù)起來(lái),以便在需要時(shí)能夠恢復(fù)正確值。 對(duì)于大多數(shù)工控微處理機(jī)而言,在運(yùn)行錯(cuò)誤而強(qiáng)制“復(fù)位”之后,I/O端口和特殊寄存器SFR中的內(nèi)容都將變成芯片出廠時(shí)的設(shè)定值[4],這很可能會(huì)引起整個(gè)系統(tǒng)的運(yùn)行混亂。因此計(jì)算機(jī)在重新啟動(dòng)后,應(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ù)存儲(chǔ)器。這種新型芯片具有很高的抗干擾性能,其缺點(diǎn)是目前的價(jià)位較高。

3 片內(nèi)軟WDT監(jiān)控

  “看門(mén)狗”(WDT)已經(jīng)成為工控微機(jī)必不可少的成員之一,其通常采用軟件與片外專(zhuān)門(mén)電路相結(jié)合的技術(shù),來(lái)防止CPU程序的“跑飛”。我們?cè)谡n題的研究過(guò)程中注意到,利用微處理機(jī)內(nèi)部閑置的定時(shí)/計(jì)數(shù)器,配合以適當(dāng)?shù)某绦蚓涂梢苑奖愕貥?gòu)成WDT,在PC異常時(shí)能夠及時(shí)有效地強(qiáng)制“軟復(fù)位”而恢復(fù)系統(tǒng)的正常運(yùn)行。

3.1 基本原理

  與前面提及的軟件補(bǔ)償措施相配合,此WDT可以有效地防止由于CPU的PC“飛出”正常運(yùn)行的程序區(qū)域而導(dǎo)致的系統(tǒng)癱瘓。用微處理機(jī)片內(nèi)的一個(gè)定時(shí)器單元接收內(nèi)部時(shí)鐘提供的穩(wěn)定脈沖,當(dāng)此定時(shí)器溢出(加法型)或者為零(減法型)時(shí)提出中斷請(qǐng)求;對(duì)應(yīng)的中斷服務(wù)程序使PC回到初始化程序的第一行,從而實(shí)現(xiàn)強(qiáng)制性“軟復(fù)位”。 程序正常運(yùn)行時(shí),軟件每隔一定的時(shí)間(小于定時(shí)器的溢出周期)給定時(shí)器清零或置數(shù),即可預(yù)防溢出中斷而引起的誤復(fù)位。

3.2 設(shè)計(jì)示例

  下面以常用的MCS-51系列單片機(jī)的T0為例,介紹軟WDT的設(shè)計(jì)思路。

  首先,在初始化程序塊中設(shè)置T0的工作方式,并開(kāi)啟其中斷和計(jì)數(shù)功能。設(shè)主頻為12MHz,T0為8位計(jì)數(shù)器,則:

  最大計(jì)數(shù)值為 28-1=255

  計(jì)數(shù)速率是主頻的112(1次/μs),故:

  溢出周期為(255+1)÷1=256μs

  其次,計(jì)算各條指令的執(zhí)行耗時(shí),以適當(dāng)?shù)拈g隔設(shè)置 T0=0。由于MCS—51系列單片機(jī)的指令集中只有“乘”、“除”兩條指令耗用4個(gè)機(jī)器周期,其它均只耗用1~2個(gè)機(jī)器周期,為保險(xiǎn)起見(jiàn)簡(jiǎn)化為“每條指令均耗用2個(gè)機(jī)器周期”,即每執(zhí)行一條指令耗用2μs。據(jù)此可以推算出“清零定時(shí)器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溢出所對(duì)應(yīng)的中斷服務(wù)程序。此子程序只須一條指令,即在T0對(duì)應(yīng)的中斷向量地址(000BH)寫(xiě)入“無(wú)條件轉(zhuǎn)移”命令,把PC 拖回整個(gè)程序的第1行,對(duì)單片機(jī)重新進(jìn)行初始化并獲得正確的執(zhí)行順序。由于這條中斷指令并沒(méi)有結(jié)束中斷子程序就轉(zhuǎn)出去了,為了能夠繼續(xù)響應(yīng)其它的中斷請(qǐng)求,可以在程序的初始化功能塊中把SP定高2字節(jié),在此2字節(jié)中寫(xiě)入“中斷返回” (RETI)之后應(yīng)執(zhí)行指令的地址,以便RETI執(zhí)行后自動(dòng)彈棧裝入PC,并在初始化程序結(jié)束前寫(xiě)上RETI指令。

  在工業(yè)控制系統(tǒng)的研制過(guò)程中,微機(jī)的抗干擾性能是系統(tǒng)成敗的關(guān)鍵之一。數(shù)十年來(lái),人們已經(jīng)研究出了許多抗干擾的硬件措施,包括采用凈化電源、接地、屏蔽、光電耦合、數(shù)據(jù)濾波及延時(shí)除顫等等。本文針對(duì)微處理機(jī)易受干擾的部件提出了軟件抗干擾的一些方案,實(shí)用表明具有較高的經(jīng)濟(jì)性和可靠性,很容易將其結(jié)合進(jìn)工業(yè)控制程序之中,不失為一類(lèi)簡(jiǎn)便而有效的抗擾手段。

?

參考文獻(xiàn)

1 張國(guó)屏.電子儀器的干擾和抑制.北京:水利電力出版社,1989

2 郝鴻安.常用數(shù)字集成電路應(yīng)用手冊(cè).北京:中國(guó)計(jì)量出版社,1987

3 山崎弘郎.電子回路のぅ???技術(shù),?—?社,1981

4 黃一夫.微型計(jì)算機(jī)控制技術(shù).北京:機(jī)械工業(yè)出版社,1990

5 周? 斌.機(jī)電一體化實(shí)用技術(shù)手冊(cè).北京:兵器工業(yè)出版社,1994協(xié)作單位

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。