技術總結:單片機軟件抗幹擾的幾種辦法
發布時間:2015-02-01 責任編輯:sherryyu
【導讀】在(zai)工(gong)程(cheng)實(shi)踐(jian)中(zhong)通(tong)常(chang)都(dou)是(shi)幾(ji)種(zhong)抗(kang)幹(gan)擾(rao)方(fang)法(fa)並(bing)用(yong),互(hu)相(xiang)補(bu)充(chong)完(wan)善(shan),才(cai)能(neng)取(qu)得(de)較(jiao)好(hao)的(de)抗(kang)幹(gan)擾(rao)效(xiao)果(guo)。從(cong)根(gen)本(ben)上(shang)來(lai)說(shuo),硬(ying)件(jian)抗(kang)幹(gan)擾(rao)是(shi)主(zhu)動(dong)的(de),而(er)軟(ruan)件(jian)是(shi)抗(kang)幹(gan)擾(rao)是(shi)被(bei)動(dong)的(de)。本(ben)文(wen)將(jiang)以(yi)MCS-51單片機係統為例,對微機係統軟件抗幹擾方法進行研究。
在提高硬件係統抗幹擾能力的同時,軟件抗幹擾以其設計靈活、節省硬件資源、可靠性好越來越受到重視。下麵以MCS-51單片機係統為例,對微機係統軟件抗幹擾方法進行研究。
1、軟件抗幹擾方法的研究
在工程實踐中,軟件抗幹擾研究的內容主要是:一、消除模擬輸入信號的噪聲(如數字濾波技術);二、程序運行混亂時使程序重入正軌的方法。本文針對後者提出了幾種有效的軟件抗幹擾方法。
1.1 指令冗餘
CPU取指令過程是先取操作碼,再取操作數。當PC受幹擾出現錯誤,程序便脫離正常軌道“亂飛”,當亂飛到某雙字節指令,若取指令時刻落在操作數上,誤將操作數當作操作碼,程序將出錯。若“飛”到了三字節指令,出錯機率更大。
zaiguanjiandifangrenweicharuyixiedanzijiezhiling,huojiangyouxiaodanzijiezhilingzhongxiechengweizhilingrongyu。tongchangshizaishuangzijiezhilinghesanzijiezhilinghoucharulianggezijieyishangdeNOP。這樣即使亂飛程序飛到操作數上,由於空操作指令NOP的存在,避免了後麵的指令被當作操作數執行,程序自動納入正軌。
此外,對係統流向起重要作用的指令如RET、RETI、LCALL、LJMP、JC等指令之前插入兩條NOP,也可將亂飛程序納入正軌,確保這些重要指令的執行。
1.2 攔截技術
所suo謂wei攔lan截jie,是shi指zhi將jiang亂luan飛fei的de程cheng序xu引yin向xiang指zhi定ding位wei置zhi,再zai進jin行xing出chu錯cuo處chu理li。通tong常chang用yong軟ruan件jian陷xian阱jing來lai攔lan截jie亂luan飛fei的de程cheng序xu。因yin此ci先xian要yao合he理li設she計ji陷xian阱jing,其qi次ci要yao將jiang陷xian阱jing安an排pai在zai適shi當dang的de位wei置zhi。
(1)軟件陷阱的設計
dangluanfeichengxujinrufeichengxuqu,rongyuzhilingbianwufaqizuoyong。tongguoruanjianxianjing,lanjieluanfeichengxu,jiangqiyinxiangzhidingweizhi,zaijinxingchucuochuli。ruanjianxianjingshizhiyonglaijiangbuhuodeluanfeichengxuyinxiangfuweirukoudizhi0000H的指令。通常在EPROM中非程序區填入以下指令作為軟件陷阱:
NOPNOPLJMP 0000H其機器碼為0000020000。
(2)陷阱的安排
通常在程序中未使用的EPROM空間填0000020000。最後一條應填入020000,當(dang)亂(luan)飛(fei)程(cheng)序(xu)落(luo)到(dao)此(ci)區(qu),即(ji)可(ke)自(zi)動(dong)入(ru)軌(gui)。在(zai)用(yong)戶(hu)程(cheng)序(xu)區(qu)各(ge)模(mo)塊(kuai)之(zhi)間(jian)的(de)空(kong)餘(yu)單(dan)元(yuan)也(ye)可(ke)填(tian)入(ru)陷(xian)阱(jing)指(zhi)令(ling)。當(dang)使(shi)用(yong)的(de)中(zhong)斷(duan)因(yin)幹(gan)擾(rao)而(er)開(kai)放(fang)時(shi),在(zai)對(dui)應(ying)的(de)中(zhong)斷(duan)服(fu)務(wu)程(cheng)序(xu)中(zhong)設(she)置(zhi)軟(ruan)件(jian)陷(xian)阱(jing),能(neng)及(ji)時(shi)捕(bu)獲(huo)錯(cuo)誤(wu)的(de)中(zhong)斷(duan)。如(ru)某(mou)應(ying)用(yong)係(xi)統(tong)雖(sui)未(wei)用(yong)到(dao)外(wai)部(bu)中(zhong)斷(duan)1,外部中斷1的中斷服務程序可為如下形式:
NOPNOPRETI返回指令可用“RETI”,也可用“LJMP0000H”。如果故障診斷程序與係統自恢複程序的設計可靠、完善,用“LJMP0000H”作返回指令可直接進入故障診斷程序,盡早地處理故障並恢複程序的運行。
考慮到程序存貯器的容量,軟件陷阱一般1K空間有2-3個就可以進行有效攔截。
1.3 軟件“看門狗”技術
若失控的程序進入“死循環”,通常采用“看門狗”技術使程序脫離“死循環”。通過不斷檢測程序循環運行時間,若發現程序循環時間超過最大循環運行時間,則認為係統陷入“死循環”,需進行出錯處理。
“看門狗”技術可由硬件實現,也可由軟件實現。在工業應用中,嚴重的幹擾有時會破壞中斷方式控製字,關閉中斷。則係統無法定時“喂狗”,硬件看門狗電路失效。而軟件看門狗可有效地解決這類問題。
筆者在實際應用中,采用環形中斷監視係統。用定時器T0監視定時器T1,用定時器T1監視主程序,主程序監視定時器T0。采用這種環形結構的軟件“看門狗”具有良好的抗幹擾性能,大大提高了係統可靠性。對於需經常使用T1定時器進行串口通訊的測控係統,則定時器T1不能進行中斷,可改由串口中斷進行監控(如果用的是MCS-52係列單片機,也可用T2代替T1進行監視)。這種軟件“看門狗”監視原理是:在主程序、T0中斷服務程序、T1中斷服務程序中各設一運行觀測變量,假設為MWatch、T0Watch、T1Watch,主程序每循環一次,MWatch加1,同樣T0、T1中斷服務程序執行一次,T0Watch、T1Watch加1。在T0中斷服務程序中通過檢測T1Watch的變化情況判定T1運行是否正常,在T1中斷服務程序中檢測MWatch的變化情況判定主程序是否正常運行,在主程序中通過檢測T0Watch的變化情況判別T0是否正常工作。若檢測到某觀測變量變化不正常,比如應當加1而未加1,則轉到出錯處理程序作排除故障處理。當然,對主程序最大循環周期、定時器T0和T1定時周期應予以全盤合理考慮。限於篇幅不贅述。
2、係統故障處理、自恢複程序的設計
單片機係統因幹擾複位或掉電後複位均屬非正常複位,應進行故障診斷並能自動恢複非正常複位前的狀態。
2.1 非正常複位的識別
程序的執行總是從0000H開始,導致程序從0000H開始執行有四種可能:一、係統開機上電複位;二、軟件故障複位;三、看門狗超時未喂狗硬件複位;四、任務正在執行中掉電後來電複位。四種情況中除第一種情況外均屬非正常複位,需加以識別。
(1)硬件複位與軟件複位的識別
此處硬件複位指開機複位與看門狗複位,硬件複位對寄存器有影響,如複位後PC=0000H,SP=07H,PSW=00H等。而軟件複位則對SP、SPW無影響。故對於微機測控係統,當程序正常運行時,將SP設置地址大於07H,或者將PSW的第5位用戶標誌位在係統正常運行時設為1,那麼係統複位時隻需檢測PSW.5標誌位或SP值便可判此是否硬件複位。
由於硬件複位時片內RAM狀態是隨機的,而軟件複位片內RAM則可保持複位前狀態,因此可選取片內某一個或兩個單元作為上電標誌。設40H用來做上電標誌,上電標誌字為78H,若係統複位後40H單元內容不等於78H,則認為是硬件複位,否則認為是軟件複位,轉向出錯處理。若用兩個單元作上電標誌,則這種判別方法的可靠性更高。
(2)開機複位與看門狗故障複位的識別
開機複位與看門狗故障複位因同屬硬件複位,所以要想予以正確識別,一般要借助非易失性RAM或者EEROM。當係統正常運行時,設置一可掉電保護的觀測單元。當係統正常運行時,在定時喂狗的中斷服務程序中使該觀測單元保持正常值(設為AAH),而在主程中將該單元清零,因觀測單元掉電可保護,則開機時通過檢測該單元是否為正常值可判斷是否看門狗複位。
(3)正常開機複位與非正常開機複位的識別
識(shi)別(bie)測(ce)控(kong)係(xi)統(tong)中(zhong)因(yin)意(yi)外(wai)情(qing)況(kuang)如(ru)係(xi)統(tong)掉(diao)電(dian)等(deng)情(qing)況(kuang)引(yin)起(qi)的(de)開(kai)機(ji)複(fu)位(wei)與(yu)正(zheng)常(chang)開(kai)機(ji)複(fu)位(wei),對(dui)於(yu)過(guo)程(cheng)控(kong)製(zhi)係(xi)統(tong)尤(you)為(wei)重(zhong)要(yao)。如(ru)某(mou)以(yi)時(shi)間(jian)為(wei)控(kong)製(zhi)標(biao)準(zhun)的(de)測(ce)控(kong)係(xi)統(tong),完(wan)成(cheng)一(yi)次(ci)測(ce)控(kong)任(ren)務(wu)需(xu)1小時。在已執行測控50分(fen)鍾(zhong)的(de)情(qing)況(kuang)下(xia),係(xi)統(tong)電(dian)壓(ya)異(yi)常(chang)引(yin)起(qi)複(fu)位(wei),此(ci)時(shi)若(ruo)係(xi)統(tong)複(fu)位(wei)後(hou)又(you)從(cong)頭(tou)開(kai)始(shi)進(jin)行(xing)測(ce)控(kong)則(ze)會(hui)造(zao)成(cheng)不(bu)必(bi)要(yao)的(de)時(shi)間(jian)消(xiao)耗(hao)。因(yin)此(ci)可(ke)通(tong)過(guo)一(yi)監(jian)測(ce)單(dan)元(yuan)對(dui)當(dang)前(qian)係(xi)統(tong)的(de)運(yun)行(xing)狀(zhuang)態(tai)、係xi統tong時shi間jian予yu以yi監jian控kong,將jiang控kong製zhi過guo程cheng分fen解jie為wei若ruo幹gan步bu或huo若ruo幹gan時shi間jian段duan,每mei執zhi行xing完wan一yi步bu或huo每mei運yun行xing一yi個ge時shi間jian段duan則ze對dui監jian測ce單dan元yuan置zhi為wei關guan機ji允yun許xu值zhi,不bu同tong的de任ren務wu或huo任ren務wu的de不bu同tong階jie段duan有you不bu同tong的de值zhi,若ruo係xi統tong正zheng在zai進jin行xing測ce控kong任ren務wu或huo正zheng在zai執zhi某mou時shi間jian段duan,則ze將jiang監jian測ce單dan元yuan置zhi為wei非fei正zheng常chang關guan機ji值zhi。那na麼me係xi統tong複fu位wei後hou可ke據ju此ci單dan元yuan判pan係xi統tong原yuan來lai的de運yun行xing狀zhuang態tai,並bing跳tiao到dao出chu錯cuo處chu理li程cheng序xu中zhong恢hui複fu係xi統tong原yuan運yun行xing狀zhuang態tai。
2.2 非正常複位後係統自恢複運行的程序設計
對(dui)順(shun)序(xu)要(yao)求(qiu)嚴(yan)格(ge)的(de)一(yi)些(xie)過(guo)程(cheng)控(kong)製(zhi)係(xi)統(tong),係(xi)統(tong)非(fei)正(zheng)常(chang)複(fu)位(wei)否(fou),一(yi)般(ban)都(dou)要(yao)求(qiu)從(cong)失(shi)控(kong)的(de)那(na)一(yi)個(ge)模(mo)塊(kuai)或(huo)任(ren)務(wu)恢(hui)複(fu)運(yun)行(xing)。所(suo)以(yi)測(ce)控(kong)係(xi)統(tong)要(yao)作(zuo)好(hao)重(zhong)要(yao)數(shu)據(ju)單(dan)元(yuan)、參數的備份,如係統運行狀態、係統的進程值、當前輸入、輸出的值,當前時鍾值、觀測單元值等,這些數據既要定時備份,同時若有修改也應立即予以備份。
當在已判別出係統非正常複位的情況下,先要恢複一些必要的係統數據,如顯示模塊的初始化、片外擴展芯片的初始化等。其次再對測控係統的係統狀態、運行參數等予以恢複,包括顯示界麵等的恢複。之後再把複位前的任務、參數、運行時間等恢複,再進入係統運行狀態。
應(ying)當(dang)說(shuo)明(ming)的(de)是(shi),真(zhen)實(shi)地(di)恢(hui)複(fu)係(xi)統(tong)的(de)運(yun)行(xing)狀(zhuang)態(tai)需(xu)要(yao)極(ji)為(wei)細(xi)致(zhi)地(di)對(dui)係(xi)統(tong)的(de)重(zhong)要(yao)數(shu)據(ju)予(yu)以(yi)備(bei)份(fen),並(bing)加(jia)以(yi)數(shu)據(ju)可(ke)靠(kao)性(xing)檢(jian)查(zha),以(yi)保(bao)證(zheng)恢(hui)複(fu)的(de)數(shu)據(ju)的(de)可(ke)靠(kao)性(xing)。
其次,對多任務、多進程測控係統,數據的恢複需考慮恢複的次序問題。
係統基本初始化是指對芯片、顯示、輸入輸出方式等進行初始化,要注意輸入輸出的初始化不應造成誤動作。而複位前任務的初始化是指任務的執行狀態、運行時間等。
對於軟件抗幹擾的一些其它常用方法如數字濾波、RAMshujubaohuyujiucuodeng,xianyupianfu,benwenweizuotaolun。zaigongchengshijianzhongtongchangdoushijizhongkangganraofangfabingyong,huxiangbuchongwanshan,cainengqudejiaohaodekangganraoxiaoguo。conggenbenshanglaishuo,yingjiankangganraoshizhudongde,erruanjianshikangganraoshibeidongde。xizhizhoudaodifenxiganraoyuan,yingjianyuruanjiankangganraoxiangjiehe,wanshanxitongjiankongchengxu,shejiyiwendingkekaodedanpianjixitongshiwanquankexingde。
特別推薦
- 噪聲中提取真值!瑞盟科技推出MSA2240電流檢測芯片賦能多元高端測量場景
- 10MHz高頻運行!氮矽科技發布集成驅動GaN芯片,助力電源能效再攀新高
- 失真度僅0.002%!力芯微推出超低內阻、超低失真4PST模擬開關
- 一“芯”雙電!聖邦微電子發布雙輸出電源芯片,簡化AFE與音頻設計
- 一機適配萬端:金升陽推出1200W可編程電源,賦能高端裝備製造
技術文章更多>>
- 築基AI4S:摩爾線程全功能GPU加速中國生命科學自主生態
- 一秒檢測,成本降至萬分之一,光引科技把幾十萬的台式光譜儀“搬”到了手腕上
- AI服務器電源機櫃Power Rack HVDC MW級測試方案
- 突破工藝邊界,奎芯科技LPDDR5X IP矽驗證通過,速率達9600Mbps
- 通過直接、準確、自動測量超低範圍的氯殘留來推動反滲透膜保護
技術白皮書下載更多>>
- 車規與基於V2X的車輛協同主動避撞技術展望
- 數字隔離助力新能源汽車安全隔離的新挑戰
- 汽車模塊拋負載的解決方案
- 車用連接器的安全創新應用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索
微波功率管
微波開關
微波連接器
微波器件
微波三極管
微波振蕩器
微電機
微調電容
微動開關
微蜂窩
位置傳感器
溫度保險絲
溫度傳感器
溫控開關
溫控可控矽
聞泰
穩壓電源
穩壓二極管
穩壓管
無焊端子
無線充電
無線監控
無源濾波器
五金工具
物聯網
顯示模塊
顯微鏡結構
線圈
線繞電位器
線繞電阻




