天天看點

單片機軟體抗幹擾的幾種常見方法

 

 1 軟體抗幹擾方法的研究

  在工程實踐中,軟體抗幹擾研究的内容主要是:一、消除模拟輸入信号的噪聲(如數字濾波技術);二、程式運作混亂時使程式重入正軌的方法。本文針對後者提出了幾種有效的軟體抗幹擾方法。

 

 1.1 指令備援

  CPU取指令過程是先取操作碼,再取操作數。當PC受幹擾出現錯誤,程式便脫離正常軌道“亂飛”,當亂飛到某雙位元組指令,若取指令時刻落在操作數上,誤将操作數當作操作碼,程式将出錯。若“飛” 到了三位元組指令,出錯機率更大。

  在關鍵地方人為插入一些單位元組指令,或将有效單位元組指令重寫稱為指令備援。通常是在雙位元組指令和三位元組指令後插入兩個位元組以上的NOP。這樣即使亂飛程式飛到操作數上,由于空操作指令NOP的存在,避免了後面的指令被當作操作數執行,程式自動納入正軌。

  此外,對系統流向起重要作用的指令如RET、 RETI、LCALL、LJMP、JC等指令之前插入兩條NOP,也可将亂飛程式納入正軌,確定這些重要指令的執行。

  1.2 攔截技術

  所謂攔截,是指将亂飛的程式引向指定位置,再進行出錯處理。通常用軟體陷阱來攔截亂飛的程式。是以先要合理設計陷阱,其次要将陷阱安排在适當的位置。

  (1 )軟體陷阱的設計

  當亂飛程式進入非程式區,備援指令便無法起作用。通過軟體陷阱,攔截亂飛程式,将其引向指定位置,再進行出錯處理。軟體陷阱是指用來将捕獲的亂飛程式引向複位入口位址0000H的指令。通常在EPROM中非程式區填入以下指令作為軟體陷阱:

  NOPNOPLJMP 0000H其機器碼為0000020000。

  (2 ) 陷阱的安排

  通常在程式中未使用的EPROM空間填0000020000。最後一條應填入020000,當亂飛程式落到此區,即可自動入軌。在使用者程式區各子產品之間的空餘單元也可填入陷阱指令。當使用的中斷因幹擾而開放時,在對應的中斷服務程式中設定軟體陷阱,能及時捕獲錯誤的中斷。如某應用系統雖未用到外部中斷1,外部中斷1的中斷服務程式可為如下形式:

  NOPNOPRETI傳回指令可用“RETI”,也可用“LJMP 0000H”。如果故障診斷程式與系統自恢複程式的設計可靠、 完善,用“LJMP 0000H”作傳回指令可直接進入故障診斷程式,盡早地處理故障并恢複程式的運作。

  考慮到程式存貯器的容量,軟體陷阱一般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 )正常開機複位與非正常開機複位的識别

  識别測控系統中因意外情況如系統掉電等情況引起的開機複位與正常開機複位,對于過程控制系統尤為重要。如某以時間為控制标準的測控系統,完成一次測控任務需1小時。在已執行測控50分鐘的情況下,系統電壓異常引起複位,此時若系統複位後又從頭開始進行測控則會造成不必要的時間消耗。是以可通過一監測單元對目前系統的運作狀态、系統時間予以監控,将控制過程分解為若幹步或若幹時間段,每執行完一步或每運作一個時間段則對監測單元置為關機允許值,不同的任務或任務的不同階段有不同的值,若系統正在進行測控任務或正在執某時間段,則将監測單元置為非正常關機值。那麼系統複位後可據此單元判系統原來的運作狀态,并跳到出錯處理程式中恢複系統原運作狀态。

  2.2 非正常複位後系統自恢複運作的程式設計

  對順序要求嚴格的一些過程控制系統,系統非正常複位否,一般都要求從失控的那一個子產品或任務恢複運作。是以測控系統要作好重要資料單元、參數的備份,如系統運作狀态、系統的程序值、目前輸入、輸出的值,目前時鐘值、觀測單元值等,這些資料既要定時備份,同時若有修改也應立即予以備份。

  當在已判别出系統非正常複位的情況下,先要恢複一些必要的系統資料,如顯示子產品的初始化、片外擴充晶片的初始化等。其次再對測控系統的系統狀态、運作參數等予以恢複,包括顯示界面等的恢複。之後再把複位前的任務、參數、運作時間等恢複, 再進入系統運作狀态。

  應當說明的是,真實地恢複系統的運作狀态需 要極為細緻地對系統的重要資料予以備份,并加以資料可靠性檢查,以保證恢複的資料的可靠性。

  其次,對多任務、多程序測控系統,資料的恢複需考慮恢複的次序問題。

  系統基本初始化是指對晶片、顯示、輸入輸出方式等進行初始化,要注意輸入輸出的初始化不應造成誤動作。而複位前任務的初始化是指任務的執行狀态、運作時間等。