新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 微控制器應用中采用軟件方式抑制外來干擾解析方案

微控制器應用中采用軟件方式抑制外來干擾解析方案

作者: 時間:2012-06-18 來源:網(wǎng)絡 收藏

越來越多地用于各種電子領域,例如自動化、工業(yè)控制中。隨著金屬氧化物半導體的硅晶體管幾何尺寸的不斷縮小,系統(tǒng)設計中的電磁兼容性(EMC)問題,成為采胳膊小尺寸器件進行設計的必須考慮的主要問題。

本文引用地址:http://www.butianyuan.cn/article/171284.htm

在嵌入式微內(nèi)部,對于內(nèi)部產(chǎn)生的電磁發(fā)射,措施的效果并不明顯。因為發(fā)射主要是由CPU中的內(nèi)部時鐘和噪聲引起,而且高速開關(guān)電流是由微中的多種不同的門所形成。如果芯片版圖設計時沒有考慮電磁兼容性,那么外部的PCB(印制電路板)將會大大增強那些不必要的噪聲信號。所以在很多設計中,很難消除這種固有的電子發(fā)射影響。

但是,在控制器中,卻可。本文給出了一些常用設計技巧和。

一、內(nèi)嵌抗軟件

在很多的中,用簡單的抗設計,就可以將一個微控制器的干擾效果大大提高。這種抗干擾設計的魅力就在于實現(xiàn)該設計的費用較低,還可以節(jié)省PCB板上硬件成本。抗干擾設計的常用技巧如下:

1.刷新端口引腳(Refreshing port pins):抗干擾軟件最簡單的一個例子就是可以不斷地更新I/O端口和一些重要的寄存器。在大多數(shù)微控制器的應用中,軟件將會執(zhí)行一個有規(guī)律的主循環(huán)。由于微控制器的I/O端口通??拷B接焊點(bond pads),而這些焊點通常是位于芯片的邊沿。當一個確定振幅的噪聲施加到微控制器時,噪聲將會從芯片的邊沿向內(nèi)傳入硅晶體中。這意味著芯片邊沿的邏輯電路最容易被外部噪聲源破壞,輸入/輸出電路就屬于這種類型。因此有規(guī)律的更新數(shù)據(jù)寄存器和數(shù)據(jù)說明寄存器,就可以把這種故障的威脅降低。

2.檢測輸入腳(Polling inputs):另一個方法就是采用多次讀輸入腳數(shù)據(jù),且取平均值作為該腳的正確數(shù)據(jù)。其典型的應用就是用軟件每隔10ms讀一次鍵盤,以保證真實的鍵入發(fā)生。這種表決式做法被稱作反彈跳保護。 圖1的程序可以很迅速地連續(xù)讀出該端口,如果有3次讀出結(jié)果相同,那么CPU將以進位標志的狀態(tài)作為讀結(jié)果返回(這是HC05 CPU的BRSET和BRCLR的一個固有特征)。這個程序的問題在于當輸入引腳是處于很嘈雜的環(huán)境時,CPU將會按這個程序持續(xù)很長時間,這在那些對時間要求較苛刻的應用中是不實際的。更好的一個程序就是多次讀出輸入引腳,并使寄存器遞增,如果結(jié)果小于某個數(shù),那么就將它當作0;如果大于某個數(shù),就作為 1。這個程序通常會在有限時間內(nèi)退出,以保證不會妨礙到該應用中其他程序的運行。

3.標記通過(Token Passing):在一些重要的處理中,標記通過用以確認任務已進入受控而未失去控制。標記通過可以利用RAM里未用到的空間來完成。在應用的一段特定時間間隔里,該軟件將通過許多未用的RAM空間循環(huán)一個1.在任何一個重要任務被執(zhí)行之前。這種循環(huán)檢查將會得出結(jié)果。結(jié)果檢測通過,該任務將會被執(zhí)行。如果以沒通過,則說明微控制器是從未指定的跳轉(zhuǎn)進入該任務,那么就跳轉(zhuǎn)去執(zhí)行一個初始化程序。 4.未使用的內(nèi)存(Unused Memory):在大多數(shù)的應用中,程序的存儲器總有一些區(qū)域未使用。如果在一些事件中,程序計數(shù)器(Program Counter)被破壞且跳轉(zhuǎn)進入未用的存儲空間,那么有些應該執(zhí)行的控制就會起作用。例如,在16K字節(jié)的程序空間里存在未使用的500Byte的子塊。如果我們用SWI指令填滿這些未用空間,那么任何指向未用地區(qū)的無效激勵將會導致微控制器去讀取SWI矢量,而該向量是被編程跳轉(zhuǎn)到程序中的已知的起始位置。同樣,在微管制器的應用中,SWI也可用其它函數(shù)來替代,以填充那些未用的區(qū)域。

請注意:記錄這些未用區(qū)域已被9D指令填滿,且由一個有條件的跳變(Jump)跳到已知區(qū)域(known-place)。當這個微控制器運行至該已知區(qū)域時,它將會被強制跳轉(zhuǎn)去執(zhí)行初始化程序。

二、看門狗電路

一個看門狗電路通常被描述成一塊在有規(guī)律的時間間隔中進行更新的硬件,該更新必須由微控制器或是使微控制器重新啟動的電路來完成。一個外部的看門狗電路是最好的,因為它不依賴微控制器,如果微控制器發(fā)生故障需要看門狗更新,則該電路將給出reset信號使微控制器重新啟動。一個看門狗通常由一個硬件定時器構(gòu)成,如果沒有來看微控制器的更新或是報告信息,該定時器將會溢出。 在加電的POR時延內(nèi),微控制器將保持在復位狀態(tài)。時鐘可以來自一個外部源或是來自用于微控制器的晶振的一個脈沖。當該微控制器處于復位狀態(tài)時,輸入/輸出引腳就成為輸入,而此時計數(shù)器也開始運作。如果Q是0,那么C1就會被充電,而微控制器將會跳離復位狀態(tài)。

微控制器的首要任務是給出一個小脈沖來重啟計數(shù)器到一個已知的時間溢出值,微控制器上的I/O端口形成交流耦合,目的在于保證只有邊沿觸發(fā)才能重新發(fā)計數(shù)器。這樣就保證了一個恒定的直流電平將不會有效作用于微控制器或看門狗。該微控制器必須在Q跳為1之前發(fā)送一個小的脈沖,以保證微控制器不被復位(正常情況下該操作至少需要兩個微控制器的軟件指令)。還有一個可供選擇的方法就是微控制器在晶片上具有內(nèi)嵌看門狗電路。例如Motorola 的MC68HC705C8就有它自身的看門狗,由一個可編程計數(shù)器組成,該計數(shù)器大約在每32768時鐘周期就要被刷新一次,或是它將在內(nèi)部產(chǎn)生一個清零指令。

CM1,0位通常用來選擇一個暫停周期(也就是CPU的時鐘被2 15,2 17,2 19,2 21 所劃分)。COPE位是只寫一次的而且一旦看門狗有效,就不會停止,只有重啟才能停止看門狗的動作。COPF位是通知用戶的標志,它通知用戶前一次的重啟的由于看門狗的時溢或是其它原因所引起。刷新看門狗的時序是在COP重啟寄存器(COPRR)上的兩個寫操作。即該序列是一個對COPRR進行$55 寫操作后緊跟$AA的寫操作。

不是所有的微控制器都有看門狗電路的,但是在一些設計中,設計者能夠用未使用的中斷來執(zhí)行它自己的看門狗功能。舉例來說,一個MC68HC05P1沒有看門狗,但是有一個16bit可自由運行的計時器。有3種可能的方式,使該計時器能夠產(chǎn)生一個中斷。這3種方式是:

1)一個從FFFF向0000溢出的定時器。

2)一個輸出比較,16bit寄存器和定時器的值的比較。

3)對TCAP端口的上升或下降邊沿的一個輸入捕捉。

如果此輸出比較(Output Compare)中斷不能被執(zhí)行,則其將被當做假的看門狗。在這種情況下,定時器將與輸出比較(output compare)寄存器作個比較,以檢驗系統(tǒng)是否都正常。如果系統(tǒng)運行正確,那么將執(zhí)行一個中斷返回。如果有不正常情況,那么堆棧指針的復位和一個往初始化程序的跳轉(zhuǎn)將會執(zhí)行。該系統(tǒng)檢驗可以是前述的標志通過程序。

在一個程序里,看門狗更新(watchdog updates)最優(yōu)選位置的選擇不是一個簡單的事情,一般說來,是結(jié)束程序時的最后進程。通常用戶需要測試軟件流程和所有的中斷程序和子程序的時序,關(guān)鍵的和非關(guān)鍵的應用。在所有的程序中進行看門狗惻新是最好的,但是由于微控制器有很長的程序和很多的芯片功能,因此這樣是很難做到的。如果可能的話,看門狗刷新程序不應該被放在中斷或是子程序中。原則上應該直接放入主程序中。要注意的是刷新速率不要太大,否則將使失控狀態(tài)恢復的幾率下降。



評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉