簡易數(shù)字電壓表設(shè)計
設(shè)計要求
設(shè)計要求:
- 能用數(shù)碼管顯示電壓值
- 可以測量0~5V范圍內(nèi)的4路輸入電壓值
- 其測量最小分辨率為0.02V
- 在4位LED數(shù)碼管上輪流顯示或者單路顯示
1、 前言
隨著微電子技術(shù)的不斷發(fā)展,微處理器芯片的集成程度越來越高,單片機已可以在一塊芯片上同時集成運算部件、控制部件、數(shù)據(jù)存儲器、程序存儲器、定時器/計數(shù)器中斷系統(tǒng),這就很容易將計算機技術(shù)與測量控制技術(shù)結(jié)合,組成智能化測量控制系統(tǒng)。
數(shù)字電壓表(Digtal Voltmeter)簡稱DVM,它是采用數(shù)字化測量技術(shù),把連續(xù)的模擬量(直流輸入電壓)轉(zhuǎn)換成不連續(xù)、離散的數(shù)字形式并加以顯示的儀表。與此同時,由DVM擴展而成的各種通用及專用數(shù)字儀器儀表,也把電量及非電量測量技術(shù)提高到嶄新水平。本文重點介紹基于單片機的簡易數(shù)字電壓表。目前,由各種單片A/D 轉(zhuǎn)換器構(gòu)成的數(shù)字電壓表,已被廣泛用于電子及電工測量、工業(yè)自動化儀表、自動測試系統(tǒng)等智能化測量領(lǐng)域,顯示出強大的生命力量。
本設(shè)計是基于STC89C52單片機的一種電壓測量電路,該電路采用ADC0809進行A/D轉(zhuǎn)換電路,測量范圍為直流 0~5V 的4路輸入電壓值,并在四位LED數(shù)碼管上顯示,測量最小分辨率為0.019V,測量誤差約為正負0.02V。
2、方案選擇與論證
2.1方案一
A/D轉(zhuǎn)換器采用ICL7107型三位半顯示的芯片,輸入信號,流經(jīng)取樣電路取樣后送到ICL7107型三位半A/D轉(zhuǎn)換器,只需要很少的簡單外圍元件,就可組成數(shù)字電流表模塊,直接驅(qū)動三位半LED顯示器顯示,最后輸入電流在顯示部分顯示。此方案的方框圖如圖2-2-1所示。
1.001.jpg (16.15 KB, 下載次數(shù): 62)
下載附件
2017-4-20 19:44 上傳
1.002.jpg (2.47 KB, 下載次數(shù): 44)
下載附件
2017-4-20 19:44 上傳
2.2方案二
STC89C52是一種低功耗、高性能CMOS8位微控制器,具有 8K 在系統(tǒng)可編程Flash 存儲器。使用STC公司高密度非易失性存儲器技術(shù)制造,與工業(yè)80C51 產(chǎn)品指令和引腳完 全兼容。片上Flash允許程序存儲器在系統(tǒng)可編程,亦適于 常規(guī)編程器。STC89C52具有以下標準功能: 8k字節(jié)Flash,256字節(jié)RAM, 32 位I/O 口線,看門狗定時器,2個數(shù)據(jù)指針,2個16 位定時器/計數(shù)器,一個6向量2級中斷結(jié)構(gòu),全雙工串行口, 片內(nèi)晶振及時鐘電路。另外,STC89C52 可降至0Hz 靜態(tài)邏 輯操作,支持2種軟件可選擇節(jié)電模式。空閑模式下,CPU 停止工作,允許RAM、定時器/計數(shù)器、串口、中斷繼續(xù)工 作。掉電保護方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié), 單片機一切工作停止,直到下一個中斷或硬件復位為止。方案二的方框圖如圖2-2-1所示:
1.003.jpg (21.67 KB, 下載次數(shù): 46)
下載附件
2017-4-20 19:44 上傳
2.3方案對比與選擇
方案一: ICL7107做的LED數(shù)字表,能直接驅(qū)動共陽極的LED顯示器,不須另加驅(qū)動硬件,缺點就是數(shù)字亂跳不穩(wěn)定,特別最后一位。并且本人對此電路不是很熟悉,我們平時學的都是STC89C52,也有相應的單片機板子。
方案二:采用單片機作為系統(tǒng)的控制單元,通過A/D轉(zhuǎn)換將被測值轉(zhuǎn)換為數(shù)字量送入單片機中,再由單片機來送顯。此方案各類功能易于實現(xiàn),成本低、功耗低,顯示穩(wěn)定。
通過比較,我選擇方案二。
3 單元電路設(shè)計
設(shè)計方案
硬件電路設(shè)計由7個部分組成; A/D轉(zhuǎn)換電路,STC89C52單片機系統(tǒng),數(shù)碼管顯示系統(tǒng)、時鐘電路、電源電路,、復位電路以及測量電壓輸入電路。
3.1單片機系統(tǒng)
本次課程設(shè)計選擇的單片機是STC89C52,之所以選擇這塊芯片,是因為該芯片的各項功能均符合本次課程設(shè)計的指標要求,并且該芯片有很多成熟的資料供我們學習,使用起來很方便,也有專門的下載程序平臺,方便現(xiàn)場調(diào)試。本實驗所用的單片機板子原理圖如圖3-1-1所示。
1.004.jpg (76.76 KB, 下載次數(shù): 62)
下載附件
2017-4-20 19:44 上傳
1.005.jpg (2.62 KB, 下載次數(shù): 47)
下載附件
2017-4-20 19:44 上傳
3.2時鐘電路
單片機中CPU每執(zhí)行一條指令,都必須在統(tǒng)一的時鐘脈沖的控制下嚴格按時間節(jié)拍進行,而這個時鐘脈沖是單片機控制中的時序電路發(fā)出的。CPU執(zhí)行一條指令的各個微操作所對應時間順序稱為單片機的時序。MCS-51單片機芯片內(nèi)部有一個高增益反相放大器,用于構(gòu)成震蕩器,XTAL1為該放大器的輸入端,XTAL2為該放大器輸出端,但形成時鐘電路還需附加其他電路。
本設(shè)計系統(tǒng)采用內(nèi)部時鐘方式,利用單片機內(nèi)部的高增益反相放大器,外部電路簡,只需要一個晶振和 2個電容即可。
1.006.jpg (5.27 KB, 下載次數(shù): 48)
下載附件
2017-4-20 19:44 上傳
圖 3-2-1時鐘電路
3.3電源電路
如圖3-3-1:通過數(shù)據(jù)線的USB接口與電源相接,給單片機供電。
1.007.jpg (5.56 KB, 下載次數(shù): 39)
下載附件
2017-4-20 19:44 上傳
1.008.jpg (1.88 KB, 下載次數(shù): 63)
下載附件
2017-4-20 19:44 上傳
3.4復位電路
復位電路工作原理如圖3-4-1所示,VCC上電時,C充電,在電阻上出現(xiàn)電壓,使得單片機復位;幾個毫秒后,C充滿,電阻上電流降為0,電壓也為0,使得單片機進入工作狀態(tài)。工作期間,按下摁鍵放電,松手,C又充電,在電阻上出現(xiàn)電壓,使得單片機復位。幾個毫秒后,單片機進入工作狀態(tài)。
1.009.jpg (3.24 KB, 下載次數(shù): 51)
下載附件
2017-4-20 19:44 上傳
1.010.jpg (1.86 KB, 下載次數(shù): 60)
下載附件
2017-4-20 19:44 上傳
3.5 A/D 轉(zhuǎn)換電路
原理圖如圖3-5-1所示,本設(shè)計用的ADC0809是8位A/D轉(zhuǎn)換器,每采集一次一般需
1.011.jpg (1.17 KB, 下載次數(shù): 51)
下載附件
2017-4-20 19:44 上傳
。本設(shè)計采用中斷方式讀入A/D轉(zhuǎn)換結(jié)果,在中斷方式下,A/D轉(zhuǎn)換結(jié)束后會自動產(chǎn)生EOC信號,本設(shè)計中該信號與CPU的外部中斷0相接。
1.012.jpg (16.11 KB, 下載次數(shù): 77)
下載附件
2017-4-20 19:44 上傳
1.013.jpg (20.16 KB, 下載次數(shù): 47)
下載附件
2017-4-20 19:44 上傳
1.014.jpg (2.42 KB, 下載次數(shù): 61)
下載附件
2017-4-20 19:44 上傳
3.6 顯示電路設(shè)計
LED是發(fā)光二極管顯示器的縮寫。LED由于結(jié)構(gòu)簡單、價格便宜、與單片機接口方便等優(yōu)點而得到廣泛應用。在單片機中使用最多的是七段數(shù)碼顯示器。本次采用的是共陽極7端數(shù)碼管,并且采用軟件譯碼的方式,既簡化了硬件電路又增加了程序編寫的靈活性。其電路原理圖如圖3-6-1所示。
1.015.jpg (16.11 KB, 下載次數(shù): 50)
下載附件
2017-4-20 19:44 上傳
1.016.jpg (18.79 KB, 下載次數(shù): 52)
下載附件
2017-4-20 19:44 上傳
1.017.jpg (26.76 KB, 下載次數(shù): 66)
下載附件
2017-4-20 19:44 上傳
1.018.jpg (2.4 KB, 下載次數(shù): 65)
下載附件
2017-4-20 19:44 上傳
本課程設(shè)計利用8255可編程并行口芯片,實現(xiàn)數(shù)據(jù)從STC89C52輸入,用8255PA和PB口做輸出,其中用PA口控制數(shù)碼管的位選信號,表3-6-1為PA口控制位選信號的編碼;用PB口控制數(shù)碼管的段選信號,表3-6-2為共陽極數(shù)碼管的段碼表。
表3-6-1 數(shù)碼管的位選碼
表3-6-2 共陽極數(shù)碼管的段碼表
3.7 總體電路設(shè)計此電路的工作原理是:+5V模擬電壓信號通過變阻器分壓后由ADC0809的通道進入(本設(shè)計用到IN0、IN1、IN2、IN3四個通道),經(jīng)過模/數(shù)轉(zhuǎn)換后,產(chǎn)生相應的數(shù)字量經(jīng)過其輸出通道D0-D7傳送給STC89C52芯片的P0口,STC89C52和8255負責把接收到的數(shù)字量經(jīng)過數(shù)據(jù)處理并產(chǎn)生正確的7段數(shù)碼管的顯示段碼傳送給四位LED,8255的PA口產(chǎn)生位選信號控制數(shù)碼管的亮滅。此外,STC89C52還控制ADC0809的工作:START與單片機的P2^7相連;CLK與單片機的P2^0相連;EOC與單片機的P3^4相連;OE與單片機的P2^3相連;數(shù)據(jù)輸出端與P0口相連。工作是先將START置為低電平,再置為高電平,產(chǎn)生一個上升沿從而清除內(nèi)部寄存器;然后再將其置為低電平,產(chǎn)生下降沿,從而啟動控制電路開始A/D 轉(zhuǎn)換。轉(zhuǎn)換結(jié)束后EOC輸出一個寬為8個CLK周期的正脈沖,通過檢測該信號把OE置為1,即允許數(shù)據(jù)輸出,暫存轉(zhuǎn)換結(jié)果后再關(guān)閉輸出。把暫存的數(shù)據(jù)取出并把其換算為十進制數(shù)字,通過數(shù)碼管顯示出電壓值。
4路電壓值輪流顯示的原理:硬件上把ADC0809的ADD A與P1^0相連,ADC0809的ADD B與P1^1相連,所以會伴隨有LED亮滅現(xiàn)象。其通道選擇與對應的LED亮滅現(xiàn)象如表3-7-1所示,同時通過數(shù)碼管顯示通道“0”“1”“2”“3”。
表3-7-1 通道選擇與對應的LED亮滅現(xiàn)象
簡易數(shù)字直流電壓表的硬件電路已經(jīng)設(shè)計完成,就可以選取相應的芯片和元器件,利用Proteus軟件繪制出硬件的原理,并仔細地檢查修改,直至形成完善的硬件原理圖。但要真正實現(xiàn)電路對電壓的測量和顯示的功能,還需要有相應的軟件配合,才能達到設(shè)計要求。
4、程序設(shè)計與調(diào)試4.1 程序設(shè)計總方案
本程序利用KEIL軟件進行程序編寫,根據(jù)模塊的劃分原則,將該程序劃分初始化模塊,A/D轉(zhuǎn)換子程序和顯示子程序,這三個程序模塊構(gòu)成了整個系統(tǒng)軟件的主程序,如圖4-1-1所示。
1.019.jpg (12.81 KB, 下載次數(shù): 50)
下載附件
2017-4-20 19:44 上傳
圖4-1-1 數(shù)字式直流電壓表主程序框圖
4.2 程序調(diào)試
軟件調(diào)試的主要任務是排查錯誤,錯誤主要包括邏輯和功能錯誤,這些錯誤有些是顯性的,而有些是隱形的,可以通過仿真開發(fā)系統(tǒng)發(fā)現(xiàn)逐步改正。編好程序后,在KEIL平臺下對程序進行調(diào)試,本課程設(shè)計的程序是用C語言編寫的,由于程序代碼不多,因此調(diào)試也較為順利,但還是遇到一些問題,因此也學到了不少東西,積累了一些調(diào)試經(jīng)驗。
5、結(jié)果顯示及誤差分析5.1 結(jié)果顯示(1)IN0口輸入電壓值為3.93V時,顯示結(jié)果如圖5-1-1所示,測量結(jié)果為3.95V,誤差為0.02V。
1.020.jpg (41.69 KB, 下載次數(shù): 45)
下載附件
2017-4-20 19:44 上傳
前一位為通道數(shù),后三位為實際電壓值。
1.021.jpg (1.43 KB, 下載次數(shù): 42)
下載附件
2017-4-20 19:44 上傳
圖5-1-1
(2)當IN1輸入電壓值為3.57V時,顯示結(jié)果如圖5-1-2所示。測量誤差為0.01 V。
1.022.jpg (40.45 KB, 下載次數(shù): 47)
下載附件
2017-4-20 19:44 上傳
圖5-1-2
(3)當IN2口輸入電壓值為2.77V時,顯示結(jié)果如圖5-1-3。測量誤差為0.00V。
1.023.jpg (43.28 KB, 下載次數(shù): 53)
下載附件
2017-4-20 19:44 上傳
1.024.jpg (1.44 KB, 下載次數(shù): 47)
下載附件
2017-4-20 19:44 上傳
圖5-1-3
(4)當IN3輸入電壓值為1.50V時,顯示結(jié)果如圖5-1-4所示。測量誤差為0.01 V。
1.025.jpg (47.05 KB, 下載次數(shù): 45)
下載附件
2017-4-20 19:44 上傳
1.026.jpg (1.41 KB, 下載次數(shù): 57)
下載附件
2017-4-20 19:44 上傳
5.2 誤差分析
通過以上仿真測量結(jié)果可得到簡易數(shù)字電壓表與“標準”數(shù)字電壓表對比測試表,如下表5.2.1所示:
表5.2.1 簡易數(shù)字電壓表與“標準”數(shù)字電壓表對比測試表
由于單片機STC89C52為8位處理器,當輸入電壓為5.00V時,ADC0804輸出數(shù)據(jù)值為255(FFH),因此單片機最高的數(shù)值分辨率為0.0196V(5/255)。這就決定了電壓表的最高分辨率只能到0.0196V,從上表可看到,測試電壓一般以0.01V的幅度變化。
從上表可以看出,簡易數(shù)字電壓表測得的值基本上比標準電壓值偏小0-0.01V,這可以通過校正ADC0809的基準電壓來解決。因為該電壓表設(shè)計時直接用數(shù)據(jù)線的USB接口接上電源作為測量電壓,且數(shù)據(jù)線上有電壓損耗,所以電壓可能有偏差。當要測量大于5V的電壓時,可在輸入口使用分壓電阻,而程序中只要將計算程序的除數(shù)進行調(diào)整就可以了。
6、設(shè)計總結(jié)
通過本學期對單片機原理及應用這門課程的學習完成這次課程設(shè)計讓我們對此門課程有了更深的認識,為期兩個星期的課程設(shè)計不僅鞏固了我們的理論知識而且也培養(yǎng)了我們的動手能力,同時也讓我們認識到理論與實踐的差距,讓我們受益匪淺。
首先在課題的設(shè)計過程中,不僅要運用到課堂學到的知識,還需要查閱不少單片機相關(guān)的資料,對我們學習用的單片機板子的原理圖進行詳細地了解。經(jīng)過一段時間的努力,基于單片機的簡易數(shù)字電壓表基本完成。但設(shè)計中的不足之處仍然存在。在這過程中,我對電路設(shè)計,單片機的使用等都有了進一步地認識。通過這次設(shè)計我加深了對Keil軟件的使用方法,掌握了從系統(tǒng)的需要、方案的設(shè)計、功能模塊的劃分、原理圖的設(shè)計和電路圖的仿真的設(shè)計流程,積累了不少經(jīng)驗。
通過本次設(shè)計,提高了自己的能力,無論是在硬件連接方面還是在軟件編程方面。本次設(shè)計采用了STC89C52單片機芯片,與以往的單片機相比增加了許多新的功能,使其功能更為完善,應用領(lǐng)域也更為廣泛。設(shè)計中還用到了模/數(shù)轉(zhuǎn)換芯片ADC0809,以前在學單片機課程時只是對其理論知識有了初步的理解,做實驗時也很少自己去編寫程序,只是在原有的程序下了解然后做一些小的修改完成老師要求的擴展實驗。通過這次設(shè)計,對編程有了更深的理解。在調(diào)試過程中遇到很多問題,硬件上的理論知識學得不夠扎實,對電路的仿真方面也不夠熟練。
總之這次電路的設(shè)計和仿真,基本上達到了設(shè)計的功能要求。在以后的實踐中,我將繼續(xù)努力學習電路設(shè)計方面的理論知識,并理論聯(lián)系實際,爭取在電路設(shè)計方面能有所提升。同時在課程設(shè)計的自主設(shè)計、學習和研究過程中,通過寫課程設(shè)計的總結(jié)報告,初步訓練我們的書面表達能力。組織邏輯能力,這些技能應用性強,對我們的將來就業(yè)和進一步發(fā)展幫助較大。同時也加強了我們對課本知識的理解,使我們做到理論和與實際的聯(lián)系,收獲很大。并且我們也深深地體會到自己所學知識的不足,激發(fā)了我們的自學能力和應對挑戰(zhàn)的能力。為今后學習打下了良好的基礎(chǔ),培養(yǎng)了我們嚴謹務實,戒驕戒躁的作風,為我們的未來做了很好的鋪墊。
7、主要芯片資料7.1 STC89C52其引腳圖如圖7-1-1所示:
1.027.jpg (35.61 KB, 下載次數(shù): 47)
下載附件
2017-4-20 19:44 上傳
1.028.jpg (2.86 KB, 下載次數(shù): 50)
下載附件
2017-4-20 19:44 上傳
部分引腳功能說明:
Vcc(40腳):接+5V電源正極;
Vss(20腳):接+5V電源地;
XTAL1(19腳):接外部晶體的一個引腳;
XTAL2(18腳):接外部晶體的另一端,在單片機內(nèi)部接至反相放大器的輸出端。
RST/VPD(9腳):當振蕩器運行時,在此引腳加上兩個周期以上的高電平將使單片機復位(RST);
P0口(P0.0~P0.7):為雙向8位三態(tài)I /O口,當作為I /O口使用時,連接外部I /O設(shè)備由于輸出的驅(qū)動電路工作于開漏狀態(tài),因此需要外接上拉電阻。P0口還是地址總線低8位及數(shù)據(jù)總線分時復用口,可驅(qū)動8個TTL負載;
1.029.jpg (2.86 KB, 下載次數(shù): 41)
下載附件
2017-4-20 19:44 上傳
P1口(P1.0~P1.7):為8位準雙向I /O口,它的每一位都可以分別定義為輸入線或輸出線,可驅(qū)動4個TTL負載;
P2口(P2.0~P2.7):為8位準雙向I /O口,當作為I /O口使用時,可直接連接外部
I /O設(shè)備。它是與地址總線高8位復用,可驅(qū)動4個TTL負載;
P3口(P3.0~P3.7):為8位準雙向I /O口,是雙功能復用口,可驅(qū)動4個TTL負載。
7.2 ADC0809
ADC0809是一種8路模擬量輸入、8位逐次逼近法 A/D,轉(zhuǎn)換時間在典型時鐘頻率下約為100 微秒,適用于多路數(shù)據(jù)采集。
ADC0809的引腳圖如圖7-2-1所示:
1.030.jpg (20.22 KB, 下載次數(shù): 47)
下載附件
2017-4-20 19:44 上傳
1.031.jpg (3.41 KB, 下載次數(shù): 62)
下載附件
2017-4-20 19:44 上傳
ADC0809的引腳功率如下:
IN0~IN7:8路模擬量輸入線;
2-1~2-8 :8位三態(tài)數(shù)據(jù)輸入線,常用D7~D0表示;
A、B、C:模擬通道選擇輸入線;
ALE:通道鎖存控制信號輸入線,ALE電平正跳變時可以鎖存A、B、C上的地址信息,經(jīng)譯碼后控制IN0~IN7中哪一路模擬電壓送入比較器;
CLOCK:轉(zhuǎn)換時鐘輸入線,CLOCK的頻率范圍為10~1200kHz,一般取640 kHz(此時轉(zhuǎn)換速度為100微秒);
START:啟動轉(zhuǎn)換信號控制信號輸入線,該信號的上升沿清除內(nèi)部寄存器,下降沿啟動控制電路開始A/D轉(zhuǎn)換;
EOC:轉(zhuǎn)換結(jié)束信號輸出線,轉(zhuǎn)換結(jié)束后EOC輸出一個寬為8個CLK周期的正脈沖;
OE:輸出允許控制信號輸出線,OE為高電平時把轉(zhuǎn)換結(jié)果送數(shù)據(jù)線2-1~2-8,OE為低電平時2-1~2-8為浮空態(tài);
Vcc:主電源+5V;
GND:數(shù)字地;
VREF+:參考電壓輸入線,VREF+≤Vcc;
VREF-:參考電壓輸入線,VREF+≥GND,應保證VREF++ VREF-= Vcc。
7.3 8255A8255A是Intel公司生產(chǎn)的可編程并行接口芯片,它具有3個8位的并行I /O口,分別稱為 PA、PB、PC口,其中PC口又分為高四位和低四位口,它們都可以通過軟件編程來改變其I /O口的輸入輸出工作方式。8255A在單片機應用系統(tǒng)中被廣泛用作可編
程外部I /O擴展接口。
8255A的引腳圖及其內(nèi)部結(jié)構(gòu)圖如圖7-3-1所示:
1.032.jpg (4.67 KB, 下載次數(shù): 41)
下載附件
2017-4-20 19:44 上傳
1.033.jpg (41.1 KB, 下載次數(shù): 57)
下載附件
2017-4-20 19:44 上傳
8、參考文獻
[1] 楊恢先,黃輝先,等.單片機原理及應用[M]. 湘潭:湘潭大學出版社,2013.1.
[2] 于殿泓,王新年.單片機原理與程序設(shè)計實驗教程[M].西安:西安電子科技大學出版社,2007.5.
[3] 周興華.手把手教你學單片機C程序設(shè)計 [M].北京:北京航空航天大學出版社,2007.
[4] 馬忠梅,等.單片機的C語言應用程序設(shè)計(第4版)[M]. 北京:北京航空航天大學出版社,2007.
[5]李光飛,樓然苗,胡佳文,等.單片機課程設(shè)計實例指導[M]. 北京:北京航空航天大學出版社,2004.
[6] 李光飛,李良兒,樓然苗,等.單片機C程序設(shè)計實例指導[M]. 北京:北京航空航天大學出版社,2005.
9、致謝 此次的課程設(shè)計能順利完成,首先要感謝學院提供我們這個寶貴的平臺,讓我們有這個機會去鍛煉自己,發(fā)展自己。還要感謝老師們和學長的細心指導,是你們的指導使我們一步一步走向成功。課程設(shè)計中到充滿了歡笑和淚水,我們?yōu)榱艘恍K的成功而高興,為了一時的困難而沮喪,但是整個過程讓我們收獲了不少,動手和動腦能力得到了加強,學到了許多書本上學不到的知識。總之,我們在課程設(shè)計中學到了許多,真是一言難盡。在這里我們謝謝老師和同學們的幫助,真誠地謝謝大家!
10、附 錄附錄 C語言源程序
單路顯示: