可变量程的直流电压表
可變量程的直流電壓表
一、 實(shí)習(xí)內(nèi)容、要求及指標(biāo)
設(shè)計(jì)一個(gè)可變量程的直流電壓表,要求及設(shè)計(jì)指標(biāo)如下:
1.測(cè)量范圍:0-20V直流電壓,設(shè)置三個(gè)量程:0-200mV,200 mV-2V,2V-20V,實(shí)現(xiàn)自動(dòng)換檔。
2.測(cè)量精度:20 mV。
3.測(cè)量誤差允許范圍:<=1%。
4.顯示:用四位七段數(shù)碼管顯示電壓讀數(shù)。
二、 方案分析及論證
1. 自動(dòng)換檔(模擬部分)設(shè)計(jì)方案分析與論證
方案一:考慮到ADC0809的八路模擬量輸入通道本質(zhì)上也是模擬開關(guān),因此可以利用其八個(gè)模擬通道中的三個(gè)作為換檔選擇器,即根據(jù)通道對(duì)應(yīng)的電壓測(cè)量范圍確定對(duì)應(yīng)的電壓放大倍數(shù)設(shè)計(jì)對(duì)應(yīng)的前置放大電路。
方案二:選用模擬開關(guān)芯片4066實(shí)現(xiàn)換檔。4066集成了4個(gè)模擬開關(guān),每一路開關(guān)都有一個(gè)控制端控制對(duì)應(yīng)開關(guān)的通斷。用單片機(jī)對(duì)控制端進(jìn)行控制,實(shí)現(xiàn)不同量程的轉(zhuǎn)換。
方案論證:選用方案一可以節(jié)省一片CD4066芯片,但采用該方案時(shí)如果由于換檔環(huán)節(jié)沒有控制好的話很可能造成ADC0809芯片的損壞,而ADC0809遠(yuǎn)比CD4066高。另外采用ADC0809做模擬開關(guān)勢(shì)必會(huì)增加所需運(yùn)算放大器的數(shù)量并且增加單片機(jī)程序編寫的難度,綜合考慮之,我們采用方案二。
2. 譯碼顯示部分方案分析與論證
方案一:選用優(yōu)先譯碼器74LS138對(duì)四片用來(lái)顯示電壓讀數(shù)的數(shù)碼管進(jìn)行片選,實(shí)現(xiàn)數(shù)碼管的動(dòng)態(tài)點(diǎn)亮。因?yàn)橹挥每刂扑膫€(gè)數(shù)碼管,而74LS138又為3—8譯碼器,所以只用單片機(jī)控制前兩個(gè)控制端,最高位控制端接地。另外選用用74LS244作為數(shù)碼管的驅(qū)動(dòng),具體譯碼由軟件控制。
方案二:同方案一選用74LS138進(jìn)行片選,在譯碼驅(qū)動(dòng)部分選用譯碼器CD4056,不用軟件譯碼。
方案論證:兩個(gè)方案都選用了74LS138,所不同的是數(shù)碼管的驅(qū)動(dòng)選用的芯片不一樣,考慮到74LS244成本較CD4056高且使用它會(huì)增加單片機(jī)控制程序的編寫難度,故選用方案二。
三、 軟、硬件設(shè)計(jì)
1. 硬件設(shè)計(jì)
系統(tǒng)硬件設(shè)計(jì)主要分模擬部分設(shè)計(jì)、A/D轉(zhuǎn)換模塊設(shè)計(jì)、數(shù)據(jù)顯示模塊設(shè)計(jì)。
(1)模擬部分設(shè)計(jì)
a. 電壓跟隨器設(shè)計(jì)
如圖3-1所示,電壓跟隨器是用一個(gè)三極管構(gòu)成的共集電路,它的電壓增益是一,所以叫做電壓跟隨器。共集電路是輸入高阻抗,輸出低阻抗,這就使得它在電路中可以起到阻抗匹配的作用,能夠使得后一級(jí)的放大電路更好的工作。它有功率放大作用。常用在測(cè)量?jī)x表的輸入極,以提高儀表的輸入阻抗,減小對(duì)被測(cè)電路的影響。在這里我們?cè)O(shè)計(jì)電壓跟隨器正是這樣一個(gè)目的。圖中前端的電位器起電壓衰減到輸入電壓1/5的作用,因?yàn)锳DC0809能轉(zhuǎn)換的電壓范圍為0到5V,而輸入待測(cè)電壓的范圍為0到20V,所以必須先進(jìn)行衰減。
圖3-1 電壓跟隨器
b.譯碼顯示模塊設(shè)計(jì):
該模塊的主要功能是通過(guò)譯碼器將ADC0809轉(zhuǎn)換出的數(shù)字量進(jìn)行譯碼并用數(shù)碼管顯示。電路原理圖如圖3-5所示。四片數(shù)碼管要?jiǎng)討B(tài)點(diǎn)亮,用3線-8線譯碼器74LS138作為片選控制器,因?yàn)橹挥兴钠瑪?shù)碼管需要控制,所以只用控制譯碼輸出端中的與四片數(shù)碼管接地端相連的高四位,因而譯碼輸入碼控制端的高位C端接地,A端和B端接單片機(jī),在程序中通過(guò)控制A、B端的邏輯狀態(tài)實(shí)現(xiàn)數(shù)碼管的動(dòng)態(tài)點(diǎn)亮。另外數(shù)碼管各段的點(diǎn)亮由通用譯碼器CD4066實(shí)現(xiàn)。CD4066可以作為數(shù)碼管的驅(qū)動(dòng),也可以做液晶顯示屏的驅(qū)動(dòng)。CD4066有4個(gè)譯碼輸入端,7個(gè)譯碼輸出端分別接四片數(shù)碼管的相應(yīng)端,4個(gè)譯碼輸入端接單片機(jī)的P1口,在單片機(jī)的軟件設(shè)計(jì)中對(duì)譯碼加以控制。
1. 軟件設(shè)計(jì):
四、調(diào)試過(guò)程
本次課程設(shè)計(jì)我們花在焊接和程序的編寫上的時(shí)間并不多,電路設(shè)計(jì)、方案論證和系統(tǒng)調(diào)試才占用了大部分的時(shí)間。我們的調(diào)試試過(guò)程是按照先局部后整體的思路進(jìn)行的。現(xiàn)詳細(xì)敘述如下:
1.分局部調(diào)試:
①模擬部分的調(diào)試
模擬部分的設(shè)計(jì)主要是根據(jù)我們的設(shè)計(jì)檢查跟隨器工作是否正常、檢查模擬開關(guān)4066是否工作、調(diào)節(jié)各量程放大倍數(shù)到設(shè)計(jì)指定值等。
a.跟隨器的檢查
我們首先將與待測(cè)電壓輸入端相連的204電位器接入的部分調(diào)到50K(即進(jìn)行1/4衰減),接著為L(zhǎng)M324接通了5V電壓,然后將輸入待測(cè)電壓調(diào)到3V,接下來(lái)用萬(wàn)用表測(cè)量了LM324芯片3腿的電壓,發(fā)現(xiàn)電壓居然達(dá)到2.8V。這是很不正常的,因?yàn)榘凑瘴覀兊脑O(shè)計(jì)電壓應(yīng)該衰減到為原來(lái)的1/4,即便是我們的電位器調(diào)得不夠準(zhǔn)的話,電壓也至少應(yīng)該出現(xiàn)衰減的現(xiàn)象才對(duì)。我們判斷可能是電路在焊接方面出了問(wèn)題,于是對(duì)照著電路原理圖仔細(xì)檢查電路的焊接,經(jīng)過(guò)檢查,我們發(fā)現(xiàn)我們?cè)陔娢黄鞯暮附由铣隽藛?wèn)題,按我們的接法,電位器根本就沒有接入電路,難怪電壓也不衰減了。我們改焊了電路。按前面的方法去檢查,發(fā)現(xiàn)電壓又出奇的低,還有問(wèn)題?這次我們又仔細(xì)檢查了電路,發(fā)現(xiàn)無(wú)論是原理上還是焊接上都不應(yīng)該存在問(wèn)題。我靜下心來(lái)查閱芯片資料并與指導(dǎo)老師討論了問(wèn)題,發(fā)現(xiàn)原來(lái)是LM324的工作電壓出了問(wèn)題,其工作電壓應(yīng)設(shè)為12V而我們只用了5V。改接12V電壓后我們?cè)贉y(cè),發(fā)現(xiàn)與理論計(jì)算值已經(jīng)非常接近,電壓跟隨器工作正常。
b.檢查模擬開關(guān)4066是否工作
4066集成了四個(gè)開關(guān)。共有四個(gè)控制端。如果某一控制端為高電平則對(duì)應(yīng)的開關(guān)將接通。為測(cè)量其是否工作,我們將它的四個(gè)控制端用導(dǎo)線引出分別接高低電平,發(fā)現(xiàn)測(cè)量結(jié)果與理論分析結(jié)果一致,4066工作正常。
c.各量程放大倍數(shù)的調(diào)節(jié)
這一步調(diào)試是建立在上述兩步調(diào)試的基礎(chǔ)上的。針對(duì)不同的檔位,我們通過(guò)接入不同的待測(cè)的模擬輸入電壓來(lái)調(diào)節(jié)放大電路的放大倍數(shù)。調(diào)試測(cè)量5到20V檔的放大倍數(shù)時(shí),我們選擇的輸入電壓為8V,按照設(shè)計(jì),該電壓在經(jīng)過(guò)衰減電路后不放大。前面已經(jīng)說(shuō)過(guò),我們?cè)O(shè)定的衰減比例為1/4,因此LM324輸出端(7腿)的電壓應(yīng)該為2V,經(jīng)過(guò)萬(wàn)用表測(cè)量,電壓為2V,調(diào)試成功。在調(diào)節(jié)2到5V檔的放大倍數(shù)時(shí),我們選擇的電壓為3V,該電壓應(yīng)該先衰減到原來(lái)值的1/4再經(jīng)過(guò)4倍放大電路后大小不變。我們通過(guò)調(diào)節(jié)控制放大倍數(shù)的電位器使LM324的7腿的電壓為3V達(dá)到放大倍數(shù)調(diào)節(jié)的目的。同理,在調(diào)節(jié)其他檔位的放大倍數(shù)時(shí)也是通過(guò)上述方法調(diào)節(jié)相應(yīng)的電位器實(shí)現(xiàn)的。
②譯碼部分的調(diào)試
譯碼部分主要是檢驗(yàn)74LS138片選和4056譯碼是否正常。如前,我們?nèi)允菍?4LS138的兩個(gè)控制端和4056的四個(gè)譯碼控制端用長(zhǎng)導(dǎo)線引出,分別接高低電平。當(dāng)74LS138的A、 B分別為00、01、10、11時(shí),分別是第一個(gè)、第二個(gè)、第三個(gè)和第四個(gè)數(shù)碼管被點(diǎn)亮,這說(shuō)明片選是正常的。在測(cè)試4056時(shí)結(jié)合起真值表用上述方法進(jìn)行了譯碼檢測(cè),發(fā)現(xiàn)其也是正常工作的。
③單片機(jī)與譯碼部分整體調(diào)試
上面是對(duì)譯碼部分單獨(dú)進(jìn)行了調(diào)試,而741LS138和4056的工作是要在單片機(jī)的控制下工作的,所以我們做了這樣一步測(cè)試。我為單片機(jī)編寫了在數(shù)碼管上動(dòng)態(tài)點(diǎn)亮數(shù)碼管并讓四個(gè)數(shù)碼管依次顯示“1”、“2”、“3”、“4”的程序,燒錄并將單片機(jī)接入電路后發(fā)現(xiàn)數(shù)碼管上顯示的為“0224”。是程序出了問(wèn)題還是其他原因?我反復(fù)檢查了我的程序,發(fā)現(xiàn)沒有問(wèn)題。我又向暑假參加過(guò)省電子設(shè)計(jì)大賽的同學(xué)請(qǐng)教單片機(jī)可以燒錄是否仍可能壞的問(wèn)題,他們的回答模棱兩可。我只好自己測(cè)試。我檢查了單片機(jī)的30腿發(fā)現(xiàn)有1MHz的矩形波,說(shuō)明單片機(jī)在工作,但工作是否正常呢?我找同學(xué)借了一個(gè)經(jīng)過(guò)測(cè)試可以正常工作的單片機(jī),一樣的程序燒錄并接入我的電路發(fā)現(xiàn)正常顯示,我這才確定是單片機(jī)壞了。通過(guò)這個(gè)測(cè)試我知道即使是可以燒錄程序的單片機(jī)也不一定可以正常工作。
2.整機(jī)調(diào)試:
在進(jìn)行電路的分局部調(diào)試之后,我們又進(jìn)行了系統(tǒng)整機(jī)調(diào)試。首先為L(zhǎng)M324接上12V的電壓,為其他芯片接上5V的工作電壓。另外還要輸入待測(cè)的模擬電壓,該電壓從200mV以下的電壓開始輸起,依次增大。直到達(dá)到待測(cè)電壓的上限20V為止,在這過(guò)程中,記錄測(cè)量數(shù)據(jù)如上表所示。由于前面的分局部調(diào)試進(jìn)行得比較細(xì)致,因此整機(jī)調(diào)試較為順利。
五、數(shù)據(jù)測(cè)量及分析
1.實(shí)驗(yàn)數(shù)據(jù)測(cè)量結(jié)果如表5-1所示:
表5-1 實(shí)驗(yàn)數(shù)據(jù)測(cè)量記錄表
|
測(cè)量檔 |
測(cè)量值 |
真實(shí)值 |
誤差 |
|
0-200mV檔 |
0.006V |
0.0063V |
0.3mV |
|
0.078V |
0.076V |
2mV |
|
|
0.168V |
0.143V |
25mV |
|
|
200mV-2V檔 |
0.619V |
0.603V |
16mV |
|
1.086V |
1.080V |
6mV |
|
|
1.427V |
1.450V |
23mV |
|
|
1.892V |
1.910V |
18mV |
|
|
2V-5V檔 |
2.505V |
2.510V |
5mV |
|
3.640V |
3.660V |
20mV |
|
|
4.044V |
4.050V |
6mV |
|
|
5-20V檔 |
5.415V |
5.450V |
35mV |
|
7.603V |
7.640V |
37mV |
|
|
8.492V |
8.490V |
2mV |
|
|
10.76V |
10.72V |
40mV |
|
|
11.13V |
11.13V |
0mV |
|
|
12.33V |
12.34V |
10mV |
|
|
13.43V |
13.42V |
10mV |
|
|
15.09V |
15.11V |
20mV |
|
|
17.09V |
17.08V |
10mV |
|
|
18.31V |
18.35V |
40mV |
|
|
19.25V |
19.30V |
50mV |
2.實(shí)驗(yàn)測(cè)試結(jié)果分析
從上表可以看出,系統(tǒng)測(cè)試結(jié)果基本滿足20mV精度的測(cè)量要求,但精度不是很穩(wěn)定,有的精度很高,而最高的誤差達(dá)到了50mV。造成這種結(jié)果的原因主要是系統(tǒng)前端模擬部分的不穩(wěn)定性和放大倍數(shù)的不精確性,另外就是數(shù)字部分的ADC0809進(jìn)行A/D轉(zhuǎn)換造成的誤差。我曾經(jīng)測(cè)量過(guò)模擬部分中CD4066的電阻,我覺得它的電阻過(guò)大可能也是造成誤差的一個(gè)原因。
六、實(shí)習(xí)體會(huì)
這次的實(shí)習(xí)卻給了我們一個(gè)在實(shí)踐中靈活運(yùn)用知識(shí)的機(jī)會(huì),我們通過(guò)在實(shí)踐中發(fā)現(xiàn)問(wèn)題,進(jìn)而去書本中找相關(guān)的知識(shí)去解決問(wèn)題,從而鞏固了理論知識(shí)。那樣的知識(shí)是你從根本上去認(rèn)識(shí)它,理解它,所以你的記憶時(shí)間會(huì)很長(zhǎng)。
焊接電路是我們這次實(shí)習(xí)新學(xué)到的一個(gè)基本操作,而又是很重要的一個(gè)操作。焊接電路的好壞直接影響你的實(shí)驗(yàn)結(jié)果。在這次實(shí)驗(yàn)之前,我們用了一天的時(shí)間去學(xué)習(xí)查找有關(guān)電壓表量程變換的單片機(jī)知識(shí)。在這次實(shí)驗(yàn)的過(guò)程中,我們首先是在電路板按照設(shè)計(jì)好的方案圖焊接,檢查焊接有無(wú)問(wèn)題,再把寫好程序?qū)懭?9ATS51單片機(jī)上,進(jìn)行測(cè)試。當(dāng)看到數(shù)碼管數(shù)字與電源的數(shù)字相差無(wú)幾時(shí),很幸運(yùn),我們一下就成功了,并且量程精度完全符合要求,相信我們組的每個(gè)人這時(shí)都有一種自豪感和成就感。
在此也非常感謝老師陪伴著我們,在我們遇到問(wèn)題時(shí)給予我們的指導(dǎo)和幫助。
七、參考文獻(xiàn)
1. 胡致強(qiáng),劉振明。單片機(jī)實(shí)現(xiàn)的自動(dòng)轉(zhuǎn)換量程電壓測(cè)試儀,哈爾濱學(xué)院學(xué)報(bào),2001年9月刊。
2. 劉煥平,韓樹新。ADC0809 與AT89C51的一種接口方法,石家莊師范專科學(xué)校學(xué)報(bào),2002年6月刊。
3. 任永強(qiáng),徐百榮。一種基于單片機(jī)的量程自動(dòng)轉(zhuǎn)換技術(shù),儀器儀表用戶,2002年2月刊。
4. 王 劍。一種用于A/D轉(zhuǎn)換的量程自動(dòng)控制電路,華東地質(zhì)學(xué)院學(xué)報(bào),1999年12月刊。
5. 李廣第等編,單片機(jī)技術(shù)基礎(chǔ),北京,北京航空航天大學(xué)出版社,2002年版。
6. www.21ic.com.。
附錄
附錄1.軟件設(shè)計(jì)源代碼:
//******************************************************************
//單片機(jī)課程設(shè)計(jì)程序:可變量程直流電壓表的設(shè)計(jì)
//小組成員:石進(jìn) 劉銳
//***************************************************************************
//電壓表的程序
//BY WXH
//Copyright 2007
//All right reserved
//==============================
#include<at89x51.h>
#include<intrins.h>
typedef unsigned char uchar;
//==============================
//P0口接ADC0809的數(shù)據(jù)輸出端
//#define adc_data P0;
//P2口
sbit v20 =P2^4; //P2_7為1選通20V量程,X0.25
sbit v5 =P2^5; //P2_6為0選通5V量程,X1
sbit v2 =P2^6; //P2_5為0選通2V量程,X2.5
sbit v02 =P2^7; //P2_4為0選通0.2V量程,X25
sbit START =P2^0; //P2_3通過(guò)非門接ADC0809的ALE和START
sbit EOC=P2^3; //P2_2接ADC0809的EOC
sbit OE =P2^1; //P2_1接ADC0809的OE
//P1_0~P1_3接4056的數(shù)據(jù)輸入
//P3口
sbit dp1 =P3^0; //P3_1接第一個(gè)數(shù)碼的小數(shù)點(diǎn)
sbit dp2 =P3^1; //P3_2接第二個(gè)數(shù)碼的小數(shù)點(diǎn)
sbit A138=P3^6; //P3_6接74ls138的A
sbit B138=P3^7; //P3_7接74ls138的B
//===============macro define=====================
#define v20_on {v20=1;v5=v2=v02=1;}
#define v5_on {v5=0;v20=0;v2=v02=1;}
#define v2_on {v2=0;v20=0;v5=v02=1;}
#define v02_on {v02=0;v20=0;v5=v2=1;}
#define ADC_ST {START=1;_nop_();START=0;}
#define OE_on {OE=1;}
#define OE_off {OE=0;}
#define dpy0 {A138=0;B138=0;}
#define dpy1 {A138=1;B138=0;}
#define dpy2 {A138=0;B138=1;}
#define dpy3 {A138=1;B138=1;}
#define DP1 {dp1=1;dp2=0;}
#define DP2 {dp1=0;dp2=1;}
//==================================
uchar temp[5];
float vol;
uchar num_disp[4];
//================delay_5ms=============================
delay_5ms() //5k T
{
int i = 624;
for(;i>0;i--);
}
//=====================================
main()
{
char i;
//===initialize===
OE_off;
//===========
_20v:
v20_on;
for(i=0;i<5;i++)
{
ADC_ST;
while(EOC==0);
OE_on;
temp[i]=P0;
OE_off;
if(temp[i]<51)
goto _5v;
}
vol=(temp[0]+temp[1]+temp[2]+temp[3]+temp[4])/51.0;
goto disp;
_5v:
v5_on;
for(i=0;i<5;i++)
{
ADC_ST;
while(EOC==0);
OE_on;
temp[i]=P0;
OE_off;
if(temp[i]<82)
goto _2v;
else if(temp[i]>204)
goto _20v;
}
vol=(temp[0]+temp[1]+temp[2]+temp[3]+temp[4])/204.0;
goto disp;
_2v:
v2_on;
for(i=0;i<5;i++)
{
ADC_ST;
while(EOC==0);
OE_on;
temp[i]=P0;
OE_off;
if(temp[i]<82)
goto _02v;
else if(temp[i]>204)
goto _2v;
}
vol=(temp[0]+temp[1]+temp[2]+temp[3]+temp[4])/510.0;
goto disp;
_02v:
v02_on;
for(i=0;i<5;i++)
{
ADC_ST;
while(EOC==0);
OE_on;
temp[i]=P0;
OE_off;
if(temp[i]>204)
goto _2v;
}
vol=(temp[0]+temp[1]+temp[2]+temp[3]+temp[4])/5100.0;
disp:
if(vol<10.0)
{
DP1;
num_disp[0]=(uchar)vol;
num_disp[1]=((uchar)(vol*10))%10;
num_disp[2]=((uchar)(vol*100))%10;
num_disp[3]=((uchar)(vol*1000))%10;
}
else
{
DP2;
num_disp[0]=((uchar)vol)/10;
num_disp[1]=((uchar)vol)%10;
num_disp[2]=((uchar)(vol*10))%10;
num_disp[3]=((uchar)(vol*100))%10;
}
for(i=0;i<10;i++)
{
P1=num_disp[0];
dpy0;
delay_5ms();
P1=num_disp[1];
dpy1;
delay_5ms();
P1=num_disp[2];
dpy2;
delay_5ms();
P1=num_disp[3];
dpy3;
delay_5ms();
}
goto _20v;
}
附錄3.元器件清單列表
附表1 元器件清單
|
器件名稱 |
數(shù)量 |
備注 |
|
AT89S52單片機(jī) |
1片 |
|
|
ADC0809 |
1片 |
A/D轉(zhuǎn)換芯片 |
|
七段數(shù)碼顯示管 |
4片 |
顯示用 |
|
20pF電容 |
2個(gè) |
|
|
10uF電容 |
1個(gè) |
|
|
12M晶振 |
1個(gè) |
|
|
CD4066 |
1片 |
四路集成模擬開關(guān) |
|
運(yùn)放LM324 |
1片 |
|
|
74LS138(74HC138) |
1片 |
|
|
74LS74(74HC74) |
1片 |
分頻用 |
|
204電位器 |
3片 |
|
|
105電位器 |
1片 |
|
|
CD4056 |
1片 |
七段譯碼器 |
附錄4.整機(jī)原理圖:
實(shí)習(xí)報(bào)告下載地址:
http://www.freefilehosting.net/files/MTE5OTYx">01.doc
總結(jié)
以上是生活随笔為你收集整理的可变量程的直流电压表的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 老果粉独享功能,使用“我的照片流”同步照
- 下一篇: js初识 js数据类型