<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)應(yīng)用系統(tǒng)的抗干擾方法

          單片機(jī)應(yīng)用系統(tǒng)的抗干擾方法

          作者: 時(shí)間:2016-12-02 來(lái)源:網(wǎng)絡(luò) 收藏

          ③ 時(shí)間監(jiān)視器
          時(shí)間監(jiān)視器(Watch-Dog Timer),也稱“看門狗”技術(shù),用于設(shè)立軟件陷阱失效的情況下,讓系統(tǒng)從故障中恢復(fù)過(guò)來(lái)。因?yàn)橐蚋蓴_而失控的程序不一定都會(huì)掉到陷阱中去,比如程序的死循環(huán)就是如此。所謂死循環(huán),就是由于某種原因使程序陷入某個(gè)應(yīng)用程序或中斷服務(wù)子程序中做無(wú)休止的循環(huán)。這樣,CPU及其他系統(tǒng)資源被其占用而別的任務(wù)程序都無(wú)法執(zhí)行。也就是說(shuō),死循環(huán)使程序失去正??刂疲粫?huì)使程序控制轉(zhuǎn)入陷阱區(qū),因而軟件陷阱無(wú)法捕捉它。
          時(shí)間監(jiān)視器由兩個(gè)計(jì)數(shù)器組成,計(jì)數(shù)器靠系統(tǒng)時(shí)鐘(或分頻后的脈沖信號(hào))進(jìn)行計(jì)數(shù)。當(dāng)計(jì)數(shù)器記滿時(shí),將由計(jì)數(shù)器產(chǎn)生一個(gè)復(fù)位信號(hào),強(qiáng)迫系統(tǒng)復(fù)位,使系統(tǒng)重新執(zhí)行程序。在正常情況下,每隔一定的時(shí)間(根據(jù)系統(tǒng)應(yīng)用程序執(zhí)行的長(zhǎng)短來(lái)確定),程序使計(jì)數(shù)器清零。這樣,計(jì)數(shù)器就不會(huì)記滿,因而不會(huì)產(chǎn)生復(fù)位。

          本文引用地址:http://www.ex-cimer.com/article/201612/324745.htm


          圖2 SPCE061A 看門狗結(jié)構(gòu)與時(shí)序
          例如,凌陽(yáng)單片機(jī)SPCE061A的WatchDog的清除時(shí)間周期為0.75s。因?yàn)閃atchDog的溢出復(fù)位信號(hào)WatchDog_Reset是由4Hz時(shí)基信號(hào)經(jīng)4分頻之后產(chǎn)生的,即每4個(gè)4Hz時(shí)基信號(hào)(1s)將會(huì)產(chǎn)生一個(gè)WatchDog_Reset信號(hào)。而清除WatchDog的WatchDog_Clear信號(hào)卻可以發(fā)生在4Hz信號(hào)(0.25s)之間的任意一個(gè)時(shí)刻點(diǎn)上。假如WatchDog_Clear信號(hào)發(fā)生在4Hz信號(hào)尾端的0.01s即第0.25s時(shí)刻,此時(shí)雖然WatchDog被清除掉,但由于它發(fā)生在4Hz信號(hào)之后,再經(jīng)3個(gè)4Hz信號(hào)即0.75s,如果一直沒(méi)有WatchDog_Clear信號(hào),便會(huì)產(chǎn)生出一個(gè)WatchDog_Reset信號(hào)。如圖2所示,如果程序運(yùn)行不正常,例如陷入死循環(huán)等,計(jì)數(shù)器將記滿而產(chǎn)生溢出此溢出信號(hào)用來(lái)產(chǎn)生復(fù)位信號(hào),使程序重新開始啟動(dòng)。在編程中,我們只需將0X0001H寫入P_WatchDog_Clear單元即可完成清除WatchDog操作,如果在0.75秒內(nèi)沒(méi)有將0X0001H寫入P_WatchDog_Clear單元,則CPU將進(jìn)行系統(tǒng)復(fù)位操作,即平常我們說(shuō)的重啟系統(tǒng)。看門狗經(jīng)常用于延時(shí)程序中,如
          void Delay()
          {
          unsigned int j;
          for(j=0x7fff;j>0;j--);
          *P_Watchdog_Clear = 0x0001;//清看門狗
          }
          ④ 加入空操作NOP
          在ROM或RAM的若干區(qū)域內(nèi),存放若干個(gè)空操作組,空操作的個(gè)數(shù)等于所選CPU芯片最長(zhǎng)指令節(jié)數(shù)??詹僮髦噶頝OP除了占用一個(gè)存儲(chǔ)單元和執(zhí)行時(shí)間外,對(duì)CPU的工作狀態(tài)沒(méi)有影響。如有選擇地在程序某地方插進(jìn)1~2個(gè)NOP指令,也能使PC中的內(nèi)容得到調(diào)整,使程序在受到干擾后回到正確的順序。插入的位置要在程序調(diào)試過(guò)程中摸索、分析和實(shí)驗(yàn)。一般來(lái)說(shuō),在對(duì)外設(shè)端口的操作指令、多字節(jié)指令、轉(zhuǎn)移指令、堆棧操作指令前插入NOP指令會(huì)得到好的效果。此外,還可以在空操作組之后,再增加處理跑飛的程序,而且讓CPU在執(zhí)行正常程序時(shí),不執(zhí)行這些指令組。只有當(dāng)跑飛時(shí)才有可能遇到這些指令組。例如:
          NOP
          NOP
          NOP
          LJMP FF
          FF:ACALL FLY
          MOV A,FLG
          CJNE A,#11H,RSM
          ……
          ⑤ 分段式軟件抗干擾
          某些時(shí)候,控制系統(tǒng)要順序執(zhí)行幾個(gè)不同的主循環(huán)通道以完成不同的功能。這時(shí)可在不同主環(huán)路內(nèi)編制抗干擾判別及自恢復(fù)功能。這樣做可以避免不必要的重復(fù)執(zhí)行,以保證順序的完整性。
          ⑥ 數(shù)字濾波
          數(shù)字濾波是通過(guò)程序設(shè)計(jì)對(duì)單片機(jī)數(shù)據(jù)采集部分輸入的信號(hào)進(jìn)行加工處理,以達(dá)到抗干擾的目的。當(dāng)干擾疊加輸入通道的模擬信號(hào)時(shí),使數(shù)據(jù)采集誤差加大,特別當(dāng)輸入通道模擬信號(hào)較弱時(shí),此現(xiàn)象更加嚴(yán)重。為了消除數(shù)據(jù)采集的誤差,常用算術(shù)平均法、比較取舍法、一階滯后濾波法和中值法,可根據(jù)信號(hào)和干擾的規(guī)律,采用最優(yōu)的設(shè)計(jì)方法。
          不同的單片機(jī)應(yīng)用系統(tǒng)都有自己的系統(tǒng)要求和特點(diǎn),在硬件和軟件抗干擾設(shè)計(jì)上也各有自己的特色。軟件抗干擾技術(shù)作為硬件抗干擾的補(bǔ)充,以其靈活性、實(shí)用性和可靠性在擾方面起著舉足輕重的作用。在工程實(shí)踐中通常都是幾種抗干擾技術(shù)并用,互相補(bǔ)充,才能取得良好的抗干擾效果。我們?cè)谠O(shè)計(jì)單片機(jī)應(yīng)用系統(tǒng)時(shí),要仔細(xì)分析干擾源,軟硬件抗干擾技術(shù)相結(jié)合,完善系統(tǒng)監(jiān)控程序,則可以保證系統(tǒng)準(zhǔn)確、可靠地運(yùn)行。


          上一頁(yè) 1 2 下一頁(yè)

          評(píng)論


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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();