新聞中心

EEPW首頁(yè) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)抗干擾技術(shù)及應(yīng)用

單片機(jī)抗干擾技術(shù)及應(yīng)用

作者: 時(shí)間:2002-02-01 來(lái)源: 收藏

引言

本文引用地址:http://m.butianyuan.cn/article/2855.htm

隨著單片微機(jī)在各個(gè)領(lǐng)域中的應(yīng)用越來(lái)越廣泛,對(duì)其可靠性要求也越來(lái)越高。單片機(jī)系統(tǒng)的可靠性由多種因素決定,其中系統(tǒng)抗干擾性能是可靠性的重要指標(biāo)。工業(yè)環(huán)境有強(qiáng)烈的電磁干擾,因此必須采取抗干擾措施,否則難以穩(wěn)定、可靠運(yùn)行。

工業(yè)環(huán)境中的干擾一般是以脈沖形式進(jìn)入微機(jī)系統(tǒng),渠道主要有三條,如圖1所示。

空間干擾(場(chǎng)干擾),電磁信號(hào)通過(guò)空間輻射進(jìn)入系統(tǒng)。

過(guò)程通道干擾,干擾通過(guò)與系統(tǒng)相連的前向通道、后向通道及與其它系統(tǒng)的相互通道進(jìn)入。

供電系統(tǒng)干擾,電磁信號(hào)通過(guò)供電線(xiàn)路進(jìn)入系統(tǒng)。

一般情況下空間干擾在強(qiáng)度上遠(yuǎn)小于其它兩種,故微機(jī)系統(tǒng)中應(yīng)重點(diǎn)防止過(guò)程通道與供電系統(tǒng)的干擾。

抗干擾措施有硬件措施和軟件措施。硬件措施如果得當(dāng),可將絕大部分干擾拒之門(mén)外,但仍然會(huì)有少數(shù)干擾進(jìn)入微機(jī)系統(tǒng),故軟件措施作為第二道防線(xiàn)必不可少。由于軟件抗干擾措施是以CPU為代價(jià)的,如果沒(méi)有硬件消除絕大多數(shù)干擾,CPU將疲于奔命,無(wú)暇顧及正常工作,嚴(yán)重影響系統(tǒng)的工作效率和實(shí)時(shí)性。因此,一個(gè)成功的抗干擾系統(tǒng)是由硬件和軟件相結(jié)合構(gòu)成的。

筆者設(shè)計(jì)的激光打標(biāo)控制系統(tǒng)由于現(xiàn)場(chǎng)使用環(huán)境較惡劣,各種干擾因素較多,如交流噪聲、電網(wǎng)干擾及其它電磁干擾等,因此必須采取有效的抗干擾措施以確保系統(tǒng)穩(wěn)定工作,下面介紹我們?cè)谠撓到y(tǒng)硬件、軟件和CPU上采取的抗干擾措施。

硬件措施

光電隔離

在輸入和輸出通道上采用光電隔離器來(lái)進(jìn)行信息傳輸是很有好處的,它將微機(jī)系統(tǒng)與各種傳感器、開(kāi)關(guān)、執(zhí)行機(jī)構(gòu)從電氣上隔離開(kāi)來(lái),很大一部分干擾將被阻擋。本系統(tǒng)中步進(jìn)電機(jī)驅(qū)動(dòng)電路采用了光電隔離器4N33。電路如圖2所示。

過(guò)壓保護(hù)電路

在輸入輸出通道上應(yīng)采用一過(guò)壓保護(hù)電路,以防引入高電壓,傷害微機(jī)系統(tǒng)。過(guò)壓保護(hù)電路由限流電阻和穩(wěn)壓管組成,限流電阻選擇要適宜,太大會(huì)引起信號(hào)衰減,太小起不到保護(hù)穩(wěn)壓管的作用。穩(wěn)壓管的選擇也要適宜,其穩(wěn)壓值以略高于最高傳送信號(hào)電壓為宜,太低將對(duì)有效信號(hào)起限幅效果,使信號(hào)失真。步進(jìn)電機(jī)驅(qū)動(dòng)電路即采用過(guò)壓保護(hù)電路。

抗干擾電源

微機(jī)系統(tǒng)供電線(xiàn)路是干擾的主要來(lái)源,電源采用隔離變壓器接入電網(wǎng),可以防止電網(wǎng)的干擾侵入微機(jī)系統(tǒng)。隔離變壓器與普通變壓器的不同之處在于它在初級(jí)和次級(jí)之間加了一層屏蔽層,并將它和鐵芯一起接地。

配置去耦電容

原則上每個(gè)集成電路芯片都應(yīng)安置一個(gè)0.01mF的陶瓷電容器,可以消除大部分高頻干擾。

良好接地

本系統(tǒng)既有模擬電路又有數(shù)字電路,因此數(shù)字地與模擬地要分開(kāi),最后只在一點(diǎn)相連,如果兩者不分,則會(huì)互相干擾。

軟件措施

單片機(jī)在輸出信號(hào)時(shí),外部干擾有可能使信號(hào)出錯(cuò)。本系統(tǒng)中單片機(jī)發(fā)出的驅(qū)動(dòng)步進(jìn)電機(jī)的信號(hào)經(jīng)鎖存器鎖存后傳送給驅(qū)動(dòng)電路,鎖存器對(duì)干擾非常敏感,當(dāng)鎖存線(xiàn)上出現(xiàn)干擾時(shí),會(huì)盲目鎖存當(dāng)前數(shù)據(jù),而不管是否有效。因此首先應(yīng)將鎖存器與單片機(jī)安裝在同一電路板上,使傳輸線(xiàn)上傳送的是已經(jīng)鎖存好的控制信號(hào)。在軟件上,最有效的方法就是重復(fù)輸出同一個(gè)信號(hào),只要重復(fù)周期盡可能短,鎖存器接收到一個(gè)被干擾的錯(cuò)誤信號(hào)后還來(lái)不及作出有效的反應(yīng),一個(gè)正確的輸出信號(hào)又來(lái)到,就可以及時(shí)防止錯(cuò)誤動(dòng)作的產(chǎn)生。

CPU抗干擾措施

前面幾項(xiàng)抗干擾措施是針對(duì)I/O通道,干擾還未作用到單片機(jī)本身,這時(shí)單片機(jī)還能正確無(wú)誤地執(zhí)行各種抗干擾程序,當(dāng)干擾作用到單片機(jī)本身時(shí)(通過(guò)干擾三總線(xiàn)等),單片機(jī)將不能按正常狀態(tài)執(zhí)行程序,從而引起混亂。如何發(fā)現(xiàn)單片機(jī)受到干擾,如何攔截失去控制的程序流向,如何使系統(tǒng)的損失減小,如何恢復(fù)系統(tǒng)的正常運(yùn)行,這些就是CPU抗干擾需要解決的問(wèn)題。我們采用了以下幾種方法。

人工復(fù)位

對(duì)于失控的CPU,最簡(jiǎn)單的方法是使其復(fù)位,程序自動(dòng)從0000H開(kāi)始執(zhí)行。為此只要在單片機(jī)的RESET端加上一個(gè)高電平信號(hào),并持續(xù)10ms以上即可。

掉電保護(hù)

電網(wǎng)瞬間斷電或電壓突然下降將使微機(jī)系統(tǒng)陷入混亂狀態(tài),電網(wǎng)電壓恢復(fù)正常后,微機(jī)系統(tǒng)難以恢復(fù)正常。對(duì)付這一類(lèi)事故的有效方法就是掉電保護(hù)。掉電信號(hào)由硬件電路檢測(cè)到,加到單片機(jī)的外部中斷輸入端。軟件中斷將掉電中斷規(guī)定為高級(jí)中斷,使系統(tǒng)及時(shí)對(duì)掉電作出反應(yīng)。在掉電中斷子程序中,首先進(jìn)行現(xiàn)場(chǎng)保護(hù),保存當(dāng)時(shí)重要的狀態(tài)參數(shù),當(dāng)電源恢復(fù)正常時(shí),CPU重新復(fù)位,恢復(fù)現(xiàn)場(chǎng),繼續(xù)未完成的工作。

睡眠抗干擾

CMOS型的51系列單片機(jī)具有睡眠狀態(tài),此時(shí)只有定時(shí)/計(jì)數(shù)系統(tǒng)和中斷系統(tǒng)處于工作狀態(tài)。這時(shí)CPU對(duì)系統(tǒng)三總線(xiàn)上出現(xiàn)的干擾不會(huì)作出任何反應(yīng),從而大大降低系統(tǒng)對(duì)干擾的敏感程度。

我們仔細(xì)分析系統(tǒng)軟件后發(fā)現(xiàn),CPU很多情況下是在執(zhí)行一些等待指令和循環(huán)檢查程序,由于這時(shí)CPU雖沒(méi)有重要工作,但卻是清醒的,很容易受干擾。讓CPU在沒(méi)有正常工作時(shí)休眠,必要時(shí)再由中斷系統(tǒng)來(lái)喚醒它,之后又處于休眠。采用這種安排之后,大多數(shù)CPU可以有50~95%的時(shí)間用于睡眠,從而使CPU受到隨機(jī)干擾的威脅大大降低,同時(shí)降低了CPU的功耗。

指令冗余

當(dāng)CPU受到干擾后,往往將一些操作數(shù)當(dāng)作指令碼來(lái)執(zhí)行,引起程序混亂。這時(shí)我們首先要盡快將程序納入正軌(執(zhí)行真正的指令系列)。MCS-51系統(tǒng)中所有指令都不超過(guò)3個(gè)字節(jié),而且有很多單字節(jié)指令。當(dāng)程序彈飛到某一條單字節(jié)指令上時(shí),便自動(dòng)納入正軌。當(dāng)彈飛到某一雙字節(jié)或三字書(shū)指令上時(shí),有可能落到其操作數(shù)上,從而繼續(xù)出錯(cuò)。因此,我們應(yīng)多采用單字節(jié)指令,并在關(guān)鍵的地方人為地插入一些單字節(jié)指令(NOP),或?qū)⒂行巫謺?shū)指令重復(fù)書(shū)寫(xiě),這便是指令冗余。

在雙字節(jié)和三字節(jié)指令之后插入兩條NOP指令,可保護(hù)其后的指令不被拆散?;蛘哒f(shuō),某指令前如果插入兩條NOP指令,則這條指令就不會(huì)被前面沖下來(lái)的失控程序拆散,并將被完整執(zhí)行,從而使程序走上正軌。但不能加入太多的冗余指令,以免明顯降低程序正常運(yùn)行的效率。因此,常在一些對(duì)程序流向起決定作用的指令之前插入兩條NOP指令,以保證彈飛的程序迅速納入正確的控制軌道。此類(lèi)指令有:RET、RETI、LCALLSJMP、JZCJNE等。在某些對(duì)系統(tǒng)工作狀態(tài)至關(guān)重要的指令(SETB EA之類(lèi))前也可插人兩條NOP指令,以保證被正確執(zhí)行。上述關(guān)鍵指令中,RETRETI本身即為單字書(shū)指令,可以直接用其本身來(lái)代替NOP指令,但有可能增加潛在危險(xiǎn),不如NOP指令安全。

軟件陷阱

指令冗余使彈飛的程序安定下來(lái)是有條件的,首先彈飛的程序必須落到程序區(qū),其次必須執(zhí)行到冗余指令。當(dāng)彈飛的程序落到非程序區(qū)(EPROM中未使用的空間、程序中的數(shù)據(jù)表格區(qū))時(shí)前一個(gè)條件即不滿(mǎn)足,當(dāng)彈飛的程序在沒(méi)有碰到冗余指令之前,已經(jīng)自動(dòng)形成一個(gè)死循環(huán),這時(shí)第二個(gè)條件也不滿(mǎn)足。對(duì)付前一種情況采取的措施就是設(shè)立軟件陷阱,對(duì)于后一種情況采取的措施是建立程序運(yùn)行監(jiān)視系統(tǒng)(WATCHDOG)。

所謂軟件陷阱,就是一條引導(dǎo)指令,強(qiáng)行將捕獲的程序引向?qū)Τ绦虺鲥e(cuò)進(jìn)行處理的程序。如果我們把這段程序的入口標(biāo)號(hào)稱(chēng)為ERR的話(huà),軟件陷阱即為一條LJMP ERR指令,為加強(qiáng)其捕捉效果,一般還在它前面加兩條NOP指令,因此,真正的軟件陷阱由三條指令構(gòu)成:

NOP

NOP

LJIMP ERR

軟件陷阱安排在下列四種地方:

(1)未使用的中斷向量區(qū)。當(dāng)干擾使未使用的中斷開(kāi)放,并激活這些中斷時(shí),就會(huì)進(jìn)一步引起混亂。如果在這些地方布上陷阱,就能及時(shí)捕捉到錯(cuò)誤中斷。

(2)未使用的大片ROM空間?,F(xiàn)在使用EPROM都很少將其全部用完。對(duì)于剩余的大片未編程的ROM空間,一般均維持原狀(0FFH)0FFH對(duì)于指令系統(tǒng),是一條單字節(jié)指令(MOV R7,A),程序彈飛到這一區(qū)域后將順流而下,不再跳躍(除非受到新的干擾)我們只要每隔一段設(shè)置一個(gè)陷阱,就一定能捕捉到彈飛的程序。軟件陷阱一定要指向出錯(cuò)處理過(guò)程ERR。我們可以將ERR字排在0030H開(kāi)始的地方,程序不管怎樣修改,編譯后ERR的地址總是固定的(因?yàn)樗懊娴闹袛嘞蛄繀^(qū)是固定的)。這樣我們就可以用00 00 02 00 30五個(gè)字節(jié)作為陷阱來(lái)填充ROM中的未使用空間,或者每隔一段設(shè)置一個(gè)陷阱(02 00 30),其它單元保持0FFH不變。

(3)表格。有兩類(lèi)表格,一類(lèi)是數(shù)據(jù)表格,供MOVC A,@A+PC指令或MOVC A,@A+DPTR指令使用,其內(nèi)容完全不是指令。另一類(lèi)是散轉(zhuǎn)表格,供JMP @A+DPTR指令使用,其內(nèi)容為一系列的三字節(jié)指令 LJMP或兩字節(jié)指令 AJMP。由于表格內(nèi)容和檢索值有一一對(duì)應(yīng)關(guān)系,在表格中間安排陷阱將會(huì)破壞其連續(xù)性和對(duì)應(yīng)關(guān)系,只能在表格的最后安排五字節(jié)陷阱(NOP NOP LJMP ERR)。

(4)程序區(qū)。程序區(qū)是由一串串執(zhí)行指令構(gòu)成的,在這些指令串之間常有一些斷裂點(diǎn),正常執(zhí)行的程序到此便不會(huì)繼續(xù)往下執(zhí)行了,這類(lèi)指令有JMP、RET等。這時(shí)PC的值應(yīng)發(fā)生正常跳變。如果還要順次往下執(zhí)行,必然就出錯(cuò)了。當(dāng)然,彈飛來(lái)的程序剛好落到斷裂點(diǎn)的操作數(shù)上或落到前面指令的操作數(shù)上(又沒(méi)有在這條指令之前使用冗余指令),則程序就會(huì)越過(guò)斷裂點(diǎn),繼續(xù)往前沖。我們?cè)谶@種地方安排陷阱之后,就能有效地捕捉住它,而又不影響正常執(zhí)行的程序流程。例如:

……

AJMP ABC

NOP

NOP

LJMP ERR

……

ABC:MOV A,R2

RET

NOP

NOP

LJMP ERR

ERR: ……

由于軟件陷阱都安排在程序正常執(zhí)行不到的地方,故不會(huì)影響程序執(zhí)行效率。

 

結(jié)語(yǔ)

綜上所述,通過(guò)對(duì)單片機(jī)應(yīng)用系統(tǒng)的軟硬件全面考慮,并針對(duì)不同的情況采取不同的技術(shù)措施,保證了系統(tǒng)準(zhǔn)確、可靠運(yùn)行。激光打標(biāo)控制系統(tǒng)采用了上述抗干擾措施后,系統(tǒng)可靠性大大增強(qiáng),運(yùn)行穩(wěn)定,效果理想,現(xiàn)已批量生產(chǎn),取得了良好的經(jīng)濟(jì)效益。■

 

參考文獻(xiàn)

1.陳光東,趙性初,單片微型計(jì)算機(jī)原理與接口技術(shù),華中理工大學(xué)出版社,1995:150。

2.邵貝貝,單片機(jī)系統(tǒng)可靠性技術(shù)及發(fā)展,電子產(chǎn)品世界,1998;8:20-21。



關(guān)鍵詞:

評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉