中文字幕无码不卡一区二区三区_少妇被又大又粗又爽毛片久久黑人_91精品国产在热久久无毒不卡_久久久久久亚洲综合网站

技術(shù)熱線: 4007-888-234
設(shè)計(jì)開發(fā)

專注差異化嵌入式產(chǎn)品解決方案 給智能產(chǎn)品定制注入靈魂給予生命

開發(fā)工具

提供開發(fā)工具、應(yīng)用測試 完善的開發(fā)代碼案例庫分享

技術(shù)支持

從全面的產(chǎn)品導(dǎo)入到強(qiáng)大技術(shù)支援服務(wù) 全程貼心伴隨服務(wù),創(chuàng)造無限潛能!

新品推廣

提供新的芯片及解決方案,提升客戶產(chǎn)品競爭力

新聞中心

提供最新的單片機(jī)資訊,行業(yè)消息以及公司新聞動(dòng)態(tài)

微控制器的抗干擾軟件編程方法

更新時(shí)間: 2019-03-23
閱讀量:1750

十年專注單片機(jī)方案開發(fā)的方案公司英銳恩,分享微控制器的抗干擾軟件編程方法。英銳恩現(xiàn)提供服務(wù)產(chǎn)品涉及主控芯片:8位單片機(jī)、16位單片機(jī)、32位單片機(jī)及各類運(yùn)算放大器等。

-------------------------------------------------------------------------

---- 微控制器越來越多地用于各種電子應(yīng)用之中,例如自動(dòng)化、工業(yè)控制和用戶產(chǎn)品市場中。隨著金屬氧化物半導(dǎo)體的硅晶體管幾何尺寸的不斷下降,系統(tǒng)設(shè)計(jì)中的電磁兼容性(EMC)問題,成為采用小尺寸器件進(jìn)行應(yīng)用設(shè)計(jì)時(shí)必須考慮的主要問題。

---- 在嵌入式微控制器內(nèi)部,對于內(nèi)部產(chǎn)生的電磁發(fā)射,采用軟件措施的效果并不明顯。因?yàn)榘l(fā)射主要是由于CPU中的內(nèi)部時(shí)鐘和噪聲所引起,而且高速開關(guān)電流是由微控制器中的多種不同的門所形成。如果芯片版面設(shè)計(jì)沒有考慮電磁兼容性,那么外部的PCB(印制電路板)將會(huì)大大的增強(qiáng)那些不必要的噪聲信號(hào)。所以在很多設(shè)計(jì)中,采用軟件很難消除這種固有的電子發(fā)射影響。但是,在控制器應(yīng)用中,抑制外來干擾的效果卻可采用軟件的方式來加強(qiáng)。本文給出了探討一些常用設(shè)計(jì)技巧和應(yīng)用的探討。

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

---- 在很多的應(yīng)用中,用簡單的抗干擾設(shè)計(jì),就可以將一個(gè)微控制器的干擾抑制效果大大提高。這種抗干擾設(shè)計(jì)的魅力就在于實(shí)現(xiàn)該設(shè)計(jì)的費(fèi)用較低,還可以節(jié)省PCB 板上硬件成本。

---- 抗干擾設(shè)計(jì)的常用技巧如下: 

---- 1.刷新端口引腳(Refreshing port pins):抗干擾軟件最簡單的一個(gè)例子就是可以不斷地更新I/O端口和一些重要的寄存器。在大多數(shù)微控制器的應(yīng)用中,軟件將會(huì)執(zhí)行一個(gè)有規(guī)律的主循環(huán)。由于微控制器的I/O端口通常位于靠近連接焊點(diǎn)(bond pads),而這些焊點(diǎn)通常是位于芯片的邊沿。當(dāng)一個(gè)確定振幅的噪聲施加到微控制器時(shí),噪聲將會(huì)從芯片的邊沿向內(nèi)傳入硅晶體中。這意味著芯片邊沿的邏輯電路最容易被外部噪聲源所破壞,輸入/輸出電路就屬于這種類型。因此有規(guī)律的更新數(shù)據(jù)寄存器和數(shù)據(jù)說明寄存器,就可以把這種故障的威脅降低。 2.檢測輸入腳(Polling inputs):另一個(gè)方法就是采用多次讀輸入腳數(shù)據(jù),且取平均值作為該腳的正確數(shù)據(jù)方式。其典型應(yīng)用就是用軟件每隔10ms讀一次鍵盤,以保證真實(shí)的鍵入發(fā)生。這種表決式做法被稱作反彈跳保護(hù)。作為一種高頻率檢測某個(gè)端腳的 HC05代碼的實(shí)例如圖1所示。

---- 圖1的程序可以很迅速的連續(xù)讀出該端口,如果有3次讀出結(jié)果相同,那么CPU 將以進(jìn)位標(biāo)志的狀態(tài)作為讀結(jié)果返回(這是HC05 CPU的BRSET和BRCLR的一個(gè)固有特征)。這個(gè)程序的問題在于當(dāng)輸入引腳是處于很嘈雜的環(huán)境時(shí),CPU將會(huì)按這個(gè)程序持續(xù)很長時(shí)間,這在那些對時(shí)間要求較苛刻的應(yīng)用中是不實(shí)際的。更好的一個(gè)程序就是多次讀出輸入引腳,并使寄存器遞增,如果結(jié)果小于某個(gè)數(shù),那么就將它當(dāng)作0;如果大于某個(gè)數(shù),就作為1。這個(gè)程序通常會(huì)在有限時(shí)間內(nèi)退出,以保證不會(huì)妨礙到該應(yīng)用中所有其他的運(yùn)行。 

---- 3.標(biāo)記通過(Token Passing):在一些重要的處理中,標(biāo)記通過以確認(rèn)任務(wù)已進(jìn)入受控方式而未失去控制。標(biāo)記通過可以利用RAM里未用到的空間來完成。在應(yīng)用的一段特定時(shí)間間隔里,該軟件將通過許多未用的RAM空間循環(huán)一個(gè)1。在任何一個(gè)重要任務(wù)被執(zhí)行之前,這種循環(huán)檢查將會(huì)得出結(jié)果。如果檢測通過,該任務(wù)將會(huì)被執(zhí)行。如果沒通過,則說明微控制器是從未指定的跳轉(zhuǎn)進(jìn)入該任務(wù),那么就跳轉(zhuǎn)去執(zhí)行一個(gè)初始化程序。見圖2。

---- 4.未使用的內(nèi)存(Unused Memory):在大多數(shù)的應(yīng)用中,程序的存儲(chǔ)器總有一些區(qū)域未使用。如果在一些事件中,程序計(jì)數(shù)器(Program Counter)被破壞且跳轉(zhuǎn)進(jìn)入未用的存儲(chǔ)空間,那么有些應(yīng)該執(zhí)行的控制就會(huì)作用。例如,在16K字節(jié)的程序空間里存在未使用的500Byte的子塊。如果我們用“SWI”指令填滿這些未用空間,那么任何指向未用地區(qū)的無效激勵(lì)將會(huì)導(dǎo)致微控制器去讀取SWI矢量,而該向量是被編程跳轉(zhuǎn)到程序中的已知的的起始位置。同樣,在微控制器的應(yīng)用中,SWI也可用其它函數(shù)來替代,以填充那些未用的區(qū)域,其實(shí)例如圖3所示。

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

---- 二、看門狗電路

---- 一個(gè)看門狗電路通常被描述成一塊在有規(guī)律的時(shí)間間隔中進(jìn)行更新的硬件,該更新必須由微控制器或是使微控制器重新啟動(dòng)的電路來完成。一個(gè)外部的看門狗電路是最好的,因?yàn)樗灰蕾囄⒖刂破?,如果微控制器發(fā)生故障需要看門狗更新,則該電路將給出reset信號(hào)使微控制器重新啟動(dòng)。一個(gè)看門狗通常由一個(gè)硬件定時(shí)器構(gòu)成,如果沒有來自微控制器的更新或是報(bào)告信息,該定時(shí)器將會(huì)溢出。一個(gè)簡單的看門狗電路如圖4。 

---- 在加電的POR時(shí)延內(nèi),微控制器將保持在復(fù)位狀態(tài)。時(shí)鐘可以來自一個(gè)外部源或是來自用于微控制器的晶振的一個(gè)脈沖。當(dāng)該微控制器處于復(fù)位狀態(tài)時(shí),輸入/輸出管腳(I/O pin)就成為輸入而此時(shí)計(jì)數(shù)器也開始運(yùn)作。如果Q是0,那么C1就會(huì)被充電,而微控制器將會(huì)跳離復(fù)位狀態(tài)。

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

---- CM1,0位通常用來選擇一個(gè)暫停周期(也就是CPU的時(shí)鐘被215,217 ,219, 221所劃分)。COPE位是“只寫一次”的,而且一旦看門狗有效,就不會(huì)停止,只有重啟才能停止看門狗的運(yùn)作。COPF位是通知用戶的標(biāo)志,它通知用戶前一次的重啟是由于看門狗的時(shí)溢或是其它原因所引起。刷新看門狗的時(shí)序是在COP重啟寄存器(COPRR)上的兩個(gè)寫操作。即該序列是一個(gè)對COPRR進(jìn)行$55寫操作后緊跟$AA的寫操作。

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

---- 1) 一個(gè)從FFFF向0000溢出的定時(shí)器。

---- 2) 一個(gè)輸出比較,16bit寄存器和定時(shí)器的值的比較。

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

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

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

武夷山市| 左权县| 龙口市| 唐海县| 昌邑市| 中牟县| 耿马| 普洱| 张家港市| 安康市| 军事| 平顺县| 镇远县| 民勤县| 惠来县| 大英县| 乐都县| 增城市| 隆化县| 兴城市| 河津市| 宁海县| 营山县| 宜丰县| 保山市| 克什克腾旗| 新泰市| 邻水| 普格县| 鹰潭市| 崇明县| 山东省| 河西区| 会昌县| 平武县| 大方县| 义马市| 遂溪县| 婺源县| 梅河口市| 卢氏县|