版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
畢業(yè)設(shè)計(論文)題目:基于雙AD574數(shù)據(jù)采集板的軟件設(shè)計TITLE:SoftwareDesignofDataAcquisitionBoardBasedOnDoubleAD574二零一零年六月摘要隨著計算機(jī)技術(shù)的發(fā)展與普及,數(shù)字設(shè)備正越來越多地取代模擬設(shè)備,在生產(chǎn)過程控制和科學(xué)研究等廣泛的領(lǐng)域中,計算機(jī)測控技術(shù)正發(fā)揮著越來越重要的作用。然而,外部世界的大部分信息是以連續(xù)變化的物理量形式出現(xiàn)的,例如溫度、壓力、位移、速度等。要將這些信息送入計算機(jī)進(jìn)行處理,就必須先將這些連續(xù)的物理量離散化,并進(jìn)行量化編碼,從而變成數(shù)字量,這個過程就是數(shù)據(jù)采集。它是計算機(jī)在監(jiān)測、管理和控制一個系統(tǒng)的過程中,取得原始數(shù)據(jù)的主要手段。本論文主要講述是基于雙AD574的數(shù)據(jù)采集程序設(shè)計,兩個不同的模擬信號通過兩個AD574分別進(jìn)行A/D轉(zhuǎn)換,得到的值通過經(jīng)過單片機(jī)控制來處理和顯示。前端電路要進(jìn)行相應(yīng)的處理,用的是OP07進(jìn)行精確的放大,轉(zhuǎn)化成量程范圍內(nèi)的電壓值,再輸入到AD574中,同時單片機(jī)控制AD574的轉(zhuǎn)換和讀寫,并將得到的數(shù)據(jù)進(jìn)行處理和顯示。程序設(shè)計主要思路是根據(jù)其原理電路圖來編寫軟件程序,將重點(diǎn)以流程圖的形式并結(jié)合實際的電路進(jìn)行分析。在Keil軟件調(diào)試,分析系統(tǒng)的調(diào)試過程出現(xiàn)的問題,總結(jié)出現(xiàn)的問題,提出相應(yīng)的解決辦法,最后將對該系統(tǒng)的整體的總結(jié)和拓展進(jìn)行講述。該設(shè)計結(jié)果是一個單獨(dú)的采集模塊,使用方便,快速。采集板的應(yīng)用可在教學(xué),實驗,工業(yè),林業(yè),水利,礦山等各個部門,尤其是對于一些要求測量多個變量的設(shè)備很有使用價值,開拓了一個完整的數(shù)據(jù)采集系統(tǒng),具有很廣的發(fā)展前景。關(guān)鍵詞:數(shù)據(jù)采集;AD574;串行顯示ABSTRACTWiththedevelopmentandpopularizationofcomputertechnology,digitaldevicesaregraduallyreplacinganalogequipment.Inthewiderangeareasofprocesscontrolandscientificresearch,computermonitoringandcontroltechnologiesplayanimportantroleinit.However,mostoftheinformationiscontinuouslyemerginginphysicalform,suchastemperature,pressure,displacement,speedandsoon.Thisinformationisgivenwaytothecomputerprocessing,sowemustknowthecontinuousphysicaldiscreteandquantitativecoding,whichbecomedigital.Theprocessisdatacollection.Itisthecomputermonitor,managementandcontroltheprocessofasystemthatobtaintheoriginaldata.ThisthesisisbasedonaboutdoubleAD574dataacquisitionprogramdesign,thatistosaytwodifferentAD574analogsignalthroughtwoseparateA/Dconversion.ThevalueobtainedthroughaMCUtodisplayandstorage.Front-endcircuitconductstheappropriatetreatment,usingtheOP07accurateamplificationintoavoltagevaluewithintherange,andtheninputtotheAD574,conversionandmicroprocessoroftheAD574controllreadingandwriting,andtherewillbethedatastorageanddisplay.Mainideasofprogramsarebasedontheprincipleofcircuittowritesoftwareprograms,whichwillfocusontheformofaflowchartofthecircuitcombinedwithpracticalanalysis.TheKeilSoftwaredebugging,whichanalysessystemproblems,thensumuptheproblems,andputforwardthecorrespondingsolution,atlast,thisthesisdescribe.asummaryoftheoverallsystemanddevelopment.Thedesignresultisasingleacquisitionmodule,anditiseasytousefastly.Acquisitionboardapplicationscanbeusedtoteaching,laboratory,industrial,forestry,waterconservancy,miningandotherdepartments,especiallyinsomeoftherequirementsforthemeasurementofmultiplevariableswhichareusefultodevelopacompletedataacquisitionsystemwithwidedevelopmentprospects.Keywords:dataacquisition;AD574;serialdisplay目錄TOC\o"1-3"\h\u17312緒論 1177310.1.數(shù)據(jù)采集的應(yīng)用背景 1305840.1.1A/D模數(shù)轉(zhuǎn)換器發(fā)展背景 1171980.1.2本設(shè)計基于雙A/D轉(zhuǎn)換器研究意義和任務(wù) 1250840.2數(shù)據(jù)采集的發(fā)展的趨勢 2176510.2.1現(xiàn)代數(shù)據(jù)采集系統(tǒng)具有如下主要特點(diǎn) 2200590.2.2未來發(fā)展的數(shù)據(jù)采集特點(diǎn) 22541第一章硬件系統(tǒng)的分析 3173461.1硬件的整體框圖 3135221.2核心硬件模塊的思路梳理 365041.2.1單片機(jī)與AD574接口電路 3189501.2.2顯示模塊電路 6194551.3其他硬件電路模塊的分析 8158181.4本章小結(jié) 810165第二章系統(tǒng)的軟件設(shè)計 9309122.1軟件的設(shè)計基礎(chǔ) 9130942.1.1Keil51編程軟件的介紹 9116662.1.2Proteus仿真軟件的介紹 10273702.1.3燒寫程序軟件介紹 11288582.2程序的主要流程圖 1268332.2.1主流程圖 12193992.2.2思路介紹 1339882.3初始化子程序 1410352.3.1初始化init()的流程圖 1413432.3.2思路介紹 14259292.4AD574啟動和讀數(shù)據(jù)子程序 14235322.4.1主要子程序的流程圖 14119502.4.2編程的注意點(diǎn) 1665772.5單片機(jī)傳送并處理數(shù)據(jù)的子程序 17183162.5.1數(shù)據(jù)處理的算法 1785842.5.2數(shù)據(jù)處理流程圖 17248992.6顯示模塊的子程序 19206602.7中斷服務(wù)子程序 22314712.8本章小結(jié) 223760第三章系統(tǒng)的調(diào)試 23102463.1軟件調(diào)試中的硬件檢查 23313343.1.1單片機(jī)能正常工作 2350023.1.2OP07輸出有誤差 24288873.2軟件的調(diào)試 25101883.2.1函數(shù)中變量的定義問題 2587263.2.2編譯時出現(xiàn)不可打印的錯誤提示 2667633.3仿真調(diào)試中的的結(jié)果及數(shù)據(jù)分析 27280983.3.1輸入可調(diào)的模擬信號 27104783.3.2輸入是鋸齒波的信號 29228523.3.3輸入是正弦信號 3065573.4系統(tǒng)的調(diào)試結(jié)果及數(shù)據(jù)分析 3265573.5本章小結(jié) 328541第四章系統(tǒng)的應(yīng)用及展望 33210474.1系統(tǒng)的應(yīng)用 33189574.2系統(tǒng)的展望 3323372結(jié)論 3513694致謝 3621643參考文獻(xiàn) 3710283附錄1 3811746附錄2 3911746附錄3 40東華理工大學(xué)畢業(yè)設(shè)計(論文)緒論1PAGE45緒論0.1數(shù)據(jù)采集的應(yīng)用背景0.1.1A/D模數(shù)轉(zhuǎn)換器發(fā)展背景談到數(shù)據(jù)采集就馬上想到A/D轉(zhuǎn)換器,顯然A/D轉(zhuǎn)換器的種類很多.分類方法也很多。從A/D轉(zhuǎn)換器的工藝結(jié)構(gòu)來看,早期采用分立元件或某些集成電路單元組裝的組件型A/D轉(zhuǎn)換器已經(jīng)被混合集成型或單片集成型A/D轉(zhuǎn)換器所取代。單片型A/D轉(zhuǎn)換器按照內(nèi)部所采用的有源器件——晶體管的結(jié)構(gòu)類型的不同,又分為雙極型、MOS型(主要是CM0S型)和雙極—MOS相容型三個類別。雙極型ADC的優(yōu)點(diǎn)是具有低噪聲、大電流和電壓兼容性,實踐證明,有良好的穩(wěn)定性。MOS型的優(yōu)點(diǎn)是低成本,低功耗,與微處理機(jī)、存儲器等兼容,存在較大的技術(shù)潛力[1]。從A/D轉(zhuǎn)換器的工作原理來看,積分型ADC的主要特點(diǎn)是:精度較高,電路較簡單,對元器件精度要求較低,易于集成,成本低,噪聲小,溫漂也較小,這種ADC速度都比較低,適用于一般控制用儀器儀表,便于實現(xiàn)十進(jìn)制數(shù)字輸出。反饋比較型A/D轉(zhuǎn)換器內(nèi)含一個由D/A轉(zhuǎn)換器構(gòu)成的反饋回路,在實際應(yīng)用時,轉(zhuǎn)換器的輸入端應(yīng)連接采樣,保持電路,轉(zhuǎn)換速率較快,一般屬于中速轉(zhuǎn)換器。無反饋比較型A/D轉(zhuǎn)換器轉(zhuǎn)換速率最高,高速ADC幾乎都是無反饋比較型A/D轉(zhuǎn)換器,這類轉(zhuǎn)換器線路結(jié)構(gòu)復(fù)雜,難以實現(xiàn)較高的位數(shù)[2]?!?△型入A/D轉(zhuǎn)換器是近年來出現(xiàn)的新型A/D轉(zhuǎn)換器。它采用總和—增量調(diào)制原理,并與現(xiàn)代數(shù)字信號處理技術(shù)相結(jié)合,實現(xiàn)了高精度的模數(shù)轉(zhuǎn)換。如地震數(shù)據(jù)采集系統(tǒng)中已普遍采用∑-△型24位A/D轉(zhuǎn)換器,實現(xiàn)了高精度的數(shù)據(jù)采集[1]。正是有這樣的一個不同時期的發(fā)展情況,使得數(shù)據(jù)采集有了不斷的發(fā)展,應(yīng)用的前景也相當(dāng)?shù)膹V泛,如:神五,神六,神七的發(fā)射,顯示我國在數(shù)據(jù)采集方面已達(dá)先進(jìn)水平,因此,我們要充分運(yùn)用這樣的優(yōu)勢來為社會創(chuàng)造更有用的價值。0.1.2本設(shè)計基于雙A/D轉(zhuǎn)換器研究意義和任務(wù)(1)本設(shè)計用到的雙12位AD574模數(shù)轉(zhuǎn)換的研究意義我們選用的是高速型的AD574芯片,該芯片幾十個us時間就可實現(xiàn)據(jù)轉(zhuǎn)換,精度也非常的高,缺點(diǎn)是價格有點(diǎn)貴,不過能有好的實驗效果還是可以理解的,另外,該設(shè)計用的AD574是一種逐次逼近式的模數(shù)轉(zhuǎn)換的器件,應(yīng)用相當(dāng)?shù)膹V泛。因為該芯片的精度達(dá)到1/4096,可見比其他8位,10位的AD芯片精度高了很多。轉(zhuǎn)換的時間也很快,大致25us時間進(jìn)行轉(zhuǎn)換,我們團(tuán)隊就是利用AD574有這樣的優(yōu)點(diǎn),進(jìn)行設(shè)計一個基于雙AD574的數(shù)據(jù)采集板,這篇論文主要側(cè)重于軟件的設(shè)計及一些在調(diào)試過程中遇到的問題并加以分析和討論。當(dāng)然,這塊采集板應(yīng)用很廣,可以采集溫度的值,步進(jìn)電機(jī)的轉(zhuǎn)數(shù)值及一些物理上的應(yīng)用,比如:磁滯回線試驗中的磁感應(yīng)強(qiáng)度B和激勵磁場強(qiáng)度H的值。本設(shè)計的任務(wù)我們之所以喜歡這個題目是因為數(shù)據(jù)采集是一個很實際的問題,可以同時采集多個變量,如:采集溫度,流量,液面高度等,這些足以讓學(xué)生有去做這個課題的想法。下面談?wù)勎覀冊O(shè)計的主要任務(wù)是設(shè)計一個數(shù)據(jù)采集板,具體要求如下:①實現(xiàn)多個不同的變量的數(shù)據(jù)采集,處理并顯示具體的值。②輸入的模擬信號能有很大范圍0V~200V。③硬件上要性能穩(wěn)定,尤其是在電源部分。軟件上要能以好的程序?qū)崿F(xiàn)數(shù)據(jù)采集的功能。④整體系統(tǒng)上要美觀,小巧,使用方便,易于攜帶。0.2數(shù)據(jù)采集的發(fā)展的趨勢0.2.1現(xiàn)代數(shù)據(jù)采集系統(tǒng)具有如下主要特點(diǎn)[3](1)現(xiàn)代數(shù)據(jù)采集系統(tǒng)一般都由計算機(jī)控制,使得數(shù)據(jù)采集的質(zhì)量和效率等大為提高,也節(jié)省了硬件投資。(2)軟件在數(shù)據(jù)采集系統(tǒng)的作用越來越大,這增加了系統(tǒng)設(shè)計的靈活性。(3)數(shù)據(jù)采集與數(shù)據(jù)處理相互結(jié)合得日益緊密,形成數(shù)據(jù)采集與處理系統(tǒng)采集、處理到控制的全部工作。(4)數(shù)據(jù)采集過程一般都具有“實時”特性,實時的標(biāo)準(zhǔn)是能滿足實際需要;對于通用數(shù)據(jù)采集系統(tǒng)一船希望有盡可能高的速度,以滿足更多的應(yīng)用環(huán)境。(5)隨著微電子技術(shù)的發(fā)展,電路集成度的提高,數(shù)據(jù)采集系統(tǒng)的體積越來越小,可取性越來越高,甚至出現(xiàn)了單片數(shù)據(jù)采集系統(tǒng)。(6)總線在數(shù)據(jù)采集系統(tǒng)中有著廣泛的應(yīng)用,總線技術(shù)它對數(shù)據(jù)采集系統(tǒng)結(jié)構(gòu)的發(fā)展起著重要作用。0.2.2未來發(fā)展的數(shù)據(jù)采集特點(diǎn)除了繼承以往的特點(diǎn),未來數(shù)據(jù)采集將是在A/D轉(zhuǎn)換器的位數(shù),精度,速度。預(yù)測是A/D轉(zhuǎn)換位數(shù)是24位以上,采集數(shù)據(jù)的速度幾個ns時間,而且基本上都是集成在一個芯片上,只要加上電源和輸入模擬值便可得到具體的數(shù)字值,然后經(jīng)上位機(jī)的控制進(jìn)行處理顯示及存儲起來,這種發(fā)展的趨勢必能使數(shù)據(jù)采集更加快而且精確度更高,使用更方便。東華理工大學(xué)畢業(yè)設(shè)計(論文)硬件系統(tǒng)的分析第一章硬件系統(tǒng)的分析在本章主要涉及到的是硬件系統(tǒng)的分析,即在軟件編程中要用到的一些控制信號需要硬件的支持,比如:AD574的時序問題,這個是非常關(guān)鍵的一點(diǎn),往往決定是否正確的實現(xiàn)數(shù)據(jù)采集的功能,因此,下面將介紹一下主要的模塊。1.1硬件的整體框圖這個硬件整體設(shè)計大致的思路是:單片機(jī)控制兩個AD574的啟動和轉(zhuǎn)換,并讀取數(shù)據(jù)顯示,存儲。也就是如下圖1-1所示的:顯示模塊和存儲模塊。輸入信號先要經(jīng)過運(yùn)算放大器來切換不同的量程,即可以實現(xiàn)從0到200V的電壓的變化,顯然,這是可以實現(xiàn)的,只是按上一個跳線帽即可實現(xiàn)不同量程的切換,其電路圖見附錄1。模模擬輸入端1模擬輸入端2運(yùn)算放大器1運(yùn)算放大器2AD574AD574STC89C52顯示模塊存儲模塊DBDB控制控制圖1-1整體框圖1.2核心硬件模塊的思路梳理1.2.1單片機(jī)與AD574接口電路AD574關(guān)鍵的引腳控制思路A0是字節(jié)地址短周期控制端,與12/端用來控制啟動轉(zhuǎn)換的方式和數(shù)據(jù)輸出格式。須注意的是,12/端TTL電平不能直接+5V或0V連接,否則調(diào)板就有問題[16]。表1-1AD574控制信號表CER/12/A0工作狀態(tài)0****不工作*****不工作10**0啟動12位轉(zhuǎn)換10**1啟動8位轉(zhuǎn)換111接+5V*并行輸出12位數(shù)字111接地0并行輸出8位數(shù)字111接地1并行輸出4位數(shù)字我們來說說AD574的CE、和A0對其工作狀態(tài)的控制過程,這些在軟件編程中非常的重要。在CE=1,=0同時滿足時,AD574才會正常工作,在AD574處于工作狀態(tài)時,當(dāng)R/=0時A/D轉(zhuǎn)換,當(dāng)R/=1是進(jìn)行數(shù)據(jù)讀出。12/和A0端用來控制啟動轉(zhuǎn)換的方式和數(shù)據(jù)輸出格式。A0=0時,啟動的是按完整12位數(shù)據(jù)方式進(jìn)行的,當(dāng)A0=1時,按8位A/D轉(zhuǎn)換方式進(jìn)行。當(dāng)R/=1,也即當(dāng)AD574處于數(shù)據(jù)狀態(tài)時,A0和12/控制數(shù)據(jù)輸出狀態(tài)的格式。當(dāng)A0=1時,數(shù)據(jù)以12位并行輸出,當(dāng)A0=0時,數(shù)據(jù)以8位分兩次輸出。而當(dāng)A0=0時,輸出轉(zhuǎn)換數(shù)據(jù)的高8位,A0=1時輸出A/D轉(zhuǎn)換數(shù)據(jù)的低4位,這四位占一個字節(jié)的高半字節(jié),低半字節(jié)補(bǔ)零。其控制邏輯真值表[4]見上表1-1。AD574的時序圖的理解從圖中可以看出啟動的可要先初始化一下,即讓控制位CE=0,=1,然后在開啟,使CE=1,=0,A0=0,R/=0啟動12位的A/D轉(zhuǎn)換,特別注意:=0,CE=1同時滿足時,AD574才處于工作狀態(tài),否則工作被禁止。編程時嚴(yán)格按照這種時序圖來編寫,當(dāng)然,往往是用一位來控制開啟,也就是說,可以讓其他先滿足,就等一個控制位成立即可。典型的方法是讓CE=1,作為控制開啟AD574的位。正如下圖1-2所示的啟動AD574的時序圖。圖1-2AD574啟動時序圖在讀取數(shù)據(jù)的時候,編程關(guān)鍵是控制R/,A0,因為我們是輸出兩個8位的數(shù)據(jù),然后進(jìn)行處理數(shù)據(jù),得到一個12位的二進(jìn)制值。顯然在讀的狀態(tài)也要保證CE=1,=0同時成立,否則也不會執(zhí)行讀取數(shù)據(jù)。下圖1-3是讀取數(shù)據(jù)的時序圖圖1-3讀取數(shù)據(jù)時序圖單片機(jī)與雙AD574的接口電路系統(tǒng)分析:在編軟件中我必須對硬件的控制信號有一個相應(yīng)理解。正如下圖1-5所示的圖,可以看到,我們知道是通過單片機(jī)來控制雙AD574的,需要注意的一點(diǎn)是我們硬件設(shè)計的時候用的是鎖存來控制位使AD574工作,大部分資料是一種方法即用地址來控制位來鎖存,通過這種方法可以說是非常的迅速,但我們編程使用的為控制的方法來實現(xiàn),同樣可以達(dá)到一樣的目的。圖1-4單片機(jī)與AD574接口電路1.2.2顯示模塊電路這部分是采用一個獨(dú)立模塊,只要4根線即可,TXD,RXD,地和VCC。對編程來說也是非常的簡單,即控制SCON、TI(傳送中斷標(biāo)志位),這個模塊基本可以實現(xiàn)顯示的問題。移位寄存器74LS164芯片74LS164是一個8位移位寄存器,當(dāng)清除端(CLEAR)為低電平時,輸出端(QA-QH)均為低電平。串行數(shù)據(jù)輸入端(A,B)可控制數(shù)據(jù)。當(dāng)A、B任意一個為低電平,則禁止新數(shù)據(jù)輸入,在時鐘端(CLOCK)脈沖上升沿作用下Q0為低電平。當(dāng)A、B有一個為高電平,則另一個就允許輸入數(shù)據(jù),并在CLOCK上升沿決定輸出的狀態(tài)。CLOCK時鐘輸入CLEAR同步清除輸入端(低電平有效)A,B串行數(shù)據(jù)輸入端QA-QH輸出端[5],下圖1-5是其時序圖。圖1-574LS164傳輸數(shù)據(jù)時序圖74LS164硬件電路圖圖1-6顯示數(shù)據(jù)硬件電路圖談到這里就得談?wù)剢纹瑱C(jī)是怎么控制的。即串行口的工作方式,編程使用方式0,SCON=0x00,串行移位寄存器方式,數(shù)據(jù)由RXD來發(fā)送和接收如圖1-6,一幀信息由8位數(shù)據(jù)組成低位在前,波特率固定fosc/12,因為每個機(jī)器周期從RXD上發(fā)送一個數(shù)據(jù)。同步移位脈沖是由TXD引腳上輸出的。另外想說的是傳送中斷標(biāo)志位TI是由硬件置1,軟件清0,在編程時要注意。要說明的一點(diǎn)是:由于硬件原計劃是用串口顯示,但實際只有4個數(shù)碼管,我們打算用51板上的8個數(shù)碼管顯示,兩種方法都編過程序,而且都試驗過均可行。因此,不管哪種顯示都是大同小異的。1.3其他硬件電路模塊的分析(1)運(yùn)算放大器模塊主要思想是OP07運(yùn)算放大器使輸入從不同的量程0~200V,輸入到AD574中,我們是通過兩個OP07和經(jīng)過電阻分壓的方式的到不同的范圍,分別是0.5V,10V,20V,100V,200V,這些都可以實現(xiàn)。(2)穩(wěn)壓電源模塊主要思想是用7805來產(chǎn)生5V的電壓,在1腳和3腳接一個0.33u的極性電容,在2腳和3腳接一個0.1u的無極性電容。(3)存儲模塊主要的目的是利用HY62256芯片的外部存儲器,通過地址把數(shù)據(jù)發(fā)到地址線上,可以拓展到32K的空間因為是15根地址線,所以是32K的儲存空間。(4)小結(jié)這部分主要是大致講一下思想,可以讓我在軟件編程中掌握相關(guān)調(diào)試可能出現(xiàn)的問題,以便早點(diǎn)解決碰到的問題。1.4本章小結(jié)在本章中主要是從系統(tǒng)的硬件控制信號出發(fā),分別講述幾個主要的核心部件,當(dāng)然我主要是從事寫軟件的,硬件也進(jìn)行了相應(yīng)的分析,確實發(fā)現(xiàn)了不少的問題,比如:單片機(jī)為什么燒不進(jìn)程序等一些問題。軟件方面我也有許多不足的地方,在四月份調(diào)試板的時候,一直出現(xiàn)AD574沒有工作,我想:軟件的編程是最大的原因沒調(diào)出,即是時序為真正的理解,導(dǎo)致花了好長時間來調(diào)試板,這些將會在軟件的硬件調(diào)試中談?wù)勛约合敕?。另外,在顯示模塊中,還用了一般的顯示方法進(jìn)行了仿真,即是用位和段控制的方法進(jìn)行編程,效果同樣是不錯的。東華理工大學(xué)畢業(yè)設(shè)計(論文)系統(tǒng)的調(diào)試第二章系統(tǒng)的軟件設(shè)計該系統(tǒng)用的雙AD574進(jìn)行的數(shù)據(jù)采集,即實現(xiàn)的目的是:能夠同時進(jìn)行數(shù)據(jù)轉(zhuǎn)換,顯然這是能夠達(dá)到的。但處理和顯示則需要分開來工作,用的是外部中斷0,1的數(shù)據(jù)處理方法,分時進(jìn)行處理和顯示,具體的軟件程序見附錄3。2.1軟件的設(shè)計基礎(chǔ)2.1.1Keil51編程軟件的介紹[6]KeiluVision是德國Keil公司開發(fā)的基于Windows平臺的單片機(jī)開發(fā)軟件,在全球廣泛使用,它是一種基于SPICE仿真引擎的混合電路仿真軟件。它不僅能仿真模擬、數(shù)字電路,以及模數(shù)混合電路,更具特色的是它能夠仿真基于單片機(jī)的電子系統(tǒng).它完全支持MCS-51及其派生系列單片機(jī)的設(shè)計系統(tǒng)。
uVision支持8051的所有Keil工具,包括C編譯器、宏匯編器、鏈接器/定位器和目標(biāo)文件至HEX格式的轉(zhuǎn)換器,其中KeilC51是一種專門為單片機(jī)設(shè)計的高效率C語言編譯器,符合ANSI標(biāo)準(zhǔn),生成的程序代碼運(yùn)行速度極高,所需要的存儲器空間極小,完全可以與匯編語言媲美。KeiluVision2是目前使用廣泛的單片機(jī)開發(fā)軟件,它集成了源程序編輯和程序調(diào)試于一體,支持匯編、C、PL/M語言。在這里我們簡單的介紹一下他的應(yīng)用方法如下:首先從菜單的“工程”中“新建工程...”如下圖2-1,建立我們將要做的工程項目,新建的工程要起個與工程項目意義一致的名字,可以是中文名;我們這里用Test,并將Test工程“保存”到C:\Keil下:圖2-1軟件編寫平臺(2)Keil環(huán)境要求我們?yōu)門est工程選擇一個單片機(jī)型號,我們選擇Atmel公司的89C52[17],“確定”后工程項目就算建立了。(3)點(diǎn)擊“文件”中的“新建”,新建一個空白文檔,這個空白文檔就是讓我們編寫單片機(jī)程序的場所。在這里你可以進(jìn)行編輯、修改等操作。(4)寫完后再檢查一下,并保存文件,保存文件時,其文件名最好與前建立的工程名相同(當(dāng)然這里為Test),其擴(kuò)展名必須為.C(特別注意)“文件名”中一定要寫全,如:Test.C。(5)鼠標(biāo)右鍵點(diǎn)擊“SourceGroup1”,在彈出的菜單中選“增加文件到組SourceGroup1”,向工程添加了源文件后,鼠標(biāo)右鍵點(diǎn)擊“TarGet1”,在彈出的菜單中選“目標(biāo)Target1屬性”在打開的話框中,選擇“輸出”選項卡,在這個選項卡中,“E生成HEX文件”選項前要打勾,按“確定”退出。(6)最后,從菜單的“工程”中執(zhí)行“R重新構(gòu)造所有目標(biāo)”,在工程文件的目錄下就會生成與工程名相同的一些文件,其中大部分文件我們并不必關(guān)心,而生成的hex文件是我們需要的,還會出現(xiàn)程序是否有問題,改到?jīng)]有問題為止??傊覀冇肒eil這個軟件進(jìn)行編譯,編譯后可以顯示出錯的地方,同時可以雙擊下面對應(yīng)的信息可以得到你出錯的地方,然后再對應(yīng)去修改程序,直到修改成功為止,并轉(zhuǎn)為HEX文件,方便燒寫程序,實用性很強(qiáng)。2.1.2Proteus仿真軟件的介紹Proteus(海神)的ISIS是一款Labcenter出品的電路分析實物仿真系統(tǒng),可仿真各種電路和IC,并支持單片機(jī),元件庫齊全,使用方便,是不可多得的專業(yè)的單片機(jī)軟件仿真系統(tǒng)[7],具體的軟件界面如下圖2-2。圖2-2軟件仿真平臺該軟件的特點(diǎn)[7]:①全部滿足我們提出的單片機(jī)軟件仿真系統(tǒng)的標(biāo)準(zhǔn),并在同類產(chǎn)品中具有明顯的優(yōu)勢。②具有模擬電路仿真、數(shù)字電路仿真、單片機(jī)及其外圍電路組成的系統(tǒng)的仿真、RS-232動態(tài)仿真、C調(diào)試器、SPI調(diào)試器、鍵盤和LCD系統(tǒng)仿真的功能;有各種虛擬儀器,如示波器、邏輯分析儀、信號發(fā)生器等。③目前支持的單片機(jī)類型有:68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各種外圍芯片。④支持大量的存儲器和外圍芯片。總之該軟件是一款集單片機(jī)和SPICE分析于一身的仿真軟件,功能極其強(qiáng)大,可仿真51、AVR、PIC。另外,Proteus組合了高級原理布圖、混合模式SPICE仿真,PCB設(shè)計以及自動布線來實現(xiàn)一個完整的電子設(shè)計系統(tǒng)。此系統(tǒng)受益于多年來的持續(xù)開發(fā),被《電子世界》在其對PCB設(shè)計系統(tǒng)的比較文章中評為最好產(chǎn)品—“TheRoutetoPCBCAD”。Proteus產(chǎn)品系列也包含了我們革命性的VSM技術(shù),用戶可以對基于微控制器的設(shè)計連同所有的周圍電子器件一起仿真。用戶甚至可以實時采用諸如LED/LCD、鍵盤、RS232終端等動態(tài)外設(shè)模型來對設(shè)計進(jìn)行交互仿真。其功能模塊:—個易用而又功能強(qiáng)大的ISIS原理布圖工具,PROSPICE混合模型SPICE仿真,ARESPCB設(shè)計,PROSPICE仿真器的一個擴(kuò)展PROTEUSVSM,便于包括所有相關(guān)的器件的基于微處理器設(shè)計的協(xié)同仿真。此外,還可以結(jié)合微控制器軟件使用動態(tài)的鍵盤,開關(guān),按鈕,LED甚至LCD顯示,CPU模型,支持許多通用的微控制器,如PIC,***R,HC11以及8051交互的裝置模型,包括:LED和LCD顯示,RS232終端,通用鍵盤,強(qiáng)大的調(diào)試工具,包括寄存器和存儲器,斷點(diǎn)和單步模式,KeiluVision2等開發(fā)工具的源層調(diào)試,應(yīng)用特殊模型的D提供有關(guān)元件庫的全部文件。2.1.3燒寫程序軟件介紹我們用的是典型的燒寫軟件[8],通過串口來把程序傳送給單片機(jī),這種軟件提供了幾種燒寫不進(jìn)的方法,也可說是解決的辦法。一是換一根串口線;二可以停止燒寫,重新下載燒程序,同時單片機(jī)也要再次上電;三是可能要使P1.0或P1.1置一下低電平,在重新燒寫程序;四是我們外部晶振未接好,單片機(jī)沒有工作。下圖是燒寫程序的軟件界面(如圖2-3):圖2-3燒寫程序平臺從上圖可以知道,我們僅僅只用到燒寫的一部分,還有串口的調(diào)試助手欄,設(shè)置波特率等問題,當(dāng)然是考慮到廣大的用戶而設(shè)計的軟件,使用更加方便。2.2程序的主要流程圖2.2.1主流程圖該程序設(shè)計主要有以下幾個函數(shù):voidinit();//初始化控制信號和開中斷voidstart();//啟動AD574voidDelay(uint);//延時函數(shù)voidData_Handle(uint);//處理并顯示AD574的數(shù)據(jù)voidDisplay(uchar);//顯示不帶點(diǎn)的函數(shù)voidDisplayD(uchar);//顯示帶點(diǎn)的函數(shù)uintAd574_1();//讀第一個AD574的數(shù)據(jù)uintAd574_2();//讀第二個AD574的數(shù)據(jù)設(shè)計的流程圖如下圖2-4:開始初始化子程序init()啟動AD574子程序start()flag0==1?flag1==1?讀取第一個AD574的數(shù)據(jù),并返回數(shù)據(jù)dat1=AD574_1()第二個AD574的數(shù)據(jù)處理Data_Handle(dat2)第一個AD574的數(shù)據(jù)處理Data_Handle(dat1)讀取第二個AD574的數(shù)據(jù),并返回數(shù)據(jù)dat2=AD574_2()NYYN 圖2-4主流程圖2.2.2思路介紹本程序主要設(shè)計的思路是用兩個中斷來控制是否轉(zhuǎn)換完成,即我們用的是標(biāo)志位來判斷,在中斷中讓標(biāo)志位置1,在主函數(shù)中進(jìn)行判斷,如果是有標(biāo)志位為1,說明轉(zhuǎn)換已經(jīng)完成,可以開始讀數(shù)據(jù)了,接下來,我們便可以進(jìn)行數(shù)據(jù)的處理和顯示,經(jīng)過仿真達(dá)到預(yù)期的效果。該流程整體的思路很清晰,簡而言之是將AD574轉(zhuǎn)換得到的數(shù)據(jù)用數(shù)碼管顯示,同時,若有必要的話可將其存入存儲器中,中斷的作用是就可以自動的判斷,因為我們將其標(biāo)志位進(jìn)行了處理,可以達(dá)到其效果。2.3初始化子程序2.3.1初始化init()的流程圖如圖2-5初始化流程圖初始化子程序init()AD574的控制位CE=0,CS=1AD574的控制位CE=0,CS=1開總中斷及外部中斷0,1IT0=1,IT1=1表示下降沿觸發(fā)返回圖2-5初始化流程圖2.3.2思路介紹初始化程序主要是使開中斷,AD574的控制引腳CE=0,=1,使其沒有在工作狀態(tài),同時采用下降沿觸發(fā)的方式,即讓IT0=1,IT1=1。2.4AD574啟動和讀數(shù)據(jù)子程序2.4.1主要子程序的流程圖(1)啟動子程序流程圖啟動的方法是“同時”啟動的,這里的“同時”是指相差幾個us時間,若真的要完全同時啟動也可,即可已讓兩個AD574的控制引腳接在一起,然后通過控制位的方法來使單片機(jī)來工作,實際上,我們忘記考慮一個東西,我們的讀的數(shù)據(jù)是在同一個口數(shù)據(jù),極易發(fā)生數(shù)據(jù)沖突的問題,所以我們還是分時啟動,但是有一點(diǎn):我們可以實現(xiàn)一個AD574在工作,另外一個也在工作,可以認(rèn)為是在同時采集數(shù)據(jù),讀數(shù)據(jù)的時候我們是根據(jù)中斷的標(biāo)志位來處理數(shù)據(jù)。其流程圖(如圖2-6)如下:啟動兩個AD574start()第一個AD574控制引腳CS=0,A0=0,R/=0,CE=1第一個AD574控制引腳CS=0,A0=0,R/=0,CE=1第二個AD574控制引腳CS=0,A0=0,R/=0,CE=1返回圖2-6兩個AD574啟動流程圖在編啟動的程序時特別注意是延時的問題,一般來說,必須使CE和同時有效,而且要求R/為低電平,如果R/為高電平,會立即執(zhí)行讀操作,可能導(dǎo)致總線沖突。我們通常用CE做為啟動信號,400ns過后,STS會變高,在經(jīng)25us時間,STS的電平會變低。(2)讀數(shù)據(jù)子程序流程圖以第一個AD574為例,由中斷服務(wù)子程序使標(biāo)志位置1,在主函數(shù)便進(jìn)行出數(shù)據(jù)的讀取和處理,核心在于如何將兩個8位的數(shù)值編程為12位二進(jìn)制的數(shù)值,顯然我們還是用簡單的方法便可求出,從流程圖中可以發(fā)現(xiàn)可以發(fā)現(xiàn)具體的方法,在這里我得介紹一下這個函數(shù)#include<intrins.h>常用的函數(shù)有:_nop_(uint),_cror_(uchar,uchar),_crol_(uchar,uchar)[6]。我們在用的是第二個函數(shù),即:右移位。本質(zhì)上相當(dāng)直接除以2的多少次方,有異曲同工之妙。讀取數(shù)據(jù)模塊的流程圖如下圖2-7:flag1=1,表示AD574數(shù)據(jù)已經(jīng)轉(zhuǎn)換完成控制CE=1,A0=0,=0,flag1=1,表示AD574數(shù)據(jù)已經(jīng)轉(zhuǎn)換完成控制CE=1,A0=0,=0,R/=1,讀取高8位數(shù)據(jù)并放在datah_1中A0=1,讀取低4位數(shù)據(jù),并放到datal_1=P0將兩個數(shù)據(jù)合成一個數(shù)據(jù)Dat=datah_1*16+_cror_(datal_1,4)return(dat),返回數(shù)據(jù)圖2-7讀取數(shù)據(jù)模塊流程圖2.4.2編程的注意點(diǎn)我們在編這個啟動和讀數(shù)據(jù)最好可以放在一個程序中,但我們在這用的是中斷,在標(biāo)志位中判斷是哪個AD574轉(zhuǎn)換完成,在讀的過程中必須要有CE和同時有效,而且R/為高電平時開始進(jìn)行讀的操作,注意:R/必須在CE和同時有效前至少提前150ns的時間變高電平。之后便是處理由兩個8位數(shù)據(jù)來得到12位的數(shù)據(jù),我們分別對高8位乘以16,低8位可以右移4位即可,然后加起來便可得到最后的值。這里寫程序有兩種方法來寫控制信號。一種是用地址來讀寫控制信號的數(shù)據(jù)[6],比如:#defineadstsxdata[0xfff];另外一種是將其每一個控制信號用相應(yīng)的符號來表示,并且通過鎖存器來鎖存[6],比如:sbitcs1cs,即可用cs1=0來控制。兩種方法都可以,前者有地址重復(fù)的現(xiàn)象,只要寫其中的某一個即可,后者是每條語句的編寫,更好理解,因為涉及的控制信號大多數(shù)是一條。2.5單片機(jī)傳送并處理數(shù)據(jù)的子程序2.5.1數(shù)據(jù)處理的算法該部分程序主要是單片機(jī)處理數(shù)據(jù)以便顯示,其思路是:我們要使數(shù)碼管顯示具體的電壓值,可實際上是一個具體的二進(jìn)制的數(shù),因此必須要有一個軟件的處理方法使其得到最終的目12位的AD574,最小是0,最大是4095,有4095份,量程是10V,故每一份對應(yīng)的電壓值應(yīng)該是:10/4095v=0.002442002442v,顯然四舍五入取0.002442v,因為我們顯示只有4個數(shù)碼管故是我要把它編程一個4位的整數(shù),只是要加點(diǎn)和不帶點(diǎn)的問題,這就好辦多了。因此,我們將得到的二進(jìn)制數(shù)乘以0.002442即可,殊不知我們單片機(jī)控制的顯示只知道整型,不會處理這樣的多個小數(shù)點(diǎn)啊!那該怎么辦呢?我們的方法是將其值變整型,然后還原。即每一份0.002是我們的目標(biāo),注意,其每個0也看成整型,2就更不用說了,顯然是整型。我們不妨用DATA表示從AD574中得到的二進(jìn)制的值,M表示是送到顯示的值,讓其顯示具體的電壓值。公式:M=(DATA*2442)/1000驗證:DATA=0X0FFF=4095(12位的AD574最大值)M=(DATA*2442)/1000=(4095*2442)/1000=9999990/1000=9999.990可見這種方法的準(zhǔn)確度不是非常高,若高的話應(yīng)該在9999.999999V,因為最大便是10.000000V??!我們這種算法最大可到9999.990,實際單片機(jī)只知道是9999,后面的小數(shù)忽略掉了,但我們別忘了,我們還要還原成電壓值。即:得到9.999V才是我們真正的目的,這個問題的方法是用帶點(diǎn)的顯示和不帶點(diǎn)的顯示即可,問題便迎刃而解。2.5.2數(shù)據(jù)處理流程圖數(shù)據(jù)處理流程圖(如圖2-8)主要的目的是:為顯示服務(wù)。說白了,如不要顯示這部分可以不用,但是我們的目的是面向用戶,不僅僅能實現(xiàn)對應(yīng)得功能,更應(yīng)該是與用戶的一個交流情況,讓用戶更加直觀的知道我們儀器的實際測試的效果。數(shù)據(jù)處理子程序?qū)⒎祷氐闹党艘?442,然后除以1000得到整型值用data_qian=m/1000,data_bai=m%1000/100,data_shi=m%100/10,data_ge=m%10,分別得到將返回的值乘以2442,然后除以1000得到整型值用data_qian=m/1000,data_bai=m%1000/100,data_shi=m%100/10,data_ge=m%10,分別得到個,十,百,千位的值Display(wei)返回圖2-8數(shù)據(jù)處理流程圖說明的幾點(diǎn)問題:(1)Dispiay()處理的數(shù)據(jù)要調(diào)用其4次,即有Dispiay(data_qian),Dispiay(data_bai),Dispiay(data_shi),Dispiay(data_ge)。(2)具體的程序如下:voidData_Handle(uintn) //數(shù)據(jù)處理{ uintdata_ge,data_bai,data_shi,data_qian;ulongm;mm=(m*2442)/1000;//這樣算是便于顯示結(jié)果,且單位為vdata_qian=data_1/1000; data_bai=data_1%1000/100;data_shi=data_1%100/10;data_ge=data_1%10;Display(data_shi);Display(data_ge);SCON=0x00;SBUF=table_2[data_qian]; while(TI==0); TI=0; Display(data_bai); }(3)以上是原計劃根據(jù)軟件編程寫的串口顯示,實際中我們考慮到串口顯示只有4個數(shù)碼管,所以用了51板上的8個數(shù)碼管。思路上沒有太大變化,只是在編程的時候用段和位來控制,這一切都可實現(xiàn)。單片機(jī)處理的數(shù)據(jù)用的是P0口的來控制和傳送數(shù)據(jù),要有上拉電阻[8],這樣才能有輸出的控制信號正常的,即屬于TTL高電平,我們團(tuán)隊當(dāng)時因時間的關(guān)系未考慮全面,在制作板的時候未加上拉電阻,導(dǎo)致沒有正常的結(jié)果。另外用了鎖存器來控制信號,使其保持一段的時間,當(dāng)需要另外的控制信號時,可以開鎖存器,即是直通的方式,然后在鎖存。2.6顯示模塊的子程序(1)流程圖該子程序目的即是實現(xiàn)數(shù)據(jù)顯示,SCON=0表示是用同步移位的方式,因為SM0,SM1均為0,表示是方式0,另外,TI=0,發(fā)送中斷標(biāo)志位,該位在方式0中,串行發(fā)送完第8位數(shù)據(jù)后,由硬件置位,但必須軟件清0,這是任何方式都需要的。單片機(jī)復(fù)位時,SCON中的所有位均清0[9]。其對應(yīng)的查表如下:ucharcodetable_1[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};//不帶點(diǎn)0~9ucharcodetable_2[]={0x02,0x9e,0x24,0x0c,0x98,0x48,0x40,0x1e,0x00,0x08};//帶點(diǎn)的0~9下圖2-9是其具體的流程圖:串行口顯示子程序使串行口控制寄存器使串行口控制寄存器SCON=0從table_1[wei]中取出對應(yīng)的數(shù)據(jù)從table_1[wei]中取出對應(yīng)的數(shù)據(jù)TI==0?YTI==0?YNN軟件清0,使TI=0軟件清0,使TI=0返回返回圖2-9顯示字程序流程圖其程序如下:voidDisplay(uintwei)//顯示程序{SCON=0x00; SBUF=table_1[wei]; while(TI==0); TI=0; } (2)說明幾個問題顯示的方式由很多,如LCD液晶顯示,編程比上面的程序就難了些,我們這只要幾條語句就可。另外一點(diǎn)是,C51的編程的優(yōu)點(diǎn)也就體現(xiàn)出來了,簡單、方便,易于理解。(3)值得說明的是在仿真的時候,我們用的是數(shù)碼管顯示,一些控制引腳也用變化,主要是考慮能實現(xiàn)對應(yīng)的功能即可。其查表如下:ucharcodeData_duan1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x3e};//共陰極,顯示0~9和UucharcodeData_duan2[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//帶點(diǎn)的0~9ucharcodeData_wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位選控制本質(zhì)上來說都是一個,串行顯示是通過發(fā)送一個8位的數(shù)據(jù)來顯示,而在仿真的時候用的是位和段的控制,采用動態(tài)的顯示方法,定時的對顯示器器件掃描,這種方法分時工作,每次只能顯示一個,但人眼有視覺暫留現(xiàn)象,所以,只要掃描頻率足夠快,仍然感覺所有的器件都在顯示,顯然,這種方法也是相當(dāng)不錯的。(4)正如上所述,我覺得在51板上的顯示也比較簡單,思路如下:先送段的數(shù)據(jù),再送位的數(shù)據(jù),在第六,七個數(shù)碼管顯示是第幾個AD574顯示的值,有一個判斷方法是,在讀數(shù)據(jù)前有一個標(biāo)志位使其k=1表示是第一個AD574數(shù)據(jù),在顯示的時候可以用此標(biāo)志未來判段,下圖(不帶點(diǎn)數(shù)字流程圖一樣,只是查表不同)是顯示帶點(diǎn)數(shù)字的流程圖(如圖2-10)。DisplayD(uint)P0=0duan=1使鎖存器P0=0duan=1使鎖存器直通P0=Data_duan2[shu2]duan=0P0=0xff返回圖2-10帶點(diǎn)的顯示流程圖這里我在說明一下,串口顯示與數(shù)碼管顯示思路雖有所不同,但核心未變,都是控制位和段。顯示模塊總體來說是用的串口來傳數(shù)據(jù),即單片機(jī)的TXD(31腳),RXD(30引腳),控制方式SCON=0X00,說明是同步移位的工作方式,在用的C51程序我們用的顯示很簡單,用74LS164串行輸入轉(zhuǎn)并行輸出的方式到數(shù)碼管中,其具體的數(shù)據(jù)表是一個是不帶點(diǎn)的,另外是帶點(diǎn)的顯示。程序中只要查表即可找到對應(yīng)的顯示值。2.7中斷服務(wù)子程序我們用的是外部中斷0,1來處理兩個AD574的數(shù)據(jù)采集問題,中斷開啟后,中斷沒來之前,該中斷不占據(jù)單片機(jī)運(yùn)行時間,提高利用率[10]。即是用兩個標(biāo)志位來判斷下面我將其流程圖(以外部中斷0為例,如圖2-11)敘述如下:中斷服務(wù)子程序flag0=1中斷返回flag0=1中斷返回圖2-11中斷服務(wù)流程圖中斷只實現(xiàn)標(biāo)志位的置位,然后在主函數(shù)中的判斷該標(biāo)志位是否為1,若是,則開始讀數(shù)據(jù)即可,若不是,則執(zhí)行下一個程序,切記:在主函數(shù)中別忘記把標(biāo)志位清零,否則,可能會出現(xiàn)問題。2.8本章小結(jié)本章重要是從軟件設(shè)計的思路上來敘述,通過各個子程序的流程圖的介紹,同時說明這樣設(shè)計的目的和原因,在這編程的過程中,我覺得最好的模塊是數(shù)據(jù)處理和中斷的處理模塊,原因是所用的算法有點(diǎn)技巧,尤其是中斷部分,我編程是雙AD574的數(shù)據(jù)處理,要知道,這種是很容易造成數(shù)據(jù)沖突的,都是用P0口,更何況在控制信號中又有P0口的控制,所以我用一個標(biāo)志位來判斷,即來了一個中斷便讓標(biāo)志位置1,主程序中便檢查該標(biāo)志位是否為1,若是則執(zhí)行讀的操作,若不是,則判斷下一個AD574的標(biāo)志位是否為1,若是,則執(zhí)行對應(yīng)讀的程序,若不是,返回,繼續(xù)初始化程序,從而不斷的進(jìn)行數(shù)據(jù)采集和顯示,達(dá)到我們的最終目的。第三章系統(tǒng)的調(diào)試3.1軟件調(diào)試中的硬件檢查3.1.1單片機(jī)能正常工作剛開始我在調(diào)試這塊板的時候便碰到這個問題,當(dāng)時想有以下幾個原因造成這種情況。晶振沒工作,或者是并聯(lián)的電容未起到起振的作用,即電容燒壞了;復(fù)位電路未起作用,這個也是關(guān)鍵的一點(diǎn);MAX232芯片出問題及其對應(yīng)的外圍電路(比如電容的極性)接錯;單片機(jī)的管腳的電平被其他的芯片拉高或變低;從各個可能出的問題來看,晶振不起振的可能性不大,(1)這種情況排除。復(fù)位電路的檢查果然發(fā)現(xiàn)有問題有一端的線沒接上導(dǎo)致復(fù)位電路沒起做用,圖3-1如下:圖3-1單片機(jī)復(fù)位電路如上圖所示:1,2兩個標(biāo)注的地方的線當(dāng)時因畫板的時間的原因?qū)е聫?fù)位電路沒畫好,結(jié)果使復(fù)位電路的電壓沒達(dá)到指定的值,另一方面,復(fù)位的時間大致是時鐘周期的24倍才可以,往往這些細(xì)節(jié)很難考慮到的,不忽視即可。之后,用萬用表測量發(fā)現(xiàn)復(fù)位電路正常,但此時依然燒不了程序,可能還有其他的問題沒解決。接下來便是MAX232的芯片及其外部電路是否有問題,結(jié)果發(fā)現(xiàn)問題沒有,電容的極性都正確,這個情況排除。最后便是單片機(jī)的問題,即可能是芯片壞了,但發(fā)現(xiàn)在其他的地方(51板)能正常工作,那就沒辦法了,電路都正確了,那還有什么問題呢?在這個問題上大致發(fā)了幾個星期的時間最終才解決出來了。出問題的原因是單片機(jī)的控制腳31/VDD接地了,我們可從上圖中看出(當(dāng)時是考慮到外部的存儲問題,將31腳接地)其實是要接+5V的電壓。該引腳可以說是片外程序存儲器,當(dāng)為低電平時只選用片外程序存儲器,否則計算機(jī)復(fù)位或上電后先選用片內(nèi)程序存儲器[2]。3.1.2OP07輸出有誤差該部分我測試的是調(diào)零工作。其出現(xiàn)的情況是:輸入2,3腳均是0V,4、7腳按說明書上分別正確接-15V,+15V,結(jié)果輸出結(jié)果是-13V左右,當(dāng)時其他的同學(xué)也有類似的問題,其原因何在呢?1、8腳是調(diào)零的端,可接上可調(diào)電阻使之輸出為零,可問題是,輸出值太大了,想調(diào)零也幾乎不大能??!下圖是當(dāng)時接的電路圖3-2,簡化如下:圖3-2op07電路圖如上圖,我用Ui=0V,輸出是很大的值,經(jīng)查閱相關(guān)的資料,這是一種過零比較器[11],集成運(yùn)放工作在開環(huán)狀態(tài),其輸出電壓為+Uom或-Uom,當(dāng)輸入電壓Ui<0V時,Uo=+Uom;當(dāng)輸入電壓Ui>0V時,Uo=-Uom;因此得到的值將近為上述的-13V的值,其輸出特性如圖3-3所示。圖3-3開環(huán)的輸出特性圖可見,在上圖中知道:其輸出的電壓值必定是很大的值,即要引入反饋才能達(dá)到具體的效果。圖3-4射極跟隨器圖實際的電路圖設(shè)計的射極跟隨器如上圖3-4所示,經(jīng)測試可以達(dá)到預(yù)期的效果。其實,現(xiàn)在來想想這些問題,覺得是一般的問題,并不是涉及很深奧的東西,我想這些都是些基礎(chǔ)的知識點(diǎn),只是我們平時不怎么加以重視而造成的,因此,不管是多么簡單的知識要經(jīng)常地看看,俗話說:溫故而知新。只有把基礎(chǔ)的東西把握好,更難的問題也能夠更好的解決。3.2軟件的調(diào)試這部分主要使涉及到在編程過程中碰到的問題,下面一一敘述如下。3.2.1函數(shù)中變量的定義問題voidData_Handle(ulongdata_1) //數(shù)據(jù)處理{ EX1=0;//關(guān)中斷 uchardata_ge,data_bai,data_shi,data_qian;data_1=data_1*2442/1000;//這樣算是便于顯示結(jié)果,且單位為vdata_qian=data_1/1000; data_bai=data_1%1000/100;data_shi=data_1%100/10;data_ge=data_1%10;Display(data_shi);Display(data_ge);SCON=0x00;SBUF=table_2[data_qian];while(TI==0);TI=0;Display(data_bai); }我們調(diào)試該程序發(fā)現(xiàn)如下錯誤:compilingAD574第一個測試程序.c...AD574第一個測試程序.C(41):errorC141:syntaxerrornear'unsigned'AD574第一個測試程序.C(41):errorC202:'data_ge':undefinedidentifierAD574第一個測試程序.C(44):errorC202:'data_qian':undefinedidentifierAD574第一個測試程序.C(45):errorC202:'data_bai':undefinedidentifierAD574第一個測試程序.C(46):errorC202:'data_shi':undefinedidentifierAD574第一個測試程序.C(47):errorC202:'data_ge':undefinedidentifierAD574第一個測試程序.C(48):errorC202:'data_ge':undefinedidentifierAD574第一個測試程序.C(49):errorC202:'data_shi':undefinedidentifierAD574第一個測試程序.C(50):errorC202:'data_bai':undefinedidentifierAD574第一個測試程序.C(52):errorC202:'data_qian':undefinedidentifierAD574第一個測試程序.c-10Error(s),0Warning(s).申明的一點(diǎn)是uchardata_ge,data_bai,data_shi,data_qian;已經(jīng)完全定義好了,顯然是毋庸質(zhì)疑,那為什么會有這鐘編譯結(jié)果呢?錯誤原因是:第一條語句的EX1=0應(yīng)該寫在uchar的后面才行,處理的語句不應(yīng)該寫在定義變量的前面[12],因此會造成這樣的結(jié)果。3.2.2編譯時出現(xiàn)不可打印的錯誤提示編譯后電腦出現(xiàn)的顯示(如圖3-5)是:圖3-5調(diào)試出錯圖我們編程當(dāng)時用的是查詢的方式來進(jìn)行,而我們編程時出現(xiàn)這種unprintable,造成原因是我們在編程時用的中英文切換不對,特別是在用注釋的時候,更要注意,另外一點(diǎn)是我們要養(yǎng)成良好的編程習(xí)慣,要有明晰的層次感。3.3仿真調(diào)試中的的結(jié)果及數(shù)據(jù)分析3.3.1輸入可調(diào)的模擬信號模擬信號是輸入一個可變的電壓值,然后再進(jìn)行數(shù)據(jù)采集的。仿真調(diào)試的圖見附錄2中的圖1,數(shù)據(jù)(表3-1)如下:次數(shù)12345678910U1(V)0.593371.078882.032563.055544.000485.14446.118087.02328.180129.29515顯示值0.5931.0792.0313.0574.0045.1456.1177.0238.189.94表3-1輸入可調(diào)電壓U1模擬信號從上面的數(shù)據(jù)可以看很出:誤差最大為:(2.03256—2031)/2.03256*100%=0.00156/2.03256*100%=7.675e-4=0.07675%,誤差是很小的。在用EXCEL生成了的一個圖如下:圖3-6輸入模擬信號的圖像顯然,這兩組數(shù)據(jù)是基本上重合,看圖基本上分辨不出,可見,在仿真的數(shù)據(jù)是非常準(zhǔn)確的。仿真U2的電壓也是模擬輸入,其得到的電壓值如下:表3-2輸入可調(diào)電壓U2模擬信號次數(shù)12345678910U2(V)0.6911.07882.0323.9085.04845.29216.928.0729.0579.94顯示值0.6911.0792.0313.9095.0475.2916.928.0739.0579.94在EXCEL工作表中得到的波形是:圖3-7輸入模擬信號實際的圖像從上圖中看出:這里有一個數(shù)據(jù)誤差較大,分析如下:在軟件仿真的時候本身就有誤差,畢竟不可能整除完,我們可以稍微算一下,因為10/4095=0.002442002442……是個無限循環(huán)小數(shù),我取的值是0.002442,顯然,沒有原來值那么大的,那么,我們來看看誤差最大的是多大。第六個點(diǎn)誤差最大,從圖中一眼可以看出誤差是:(5.2921-5.291)/5.2921*100%=0.0207%誤差比上一個采集的數(shù)據(jù)誤差大,但總體來說還是可以理解的。即:本質(zhì)上要提高系統(tǒng)的精度措施。實際上,在硬件電路上誤差是更大的,本身在模擬部分可以說是以被“污染”[2],原因如下:信號調(diào)整電路中的非線性由于對ADC前信號調(diào)整電路的非線性估計不足所致,實際上對ADC前的運(yùn)算放大器,測量放大器仔細(xì)分析之后,可以發(fā)現(xiàn)它們很容易構(gòu)成0.01%或更大的誤差。動態(tài)響應(yīng)引起的誤差由于沒有注意動態(tài)響應(yīng)引起的問題。許多ADC輸入阻抗在轉(zhuǎn)變過程中是變化的,這樣會影響提供的輸入信號。為此可以在ADC前加一級具有單位增益的緩沖器來改善ADC受動態(tài)響應(yīng)的影響。接地與去耦的不當(dāng)由于接地去耦不當(dāng)而降低了輸入信號的精度。就AD574來說就有兩個地,一個是模擬地,一個是數(shù)字地。處理好接地的問題對保證A/D的轉(zhuǎn)換精度有重要的意義。3.3.2輸入是鋸齒波的信號其類似圖見附錄2中的圖1,然后再進(jìn)行數(shù)據(jù)采集的。記錄的數(shù)據(jù)(表3-3)如下:表3-3輸入是鋸齒波的信號次數(shù)12345678910電壓值8.5888.1927.7977.4017.0036.2125.8165.4214.633.838次數(shù)11121314151617181920電壓值2.6491.8581.0640.6690.2739.8888.9798.5837.7896.998次數(shù)21222324252627282930電壓值5.8944.6223.8312.6421.4521.4521.0570.6610.2660輸入是標(biāo)準(zhǔn)的鋸齒波信號,實際仿真是0-1V的,我們經(jīng)過OP07放大10倍,得到0-10V的電壓,如下圖3-8,縱坐標(biāo)是電壓值(v):圖3-8輸入鋸齒波信號的圖像注明:這里橫坐標(biāo)寫次數(shù)是不很準(zhǔn)確的,應(yīng)該寫時間才更為妥當(dāng),只是便于與實際上圖形對比,所以,在橫坐標(biāo)上寫次數(shù)。另外,如果是1HZ測的數(shù)據(jù)是不非常準(zhǔn)確的,是經(jīng)過驗證,即:要把頻率小于0.1HZ,才可有很好的效果,因為采樣的頻率必須大于輸入信號頻率的兩倍以上,最后便是。在輸入為鋸齒波情況下,經(jīng)EXCEL可得到如下圖3-9:圖3-9輸入鋸齒波信號實際的圖像數(shù)據(jù)的分析如下:從兩個圖形來看誤差是很大的,但大致的變化趨勢可以一眼看出是正確的,出現(xiàn)有誤差的原因是:采集的數(shù)據(jù)不是很全,畢竟我們手工記錄的數(shù)據(jù)才30個,往往這種是要記錄上百個的,然后分析該數(shù)據(jù)是不是該剔除,我在這一方面并沒有過大的考慮,因為我這是用仿真的效果,所以默認(rèn)是較為準(zhǔn)確,若出現(xiàn)大的誤差,那只能是說軟件的問題,當(dāng)然,我編程人員也要多考慮這個問題,使我們的整個硬件和軟件達(dá)到最佳的效果。3.3.3輸入是正弦信號這個仿真圖與鋸齒波一樣,可參考附錄2的圖1電壓值是從0-1V,經(jīng)過運(yùn)算放大器放大10倍,可以得到0-10V的電壓值,具體記錄的數(shù)值如下(表3-4):表3
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 新型催化重整催化劑相關(guān)行業(yè)投資規(guī)劃報告
- 聚氨酯泡沫穩(wěn)定劑行業(yè)相關(guān)投資計劃提議
- 正溫特性熱敏電阻(PTC)相關(guān)行業(yè)投資方案
- 證券金融行業(yè)相關(guān)投資計劃提議
- racemic-α-Tocopherol-acetate-Standard-生命科學(xué)試劑-MCE
- R-75317-生命科學(xué)試劑-MCE
- Pyriproxyfen-Standard-生命科學(xué)試劑-MCE
- 酒店個人年度工作總結(jié)
- 岳陽樓導(dǎo)游詞1200字(10篇)
- 2024年新企業(yè)互保貸款協(xié)議樣本
- 上海市2024-2025學(xué)年高一上學(xué)期期中數(shù)學(xué)試題(無答案)
- 蘇教版六年級上冊數(shù)學(xué)期中考試試題帶答案
- 心血管內(nèi)科專病數(shù)據(jù)庫建設(shè)及研究
- DL-T-5161.5-2018電氣裝置安裝工程質(zhì)量檢驗及評定規(guī)程第5部分:電纜線路施工質(zhì)量檢驗
- 產(chǎn)后康復(fù)-腹直肌分離
- 人工智能在統(tǒng)計中的應(yīng)用
- 硅鋼片縱剪機(jī)組維護(hù)保養(yǎng)規(guī)范1
- 護(hù)理不良事件分析-跌倒-根因分析法
- 腫瘤細(xì)胞信號轉(zhuǎn)導(dǎo)ppt課件
- 能耗制動控制線路電路圖及工作原理PPT課件
- 《千字文》全文(帶拼音)
評論
0/150
提交評論