預(yù)付費(fèi)三相電度表的抗干擾設(shè)計(jì)
抗干擾問題是從事單片機(jī)設(shè)計(jì)的工程技術(shù)人員都將碰到一個(gè)大難題,單片機(jī)的工作可靠90%取決于抗干擾設(shè)計(jì),不同系統(tǒng)的工作環(huán)境不同,干擾源不同,抗干擾所采取的措施就有所不同。
例如,工業(yè)用電度表的安裝環(huán)境較差,通常的干擾源有:電網(wǎng)電壓的波動(dòng),大型用電設(shè)備(如:天車`電爐`大電機(jī)`電焊機(jī)等)的啟停,高壓設(shè)備和電磁開關(guān)的電磁輻射等等。較強(qiáng)的干擾很容易造成IC卡電度表控制系統(tǒng)出現(xiàn)軟件故障,使程序因干擾而脫離正常運(yùn)行順序或飛出程序可執(zhí)行區(qū)而進(jìn)入死循環(huán)失去控制,如不能快速脫離此狀態(tài),恢復(fù)程序的運(yùn)行,電度表將無法正常工作。若干擾竄入計(jì)量采樣脈沖,將會(huì)導(dǎo)致計(jì)量失誤,造成單片機(jī)誤動(dòng)作而失去計(jì)量的準(zhǔn)確性。因此必須采取有效措施遏制干擾的竄入,保證電度表可靠地運(yùn)行。以IC卡預(yù)付費(fèi)三相電度表為例,闡述針對(duì)不同干擾源所采取的抗干擾措施。
電源的抗干擾設(shè)計(jì)
單片機(jī)的電源中存在著交流干擾和直流干擾。在工業(yè)現(xiàn)場中,由于生產(chǎn)負(fù)荷的變化`大型用電設(shè)備的啟停,常常造成電源電壓的波動(dòng),有時(shí)還會(huì)產(chǎn)生50~4000V持續(xù)幾個(gè)毫微秒的尖峰脈沖,很容易造成“程序失控”或“死機(jī)”,對(duì)此,采用無源四端網(wǎng)絡(luò)的抗尖峰干擾抑制器可以很好地將尖峰干擾抑制掉。對(duì)交流電轉(zhuǎn)換成直流電后所竄入的干擾信號(hào),我們采用小型直流開關(guān)電源。直流開關(guān)電源是一種采用脈沖寬度調(diào)制型電源,它省去了傳統(tǒng)的工頻變壓器,具有體積小`重量輕`效率高`電網(wǎng)電壓范圍寬`輸出電壓穩(wěn)定等特點(diǎn),并對(duì)電網(wǎng)上的高頻脈沖干擾有較強(qiáng)的隔離能力,可以抑制直流干擾。
采用開關(guān)電源并不能保證萬無一失,當(dāng)電網(wǎng)電壓波動(dòng)超過±10%時(shí),開關(guān)電源的輸出也會(huì)產(chǎn)生波動(dòng)。為了防止電網(wǎng)電壓的波動(dòng)而造成開關(guān)電源電壓的波動(dòng),并導(dǎo)致CPU的誤動(dòng)作和數(shù)據(jù)丟失等問題,采用美國TI公司的電源電壓監(jiān)視器TL7705設(shè)計(jì)了電源電壓監(jiān)視電路(如圖1所示)。該電路能隨時(shí)監(jiān)測電源電壓的變化,一旦發(fā)現(xiàn)電源故障,能及時(shí)可靠地使單片機(jī)復(fù)位,禁止對(duì)RAM的操作,避免數(shù)據(jù)破壞。被監(jiān)測的電壓由TL7705的SENSE(7)腳引入,4.6V~20V,可由RS 來設(shè)定。當(dāng)被監(jiān)測電壓為4.75V時(shí),RS 為200Ω左右。CS 和RS 構(gòu)成RC 延時(shí)網(wǎng)絡(luò),延長響應(yīng)時(shí)間,以降低噪聲影響和器件靈敏度。綜合以上措施,可以有效地抑制電源干擾的竄入。
計(jì)量采樣脈沖的抗干擾設(shè)計(jì)
計(jì)量采樣脈沖輸出接到單片機(jī)的中斷引腳,MCS-51單片機(jī)的中斷觸發(fā)方式有電平觸發(fā)和邊沿觸發(fā)兩種方式。IC卡預(yù)付費(fèi)三相電度表的采樣脈沖在工業(yè)現(xiàn)場工作時(shí)有尖峰干擾,很容易造成計(jì)量失誤,為此我們采用了邊沿觸發(fā)中斷與查詢電平相結(jié)合的方式,即在硬件上設(shè)計(jì)成中斷引腳與某一1/0引腳相連(如圖1所示),將中斷設(shè)置為邊沿觸發(fā)方式,當(dāng)CPU響應(yīng)中斷后,在中斷處理程序的開始,經(jīng)延時(shí)適當(dāng)?shù)臅r(shí)間(大于干擾脈沖寬度而小于*小的計(jì)量脈沖寬度)查詢此1/0腳電平是否符合要求,這種措施能有效地去除尖峰脈沖對(duì)計(jì)量采樣脈沖的干擾。
程序失控的處理
單片機(jī)竄入強(qiáng)干擾后,程序計(jì)數(shù)器PC的數(shù)值可能會(huì)改變,破壞程序的正常運(yùn)行,造成一些誤動(dòng)作,甚至導(dǎo)致程序“死循環(huán)”,從而引起嚴(yán)重的后果。在IC卡預(yù)付費(fèi)三相電度表中采取了如下幾個(gè)措施來解決程序失控的問題。
1 用WATCHDOG監(jiān)控程序的運(yùn)行
通常的硬件WATCHDOG在系統(tǒng)受到干擾而不能正常運(yùn)行時(shí),只發(fā)出一個(gè)復(fù)位脈沖,如果遇到長時(shí)間連續(xù)的干擾,這種WATCHDOG電路就束手無策。我們采用74LS123制作了一個(gè)WATCHDOG電路,在程序正常運(yùn)行時(shí),CPU通過一根1/0接口線定時(shí)防問該電路,使其不能發(fā)出復(fù)位脈沖。若系統(tǒng)受到連續(xù)干擾時(shí),此電路會(huì)不斷產(chǎn)生復(fù)位信號(hào),直到系統(tǒng)正常工作時(shí)為止,因而能抵抗長時(shí)間的連續(xù)干擾。CPU訪問該電路的程序如下:
CLR P1.3
NOP
NOP
SETB P1.3
設(shè)置軟件陷阱
當(dāng)程序失控而彈飛時(shí),我們?cè)趶楋w區(qū)域(一般為轉(zhuǎn)移指令后,如:LCALL RET RETI JC JNC等,未使用的中斷向量區(qū),未使用的大片ROM空間等)設(shè)置軟件陷阱,即設(shè)計(jì)一段專門處理程序執(zhí)行時(shí)出錯(cuò)的程序,以保證彈飛的程序能迅速納入正確控制軌道。軟件陷阱及出錯(cuò)處理程序如下:
NOP NOP LJMP ERR ERR:CLR EA;關(guān)中斷
MOV DPTR,#ERRI;準(zhǔn)備返回地址
PUSH DPL PUSH DPH
RETI;****中斷激活標(biāo)志 ERRI:CLR A;準(zhǔn)備復(fù)位地址
PUSH ACC PUSH ACC;壓入復(fù)位地址 RETI;**低級(jí)中斷激活標(biāo)志
系統(tǒng)復(fù)位的處理
在單片機(jī)實(shí)時(shí)控制系統(tǒng)中,大多數(shù)系統(tǒng)有它自己特定的運(yùn)行要求。一旦系統(tǒng)復(fù)位后,就不允許改變以前的狀態(tài)而重新開始運(yùn)行,但可以采取下述措施:
定時(shí)(如:每一個(gè)循環(huán)周期)將運(yùn)行過程中的重要數(shù)據(jù)寫入RAM中保護(hù)起來;
對(duì)外設(shè)的動(dòng)作控制,設(shè)立動(dòng)作標(biāo)志,并將該標(biāo)志與重要數(shù)據(jù)一并寫入PAM中保護(hù)起來;
硬件上設(shè)計(jì)一掉電保護(hù)電路。系統(tǒng)復(fù)位后,用備用電池給RAM供電,使重要數(shù)據(jù)不被破壞;
復(fù)位重新啟動(dòng)時(shí),將重要數(shù)據(jù)和動(dòng)作標(biāo)志從PAM中讀出,再據(jù)此做出判斷,發(fā)出動(dòng)作指令。這樣就保證了狀態(tài)的連續(xù)性,而不至造成控制現(xiàn)場的混亂。