摘要:介紹一種用休眠-複位運行方式提高單片機抗幹擾能力的方法;分析其適用範圍,給出具體(ti) 應用電路;結合實例,分析這種運行方式下硬件和軟件設計的特點。
關(guan) 鍵詞:單片機 複位/休眠抗幹擾
引言
?牐犓孀盼⒌繾蛹際醯姆傷(shang) 俜⒄梗?單片機的性能迅速提高,在運算、邏輯控製、智能化方麵顯示出非凡的優(you) 勢,在很大程度上取代了原來由數字邏輯電路、運算放大電路組成的檢測、控製電路,應用非常廣泛。但由於(yu) 它存在著死機、程序跑飛等致命缺陷,使它在許多重要場合的應用受到限製。在抗幹擾方麵的許多技術,比如設軟件陷阱、加硬件看門狗電路等,可使這一問題有較好的解決(jue) ,但仍然存在問題:① 看門狗動作時,意味著已經出現了錯誤,且運行了一段時間,這在有些場合是不允許的;② 有時程序出現死循環錯誤,但是剛好把看門狗控製環節包含進去,對於(yu) 這樣的錯誤采用看門狗無法識別;③ 在檢測控製周期比較長的係統中,單片機花大量時間等待外設,執行等待命令時同樣會(hui) 受到幹擾。針對這些情況,我們(men) 在實踐中嚐試了主動複位的辦法,采用等間隔的脈衝(chong) 或根據外部條件對單片機進行複位喚醒。每次複位後,單片機執行相應的程序,執行完任務後及時進入休眠,等待下次複位。用此方法較好地解決(jue) 了上述問題,並在農(nong) 用變壓器綜合保護器實驗中得到了較好的效果。下麵以51係列單片機為(wei) 例探討具體(ti) 原理與(yu) 實現方法,複位信號為(wei) 高電平。
1 原理與(yu) 實現方法
1.1 無條件定時複位法
?牐犛枚ㄊ逼鼇⒆ㄓ檬敝有酒?或其它脈衝(chong) 產(chan) 生器,按照設定的間隔定時產(chan) 生複位信號。這種方法特別適合監測儀(yi) 表。在實際運行中,往往是用A/D轉換器采樣輸入的模擬量,然後進行存儲(chu) 顯示。這一過程很快,但為(wei) 了讀數穩定,每秒數據更新不過1~2次,CPU的大量時間用於(yu) 等待。如果讓CPU執行完任務後直接進入休眠,然後由外界複位喚醒它去執行下一次操作,這就是定時複位法。這樣會(hui) 使抗幹擾能力大大增強,主要有2點:① 休眠時,程序停止運行,不會(hui) 出現PC指針紊亂(luan) 引起的程序跑飛。如果工作與(yu) 休眠的時間比例為(wei) 1:9,也就是說,1s內(nei) 有0.1s的時間用來檢測、送顯示,有0.9s的時間休眠,程序受幹擾的概率是全速運行時的1/10,整體(ti) 抗幹擾能力提高了10倍。② 由於(yu) 每1s無條件複位1次,一旦某次工作期間出現死機,在下次複位時肯定得以恢複。對於(yu) 隻是顯示的儀(yi) 表,某1s偶然出現的讀數錯誤對下一次測量並沒有記憶,是可以承受的,屬“一過性”錯誤。這種定時複位相對於(yu) 看門狗電路的優(you) 點,一是把等待時間改為(wei) 休眠狀態 ,縮短可能受幹擾的時間;二是避免了恰好包含看門狗控製環節的死循環。
1.2 外部條件複位法
?牐犛行┦涑齷蠆飭康鈉舳?是由外部控製的。如暖氣熱表,靠熱水水輪旋轉產(chan) 生的脈衝(chong) 計算熱量,沒有熱水流動,就沒有熱量輸出,CPU隻要保持原來數值即可,不需要計數。可以想象,停暖時熱水水輪不轉,CPU在春夏秋三季則無事可做;如果讓其休眠,而不是時刻檢測有無水輪脈衝(chong) ,抗幹擾能力會(hui) 大大增強。因此,隻要把水輪脈衝(chong) 與(yu) CPU的複位聯係起來,水輪每旋轉1周,CPU複位1次,熱表就可以正常工作了,這就是外部條件複位法。類似的應用還有半電子式電度表,當機械度盤旋轉1周時才進行1個(ge) 計數,用戶不用電,CPU會(hui) 一直休眠。這種方法的複位間隔不是固定的,而是根據外部條件確定的。在有些場合,休眠的時間會(hui) 很長,對提高抗幹擾能力非常有效。
2 硬件實現要點
2.1 無條件定時複位
?牐犚話閿?2種方法。① 使用定時器或專(zhuan) 用時鍾芯片複位。圖1為(wei) 使用555電路組成的定時電路;也可以使用X1126之類的時鍾芯片,設置報警時間後用報警信號喚醒CPU。這種方法適用於(yu) 長間隔定時,還可以根據本次運算的結果,臨(lin) 時決(jue) 定下一次的報警喚醒時間,非常靈活方便。② 使用係統固有的信號作為(wei) 定時複位脈衝(chong) 。例如使用50Hz工頻電源整形後作複位,既省略了定時器,同時又為(wei) 檢測電流信號的相位采集了相應的信號,如圖2所示。
2.2 外部條件複位
?牐牥淹獠刻跫?脈衝(chong) 整形後送到複位端子。對於(yu) 上述水輪或電表度盤產(chan) 生的脈衝(chong) ,可以使用施密特觸發器整形;對於(yu) 記錄最大或最小值的儀(yi) 器,可使用窗口比較器。為(wei) 了實現調節的電子化,可以使用電子電位器,用單片機指令設定上下限。
2.3 複位周期與(yu) 複位高電平時間
?牐犕?3中,複位信號在高電平Tr期間,單片機處在複位狀態,程序不運行,抗幹擾能力最強;高電平過後,單片機開始執行程序。也就是說,複位信號的低電平Td期間是可供程序執行的時間,這個(ge) 時間要大於(yu) 每次程序的執行周期。合理選擇複位周期和複位信號的高電平占空比非常重要。對於(yu) 單純顯示儀(yi) 表,複位周期決(jue) 定數據刷新周期,低電平時間要大於(yu) 檢測、送顯示的全部時間;否則,會(hui) 出現永遠不能完整執行程序的錯誤。單片機在Ts和Tr期間都能有效地抗幹擾,但是最好還是把多餘(yu) 時間安排在Tr內(nei) 。當程序執行時間較長,要求盡量縮短Tr時,可加入微分電路,如圖1中的C30、R26、D9。
2.4 輸出端子的處理
?牐?(1)複位期間的正脈衝(chong)
?牐牳次黃詡淶テ?機的全部I/O口變成高電平。也就是說,正常輸出為(wei) 低的引腳,會(hui) 按照複位周期出現寬度為(wei) Tr的正脈衝(chong) 。這個(ge) 正脈衝(chong) 會(hui) 影響正常的輸出,有2個(ge) 辦法處理:① 在端子上並聯電容加以抑製,容量根據複位的Tr時間確定。減小Tr可以減小並聯電容。② 把外圍電路設計成高電平無效。
?牐?(2)容錯
?牐犑實毖∪∈涑齠瞬⒘?電容的容量,可以實現容錯控製。在某個(ge) 複位周期,因幹擾輸出了錯誤電平。由於(yu) 電容的保持作用,在本周期內(nei) 尚不能使輸出變化到有效的電平;在下個(ge) 周期,錯誤被糾正。因此,隻要不是連續2個(ge) 周期出錯,輸出是可容錯的。當然,這種方法會(hui) 使正常的輸出變化滯後一個(ge) 周期,才真正反映到輸出端子。
2.5 上電檢測與(yu) 手動複位
?牐犛行┫低吃誄跎係縭幣?做一些初始化操作。采用複位方式運行時,每次複位已經成為(wei) 正常運行的開始條件,無法辨別是否初上電。在某引腳對地接一個(ge) 1μF的電容,複位後檢測該引腳,如果是低電平就是初上電。如果給係統設立一個(ge) 複位按鈕,也就是常見的手動複位,這個(ge) 按鈕不是連接在複位端,而是並聯在上述引腳對地的電容兩(liang) 端。