制作出來的實(shí)物圖如下:
實(shí)物工作圖 
設(shè)計(jì)要求系統(tǒng)能實(shí)現(xiàn)電壓測(cè)量,檢測(cè)技術(shù)指標(biāo)為: ①測(cè)量范圍為0-10V ②測(cè)量精度:±0.1V ③通過顯示器進(jìn)行顯示當(dāng)前電壓值,顯示到小數(shù)點(diǎn)后兩位 2.2系統(tǒng)簡(jiǎn)介⑴根據(jù)設(shè)計(jì)要求,選擇AT89C51單片機(jī)為核心控制器件。 ⑵A/D轉(zhuǎn)換采用ADC0832實(shí)現(xiàn)。 ⑶電壓顯示采用4位一體的LED數(shù)碼管。 ⑷LED數(shù)碼的段碼輸入,由并行端口P2產(chǎn)生:位碼輸入,用并行端口P0產(chǎn)生。 2.3方案比較(一)、采用FPGA進(jìn)行設(shè)計(jì) 采用FPGA進(jìn)行設(shè)計(jì)的系統(tǒng)流程圖如圖2-1所示 
圖2-1 FPGA設(shè)計(jì)系統(tǒng)流程圖 FPGA內(nèi)部集成鎖項(xiàng)環(huán),可以把外部時(shí)鐘倍頻,核心頻率可以到幾百M(fèi),而單片機(jī)運(yùn)行速度低的多.在高速場(chǎng)合,單片機(jī)無法代替FPGA。雖然FPGA在頻率范圍和邏輯實(shí)現(xiàn)方面要高出單片機(jī)一塊。但是由于沒有指令系統(tǒng),所以控制和運(yùn)算能力比較弱。 (二)、采用單片機(jī)控制 采用單片機(jī)進(jìn)行設(shè)計(jì)的系統(tǒng)流程圖如圖2-2所示 
圖2-2 單片機(jī)設(shè)計(jì)系統(tǒng)流程圖 數(shù)字電壓表的一種設(shè)計(jì)方案是以單片機(jī)為核心操作系統(tǒng), 硬件電路設(shè)計(jì)由6個(gè)部分組成; A/D轉(zhuǎn)換電路,AT89C51單片機(jī)系統(tǒng),LED顯示系統(tǒng)、時(shí)鐘電路、復(fù)位電路以及測(cè)量電壓輸入電路。 應(yīng)用單片機(jī)操作系統(tǒng)的好處是能準(zhǔn)確有效的輸入電壓值、操作簡(jiǎn)單、技術(shù)成熟、算法較為靈活、成本費(fèi)用低。
3硬件電路設(shè)計(jì)
3.1 AT89C51單片機(jī)簡(jiǎn)介AT89C51是一個(gè)低功耗,高性能CMOS 8位單片機(jī),片內(nèi)含4k Bytes ISP(In-system programmable)的可反復(fù)擦寫1000次的Flash只讀程序存儲(chǔ)器,器件采用ATMEL公司的高密度、非易失性存儲(chǔ)技術(shù)制造,兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng)及80C51引腳結(jié)構(gòu),芯片內(nèi)集成了通用8位中央處理器和ISP Flash存儲(chǔ)單元,AT89C51在眾多嵌入式控制應(yīng)用系統(tǒng)中得到廣泛應(yīng)用。51單片機(jī)內(nèi)包含以下幾個(gè)部件: - 8位微處理器(CPU)。
- 數(shù)據(jù)存儲(chǔ)器(128B RAM)。
- 程序存儲(chǔ)器(ROM/EPROM)。
- 4個(gè)8位可編程并行I/O口(P0口,P1口,P2口,P3口)。
- 1個(gè)全雙工的異步串行口。
- 2個(gè)16定時(shí)器/計(jì)數(shù)器。
- 中斷系統(tǒng)。
- 特殊功能寄存器(SFR)。
單片機(jī)片內(nèi)結(jié)構(gòu)如圖3-1所示:
圖3-1 單片機(jī)片內(nèi)結(jié)構(gòu) 3.2 ADC0832轉(zhuǎn)換器簡(jiǎn)介ADC0832是一種8 位分辨率、雙通道A/D轉(zhuǎn)換芯片。由于它體積小,兼容性強(qiáng),性價(jià)比高而深受單片機(jī)愛好者及企業(yè)歡迎,其目前已經(jīng)有很高的普及率。學(xué)習(xí)并使用ADC0832 可是使我們了解A/D轉(zhuǎn)換器的原理,有助于我們單片機(jī)技術(shù)水平的提高。芯片如下圖3-2所示:  圖3-2 ADC0809 芯片接口說明如下: CS_ 片選使能,低電平芯片使能。 CH0 模擬輸入通道0,或作為IN+/-使用。 CH1 模擬輸入通道1,或作為IN+/-使用。 GND 芯片參考0 電位(地)。 DI 數(shù)據(jù)信號(hào)輸入,選擇通道控制。 DO 數(shù)據(jù)信號(hào)輸出,轉(zhuǎn)換數(shù)據(jù)輸出。 CLK 芯片時(shí)鐘輸入。 Vcc/REF 電源輸入及參考電壓輸入(復(fù)用)。 工作原理如下: 正常情況下ADC0832 與單片機(jī)的接口應(yīng)為4條數(shù)據(jù)線,分別是CS、CLK、DO、DI。但由于DO端與DI端在通信時(shí)并未同時(shí)有效并與單片機(jī)的接口是雙向的,所以電路設(shè)計(jì)時(shí)可以將DO和DI 并聯(lián)在一根數(shù)據(jù)線上使用。當(dāng)ADC0832未工作時(shí)其CS輸入端應(yīng)為高電平,此時(shí)芯片禁用,CLK 和DO/DI 的電平可任意。當(dāng)要進(jìn)行A/D轉(zhuǎn)換時(shí),須先將CS使能端置于低電平并且保持低電平直到轉(zhuǎn)換完全結(jié)束。此時(shí)芯片開始轉(zhuǎn)換工作,同時(shí)由處理器向芯片時(shí)鐘輸入端CLK 輸入時(shí)鐘脈沖,DO/DI端則使用DI端輸入通道功能選擇的數(shù)據(jù)信號(hào)。在第1 個(gè)時(shí)鐘脈沖的下沉之前DI端必須是高電平,表示啟始信號(hào)。在第2、3個(gè)脈沖下沉之前DI端應(yīng)輸入2 位數(shù)據(jù)用于選擇通道功能。當(dāng)此2 位數(shù)據(jù)為“1”、“0”時(shí),只對(duì)CH0 進(jìn)行單通道轉(zhuǎn)換。當(dāng)2位數(shù)據(jù)為“1”、“1”時(shí),只對(duì)CH1進(jìn)行單通道轉(zhuǎn)換。當(dāng)2 位數(shù)據(jù)為“0”、 “0”時(shí),將CH0作為正輸入端IN+,CH1作為負(fù)輸入端IN-進(jìn)行輸入。當(dāng)2 位數(shù)據(jù)為“0”、“1”時(shí),將CH0作為負(fù)輸入端IN-,CH1 作為正輸入端IN+進(jìn)行輸入。到第3 個(gè)脈沖的下沉之后DI端的輸入電平就失去輸入作用,此后DO/DI端則開始利用數(shù)據(jù)輸出DO進(jìn)行轉(zhuǎn)換數(shù)據(jù)的讀取。從第4個(gè)脈沖下沉開始由DO端輸出轉(zhuǎn)換數(shù)據(jù)最高位DATA7,隨后每一個(gè)脈沖下沉DO端輸出下一位數(shù)據(jù)。直到第11個(gè)脈沖時(shí)發(fā)出最低位數(shù)據(jù)DATA0,一個(gè)字節(jié)的數(shù)據(jù)輸出完成。也正是從此位開始輸出下一個(gè)相反字節(jié)的數(shù)據(jù),即從第11個(gè)字節(jié)的下沉輸出DATD0。隨后輸出8位數(shù)據(jù),到第19 個(gè)脈沖時(shí)數(shù)據(jù)輸出完成,也標(biāo)志著一次A/D轉(zhuǎn)換的結(jié)束。最后將CS置高電平禁用芯片,直接將轉(zhuǎn)換后的數(shù)據(jù)進(jìn)行處理就可以了。 3.3 時(shí)鐘電路XTAL1是片內(nèi)振蕩器的反相放大器輸入端,XTAL2則是輸出端,使用外部振蕩器時(shí),外部振蕩信號(hào)應(yīng)直接加到XTAL1,而XTAL2懸空。內(nèi)部方式時(shí),時(shí)鐘發(fā)生器對(duì)振蕩脈沖二分頻,如晶振為12MHz,時(shí)鐘頻率就為6MHz。晶振的頻率可以在1MHz-24MHz內(nèi)選擇。電容取30PF左右。系統(tǒng)的時(shí)鐘電路設(shè)計(jì)是采用的內(nèi)部方式,即利用芯片內(nèi)部的振蕩電路如下圖3-3所示: 
圖3-3 時(shí)鐘電路 3.4 復(fù)位電路由電容串聯(lián)電阻構(gòu)成,由圖并結(jié)合"電容電壓不能突變"的性質(zhì),可以知道,當(dāng)系統(tǒng)一上電,RST腳將會(huì)出現(xiàn)高電平,并且,這個(gè)高電平持續(xù)的時(shí)間由電路的RC值來決定.典型的51單片機(jī)當(dāng)RST腳的高電平持續(xù)兩個(gè)機(jī)器周期以上就將復(fù)位,所以,適當(dāng)組合RC的取值就可以保證可靠的復(fù)位.一般教科書推薦C 取10u,R取8.2K.當(dāng)然也有其他取法的,原則就是要讓RC組合可以在RST腳上產(chǎn)生不少于2個(gè)機(jī)周期的高電平.至于如何具體定量計(jì)算,可以參考電路分析相關(guān)書籍.復(fù)位 電路如下圖3-4所示。
圖3-4 復(fù)位電路 3.5 LED顯示電路本項(xiàng)目所用顯示屏為4位LED顯示屏。本LED顯示器為8段(DP為小數(shù)點(diǎn)段),每一段為一個(gè)發(fā)光二極管。發(fā)光二極管有共陽極和共陰極兩種。本顯示器的發(fā)光二極管為共陽極數(shù)碼管。發(fā)光二極管的陽極連接在一起,通常在此共陽極接正電壓,當(dāng)某個(gè)發(fā)光二極管的陰極接低電平時(shí),發(fā)光二極管被點(diǎn)亮,相應(yīng)的段被顯示。通過給LED顯示器提供不同的代碼,是這些不同的LED顯示器相應(yīng)的段發(fā)光顯示不同的字型,這些代碼稱為段碼。 本項(xiàng)目所用段碼值如下 (表 1) 所示: 表1 4 軟件程序設(shè)計(jì)
4.1系統(tǒng)整體軟件設(shè)計(jì)設(shè)計(jì)的環(huán)境Keil是德國(guó)知名軟件公司Keil (現(xiàn)已并入ARM公司)開發(fā)的微控制器軟件開發(fā)平臺(tái),是目前ARM內(nèi)核單片機(jī)開發(fā)的主流工具。KEIL提供了包括C編譯器、宏匯編、連接器、庫管理和一個(gè)功能強(qiáng)大的仿真調(diào)試器在內(nèi)的完整開發(fā)方案,通過-一個(gè)集成開發(fā)環(huán)境( uVision )將這些功能組合在一起。 uVision當(dāng)前最 高版本是uVision3,它的界面和常用的微軟VC+ +的界面相似,界面友好,易學(xué)易用,在調(diào)試程序,軟件仿真方面也有很強(qiáng)大的功能。因此很多開發(fā)ARM應(yīng)用的工程師,都對(duì)它十分喜歡。 使用Keil來開發(fā)嵌入式軟件,開發(fā)周期和其他的平臺(tái)軟件開發(fā)周期是差不多的,大致有以下幾個(gè)步驟: 1.創(chuàng)建一個(gè)工程,選擇一塊目標(biāo)芯片,且做一些必要的工程配置。 2.編寫C或者匯編源文件。 3.編譯應(yīng)用程序。 4.修改源程序中的錯(cuò)誤。 5.聯(lián)機(jī)調(diào)試。 Proteus是英國(guó)Labcenter公司的電路分析與實(shí)物仿真軟件,可以仿真分析(Spice)各種模擬器件和集成電路,該軟件的特點(diǎn)是: (1)實(shí)現(xiàn)了單片機(jī)仿真和Spice電路仿真相結(jié)合。具有模擬電路仿真數(shù)字電路仿真鄲機(jī)及其外圍電路組成的系統(tǒng)的仿真RS 232動(dòng)態(tài)仿真、I2C調(diào)試器、SPI調(diào)試器、鍵盤和LCD系統(tǒng)仿真的功能;有各種虛擬儀器,如示波器、邏輯分析儀、信號(hào)發(fā)生器等。 (2)支持主流單片機(jī)系統(tǒng)的仿真。目前支持的單片機(jī)類型有: 68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、 PIC18系列、 Z80系列、 HC11系列以及各種外圍芯片。 (3)提供軟件調(diào)試功能。在硬件仿真系統(tǒng)中具有全速、步設(shè)置斷點(diǎn)等調(diào)試功能,同時(shí)可以觀察各個(gè)變量、存器等的當(dāng)前狀態(tài),因此在該軟件仿真系統(tǒng)中,也必須具有這些功能;同時(shí)支持第三方的軟件編譯和調(diào)試環(huán)境,如Keil C51 μVision 2等軟件。 (4)具有強(qiáng)大的原理圖繪制功能。啟動(dòng)Proteus后將出現(xiàn)ISIS的設(shè)計(jì)窗口 ,如圖1所示。包括:標(biāo)題欄、主菜單、標(biāo)準(zhǔn)工具欄、繪圖工具欄、狀態(tài)欄、對(duì)象選擇按鈕、預(yù)覽對(duì)象方位控制按鈕、仿真進(jìn)程控制按鈕(最下面一行)、 預(yù)覽窗口、對(duì)象選擇器窗口、圖形編輯窗口。 4.2軟件設(shè)計(jì)流程圖4.2.1程序設(shè)計(jì)總方案根據(jù)模塊的劃分原則,將該程序劃分初始化模塊,A/D轉(zhuǎn)換子程序和顯示子程序,這三個(gè)程序模塊構(gòu)成了整個(gè)系統(tǒng)軟件的主程序,如圖4-1所示。 
圖4.1 數(shù)字式直流電壓表主程序框圖 4.2.2 系統(tǒng)子程序設(shè)計(jì)(一)初始化程序 所謂初始化,是對(duì)將要用到的51系列單片機(jī)內(nèi)部部件或擴(kuò)展芯片進(jìn)行初始工作狀態(tài)設(shè)定,初始化子程序的主要工作是設(shè)置定時(shí)器的工作模式,初值預(yù)置,開中斷和打開定時(shí)器等。 (二)AD轉(zhuǎn)換子程序 A/D轉(zhuǎn)換子程序用來控制對(duì)輸入的模塊電壓信號(hào)的采集測(cè)量,并將對(duì)應(yīng)的數(shù)值存入相應(yīng)的內(nèi)存單元,其轉(zhuǎn)換流程圖如圖4-2所示。 
圖4-2 AD轉(zhuǎn)換子程序 (三) 顯示子程序 顯示子程序采用動(dòng)態(tài)掃描實(shí)現(xiàn)四位數(shù)碼管的數(shù)值顯示,在采用動(dòng)態(tài)掃描顯示方式時(shí),要使得LED顯示的比較均勻,又有足夠的亮度,需要設(shè)置適當(dāng)?shù)膾呙桀l率,當(dāng)掃描頻率在70HZ左右時(shí),能夠產(chǎn)生比較好的顯示效果,一般可以采用間隔10ms對(duì)LED進(jìn)行動(dòng)態(tài)掃描一次,每一位LED的顯示時(shí)間為1ms。 在本設(shè)計(jì)中,為了簡(jiǎn)化硬件設(shè)計(jì),主要采用軟件定時(shí)的方式,即用定時(shí)器0溢出中斷功能實(shí)現(xiàn)11μs定時(shí),通過軟件延時(shí)程序來實(shí)現(xiàn)5ms的延時(shí)。顯示子程序流程圖如圖4-3所示。 
圖4-3 顯示子程序流程圖
5 系統(tǒng)調(diào)試
5.1 硬件調(diào)試在系統(tǒng)上電開始測(cè)量前,要用萬用表的電壓檔對(duì)被測(cè)電壓進(jìn)行估測(cè),然后以此選擇適當(dāng)?shù)牧砍蹋乐惯^大電壓燒壞A/D轉(zhuǎn)換器。首先用萬用表按照原理圖逐步檢查中各器件的電源及各引腳的連接是否正確,有否斷路、短路或者虛焊,尤其是給電路供電的電源部分需重點(diǎn)檢查,用數(shù)字萬用表測(cè)量0832輸出端的電壓是否是+10V,是否穩(wěn)定,能夠輸出+10V,且穩(wěn)定即可說明電源電路的設(shè)計(jì)基本達(dá)到目的要求。如果電壓沒有達(dá)到預(yù)期要求,要及時(shí)排查解決,以免燒壞芯片和其他元器件。 軟件調(diào)試時(shí)先進(jìn)行單元測(cè)試,分別對(duì)各個(gè)代碼模塊進(jìn)行測(cè)試,看其是否實(shí)現(xiàn)了規(guī)定功能,再把已經(jīng)測(cè)試過的模塊組合起來進(jìn)行調(diào)試,一旦不能正確運(yùn)行,要找出程序中的代碼錯(cuò)誤,確定大致的錯(cuò)誤位置,研究有關(guān)部分的錯(cuò)誤程序,找出錯(cuò)誤的原因,修改設(shè)計(jì)和代碼,以排除故障。 我們?cè)诔绦蚓帉懲瓿珊,就能利用仿真器初步調(diào)試,觀察在計(jì)算機(jī)里能否通過編譯與運(yùn)行并且達(dá)到設(shè)計(jì)的基本要求。在基本符合的情況下,利用仿真器和工作正常的硬件連接進(jìn)行仿真調(diào)試;或用編程器把程序燒寫到芯片中,直接觀察能否正常運(yùn)行。如果達(dá)不到設(shè)計(jì)要求或者不能正常運(yùn)行,能直接在程序中進(jìn)行編譯和修改。 系統(tǒng)調(diào)試中遇到的問題及解決的方法: 1)在應(yīng)用濾波電容的過程中,開始時(shí)是把電容串聯(lián)在電路中,導(dǎo)致電路無法導(dǎo)通,而后我們短路電容,解決了問題。 2)電源指示燈上,一開始發(fā)現(xiàn)接上電源,指示燈不亮,經(jīng)過儀器測(cè)量發(fā)現(xiàn)正負(fù)極接反,后重新焊接。 3)由于源程序的多處錯(cuò)誤,使得仿真無法通過,后經(jīng)過單步調(diào)試,把存在的錯(cuò)誤一一排除,通過了軟件仿真。 4)在燒錄芯片的過程中,由于選擇燒錄文件的錯(cuò)及芯片質(zhì)量的問題(因多次燒錄,無法再次燒錄)使得燒錄失敗,后經(jīng)過查閱資料并且更換了AT89C51芯片,解決了問題。 系統(tǒng)原理圖如圖5-1所示 
圖5-1 系統(tǒng)原理圖 5.2軟件調(diào)試本設(shè)計(jì)應(yīng)用Proteus6及KEIL51軟件,首先根據(jù)自己設(shè)計(jì)的電路圖用Proteus6軟件畫出電路模型,關(guān)于這個(gè)軟件的使用通過查一些資料和自己的摸索學(xué)習(xí);然后我們用KEIL51軟件對(duì)所編寫的程序進(jìn)行編譯、鏈接,如果沒有錯(cuò)誤和警告便可生成程序的hex文件,將此文件加到電路圖上使軟硬件結(jié)合運(yùn)行,最后進(jìn)行端口電壓的對(duì)比測(cè)試,測(cè)試的第一路對(duì)比見圖5.2中標(biāo)準(zhǔn)電壓值采用Proteus6軟件中的模擬電壓表測(cè)得。 
圖5-2 仿真結(jié)果圖 6 總結(jié)經(jīng)過一段時(shí)間的努力,基于單片機(jī)的簡(jiǎn)易數(shù)字電壓表基本完成。但設(shè)計(jì)中的不足之處仍然存在。這次設(shè)計(jì)是我第一次設(shè)計(jì)電路,并用Proteus實(shí)現(xiàn)了仿真。在這過程中,我對(duì)電路設(shè)計(jì),單片機(jī)的使用等都有了新的認(rèn)識(shí)。通過這次設(shè)計(jì)學(xué)會(huì)了Proteus和Keil軟件的使用方法,掌握了從系統(tǒng)的需要、方案的設(shè)計(jì)、功能模塊的劃分、原理圖的設(shè)計(jì)和電路圖的仿真的設(shè)計(jì)流程,積累了不少經(jīng)驗(yàn)。 基于單片機(jī)的數(shù)字電壓表使用性強(qiáng)、結(jié)構(gòu)簡(jiǎn)單、成本低、外接元件少。在實(shí)際應(yīng)用工作應(yīng)能好,測(cè)量電壓準(zhǔn)確,精度高。系統(tǒng)功能、指標(biāo)達(dá)到了課題的預(yù)期要求、系統(tǒng)在硬件設(shè)計(jì)上充分考慮了可擴(kuò)展性,經(jīng)過一定的改造,可以增加功能。本文設(shè)計(jì)主要實(shí)現(xiàn)了簡(jiǎn)易數(shù)字電壓表測(cè)量一路電壓的功能,詳細(xì)說明了從原理圖的設(shè)計(jì)、電路圖的仿真再到軟件的調(diào)試。 通過本次設(shè)計(jì),我對(duì)單片機(jī)這門課有了進(jìn)一步的了解。無論是在硬件連接方面還是在軟件編程方面。本次設(shè)計(jì)采用了AT89C51單片機(jī)芯片,與以往的單片機(jī)相比增加了許多新的功能,使其功能更為完善,應(yīng)用領(lǐng)域也更為廣泛。設(shè)計(jì)中還用到了模/數(shù)轉(zhuǎn)換芯片ADC0832,以前在學(xué)單片機(jī)時(shí)只是對(duì)其理論知識(shí)有了初步的理解。通過這次設(shè)計(jì),對(duì)它的工作原理有了更深的理解。在調(diào)試過程中遇到很多問題,硬件上的理論知識(shí)學(xué)得不夠扎實(shí),對(duì)電路的仿真方面也不夠熟練。 總之這次電路的設(shè)計(jì)和仿真,基本上達(dá)到了設(shè)計(jì)的功能要求。在以后的實(shí)踐中,我將繼續(xù)努力學(xué)習(xí)電路設(shè)計(jì)方面的理論知識(shí),并理論聯(lián)系實(shí)際,爭(zhēng)取在電路設(shè)計(jì)方面能有所提升。 通過這次設(shè)計(jì),使我深入了解了AT89C51單片機(jī)和ADC0832(A\D轉(zhuǎn)換器)的結(jié)構(gòu)和特點(diǎn)及數(shù)字電壓表的工作原理,加深了對(duì)課本理論知識(shí)的理解,鍛煉了實(shí)踐動(dòng)手能力,理論知識(shí)與實(shí)踐設(shè)計(jì)相結(jié)合,培養(yǎng)了創(chuàng)新開發(fā)的思維。在此次設(shè)計(jì)中,收獲知識(shí)的同時(shí),我還收獲了閱歷。在此過程中,我們通過查找資料,以及不懈的努力,不僅培養(yǎng)了獨(dú)立思考、動(dòng)手操作的能力,在各種其它能力上也都有了提高。
在電量的測(cè)量中,電壓、電流和頻率是最基本的三個(gè)被測(cè)量,其中電壓量的測(cè)量最為經(jīng)常。而且隨著電子技術(shù)的發(fā)展,更是經(jīng)常需要測(cè)量高精度的電壓,所以數(shù)字電壓表就成為一種必不可少的測(cè)量?jī)x器。數(shù)字電壓表簡(jiǎn)稱DVM,它是采用數(shù)字化測(cè)量技術(shù),把連續(xù)的模擬量轉(zhuǎn)換成不連續(xù)、離散的數(shù)字形式并加以顯示的儀表。由于數(shù)字式儀器具有讀數(shù)準(zhǔn)確方便、精度高、誤差小、測(cè)量速度快等特而得到廣泛應(yīng)用。
傳統(tǒng)的指針式刻度電壓表功能單一,進(jìn)度低,容易引起視差和視覺疲勞,因而不能滿足數(shù)字化時(shí)代的需要。采用單片機(jī)的數(shù)字電壓表,將連續(xù)的模擬量如直流電壓轉(zhuǎn)換成不連續(xù)的離散的數(shù)字形式并加以顯示,從而精度高、抗干擾能力強(qiáng),可擴(kuò)展性強(qiáng)、集成方便,還可與PC實(shí)時(shí)通信。數(shù)字電壓表是諸多數(shù)字化儀表的核心與基礎(chǔ)。以數(shù)字電壓表為核心,可以擴(kuò)展成各種通用數(shù)字儀表、專用數(shù)字儀表及各種非電量的數(shù)字化儀表。目前,由各種單片機(jī)和A/D轉(zhuǎn)換器構(gòu)成的數(shù)字電壓表作全面深入的了解是很有必要的。
最近的幾十年來,隨著半導(dǎo)體技術(shù)、集成電路(IC)和微處理器技術(shù)的發(fā)展,數(shù)字電路和數(shù)字化測(cè)量技術(shù)也有了巨大的進(jìn)步,從而促使了數(shù)字電壓表的快速發(fā)展,并不斷出現(xiàn)新的類型。數(shù)字電壓表從1952年問世以來,經(jīng)歷了不斷改進(jìn)的過程,從最早采用繼電器、電子管和形式發(fā)展到了現(xiàn)在的全固態(tài)化、集成化(IC化),另一方面,精度也從0.01%-0.005%。
目前,數(shù)字電壓表的內(nèi)部核心部件是A/D轉(zhuǎn)換器,轉(zhuǎn)換的精度很大程度上影響著數(shù)字電壓表的準(zhǔn)確度,因而,以后數(shù)字電壓表的發(fā)展就著眼在高精度和低成本這兩個(gè)方面。
本文是以簡(jiǎn)易數(shù)字直流電壓表的設(shè)計(jì)為研究?jī)?nèi)容,本系統(tǒng)主要包括三大模塊:轉(zhuǎn)換模塊、數(shù)據(jù)處理模塊及顯示模塊。其中,A/D轉(zhuǎn)換采用ADC0832對(duì)輸入的模擬信號(hào)進(jìn)行轉(zhuǎn)換,控制核心AT89C51再對(duì)轉(zhuǎn)換的結(jié)果進(jìn)行運(yùn)算處理,最后驅(qū)動(dòng)輸出裝置LED顯示數(shù)字電壓信號(hào)。
背景及意義
眾所周知,在當(dāng)今的社會(huì)中電已成為人們?nèi)粘Ia(chǎn),生活中一個(gè)必不可缺的因素。電的發(fā)現(xiàn)和應(yīng)用極大的節(jié)省了人類的體力勞動(dòng)和腦力勞動(dòng),使人類的力量長(zhǎng)上了翅膀,使人類的信息觸角不斷延伸。而在這其中,電壓,電流等已成為描述電的一-些重要參數(shù)。
在電氣測(cè)量中,電壓是一個(gè)很重要的參數(shù)。如何準(zhǔn)確地測(cè)量模擬信號(hào)的電壓值,一直是電測(cè)儀器研究的內(nèi)容之一。數(shù)字電壓表是通用儀器中使用較廣泛的種測(cè)試儀器,很多電量或非電量經(jīng)變化后都用可數(shù)字電壓表完成測(cè)試。目前,由各種單片A/D轉(zhuǎn)換器構(gòu)成的數(shù)字電壓表,已被廣泛用于電子及電工測(cè)量、工業(yè)自動(dòng)化儀表、自動(dòng)測(cè)試系統(tǒng)等智能化測(cè)量領(lǐng)域,顯示出強(qiáng)大的生命力。
這個(gè)課題的目的和意義在于使自己掌握對(duì)數(shù)字電壓表的理解,自己動(dòng)手設(shè)計(jì)數(shù)字電壓表與仿真,它可以廣泛的應(yīng)用于電壓測(cè)量外,通過各種變換器還可以測(cè)量其它電量和非電量,測(cè)量是一種認(rèn)識(shí)過程嗎,就是用實(shí)驗(yàn)的方法將被測(cè)量和被選用的相同參量進(jìn)行比較,從而確定它的大小。DVM廣泛應(yīng)用于測(cè)量領(lǐng)域每期測(cè)量的準(zhǔn)確度和可信度取決于它的主要性能和技術(shù)指標(biāo)。所以我們要學(xué)習(xí)和掌握如何設(shè)計(jì)DVM就顯得十分重要。
設(shè)計(jì)內(nèi)容主要包括:查資料、總體設(shè)計(jì)、元器件選型、原理圖、PCB圖、仿真、實(shí)物制作和調(diào)試、實(shí)踐訓(xùn)練文檔和驗(yàn)收六個(gè)部分。實(shí)訓(xùn)的最后要求是寫出實(shí)訓(xùn)文檔,把總體設(shè)計(jì)、原理圖、元器件選型、PCB過程進(jìn)行全面的說明,上升到一定高度。
電壓的測(cè)量雖然在電量測(cè)量中是最基本的,但在電氣測(cè)量中卻占據(jù)著重要的地位。當(dāng)代的測(cè)量?jī)x器的研究是在電壓的基礎(chǔ)上才能實(shí)現(xiàn)的,因此電壓測(cè)量已成為研究的重點(diǎn)之一。時(shí)代的發(fā)展,促使人類技術(shù)的不斷進(jìn)步,現(xiàn)代用到的測(cè)量技術(shù)都是依靠高精度的測(cè)量?jī)x器,并且隨著計(jì)算機(jī)的發(fā)展,測(cè)量技術(shù)融合計(jì)算機(jī)的功能,使得現(xiàn)代測(cè)量技術(shù)具有存儲(chǔ)、計(jì)算、控制、顯示、語音等功能。
以單片機(jī)為主控電路的高科技電子儀器儀表,不僅具有測(cè)量精確度高,靈敏度高和分辨率高的特點(diǎn),還具有可靠性,穩(wěn)定性強(qiáng),測(cè)量速度快,通信,可存儲(chǔ)等的優(yōu)點(diǎn)。關(guān)于它的應(yīng)用非常廣泛,F(xiàn)已廣泛應(yīng)用于電子、電氣測(cè)量,工業(yè)自動(dòng)化儀表,自動(dòng)測(cè)試系統(tǒng)等,F(xiàn)代檢測(cè)技術(shù)中,常需用高精度數(shù)字電壓表進(jìn)行現(xiàn)場(chǎng)檢測(cè),將檢測(cè)到的數(shù)據(jù)送入微計(jì)算機(jī)系統(tǒng),完成計(jì)算、存儲(chǔ)、控制和顯示等功能。
數(shù)字電壓表利用A/D轉(zhuǎn)換原理,將被測(cè)模擬量轉(zhuǎn)換成數(shù)字量,并用數(shù)字方式顯示測(cè)量結(jié)果的電子測(cè)量?jī)x表。A/D轉(zhuǎn)換器的精度影響數(shù)字萬用表的準(zhǔn)確度,本文采AT89C51單片機(jī),內(nèi)部自帶的A/D轉(zhuǎn)換器將輸入模擬信號(hào)進(jìn)行轉(zhuǎn)換,單片機(jī)對(duì)轉(zhuǎn)換的結(jié)果進(jìn)行運(yùn)算和處理,最后驅(qū)動(dòng)輸出裝置顯示數(shù)字電壓信號(hào),通過Proteus仿真軟件實(shí)現(xiàn)接口電路設(shè)計(jì),并進(jìn)行實(shí)時(shí)仿真。
電壓的測(cè)量雖然在電量測(cè)量中是最基本的,但在電氣測(cè)量中卻占據(jù)著重要的地位。當(dāng)代的測(cè)量?jī)x器的研究是在電壓的基礎(chǔ)上才能實(shí)現(xiàn)的,因此電壓測(cè)量已成為研究的重點(diǎn)之一。
原理圖
51hei截圖20220427202558.png (42.18 KB, 下載次數(shù): 41)
下載附件
2022-4-27 20:26 上傳
仿真圖
51hei截圖20220427202852.png (60.92 KB, 下載次數(shù): 38)
下載附件
2022-4-27 20:29 上傳
程序
#include <reg51.h>
#include <intrins.h>
/*********************************端口定義**********************************/
sbit CS = P3^5;
sbit Clk = P3^3;
sbit DATI = P3^4;
sbit DATO = P3^4;
sbit DIAN = P0^5; //小數(shù)點(diǎn)
/*******************************定義全局變量********************************/
unsigned char dat = 0x00; //AD值
unsigned char count = 0x00; //定時(shí)器計(jì)數(shù)
unsigned char CH; //通道變量
unsigned char dis[4]; //顯示數(shù)值
unsigned int sum=0;
/*******************************共陰LED段碼表*******************************/
unsigned char code tab[]={0x5F,0x44,0x9D,0xD5,0xC6,0xD3,0xDB,0x47,0xDF,0xD7};
char code tablewe[]={ 0xfd,0xfb,0xf7,0xef,0xdf,0xfe };
/****************************************************************************
函數(shù)功能:AD轉(zhuǎn)換子程序
入口參數(shù):CH
出口參數(shù):dat
****************************************************************************/
unsigned char adc0832(unsigned char CH)
{
unsigned char i,test,adval;
adval = 0x00;
test = 0x00;
Clk = 0; //初始化
DATI = 1;
_nop_();
CS = 0;
_nop_();
Clk = 1;
_nop_();
if ( CH == 0x00 ) //通道選擇
{
Clk = 0;
DATI = 1; //通道0的第一位
_nop_();
Clk = 1;
_nop_();
Clk = 0;
DATI = 0; //通道0的第二位
_nop_();
Clk = 1;
_nop_();
}
else
{
Clk = 0;
DATI = 1; //通道1的第一位
_nop_();
Clk = 1;
_nop_();
Clk = 0;
DATI = 1; //通道1的第二位
_nop_();
Clk = 1;
_nop_();
}
Clk = 0;
DATI = 1;
for( i = 0;i < 8;i++ ) //讀取前8位的值
{
_nop_();
adval <<= 1;
Clk = 1;
_nop_();
Clk = 0;
if (DATO)
adval |= 0x01;
else
adval |= 0x00;
}
for (i = 0; i < 8; i++) //讀取后8位的值
{
test >>= 1;
if (DATO)
test |= 0x80;
else
test |= 0x00;
_nop_();
Clk = 1;
_nop_();
Clk = 0;
}
if (adval == test) //比較前8位與后8位的值,如果不相同舍去。若一直出現(xiàn)顯示為零,請(qǐng)將該行去掉
dat = test;
nop_();
CS = 1; //釋放ADC0832
DATO = 1;
Clk = 1;
return dat;
}
/****************************************************************************
函數(shù)功能:延時(shí)子程序
入口參數(shù):
出口參數(shù):
****************************************************************************/
void delay(void)
{
int k;
for(k=10;k<500;k++);
}
/****************************************************************************
函數(shù)功能:將0-255級(jí)換算成0.00-5.00的電壓數(shù)值
入口參數(shù):i
出口參數(shù):
****************************************************************************/
void convdata(unsigned int i)
{
i=i*1.96;
dis[0] = i/100; //個(gè)位
dis[1] = i%100/10; //小數(shù)點(diǎn)后第一位
dis[2] = i%100%10; //小數(shù)點(diǎn)后第二位
// dis[3] = i%1000%100%10;
}
/****************************************************************************
函數(shù)功能:數(shù)碼管顯示子程序
入口參數(shù):
出口參數(shù):
****************************************************************************/
void display(void)
{
P0=tab[dis[0]]; //顯示個(gè)位和小數(shù)點(diǎn)11011111
DIAN=1;
P2=0xdf; //11011111
delay();
P2=0xff;
P0=tab[dis[1]]; //顯示小數(shù)點(diǎn)后第一位
P2=0xbf; //10111111
delay();
P2=0xff;
P0=tab[dis[2]]; //顯示小數(shù)點(diǎn)后第二位
P2=0x7f; //01111111
delay();
P2=0xff;
}
/****************************************************************************
函數(shù)功能:主程序
入口參數(shù):
出口參數(shù):
****************************************************************************/
void main(void)
{
unsigned char m;
CH = 0x00; //在這里選擇通道 0x00或0x01
while(1) //主循環(huán)
{
for(m=0;m<50;m++)
{
dat = adc0832(CH);
sum=sum+dat;
display(); //顯示數(shù)值
}
dat=sum/50;
sum=0;
convdata(dat); //數(shù)據(jù)轉(zhuǎn)換
display(); //顯示數(shù)值
}
}
Keil代碼與Proteus仿真下載:
123.7z
(783.35 KB, 下載次數(shù): 117)
2022-4-27 20:43 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
以上文檔:
word文檔.doc
(1.19 MB, 下載次數(shù): 37)
2022-4-27 20:54 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|