新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片計算機系統抗干擾的軟件途徑

        單片計算機系統抗干擾的軟件途徑

        作者: 時間:2012-02-27 來源:網絡 收藏

        2.3 重復執行

        程序指令在執行的過程中或者保持(鎖存)之后,都有可能被噪聲修改而導致控制失效乃至引發事故,為此應當盡量增加重要指信紙的執行次數以糾正干擾造成的錯誤。對于頻率較低的傳感器數據,建議在有效時間內多次采集并比較;對于控制外部設備的指令,則需要多次重復執行以確保有關信號的可靠性。為達此目的,可把重要的指令設計成定時掃描模塊,使其在整個程序的循環運行過程中反復執行。如此即使干擾信號改寫了指令內容,也能在受控設備的反應時間內自動恢復正常。

        2.4 重要數據的保護和恢復

        編寫專門的數據保護子程序,是提高工控微機系統可靠性的有效途徑。在編寫程序的過程中,對于由指令改變結果性質的數據,可以考慮在每次改變后都盡可能地保護起來,以便在需要時能夠恢復正確值。對于大多數工控微處理機而言,在運行錯誤而強制“復位”之后,I/O端口和特殊寄存器SFR中的內容都將變成芯片出廠時的設定值[4],這很可能會引起整個系統的運行混亂。因此計算機在重新啟動后,應當首先執行數據恢復程序,把控制端口等重要寄存器被保護的內容恢復還原。基于前述的試驗結果,保護數據最可靠的地址位于微處理機的片內 RAM;若數據的保護量較大,則建議擴展非易失性的SRAM作為片外數據存儲器。這種新型芯片具有很高的抗干擾性能,其缺點是目前的價位較高。

        3 片內軟WDT監控

        “看門狗”(WDT)已經成為工控微機必不可少的成員之一,其通常采用軟件與片外專門電路相結合的技術,來防止CPU程序的“跑飛”。我們在課題的研究過程中注意到,利用微處理機內部閑置的定時/計數器,配合以適當的程序就可以方便地構成WDT,在PC異常時能夠及時有效地強制“軟復位”而恢復系統的正常運行。

        3.1 基本原理

        與前面提及的軟件補償措施相配合,此WDT可以有效地防止由于CPU的PC“飛出”正常運行的程序區域而導致的系統癱瘓。用微處理機片內的一個定時器單元接收內部時鐘提供的穩定脈沖,當此定時器溢出(加法型)或者為零(減法型)時提出中斷請求;對應的中斷服務程序使PC回到初始化程序的第一行,從而實現強制性“軟復位”。程序正常運行時,軟件每隔一定的時間(小于定時器的溢出周期)給定時器清零或置數,即可預防溢出中斷而引起的誤復位。

        3.2 設計示例

        下面以常用的MCS-51系列單片機的T0為例,介紹軟WDT的設計思路。

        首先,在初始化程序塊中設置T0的工作方式,并開啟其中斷和計數功能。設主頻為12MHz,T0為8位計數器,則:

        最大計數值為(2的8次方)=255

        計數速率是主頻的1/12(1次/μs),故:

        溢出周期為(255+1)÷1=256μs

        其次,計算各條指令的執行耗時,以適當的間隔設置T0=0。由于MCS-51系列單片機的指令集中只有“乘”、“除”兩條指令耗用4個機器周期,其它均只耗用1~2個機器周期,為保險起見簡化為“每條指令均耗用2個機器周期”,即每執行一條指令耗用2μs。據此可以推算出“清零定時器T0”的指令執行間隔應當少于:

        256÷2=128(條)

        即每執行不多于128條程序指令(計入多次循環執行的指令),就應當執行一條清零T0的指令,以防止軟復位被誤執行。

        第三,設計T0溢出所對應的中斷服務程序。此子程序只須一條指令,即在T0對應的中斷向量地址(000BH)寫入“無條件轉移”命令,把PC拖回整個程序的第1行,對單片機重新進行初始化并獲得正確的執行順序。由于這條中斷指令并沒有結束中斷子程序就轉出去了,為了能夠繼續響應其它的中斷請求,可以在程序的初始化功能塊中把SP定高2字節,在此2字節中寫入“中斷返回”(RETI)之后應執行指令的地址,以便RETI執行后自動彈棧裝入PC,并在初始化程序結束前寫上RETI指令。

        系統的研制過程中,微機的抗干擾性能是系統成敗的關鍵之一。數十年來,人們已經研究出了許多抗干擾的硬件措施,包括采用凈化電源、接地、屏蔽、光電耦合、數據濾波及延時除顫等等。本文針對微處理機易受干擾的部件提出了的一些方案,實用表明具有較高的經濟性和可靠性,很容易將結合進行程序之中,不失為一類簡便而有效的抗擾手段。


        上一頁 1 2 3 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 万宁市| 蕲春县| 曲靖市| 益阳市| 乡城县| 乌兰察布市| 沙田区| 金门县| 丘北县| 刚察县| 尼勒克县| 专栏| 交城县| 德兴市| 孙吴县| 仪征市| 海盐县| 铜山县| 左云县| 鄂温| 阆中市| 武穴市| 黄山市| 台中市| 长宁县| 双鸭山市| 连山| 长岛县| 甘德县| 诏安县| 潼关县| 宝清县| 井冈山市| 江孜县| 新绛县| 富阳市| 宁德市| 新郑市| 南丰县| 胶州市| 安庆市|