劉 麒,王 影
(吉林化工學(xué)院信控學(xué)院,吉林 吉林 132022)
單片機(jī)控制系統(tǒng)的軟件抗干擾技術(shù)措施*
劉 麒*,王 影
(吉林化工學(xué)院信控學(xué)院,吉林 吉林 132022)
為了提高單片機(jī)控制系統(tǒng)在實(shí)際工作中的在軟件方面的抗干擾性,基于軟件抗干擾方法在單片機(jī)中的實(shí)現(xiàn)理論,論述了主流軟件抗干擾技術(shù)的利弊,將C語言與其他多種匯編語言相結(jié)合,對現(xiàn)有的軟件抗干擾技術(shù)的弊端進(jìn)行分析并予以解決,較之硬件抗干擾技術(shù),所提的軟件抗干擾技術(shù)可大幅提高控制系統(tǒng)的工作效率并極大的節(jié)約了系統(tǒng)計算時間,并且可廣泛應(yīng)用于單片機(jī)嵌入式的控制系統(tǒng)中。
51單片機(jī);混合編程語言;抗干擾技術(shù)
隨著工業(yè)自動化程度的快速發(fā)展,單片機(jī)憑借其優(yōu)秀的嵌入性以及強(qiáng)大的計算能力,在工業(yè)各個行業(yè)得到廣泛的應(yīng)用,國內(nèi)外學(xué)者亦對其進(jìn)行了廣泛的研究,而對其控制系統(tǒng)在抗干擾能力方面的研究大多數(shù)集中在硬件的改善,硬件的改善可解決一部分影響單片機(jī)控制系統(tǒng)的干擾源,而相當(dāng)大的一部分干擾源則是由軟件方面引起的,并且改善軟件方面的干擾源所耗成本較低,查找問題迅速,對其控制系統(tǒng)進(jìn)行較為合適的算法設(shè)計,編制適宜的控制程序即可實(shí)現(xiàn)高精度采集控制,選用最為合適的控制算法,使單片機(jī)控制系統(tǒng)在各類干擾源的影響下可以穩(wěn)定的運(yùn)行。
比較目前較為流行的集中匯編語言,C語言(C51)憑借其良好的可讀性以及較寬的可復(fù)制性,被廣泛應(yīng)用于單片機(jī)程序開發(fā)中[1]。目前已報道的文獻(xiàn)表明,應(yīng)用軟件抗干擾技術(shù)較為主流的方法是基于C語言或者基于其他類型的編程語言來實(shí)現(xiàn)的,而C51結(jié)合多種語言來提高單片機(jī)控制系統(tǒng)抗干擾性的研究鮮見報道,在已經(jīng)報道的文獻(xiàn)中亦有多個不適用的方法,因此,本文結(jié)合51單片機(jī)對其控制系統(tǒng)的抗干擾性進(jìn)行了詳細(xì)的研究,首先對其工作原理進(jìn)行了分析,結(jié)合實(shí)例著重分析了目前應(yīng)用較為廣泛的抗干擾的方法,并且對于已經(jīng)報道的文獻(xiàn)中所出現(xiàn)的不足予以糾正、改善,對所提的C51結(jié)合其他匯編語言進(jìn)行編程并給出具體控制程序,此類程序具有優(yōu)異的可復(fù)制性,對其稍作修改即可廣泛應(yīng)用于各個行業(yè)的控制領(lǐng)域。
基于單片機(jī)編制具有模塊化特點(diǎn)的控制系統(tǒng)由5個子模塊組成,其結(jié)構(gòu)示意圖如圖1所示。左圖是定時中斷服務(wù)程序,用中斷方式產(chǎn)生1 ms或其他適當(dāng)時間間隔的定時信號,并在中斷服務(wù)程序中做盡可能少的處理,如計數(shù)、設(shè)置標(biāo)識位等。右圖是系統(tǒng)主程序,在主程序的主循環(huán)中,可以對各種標(biāo)志進(jìn)行判斷,符合條件則做相應(yīng)處理,并清除相關(guān)標(biāo)志。
圖1 控制系統(tǒng)框圖
圖1所示的系統(tǒng)初始化子程序是在控制系統(tǒng)運(yùn)行之初,對單片機(jī)的各個子模塊狀態(tài)進(jìn)行預(yù)設(shè)的初始化設(shè)置,比如對各個控制變量以及數(shù)據(jù)存儲單元賦予最初的設(shè)定值;監(jiān)控模塊主要是根據(jù)實(shí)時被控對象的變化情況來選擇應(yīng)執(zhí)行的子模塊來滿足被控對象的穩(wěn)定運(yùn)行,其工作模式為一個循環(huán)往復(fù)的周期循環(huán)模式,在監(jiān)控過程中的中斷子程序會進(jìn)行中斷執(zhí)行,在斷點(diǎn)處返回并持續(xù)進(jìn)行工作,在返回到監(jiān)控模塊中,其中斷模式包括程序外以及定時器中斷等模式;本文所提抗干擾模塊是嵌入于各個子模塊中的未被占用的內(nèi)存空間中,本文將對其進(jìn)行深入分析。
2.1 數(shù)字濾波技術(shù)
利用單片機(jī)搭建的控制系統(tǒng)主要是對被控對象的外部設(shè)備進(jìn)行控制,在單片機(jī)控制系統(tǒng)進(jìn)行被控對象的實(shí)時數(shù)據(jù)采集時,采集的數(shù)據(jù)并不能精確的反應(yīng)被控對象的狀態(tài),采集數(shù)據(jù)會伴隨著一定的隨機(jī)誤差的產(chǎn)生,此類隨機(jī)誤差不可避免,因?yàn)橄到y(tǒng)中存在著或大或小的隨機(jī)性干擾源,其會干擾采集到的數(shù)據(jù)誤差具有隨機(jī)波動性,并且每次采樣的數(shù)據(jù)誤差均不相同,但是經(jīng)過多次數(shù)據(jù)采樣后,對被控對象的多組特性實(shí)時數(shù)據(jù)進(jìn)行統(tǒng)計分析,發(fā)現(xiàn)多組數(shù)據(jù)具有一定規(guī)律的特性,在硬件方面可選用電子濾波器進(jìn)行濾波,本文主要是在軟件方面進(jìn)行濾波,研究表明,軟件數(shù)字濾波技術(shù)對于精確控制被控對象具有重要作用,其具有極強(qiáng)的實(shí)時反應(yīng)被控對象的特性[2]。
2.1.1 限幅濾波算法
限幅濾波是基于同一數(shù)據(jù)采集點(diǎn)的相鄰兩次采集數(shù)值差,并將其差值的絕對值進(jìn)行比較,最終得到最大差值A(chǔ),對A進(jìn)行判斷,如果小于等于設(shè)定精度值,則本次數(shù)據(jù)采集為有效過程,反之應(yīng)去除此采集數(shù)據(jù)延用上一次的采集值。
算法的程序代碼如下:
//============================
#define A//允許的最大差值
char data;//上一次的數(shù)據(jù)
char filter()
{
char datanew;//新數(shù)據(jù)變量
datanew=get_data();//獲得新數(shù)據(jù)變量
if((datanew-data)>A||(data-datanew>A))
return data;
else
return datanew;
}
說明:限幅濾波法多應(yīng)用在采集被控對象的溫度以及被控對象位置等參數(shù),此類參數(shù)的共性為數(shù)據(jù)變化較慢。
2.1.2 中值濾波算法
此算法是采集一組被控對象的特征數(shù)據(jù),將此組采集數(shù)據(jù)組由小到大進(jìn)行排序,將位于此組數(shù)據(jù)中間的采樣數(shù)據(jù)值作為此次采集過程的采樣值,此類濾波技術(shù)實(shí)際上是一種排列取值的運(yùn)算過程。
算法的程序代碼如下:
#define N 11//定義獲得的數(shù)據(jù)個數(shù)
char filter()
{
char value_buff[N];//定義存儲數(shù)據(jù)的數(shù)組
char count,i,j,temp;
for(count=0;count { value_buf[count]=get_data(); delay();//如果采集數(shù)據(jù)比較慢,那么就需要延時或中斷 } for(j=0;j { for(value_buff[i]>value_buff[i+1] { temp=value_buff[i]; value_buff[i]=value_buff[i+1]; value_buff[i+1]=temp; } } return value_buff[(N-1)/2]; 說明:中值濾波技術(shù)可屏蔽掉控制系統(tǒng)偶然因素以及采樣設(shè)備波動干擾。種植濾波技術(shù)適用于數(shù)據(jù)變化較慢的被控對象,變化較快的數(shù)據(jù)則不適用。 2.1.3 算術(shù)平均值濾波算法 該算法的基本原理很簡單,就是連續(xù)取N次采樣值后進(jìn)行算術(shù)平均。 算法的程序代碼如下: char filter() { int sum=0; for(count=0;count { sum+=get_data(); delay(): } return(char)(sum/N); } 說明:被控對象發(fā)出的信號具有隨機(jī)性時宜采用算術(shù)平均濾波算法進(jìn)行濾波。 2.1.4 滑動平均濾波算法 上述的濾波算法均具有一個共性,就是需要進(jìn)行多次數(shù)據(jù)采集才能得到一次有效的數(shù)據(jù)采集點(diǎn),數(shù)據(jù)采集數(shù)度較慢,不能實(shí)時獲得被測對象的特征變化。而滑動平均濾波算法只需將本次采集數(shù)據(jù)與前幾次采集數(shù)據(jù)進(jìn)行運(yùn)算,求得其平均值,即可得到有效的采集數(shù)據(jù)。 程序代碼如下: char value_buff[N]; char i=0; char filter() { char count; int sum=0; value_buff[i++]=get_data(); if(i==N) i=0; for(count=0;count sum=value_buff[count]; return(char)(sum/N); } 2.2 軟件陷阱技術(shù) 2.2.1 空閑ROM存儲空間 在對程序語言進(jìn)行匯編過程中,代碼在內(nèi)存中的存儲地址由偽指令來分配,內(nèi)存中的地址分為固定位置以及重新分配位置2個段位,前者的位置在程序編制之初就已經(jīng)設(shè)定好了相關(guān)地址,因此不可改變其地址,而后者可以基于會變軟件對程序進(jìn)行修改,實(shí)現(xiàn)對其存儲地址再分配的目的,本文擬基于前者進(jìn)行分析,設(shè)定內(nèi)存空間的存儲地址以500 h為起點(diǎn)[6]。 2.2.2 重置堆棧指針SP和中斷功能的恢復(fù) 目前,國內(nèi)已報道的文獻(xiàn)[7-10]均未對中斷功能的恢復(fù)進(jìn)行深入的研究,導(dǎo)致此類干擾是影響控制系統(tǒng)精度的一個重要的因素,大部分研究僅僅給控制系統(tǒng)設(shè)定返回功能,將對系統(tǒng)進(jìn)行重新的初始化以達(dá)到控制系統(tǒng)繼續(xù)正常工作的目的,此種做法具有一定的作用,但是未能較為徹底的從根本上解決這一問題。本文擬將在內(nèi)存代碼存儲地址以外的位置,執(zhí)行中斷指令,此種做法的目的是為了可以將各類中斷指令分級處理,對于同等級的程序指令可同時接收,并可以對同等級的多個指令進(jìn)行重置,此方法可以將中斷程序指令的作用得到最優(yōu)化的使用。 當(dāng)單片機(jī)的CPU受到干擾源干擾時,會把系統(tǒng)操作數(shù)誤以為系統(tǒng)指令程序來存儲并執(zhí)行,導(dǎo)致控制系統(tǒng)程序工作混亂,主要程序代碼有以下幾種: (1)中斷向量區(qū) ORG 0000H START:LJMP MAIN LJMP INT0 NOP NOP LJMP ERR 陷阱 LJMP TOINT NOP NOP LJMP ERR 陷阱 ORG 0040H ERR: (2)在表格區(qū) 在表格區(qū)的最后安排5 byte的陷阱 TABEL1: DB------------ DB------------ NOP NOP LJMP ERR (3)在未使用的ROM空間 未被程序指令占用的內(nèi)存空間一般均為OFFH,當(dāng)程序指令發(fā)生跑飛到此位置,其會產(chǎn)生飛流直下的狀態(tài),因此應(yīng)在程序中在固定的程序存儲地址程序加入些軟件陷阱以準(zhǔn)確實(shí)時的捕捉跑飛的程序指令。 程序指令如下: ORG 6000H NOP NOP LJMP ERR ORG 7FFBH NOP NOP LJMP ERR (4)在子程序后面 XXXX: ;;;;;;;;;; ;;;;;;;;;; RET NOP NOP LJMP ERR 單片機(jī)控制系統(tǒng)的CPU計算時間單位為微秒級,上述程序最多可消耗14個計算時間,也就是說程序指令出現(xiàn)跑飛開始到控制系統(tǒng)將其捕獲并進(jìn)行初始化所耗費(fèi)的時間極短,小于等于80 μs,而硬件方面的定時器的工作時間單位為毫秒級,遠(yuǎn)遠(yuǎn)高于軟件匯編程序中斷捕獲所耗的時間,這亦驗(yàn)證了采用匯編程序復(fù)位初始化控制系統(tǒng)可極大程度的節(jié)省系統(tǒng)運(yùn)行時間周期,在系統(tǒng)工作效率以及控制的實(shí)時性方面獲得了較大的提升。 2.3 軟件冗余技術(shù) 單片機(jī)控制系統(tǒng)是由采集、控制硬件以及與之向匹配的軟件(匯編程序指令)組成的,通過將兩者進(jìn)行完美融合實(shí)現(xiàn)控制系統(tǒng)協(xié)調(diào)工作,根據(jù)已有文獻(xiàn)報道的軟件冗余技術(shù)應(yīng)用于控制系統(tǒng)中[7-10],學(xué)者們通常采用將空程序指令數(shù)設(shè)定為設(shè)置>3個,以此來解決正常運(yùn)行的程序中所隱藏的跑飛程序。此種方法并不適用于控制系統(tǒng)正在執(zhí)行中斷程序的過程,會使得控制系統(tǒng)整體失靈。 2.3.1 恢復(fù)塊技術(shù) 恢復(fù)塊技術(shù)基于后向運(yùn)行策略對系統(tǒng)進(jìn)行恢復(fù),由主塊以及備用塊構(gòu)成,主塊與備用塊的功能是相同的,控制系統(tǒng)工作時,主塊優(yōu)先工作,并且在其運(yùn)行結(jié)束以后對其性能進(jìn)行測試,若其驗(yàn)收結(jié)果未達(dá)到設(shè)定標(biāo)準(zhǔn),則啟動備用塊重新進(jìn)行采集控制運(yùn)行。 圖2 恢復(fù)塊方法 冗余系統(tǒng)的冗余單元設(shè)計成具有自檢測和自糾錯的能力,構(gòu)成1個恢復(fù)塊結(jié)構(gòu),其基本結(jié)構(gòu)如下: ensure <接收測試> by <基本功能塊> else by <備份塊1> else by <備份塊n> else by <錯誤處理> 2.3.2 多版本程序設(shè)計 多版本程序指令技術(shù)是一種基于靜態(tài)的故障屏蔽以及中斷指令的技術(shù),其基于前向反饋恢復(fù)的控制策略,其是采用多個匯編程序同時對同意被控對象進(jìn)行控制,基于統(tǒng)計學(xué)理論對多個程序運(yùn)行結(jié)果進(jìn)行統(tǒng)計分析,選出最符合實(shí)際需要的一種算法。其示意圖如圖3所示。 圖3 多版本程序指令技術(shù)示意圖 2.4 其他措施 2.4.1 數(shù)據(jù)重復(fù)讀取 在對被控對象進(jìn)行數(shù)據(jù)采集、控制時,經(jīng)常會出現(xiàn)隨機(jī)性極強(qiáng)的干擾信號干擾程序外的中斷程序指令所發(fā)出的信號,由于其具有極強(qiáng)的隨機(jī)性以及瞬時性而不易捕獲,可對其發(fā)出的信號進(jìn)行多次采集對比分析以后,將其過濾掉,參考程序代碼如下: //============================ start();% 啟動設(shè)備對象 try time=0;data=0; [data,time]=getdata();% 獲取采樣數(shù)據(jù) catch time=0;data=0;disp(“A timeout occurred”); end stop();% 停止設(shè)備對象 delete();% 刪除設(shè)備對象 2.4.2 軟件看門狗(Watch dog)技術(shù) 軟件冗余以及軟件陷阱技術(shù)并不是對所有失靈的程序指令均有效,此時通常采用對控制系統(tǒng)的程序指令監(jiān)控技術(shù),其并不能直接解決程序代碼失靈的問題,但是在程序代碼出現(xiàn)失靈時可以及時發(fā)現(xiàn)并將所有中斷程序關(guān)閉。軟件看門狗示意圖如圖4所示。 圖4 軟件看門狗技術(shù)示意圖 (1)為了避免單片機(jī)所開發(fā)的控制系統(tǒng)干擾源對系統(tǒng)產(chǎn)生的隨機(jī)干擾,應(yīng)從軟、硬件入手,將兩者完美融合,充分發(fā)揮各自的作用以及各自優(yōu)勢,二者相輔相成地配合協(xié)調(diào)工作,本文所提的混合編程語言理論可可大幅提高單片機(jī)控制系統(tǒng)的運(yùn)行計算效率以及保證控制系統(tǒng)的穩(wěn)定運(yùn)行。 (2)對現(xiàn)有的軟件抗干擾方法的遠(yuǎn)離以及利弊進(jìn)行了深入分析,并提出了解決其弊端的辦法,本文所提的混合編程理論較之硬件抗干擾技術(shù),其具有節(jié)約大量計算運(yùn)行時間的同時,并可極大的提高單片機(jī)CPU的計算能力從而提高整個控制系統(tǒng)的實(shí)時效率,并且本文所提混合編程理論可廣泛應(yīng)用于嵌入式控制系統(tǒng)中并可取得較好的控制效果。 [1] 盧莎,何菁,袁杰. 基于VLSI 平臺的C51 處理器仿真與設(shè)計[J]. 現(xiàn)代電子技術(shù),2013,36(12):92-96. [2] 張毅剛,劉杰. MCS-51單片機(jī)原理及應(yīng)用[M]. 哈爾濱:哈爾濱工業(yè)大學(xué)出版社,2004:35-42. [3] 徐惠民,安德寧. 單片微型計算機(jī)原理接口及應(yīng)用[M]. 北京:北京郵電大學(xué)出版社,2003:56-59. [4] 張麗云. 計算機(jī)接口實(shí)驗(yàn)平臺的研制與開發(fā)[D]. 北京:北京交通大學(xué),2007. [5] 王立瑩,晉小莉. 微型計算機(jī)系統(tǒng)抗干擾技術(shù)[J]. 現(xiàn)代電子技術(shù),2006,29(5):108-110. [6] 姜學(xué)軍. 計算機(jī)控制技術(shù)[M]. 北京:清華大學(xué)出版社,2005:123-129. [7] 潘仲明,簡盈,王躍科. 大作用距離超聲波傳感技術(shù)研究[J]. 傳感技術(shù)學(xué)報,2006,19(1):206-210. [8] 潘宗預(yù),潘登. 超聲波測距精度的探討[J]. 湖南大學(xué)學(xué)報(自然科學(xué)版),2002,29(3):18-21. [9] 張玉珊,張玉霞. 過程計算機(jī)控制系統(tǒng)中的軟件濾波對策[J]. 河南師范大學(xué)學(xué)報(自然科學(xué)版),2001,29,(3):69-72. [10] 何忠悅,于淑芳. 單片機(jī)抗干擾技術(shù)實(shí)踐應(yīng)用探析[J]. 機(jī)電信息,2012(4):112-113. Software Anti Interference Technology of Single Chip Microcomputer Control System* LIUQi*,WANGYin (College of information and control,Jilin Institute of Chemical Technology,Jilin Jilin 132022,China) In order to improve single chip microcomputer(SCM)control system performances of disturbance rejection in the practical works,it discusses the advantages and disadvantages of the main software anti-interference technology based on realization in SCM. Combination C language and many assemble languages analyse and solve some drawbacks of on-going technology. The software anti-interference technology can improve work efficiency significantly,and it has greatly saved computation cycles. This method which combined C language and many assembly language can be widely used in embedded single chip microcomputer system. 51 single chip microcomputer;multi program language;anti-interference technology 項目來源:吉化院合字2015第095號項目 2016-03-12 修改日期:2016-05-06 C:7820;7210 10.3969/j.issn.1005-9490.2017.02.031 TP311 A 1005-9490(2017)02-0415-053 結(jié)束語