可变量程的直流电压表
可變量程的直流電壓表
一、 實習內容、要求及指標
設計一個可變量程的直流電壓表,要求及設計指標如下:
1.測量范圍:0-20V直流電壓,設置三個量程:0-200mV,200 mV-2V,2V-20V,實現自動換檔。
2.測量精度:20 mV。
3.測量誤差允許范圍:<=1%。
4.顯示:用四位七段數碼管顯示電壓讀數。
二、 方案分析及論證
1. 自動換檔(模擬部分)設計方案分析與論證
方案一:考慮到ADC0809的八路模擬量輸入通道本質上也是模擬開關,因此可以利用其八個模擬通道中的三個作為換檔選擇器,即根據通道對應的電壓測量范圍確定對應的電壓放大倍數設計對應的前置放大電路。
方案二:選用模擬開關芯片4066實現換檔。4066集成了4個模擬開關,每一路開關都有一個控制端控制對應開關的通斷。用單片機對控制端進行控制,實現不同量程的轉換。
方案論證:選用方案一可以節省一片CD4066芯片,但采用該方案時如果由于換檔環節沒有控制好的話很可能造成ADC0809芯片的損壞,而ADC0809遠比CD4066高。另外采用ADC0809做模擬開關勢必會增加所需運算放大器的數量并且增加單片機程序編寫的難度,綜合考慮之,我們采用方案二。
2. 譯碼顯示部分方案分析與論證
方案一:選用優先譯碼器74LS138對四片用來顯示電壓讀數的數碼管進行片選,實現數碼管的動態點亮。因為只用控制四個數碼管,而74LS138又為3—8譯碼器,所以只用單片機控制前兩個控制端,最高位控制端接地。另外選用用74LS244作為數碼管的驅動,具體譯碼由軟件控制。
方案二:同方案一選用74LS138進行片選,在譯碼驅動部分選用譯碼器CD4056,不用軟件譯碼。
方案論證:兩個方案都選用了74LS138,所不同的是數碼管的驅動選用的芯片不一樣,考慮到74LS244成本較CD4056高且使用它會增加單片機控制程序的編寫難度,故選用方案二。
三、 軟、硬件設計
1. 硬件設計
系統硬件設計主要分模擬部分設計、A/D轉換模塊設計、數據顯示模塊設計。
(1)模擬部分設計
a. 電壓跟隨器設計
如圖3-1所示,電壓跟隨器是用一個三極管構成的共集電路,它的電壓增益是一,所以叫做電壓跟隨器。共集電路是輸入高阻抗,輸出低阻抗,這就使得它在電路中可以起到阻抗匹配的作用,能夠使得后一級的放大電路更好的工作。它有功率放大作用。常用在測量儀表的輸入極,以提高儀表的輸入阻抗,減小對被測電路的影響。在這里我們設計電壓跟隨器正是這樣一個目的。圖中前端的電位器起電壓衰減到輸入電壓1/5的作用,因為ADC0809能轉換的電壓范圍為0到5V,而輸入待測電壓的范圍為0到20V,所以必須先進行衰減。
圖3-1 電壓跟隨器
b.譯碼顯示模塊設計:
該模塊的主要功能是通過譯碼器將ADC0809轉換出的數字量進行譯碼并用數碼管顯示。電路原理圖如圖3-5所示。四片數碼管要動態點亮,用3線-8線譯碼器74LS138作為片選控制器,因為只有四片數碼管需要控制,所以只用控制譯碼輸出端中的與四片數碼管接地端相連的高四位,因而譯碼輸入碼控制端的高位C端接地,A端和B端接單片機,在程序中通過控制A、B端的邏輯狀態實現數碼管的動態點亮。另外數碼管各段的點亮由通用譯碼器CD4066實現。CD4066可以作為數碼管的驅動,也可以做液晶顯示屏的驅動。CD4066有4個譯碼輸入端,7個譯碼輸出端分別接四片數碼管的相應端,4個譯碼輸入端接單片機的P1口,在單片機的軟件設計中對譯碼加以控制。
1. 軟件設計:
四、調試過程
本次課程設計我們花在焊接和程序的編寫上的時間并不多,電路設計、方案論證和系統調試才占用了大部分的時間。我們的調試試過程是按照先局部后整體的思路進行的。現詳細敘述如下:
1.分局部調試:
①模擬部分的調試
模擬部分的設計主要是根據我們的設計檢查跟隨器工作是否正常、檢查模擬開關4066是否工作、調節各量程放大倍數到設計指定值等。
a.跟隨器的檢查
我們首先將與待測電壓輸入端相連的204電位器接入的部分調到50K(即進行1/4衰減),接著為LM324接通了5V電壓,然后將輸入待測電壓調到3V,接下來用萬用表測量了LM324芯片3腿的電壓,發現電壓居然達到2.8V。這是很不正常的,因為按照我們的設計電壓應該衰減到為原來的1/4,即便是我們的電位器調得不夠準的話,電壓也至少應該出現衰減的現象才對。我們判斷可能是電路在焊接方面出了問題,于是對照著電路原理圖仔細檢查電路的焊接,經過檢查,我們發現我們在電位器的焊接上出了問題,按我們的接法,電位器根本就沒有接入電路,難怪電壓也不衰減了。我們改焊了電路。按前面的方法去檢查,發現電壓又出奇的低,還有問題?這次我們又仔細檢查了電路,發現無論是原理上還是焊接上都不應該存在問題。我靜下心來查閱芯片資料并與指導老師討論了問題,發現原來是LM324的工作電壓出了問題,其工作電壓應設為12V而我們只用了5V。改接12V電壓后我們再測,發現與理論計算值已經非常接近,電壓跟隨器工作正常。
b.檢查模擬開關4066是否工作
4066集成了四個開關。共有四個控制端。如果某一控制端為高電平則對應的開關將接通。為測量其是否工作,我們將它的四個控制端用導線引出分別接高低電平,發現測量結果與理論分析結果一致,4066工作正常。
c.各量程放大倍數的調節
這一步調試是建立在上述兩步調試的基礎上的。針對不同的檔位,我們通過接入不同的待測的模擬輸入電壓來調節放大電路的放大倍數。調試測量5到20V檔的放大倍數時,我們選擇的輸入電壓為8V,按照設計,該電壓在經過衰減電路后不放大。前面已經說過,我們設定的衰減比例為1/4,因此LM324輸出端(7腿)的電壓應該為2V,經過萬用表測量,電壓為2V,調試成功。在調節2到5V檔的放大倍數時,我們選擇的電壓為3V,該電壓應該先衰減到原來值的1/4再經過4倍放大電路后大小不變。我們通過調節控制放大倍數的電位器使LM324的7腿的電壓為3V達到放大倍數調節的目的。同理,在調節其他檔位的放大倍數時也是通過上述方法調節相應的電位器實現的。
②譯碼部分的調試
譯碼部分主要是檢驗74LS138片選和4056譯碼是否正常。如前,我們仍是將74LS138的兩個控制端和4056的四個譯碼控制端用長導線引出,分別接高低電平。當74LS138的A、 B分別為00、01、10、11時,分別是第一個、第二個、第三個和第四個數碼管被點亮,這說明片選是正常的。在測試4056時結合起真值表用上述方法進行了譯碼檢測,發現其也是正常工作的。
③單片機與譯碼部分整體調試
上面是對譯碼部分單獨進行了調試,而741LS138和4056的工作是要在單片機的控制下工作的,所以我們做了這樣一步測試。我為單片機編寫了在數碼管上動態點亮數碼管并讓四個數碼管依次顯示“1”、“2”、“3”、“4”的程序,燒錄并將單片機接入電路后發現數碼管上顯示的為“0224”。是程序出了問題還是其他原因?我反復檢查了我的程序,發現沒有問題。我又向暑假參加過省電子設計大賽的同學請教單片機可以燒錄是否仍可能壞的問題,他們的回答模棱兩可。我只好自己測試。我檢查了單片機的30腿發現有1MHz的矩形波,說明單片機在工作,但工作是否正常呢?我找同學借了一個經過測試可以正常工作的單片機,一樣的程序燒錄并接入我的電路發現正常顯示,我這才確定是單片機壞了。通過這個測試我知道即使是可以燒錄程序的單片機也不一定可以正常工作。
2.整機調試:
在進行電路的分局部調試之后,我們又進行了系統整機調試。首先為LM324接上12V的電壓,為其他芯片接上5V的工作電壓。另外還要輸入待測的模擬電壓,該電壓從200mV以下的電壓開始輸起,依次增大。直到達到待測電壓的上限20V為止,在這過程中,記錄測量數據如上表所示。由于前面的分局部調試進行得比較細致,因此整機調試較為順利。
五、數據測量及分析
1.實驗數據測量結果如表5-1所示:
表5-1 實驗數據測量記錄表
|
測量檔 |
測量值 |
真實值 |
誤差 |
|
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.實驗測試結果分析
從上表可以看出,系統測試結果基本滿足20mV精度的測量要求,但精度不是很穩定,有的精度很高,而最高的誤差達到了50mV。造成這種結果的原因主要是系統前端模擬部分的不穩定性和放大倍數的不精確性,另外就是數字部分的ADC0809進行A/D轉換造成的誤差。我曾經測量過模擬部分中CD4066的電阻,我覺得它的電阻過大可能也是造成誤差的一個原因。
六、實習體會
這次的實習卻給了我們一個在實踐中靈活運用知識的機會,我們通過在實踐中發現問題,進而去書本中找相關的知識去解決問題,從而鞏固了理論知識。那樣的知識是你從根本上去認識它,理解它,所以你的記憶時間會很長。
焊接電路是我們這次實習新學到的一個基本操作,而又是很重要的一個操作。焊接電路的好壞直接影響你的實驗結果。在這次實驗之前,我們用了一天的時間去學習查找有關電壓表量程變換的單片機知識。在這次實驗的過程中,我們首先是在電路板按照設計好的方案圖焊接,檢查焊接有無問題,再把寫好程序寫入89ATS51單片機上,進行測試。當看到數碼管數字與電源的數字相差無幾時,很幸運,我們一下就成功了,并且量程精度完全符合要求,相信我們組的每個人這時都有一種自豪感和成就感。
在此也非常感謝老師陪伴著我們,在我們遇到問題時給予我們的指導和幫助。
七、參考文獻
1. 胡致強,劉振明。單片機實現的自動轉換量程電壓測試儀,哈爾濱學院學報,2001年9月刊。
2. 劉煥平,韓樹新。ADC0809 與AT89C51的一種接口方法,石家莊師范專科學校學報,2002年6月刊。
3. 任永強,徐百榮。一種基于單片機的量程自動轉換技術,儀器儀表用戶,2002年2月刊。
4. 王 劍。一種用于A/D轉換的量程自動控制電路,華東地質學院學報,1999年12月刊。
5. 李廣第等編,單片機技術基礎,北京,北京航空航天大學出版社,2002年版。
6. www.21ic.com.。
附錄
附錄1.軟件設計源代碼:
//******************************************************************
//單片機課程設計程序:可變量程直流電壓表的設計
//小組成員:石進 劉銳
//***************************************************************************
//電壓表的程序
//BY WXH
//Copyright 2007
//All right reserved
//==============================
#include<at89x51.h>
#include<intrins.h>
typedef unsigned char uchar;
//==============================
//P0口接ADC0809的數據輸出端
//#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通過非門接ADC0809的ALE和START
sbit EOC=P2^3; //P2_2接ADC0809的EOC
sbit OE =P2^1; //P2_1接ADC0809的OE
//P1_0~P1_3接4056的數據輸入
//P3口
sbit dp1 =P3^0; //P3_1接第一個數碼的小數點
sbit dp2 =P3^1; //P3_2接第二個數碼的小數點
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 元器件清單
|
器件名稱 |
數量 |
備注 |
|
AT89S52單片機 |
1片 |
|
|
ADC0809 |
1片 |
A/D轉換芯片 |
|
七段數碼顯示管 |
4片 |
顯示用 |
|
20pF電容 |
2個 |
|
|
10uF電容 |
1個 |
|
|
12M晶振 |
1個 |
|
|
CD4066 |
1片 |
四路集成模擬開關 |
|
運放LM324 |
1片 |
|
|
74LS138(74HC138) |
1片 |
|
|
74LS74(74HC74) |
1片 |
分頻用 |
|
204電位器 |
3片 |
|
|
105電位器 |
1片 |
|
|
CD4056 |
1片 |
七段譯碼器 |
附錄4.整機原理圖:
實習報告下載地址:
http://www.freefilehosting.net/files/MTE5OTYx">01.doc
總結
以上是生活随笔為你收集整理的可变量程的直流电压表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 老果粉独享功能,使用“我的照片流”同步照
- 下一篇: js初识 js数据类型