新聞詳情
單片機(jī)設(shè)計(jì),單片機(jī)開(kāi)發(fā)方法瀏覽數(shù):2次
![]() 折疊硬件設(shè)計(jì)只要信手拈來(lái)編寫自己的程序,閱讀別人的程序就能發(fā)現(xiàn)問(wèn)題,說(shuō)明你的單片機(jī)程序設(shè)計(jì)還不錯(cuò)。。下一步要研究硬件。其硬件部分包括電路原理設(shè)計(jì)和 PCB板設(shè)計(jì)。學(xué)硬件比學(xué)軟件麻煩,花費(fèi)更多,周期更長(zhǎng)。但學(xué)習(xí)單片機(jī)的最終目標(biāo)是做產(chǎn)品開(kāi)發(fā)----軟硬件結(jié)合形成一個(gè)完整的控制系統(tǒng)。因此,學(xué)習(xí)單片機(jī)技術(shù)也是制作硬件必不可少的。 其原理設(shè)計(jì)涉及各種芯片的應(yīng)用,這些芯片的外圍電路的設(shè)計(jì)、典型應(yīng)用電路的典型應(yīng)用電路以及與單片機(jī)的連接等都可以在芯片資料手冊(cè)(DATASHEET)上找到答案。不然的話,照搬別人的設(shè)計(jì)總是落后于別人,你做的產(chǎn)品就沒(méi)有創(chuàng)意。電子學(xué)(DATASHEET)都是英文,從第一手材料中學(xué)到的知識(shí),很可能是課本、網(wǎng)絡(luò)文檔、課外讀物之類的東西。盡管有一些資料也是基于 DATASHEET編寫的,但是并不全面,甚至有翻譯上的遺漏和錯(cuò)誤。閱讀 DATASHEET當(dāng)然要有英文閱讀能力,這也是單片機(jī)學(xué)習(xí)者晉級(jí)的障礙。熟練的英文閱讀能力,讓您在單片機(jī)技術(shù)的海洋中自由翱翔。 制作 PCB板比較簡(jiǎn)單。對(duì) Protel或者 AltimDesigner軟件的了解應(yīng)該沒(méi)有問(wèn)題。但是要做的板子布局美觀,布線合理還得費(fèi)一番功夫。 熟練的單片機(jī) C語(yǔ)言編程,能使用 Protel軟件或 AltimDesigner軟件進(jìn)行 PCB設(shè)計(jì),并具有一定的英文閱讀能力,你就是一位遇強(qiáng)則強(qiáng)的單片機(jī)高手。 抗干擾設(shè)計(jì)軟件抗干擾技術(shù)在提高硬件系統(tǒng)抗干擾能力的同時(shí),由于其設(shè)計(jì)靈活,節(jié)省硬件資源,可靠性好,越來(lái)越受到人們的重視。本文以MCS-51單片機(jī)系統(tǒng)為例,研究微機(jī)系統(tǒng)軟件的抗干擾方法。 折疊軟件抗干擾設(shè)計(jì)工程界對(duì)軟件抗干擾的研究主要包括:一、消除模擬輸入信號(hào)的噪聲(如數(shù)字濾波技術(shù));二、當(dāng)程序運(yùn)行不正常時(shí),使程序重新進(jìn)入正常軌道。為軟件抗干擾提供了幾種有效的解決方案。 指令冗余 CPU獲取指令的過(guò)程是先獲取操作碼,然后獲取操作數(shù)。PC受干擾時(shí)出錯(cuò),程序便脫離正常軌道“亂飛”,當(dāng)亂飛到某個(gè)雙字節(jié)指令時(shí),若取指令時(shí)刻落在操作數(shù)上,誤將操作碼作為操作碼。如果“飛”到三字節(jié)指令,發(fā)生錯(cuò)誤的可能性較大。 將某些單字節(jié)指令人為地插入關(guān)鍵處,或?qū)⒁粋€(gè)有效的單字節(jié)指令重寫稱為指令冗余。NOP一般在雙字節(jié)指令之后插入到三字節(jié)指令之后。因此,即使亂飛程序飛到操作數(shù)上,由于空操作指令 NOP的存在,避免后面的指令被作為操作數(shù)執(zhí)行,程序自動(dòng)進(jìn)入軌道。 另外,對(duì)于 RET、 RETI、 LCALL、 LJMP、 JC等指令前插入兩個(gè) NOP流,也可以將亂飛程序納入軌道,以確保這些重要指令的執(zhí)行。。 攔截技術(shù) 我們所說(shuō)的截?cái)啵褪前褋y飛的程序引導(dǎo)到一個(gè)指定的位置,再進(jìn)行錯(cuò)誤處理。軟件捕捉器通常用于攔截亂飛的程序。所以,首先要合理設(shè)計(jì)捕捉器,其次要把捕捕器放在合適的位置。 (1 )軟件陷阱的設(shè)計(jì) 在無(wú)序程序進(jìn)入非程序區(qū)時(shí),冗余指令就不能工作。利用軟件陷阱,截獲亂飛程序,引導(dǎo)其到指定位置,再進(jìn)行錯(cuò)誤處理。軟體捕捉器是一種用于引導(dǎo)已捕獲的亂飛程序到重新設(shè)置入口地址0000 H的指令。一般將下列指令填入 EPROM中非程序區(qū)作為軟件陷阱: NOPNOPLJMP 0000H其機(jī)器碼為:0000020000 (2 ) 陷阱的安排 程序中通常沒(méi)有用到的 EPROM空間為0000020000。最后一條應(yīng)填入020000,當(dāng)亂飛程序落到此區(qū)域時(shí),可以自動(dòng)進(jìn)入軌道。陷井指令也可以填充在用戶程序空間中各模塊之間的剩余單元。在相應(yīng)的中斷服務(wù)程序中設(shè)置軟件陷阱,當(dāng)所用的中斷打開(kāi)時(shí),可以及時(shí)捕捉到不正確的中斷。如果應(yīng)用系統(tǒng)沒(méi)有使用外部中斷1,則外部中斷1的中斷服務(wù)程序可以是以下形式的: NOPNOPRETI返回指令可以是" RETI"或"LJMP0000 H"。若故障診斷程序和系統(tǒng)自恢復(fù)程序設(shè)計(jì)可靠、完善,使用LJMP0000 H作為返回單可以直接進(jìn)入故障診斷程序,對(duì)故障進(jìn)行早、中、晚程序的處理,恢復(fù)程序的運(yùn)行。 考慮到程序存貯器的容量,軟件陷阱一般1K空間有2-3個(gè)就可以進(jìn)行有效攔截。 軟件“看門狗”技術(shù) 如果程序失控進(jìn)入“死循環(huán)”,通常利用“看門狗”技術(shù)使程序脫離“死循環(huán)”。用連續(xù)檢測(cè)程序的循環(huán)運(yùn)行時(shí)間,如果發(fā)現(xiàn)程序的循環(huán)時(shí)間超過(guò)最大循環(huán)運(yùn)行時(shí)間,就認(rèn)為系統(tǒng)陷入“死循環(huán)”,需要進(jìn)行錯(cuò)誤處理。 "看門狗"技術(shù)可以通過(guò)硬件或軟件來(lái)實(shí)現(xiàn)。工業(yè)化應(yīng)用中,強(qiáng)干擾有時(shí)會(huì)破壞中斷控制字和關(guān)斷中斷。因此系統(tǒng)不能定時(shí)“喂狗”,硬件看門狗電路失效。軟體看門狗可以有效地解決這類問(wèn)題。 作者在實(shí)際應(yīng)用中,采用了環(huán)形中斷監(jiān)測(cè)系統(tǒng)。利用計(jì)時(shí)器T0監(jiān)控時(shí)序T1,用計(jì)時(shí)器T1監(jiān)控主程序,主程序監(jiān)控計(jì)時(shí)器T0。利用該環(huán)結(jié)構(gòu)的看門狗軟件具有較好的抗干擾性能,大大提高了系統(tǒng)的可靠性。對(duì)需要頻繁使用T1定時(shí)器進(jìn)行串口通信的測(cè)控系統(tǒng),則T1不能進(jìn)行中斷,可以改為通過(guò)串口中斷來(lái)監(jiān)控(如果使用的是MCS-52系列單片機(jī),也可用T2替代T1進(jìn)行監(jiān)視)。這款“看門狗”監(jiān)控軟件的原理是:在主程序、T0中斷服務(wù)程序、T1中斷服務(wù)程序中各設(shè)一運(yùn)行觀測(cè)變量,假定為 MWatch、T0Watch、T1Watch,每循環(huán)一次, MWatch加1,T0、T1中斷服務(wù)程序執(zhí)行一次,T0Watch、T1Watch加1。T0中斷服務(wù)程序通過(guò)檢測(cè)T1Watch變化來(lái)判斷T1運(yùn)行是否正常,檢測(cè)T1中斷服務(wù)程序中 MWatch的變化情況,判斷主程序是否正常運(yùn)行,通過(guò)檢測(cè)T0Watch的變化來(lái)判斷T0是否正常工作。如果發(fā)現(xiàn)某個(gè)觀測(cè)變量有異常變化,例如,應(yīng)加1而不加1,則轉(zhuǎn)到出錯(cuò)處理程序以進(jìn)行排除故障處理。主程序的最大循環(huán)周期、定時(shí)器T0和T1定時(shí)周期,當(dāng)然要完全合理地考慮。僅限于篇幅。 折疊硬件抗干擾技術(shù)由于干擾復(fù)位或掉電后的單片機(jī)系統(tǒng)復(fù)位為非正常復(fù)位,應(yīng)進(jìn)行故障診斷,自動(dòng)恢復(fù)非正常復(fù)位前的狀態(tài)。 非正常復(fù)位的識(shí)別 程序的執(zhí)行總是從0000H開(kāi)始,導(dǎo)致程序從 0000H開(kāi)始執(zhí)行有四種可能:一、系統(tǒng)開(kāi)機(jī)上電復(fù)位;二、軟件故障復(fù)位;三、看門狗超時(shí)未喂狗硬件復(fù)位; 四、任務(wù)正在執(zhí)行中掉電后來(lái)電復(fù)位。四種情況中除第一種情況外均屬非正常復(fù)位,需加以識(shí)別。 (1 )硬件復(fù)位與軟件復(fù)位的識(shí)別 這里的硬件復(fù)位指的是:開(kāi)機(jī)復(fù)位和看門狗復(fù)位,寄存器復(fù)位后會(huì)影響硬件復(fù)位,例如: PC=0000 H, SP=07 H, PSW=00 H等。但軟件重置對(duì) SP、 SPW沒(méi)有影響。因此,對(duì)于微機(jī)測(cè)控系統(tǒng),當(dāng)程序正常運(yùn)行時(shí), SP地址設(shè)置在07 H以上,或系統(tǒng)正常工作時(shí), PSW的5位用戶標(biāo)志位為1。這樣,在系統(tǒng)復(fù)位時(shí),只要檢測(cè) PSW.5標(biāo)志位或 SP值,就能判定此硬件是否復(fù)位。 在硬件復(fù)位時(shí),由于 RAM在片內(nèi)的狀態(tài)是隨機(jī)的,而在軟件復(fù)位時(shí), RAM可以保持復(fù)位前的狀態(tài),從而可以選擇部分單元作為上電標(biāo)志。設(shè)置40 H作上電標(biāo)志,上電標(biāo)志字為78 H,若系統(tǒng)復(fù)位后40 H單元內(nèi)容不等于78 H,則視為硬件復(fù)位,否則視為軟件復(fù)位,轉(zhuǎn)向錯(cuò)誤處理。當(dāng)采用兩個(gè)單元作為上電標(biāo)記時(shí),這種鑒別方法具有較高的可靠性。 (2 )斷路器的啟動(dòng)復(fù)位和故障復(fù)位的識(shí)別 由于硬件的同位復(fù)位,啟動(dòng)復(fù)位和看門狗故障復(fù)位,通常借助非易失性 RAM或 EEROM進(jìn)行正確識(shí)別。當(dāng)系統(tǒng)正常運(yùn)行時(shí),設(shè)置一套掉電保護(hù)觀測(cè)裝置。在中斷服務(wù)程序中,當(dāng)系統(tǒng)正常工作時(shí),在定時(shí)給狗喂食的中斷服務(wù)程序中,該觀察單元保持標(biāo)準(zhǔn)值(設(shè)為 AAH),當(dāng)觀察單元在主程內(nèi)清零,因?yàn)榭梢员Wo(hù)觀察單元的斷電,而開(kāi)機(jī)時(shí),通過(guò)檢測(cè)該部件是否正常即可判斷是否有看門狗復(fù)位。 (3 )常規(guī)通電復(fù)位和異常通電復(fù)位的識(shí)別 在測(cè)控系統(tǒng)中,由于系統(tǒng)掉電等意外情況造成的開(kāi)機(jī)復(fù)位和正常開(kāi)機(jī)復(fù)位,對(duì)過(guò)程控制系統(tǒng)來(lái)說(shuō)尤為重要。例如以時(shí)間為標(biāo)準(zhǔn)的測(cè)控系統(tǒng),需要1小時(shí)才能完成一項(xiàng)測(cè)控任務(wù)。如果已經(jīng)進(jìn)行了50分鐘的測(cè)控,系統(tǒng)的電壓異常導(dǎo)致了復(fù)位,此時(shí)如果系統(tǒng)復(fù)位后又從頭開(kāi)始進(jìn)行測(cè)控,就會(huì)造成不必要的時(shí)間消耗。從而可以通過(guò)一個(gè)監(jiān)測(cè)單元對(duì)現(xiàn)有系統(tǒng)的運(yùn)行狀態(tài)、系統(tǒng)時(shí)間進(jìn)行監(jiān)控,將控制過(guò)程分解成若干步或若干段,每完成一步或者每運(yùn)行一段時(shí)間,監(jiān)測(cè)單元被設(shè)置為允許關(guān)閉值,在不同的任務(wù)或任務(wù)的不同階段具有不同的值,如果系統(tǒng)正在執(zhí)行測(cè)控任務(wù),或者在執(zhí)某一時(shí)間段內(nèi),將監(jiān)測(cè)單元置于非正常關(guān)機(jī)值。再根據(jù)該單元,系統(tǒng)復(fù)位后就能判定系統(tǒng)原來(lái)的運(yùn)行狀態(tài),并跳到出錯(cuò)處理程序中恢復(fù)系統(tǒng)最初運(yùn)行狀態(tài)。 系統(tǒng)異常復(fù)位后自恢復(fù)運(yùn)行程序設(shè)計(jì) 某些過(guò)程控制系統(tǒng)對(duì)順序要求嚴(yán)格,不能正常復(fù)位的系統(tǒng),一般都要求從失控模塊或任務(wù)中恢復(fù)運(yùn)行。因此,測(cè)控系統(tǒng)要做好重要數(shù)據(jù)的備份、參數(shù)的備份,如系統(tǒng)運(yùn)行狀態(tài)、系統(tǒng)進(jìn)程值、當(dāng)前輸入、輸出的值、當(dāng)前時(shí)鐘值、觀察單元的值等等,這些數(shù)據(jù)都要定時(shí)備份,并及時(shí)進(jìn)行修改。 對(duì)于已經(jīng)被識(shí)別出系統(tǒng)非正常復(fù)位的情況,先對(duì)一些必要的系統(tǒng)數(shù)據(jù)進(jìn)行恢復(fù)例如顯示模塊初始化,片外擴(kuò)展芯片初始化等。然后對(duì)測(cè)控系統(tǒng)進(jìn)行系統(tǒng)狀態(tài)、操作參數(shù)等的恢復(fù),包括顯示界面的恢復(fù)等。然后將重置任務(wù)、參數(shù)、運(yùn)行時(shí)間等恢復(fù)到系統(tǒng)運(yùn)行狀態(tài)。 應(yīng)該指出,真正恢復(fù)系統(tǒng)的運(yùn)行狀態(tài)需要極其細(xì)致地備份系統(tǒng)的重要數(shù)據(jù),并對(duì)其進(jìn)行數(shù)據(jù)可靠性檢查,以保證恢復(fù)的數(shù)據(jù)可靠。 二是在多任務(wù)多進(jìn)程測(cè)控系統(tǒng)中,數(shù)據(jù)恢復(fù)需要考慮恢復(fù)順序問(wèn)題。 系統(tǒng)的基本初始化是指對(duì)芯片、顯示、輸入和輸出方式等進(jìn)行初始化,注意輸入輸出的初始化不能造成錯(cuò)誤動(dòng)作。其中任務(wù)的初始化涉及到任務(wù)的執(zhí)行狀態(tài)、運(yùn)行時(shí)間等。 其它常用的軟件抗干擾方法,如數(shù)字濾波、 RAM數(shù)據(jù)保護(hù)、糾錯(cuò)等,僅限于篇幅,本文不作討論。在工程實(shí)踐中,為了獲得較好的抗干擾效果,常常采用多種抗干擾措施,并進(jìn)行補(bǔ)充完善。硬件抗干擾基本上是主動(dòng)的,軟件抗干擾是被動(dòng)的。對(duì)干擾源、軟硬件抗干擾進(jìn)行詳細(xì)分析,完善系統(tǒng)監(jiān)控方案,設(shè)計(jì)一個(gè)穩(wěn)定可靠的單片機(jī)系統(tǒng)是完全可行的。
|