單片機系統軟體抗幹擾方法

來源:互聯網
上載者:User

      在提高硬體系統抗幹擾能力的同時,軟體抗幹擾以其設計靈活、節省硬體資源、可靠性好越來越受到重視。下面以MCS-51單片機系統為例,對微機系統軟體抗幹擾方法進行研究。 
   1  軟體抗幹擾方法的研究 
      在工程實踐中,軟體抗幹擾研究的內容主要是: 一、消除類比輸入訊號的嗓聲(如數字濾波技術);二、程式運行混亂時使程式重入正軌的方法。本文針對後者提出了幾種有效軟體抗幹擾方法。 
    1.1 指令冗餘 
      CPU取指令過程是先取作業碼,再取運算元。當PC受幹擾出現錯誤,程式便脫離正常軌道“亂飛”,當亂飛到某雙位元組指令,若取指令時刻落在運算元上,誤將運算元當作作業碼,程式將出錯。若“飛” 到了三位元組指令,出錯機率更大。 
      在關鍵地方人為插入一些單位元組指令,或將有效單位元組指令重寫稱為指令冗餘。通常是在雙位元組指令和三位元組指令後插入兩個位元組以上的NOP。這樣即使亂飛程式飛到運算元上,由於空操作指令NOP的存在,避免了後面的指令被當作運算元執行,程式自動納入正軌。 
      此外,對系統流向起重要作用的指令如RET、 RETI、LCALL、LJMP、JC等指令之前插入兩條NOP,也可將亂飛程式納入正軌,確保這些重要指令的執行。
    1.2 攔截技術 
      所謂攔截,是指將亂飛的程式引向指定位置,再進行出錯處理。通常用軟體陷阱來攔截亂飛的程式。因此先要合理設計陷阱,其次要將陷阱安排在適當的位置。
    1.2.1 軟體陷阱的設計 
      當亂飛程式進入非程式區,冗餘指令便無法起作用。通過軟體陷阱,攔截亂飛程式,將其引向指定位置,再進行出錯處理。軟體陷阱是指用來將捕獲的亂飛程式引向複位入口地址0000H的指令。通常在EPROM中非程式區填入以下指令作為軟體陷阱: 
                       NOP 
                       NOP 
                       LJMP 0000H 
其機器碼為0000020000。
   1.2.2 陷阱的安排 
      通常在程式中未使用的EPROM空間填0000020000。最後一條應填入020000,當亂飛程式 落到此區,即可自動入軌。在使用者程式區各模組之間的空餘單元也可填入陷阱指令。當使用的中斷因幹擾而開放時,在對應的中斷服務程式中設定軟體陷阱,能及時捕獲錯誤的中斷。如某應用系統雖未用到外部中斷1,外部中斷1的中斷服務程式可為如下形式: 
                       NOP 
                       NOP 
                       RETI 
      返回指令可用“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開始執行有四種可能:一、系統開機上電複位;二、軟體故障複位;三、看門狗逾時未喂狗硬體複位; 四、任務正在執行中掉電後來電複位。四種情況中除第一種情況外均屬非正常複位,需加以識別。 
    2.1.1 硬體複位與軟體複位的識別 
       此處硬體複位指開機複位與看門狗複位,硬體複位對寄存器有影響,如複位後PC=0000H, SP=07H,PSW=00H等。而軟體複位則對SP、SPW無影響。故對於微機測控系統,當程式正常運行時,將SP設定地址大於07H,或者將PSW的第5位使用者標誌位在系統正常運行時設為1。那麼系統複位時只需檢測PSW.5標誌位或SP值便可判此是否硬體複位。圖1是採用PSW.5作上電標誌位判別硬、軟體複位的程式流程圖。

圖1 硬、軟體複位識別流程圖 
       此外,由於硬體複位時片內RAM狀態是隨機的,而軟體複位片內RAM則可保持複位前狀態,因此可選取片內某一個或兩個單元作為上電標誌。設 40H用來做上電標誌,上電標誌字為78H,若系統複位後40H單元內容不等於78H,則認為是硬體複位,否則認為是軟體複位,轉向出錯處理。若用兩個單元作上電標誌,則這種判別方法的可靠性更高。
    2.1.2 開機複位與看門狗故障複位的識別 
      開機複位與看門狗故障複位因同屬硬體複位, 所以要想予以正確識別,一般要藉助非易失性RAM或者EEROM。當系統正常運行時,設定一可掉電保護的觀測單元。當系統正常運行時,在定時喂狗的中斷服務程式中使該觀測單元保持正常值(設為 AAH),而在主程中將該單元清零,因觀測單元掉電可保護,則開機時通過檢測該單元是否為正常值可判斷是否看門狗複位。 
   2.1.3 正常開機複位與非正常開機複位的識別 
      識別測控系統中因意外情況如系統掉電等情況引起的開機複位與正常開機複位,對於過程式控制制系統尤為重要。如某以時間為控制標準的測控系統,完成一次測控任務需1小時。在已執行測控50分鐘的情況下,系統電壓異常引起複位,此時若系統複位後又從頭開始進行測控則會造成不必要的時間消耗。因此可通過一監測單元對當前系統的運行狀態、系統時間予以監控,將控制過程分解為若干步或若干時間段,每執行完一步或每運行一個時間段則對監測單元置為關機允許值,不同的任務或任務的不同階段有不同的值,若系統進行中測控任務或正在執某時間段,則將監測單元置為非順利關機值。那麼系統複位後可據此單元判系統原來的運行狀態,並跳到出錯處理常式中恢複系統原運行狀態。 
    2.2 非正常複位後系統自恢複啟動並執行程式設計 
      對順序要求嚴格的一些過程式控制制系統,系統非正常複位否,一般都要求從失控的那一個模組或任務恢複運行。所以測控系統要作好重要資料單元、參數的備份,如系統運行狀態、系統的進程值、當前輸入、輸出的值,當前時鐘值、觀測單元值等,這些資料既要定時備份,同時若有修改也應立即予以備份。 
      當在已判別出系統非正常複位的情況下,先要恢複一些必要的系統資料,如顯示模組的初始化、片外擴充晶片的初始化等。其次再對測控系統的系統狀態、運行參數等予以恢複,包括顯示介面等的恢複。之後再把複位前的任務、參數、已耗用時間等恢複, 再進入系統運行狀態。 
      應當說明的是,真實地恢複系統的運行狀態需 要極為細緻地對系統的重要資料予以備份,並加以資料可靠性檢查,以保證恢複的資料的可靠性。 
     其次,對多任務、多進程測控系統,資料的恢複需考慮恢複的次序問題,筆者實際應用的資料恢複過程流程圖2所示。
圖2 系統自恢複程式流程圖
圖中恢複系統基本資料是指取出備份的資料覆蓋當前的系統資料。系統基本初始化是指對晶片、顯示、輸入輸出方式等進行初始化,要注意輸入輸出的初始化不應造成誤動作。而複位前任務的初始化是指任務的執行狀態、已耗用時間等。
    3  結束語 
      對於軟體抗幹擾的一些其它常用方法如數字濾波、RAM資料保護與錯誤修正等,限於篇幅,本文未作討論。在工程實踐中通常都是幾種抗幹擾方法並用,互相補充完善,才能取得較好的抗幹擾效果。從根本上來說,硬體抗幹擾是主動的,而軟體是抗幹擾是被動的。細緻周到地分析幹擾源,硬體與軟體抗幹擾相結合,完善系統監控程式,設計一穩定可靠的單片機系統是完全可行的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.