第1章 緒論1.1系統的開發背景在電量的測量中,電壓、電流和頻率是最基本的三個被測量,其中電壓量的測量最為經常。而且隨著電子技術的發展,更是經常需要測量高精度的電壓,所以數字電壓表就成為一種必不可少的測量儀器。數字電壓表簡稱DVM,它是采用數字化測量技術,把連續的模擬量轉換成不連續、離散的數字形式并加以顯示的儀表。由于數字式儀器具有讀數準確方便、精度高、誤差小、測量速度快等特而得到廣泛應用。
傳統的指針式刻度電壓表功能單一,進度低,容易引起視差和視覺疲勞,因而不能滿足數字化時代的需要。采用單片機的數字電壓表,將連續的模擬量如直流電壓轉換成不連續的離散的數字形式并加以顯示,從而精度高、抗干擾能力強,可擴展性強、集成方便,還可與PC實時通信。數字電壓表是諸多數字化儀表的核心與基礎。以數字電壓表為核心,可以擴展成各種通用數字儀表、專用數字儀表及各種非電量的數字化儀表。目前,由各種單片機和A/D轉換器構成的數字電壓表作全面深入的了解是很有必要的。
最近的幾十年來,隨著半導體技術、集成電路(IC)和微處理器技術的發展,數字電路和數字化測量技術也有了巨大的進步,從而促使了數字電壓表的快速發展,并不斷出現新的類型。數字電壓表從1952年問世以來,經歷了不斷改進的過程,從最早采用繼電器、電子管和形式發展到了現在的全固態化、集成化(IC化),另一方面,精度也從0.01%-0.005%。
目前,數字電壓表的內部核心部件是A/D轉換器,轉換的精度很大程度上影響著數字電壓表的準確度,因而,以后數字電壓表的發展就著眼在高精度和低成本這兩個方面。
1.2 本文研究對象本文是以簡易數字直流電壓表的設計為研究內容,本系統主要包括三大模塊:轉換模塊、數據處理模塊及顯示模塊。其中,A/D轉換采用ADC0808對輸入的模擬信號進行轉換,控制核心AT89C51再對轉換的結果進行運算處理,最后驅動輸出裝置LED顯示數字電壓信號。
第2章 方案設計與論證2.1設計方案與論證數字電壓表的設計方案很多,但采用集成電路來設計較流行。其設計主要是由模擬電路和數字電路兩大部分組成,模擬部分包括A/D轉換器,基準電源等;數字部分包括振蕩器,數碼顯示,計數器等。其中,A/D轉換器將輸入的模擬量轉換成數字量,它是數字電壓表的一個核心部件,對它的選擇一般三種選擇方案:
方案一、采用雙積分A/D轉換器MC14433,它有多路調制的BCD碼輸出端和超量程輸出端,采用動態掃描顯示,便于實現自動控制。但芯片只能完成A/D轉換功能,要實現顯示功能還需配合其它驅動芯片等,使得整部分硬件電路板布線復雜,加重了電路設計和實際焊接的工作。
方案二、 A/D轉換器采用ICL7107型三位半顯示的芯片,輸入信號,流經取樣電路取樣后送到ICL7107型三位半A/D轉換器,只需要很少的簡單外圍元件,就可組成數字電流表模塊,直接驅動三位半LED顯示器顯示,最后輸入電流在顯示部分顯示。由于ICL7107做的LED數字表,最大的缺點就是數字亂跳不穩定,特別最后一位。接口模塊:使用數字電路實現,采用譯碼芯片CD4543作為接口芯片,這種方案能實現功能,但穩定性不高,結構復雜。
方案三、逐次逼近式A/D轉換器。它的轉換速度更快,而且精度更高,采用ADC0808轉換芯片,其中A/D轉換器用于實現模擬量向數字量的轉換,單電源供電。它是具有8路模擬量輸入、8位數字量輸出功能的A/D轉換器,轉換時間為100μs,模擬輸入電壓范圍為0V~5V,不需零點和滿刻度校準,功耗低,約15mW。 由于模擬轉換電路的種類很多,通過對轉換速度,精度和價格方面考慮。
綜上所述選擇方案三。采用ADC0808為本次設計的轉換芯片。單片機模塊采用AT89S51單片機作為系統的控制單元,通過A/D轉換將被測值轉換為數字量送入單片機中,再由單片機來送顯。此方案各類功能易于實現,成本低、功耗低,顯示穩定。
顯示部分可以采用各類數碼管或用LED顯示器顯示。在此簡化采用4位八段共陰極數碼管對A/D轉換變換后的結果加以顯示。
2.2 系統設計要求設計一個數字電壓表,基于單片機或數字邏輯電路,設計A/D轉化電路、密碼校驗電路和控制輸出與顯示電路,實現用戶按鍵輸入密碼開鎖功能。
1、以單片機為控制核心設計數字電壓表;
2、可以測量0~5V的8路輸入電壓值;
3、LED數碼管輪流顯示或單路選擇顯示電壓值;
4、最小分辨率為0.01V,測量誤差約為±0.01V。
2.3總體設計框圖本設計采用以AT89C51單片機控制方案。 利用單片機靈活的編程設計和豐富的IO端口,及其控制的準確性。系統結構框圖如圖2.1所示。
1.001.jpg (17.52 KB, 下載次數: 83)
下載附件
2017-7-1 18:00 上傳
圖2.1系統結構框圖
1.006.jpg (30.7 KB, 下載次數: 75)
下載附件
2017-7-1 18:00 上傳
第3章 單元電路設計3.1最小系統設計
1.002.jpg (7.02 KB, 下載次數: 99)
下載附件
2017-7-1 18:00 上傳
晶振模塊設計采用內部時鐘方式,利用單片機內部的高增益反相放大器,外部電路簡,只需要一個晶振和 2個電容即可,如圖3.1所示。
圖3.1 時鐘電路
電路中的器件選擇可以通過計算和實驗確定,也可以參考一些典型電路。參數,電路中,電容器C1和C2對震蕩頻率有微調作用,通常的取值范圍是30±10pF,在這個系統中選擇了30pF;石英晶振選擇范圍最高可選24MHz,它決定了單片機電路產生的時鐘信號震蕩頻率,在本系統中選擇的是12MHz,因而時鐘信號的震蕩頻率為12MHz。
1.003.jpg (9.18 KB, 下載次數: 112)
下載附件
2017-7-1 18:00 上傳
復位模塊設計AT89C51單片機在啟動運行時或者出現死機時需要復位,使CPU以及其他功能部件處于一個確定的初始狀態,并從這個狀態開始工作。復位電路產生的復位信號(高電平有效)由RST引腳送入到內部的復位電路,對AT89C51單片機進行復位,要求至少兩個高電平,以便單片機做好準備工作。當上電時,由于電容的電壓不能突變,會輸出高電平,當電容充電到一定程度,就會輸出低電平,單片機利用輸出高電平的這段時間復位。電阻和電容的值選擇要合適。在這要求R1<圖3.3 最小相位系統電路
AT89C51芯片的各引腳功能為:
P0口:8位,漏極開路的雙向I/O口。這組引腳共有8條,P0.0為最低位。這8個引腳有兩種不同的功能,分別適用于不同的情況。
P1口:8位,準雙向I/O口,具有內部上拉電阻。這8個引腳和P0口的8個引腳
類似,P1.7為最高位,P1.0為最低位,當P1口作為通用I/O口使用時,P1.0-P1.7的功能和P0口的第一功能相同,也用于傳送用戶的輸入和輸出數據。
P2口:這組引腳的第一功能與上述兩組引腳的第一功能相同即它可以作為通用I/O口使用,它的第一功能和P0口引腳的第二功能相配合,用于輸出片外存儲器的高8位地址,共同選中片外存儲器單元,但并不是像P0口那樣傳送存儲器的讀/寫數據。
P3口:這組引腳的第一功能和其余三個端口的第一功能相同,第二功能為控制功能,每個引腳并不完全相同,如下表2所示:
ALE/PROG:地址鎖存允許信號,輸出。配合P0口的第二功能使用,在訪問外部存儲器時,89C51的CPU在P0.0-P0.7引腳線去傳送隨后而來的片外存儲器讀/寫數據。在不訪問片外存儲器時,89C51自動在ALE線上輸出頻率為1/6震蕩器頻率的脈沖序列。該脈沖序列可以作為外部時鐘源或定時脈沖使用。
/EA:片外存儲器訪問允許信號,低電平有效。可以控制89C51使用片內ROM或使用片外ROM,若/EA=1,則允許使用片內ROM,若/EA=0,則只使用片外ROM。
/PSEN:片外ROM的選通信號低電平有效。在訪問片外ROM時,89C51自動在/PSEN線上產生一個負脈沖,作為片外ROM芯片的讀選通信號。
RST:復位線,可以使89C51處于復位(即初始化)工作狀態。通常89C51復位有自動上電復位和人工按鍵復位兩種。
XTAL1和XTAL2:片內震蕩電路輸入線,這兩個端子用來外接石英晶體和微調電容,即用來連接89C51片內OSC(震蕩器)的定時反饋回路。
3.2 A/D轉換設計
1.007.jpg (21.5 KB, 下載次數: 90)
下載附件
2017-7-1 18:00 上傳
A/D轉換器是模擬量輸入通道中的一個環節,單片機通過A/D轉換器把輸入模擬量變成數字量再處理。ADC0808是采樣分辨率為8位的、以逐次逼近原理進行模/數轉換的器件。其內部有一個8通道多路開關,它可以根據地址碼鎖存譯碼后的信號,只選通8路模擬輸入信號中的一個進行A/D轉換。A/D轉換電路如圖3.4所示。
圖3.4 ADC0808 轉換電路
ADC0808芯片有28條引腳,采用雙列直插式封裝,各引腳功能為:
(1) IN0~IN7:8路模擬量輸入端。
(2) D0~D7:8位數字量輸出端口。
(3) START:A/D轉換啟動信號輸入端。
(4) ALE:地址鎖存允許信號,高電平有效。
(5) EOC:輸出允許控制信號,高電平有效。
(6) OE: 輸出允許控制信號,高電平有效。
(7) CLK:時鐘信號輸入端。
(8)ADDA、ADDB、ADDC:轉換通道地址,控制8路模擬通道的切換。ADDA、ADDB、ADDC分別與地址線或數據線相連,三位編碼對應8個通道地址端口,ADDA、ADDB、ADDC=000~111分別對應IN0~IN7通道的地址端口。
使用方法:
ADC0808采用逐次比較的方法完成A/D轉換,由單一的+5V電源供電。片內帶有鎖存功能的8路選1的模擬開關,由ADDA、ADDB、ADDC的編碼來決定所選的通道。ADC0808完成一次轉換需100μs左右,它具有輸出TTL三態鎖存緩沖器,可直接連接到AT89C51的數據總線上。通過適當的外接電路,ADC0808可對0~5V的模擬信號進行轉換。
3.5 顯示電路設計
1.008.jpg (10.27 KB, 下載次數: 92)
下載附件
2017-7-1 18:00 上傳
電壓顯示采用四位共陰極數碼管,這種數碼管可顯示4位值,每位由8個發光二極管(以下簡稱字段)即a、b、c、d、e、f、g、dp字段構成,通過控制不同的LED的亮滅的不同組合可用來顯示數字09及小數點“”。數碼管又分為共陰極和共陽極兩種結構。本次課程設計采用共陰極。
圖3.5 四位數碼管電路
共陰極數碼管0~9的C51編碼為:
- uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x7f,0x6f};
- uchar code table[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
其中1不帶小數點,2帶小數點。
共陽極就是數碼管的每段都接高電平,這樣要是哪段亮就這段就得接地。
通道選擇顯示采用7SEG-BCD,該數碼管內含譯碼器,外部不需要再配,適用于直接加BCD碼,即直接加四位二進制數,顯示0到F。這個數碼管用于顯示ADC0808的選擇輸入通道。
1.009.jpg (4.44 KB, 下載次數: 104)
下載附件
2017-7-1 18:00 上傳
圖3.6 數碼管電路
3.6 模擬輸入設計通過可變電阻一端接電源+5v,一端接地GND,通過改變電阻的阻值,從而改變所測電壓值,實現電壓的模擬信號輸入。分別將八個輸入接入ADC0808中IN0到IN7引腳實現八路的輸入電壓。將通過按鍵選擇某一路輸入,實現單路選擇輸出電壓。
1.010.jpg (15.06 KB, 下載次數: 118)
下載附件
2017-7-1 18:00 上傳
圖3.7 模擬輸入電路
3.7 按鍵設計通過兩個按鍵控制ADC0808的輸入通道同時將通道數傳遞給通道顯示的數碼管。按鍵一的功能為加一,即每按下一次,通道數加一。按鍵二的功能為減一,即每按一下,通道數減一。實現單路選擇顯示電壓。按鍵模型如圖3.8所示。
1.011.jpg (4.9 KB, 下載次數: 100)
下載附件
2017-7-1 18:00 上傳
圖3.8 按鍵電路
要實現按鍵的功能需要知道ADC0808的ADDA、ADDB、ADDC的功能。ADC0808一個8路模擬開關,一個地址鎖存與譯碼器、一個8位A/D轉換器和一個三態輸出鎖存器組成。多路開關可選通8個模擬通道IN0—IN7,允許8路模擬分量輸入,共用A/D轉換器 進行轉換。地址輸入和控制線:4條,ALE為地址鎖存允許輸入線,高電平有效。當ALE線為高電平時,地址鎖存與譯碼器將A,B,C三條地址線的地址信號進行鎖存,經譯碼后被選中的通道的模擬量進轉化器進行轉換。A,B,C為地址輸入線,用于選通IN0—IN7上的一路模擬量輸入。
第4章 系統軟件設計4.1 主程序的設計由于ADC0808在進行A/D轉換時需要有CLK信號,而此時的ADC0808的CLK是連接在AT89C51單片機的30管腳,也就是要求從30管腳輸出CLK信號供ADC0808使用。因此產生CLK信號的方法就等于從軟件產生。電壓表系統有主程序,A/D轉換子程序、按鍵子程序和顯示子程序。主程序框圖如圖4.1所示。
1.012.jpg (14.05 KB, 下載次數: 104)
下載附件
2017-7-1 18:00 上傳
圖4.1 主程序流程圖
4.2 A/D轉換程序設計ADC0808對模擬量輸入信號進行轉換通過判斷EOC(P3.2來確定轉換是否完成若EOC為0則繼續等待若EOC為1則把OE置位,將轉換完成。加入按鍵控制,通過按鍵控制ADC0808對輸入電路的選擇,從而實現單路選擇電路電壓滿足設計要求。程序流程圖如4.2所示。
1.013.jpg (17.3 KB, 下載次數: 83)
下載附件
2017-7-1 18:00 上傳
圖4.2 A/D程序流程圖
其中A/D轉換子程序的C語言代碼如下
sbit START=P3^0;
sbit OE=P3^1;
sbit EOC=P3^2;
uint data tvdata;
void main(void)
{
ET0=1;
EA=1;
TMOD=0x02;
TH0=216;
TL0=216;
TR0=1;
while(1)
{
START=1;
START=0; //啟動轉換
while(EOC==0);
OE=1;
tvdata=P1;
tvdata*=20-0.01;
OE=0;
}
}
4.3 顯示程序設計系統上電后,配置數碼管個引腳,然后對其進行初始化,再調用的讀寫函數,可將采集處理后的電壓數值實時顯示。其程序流程圖如圖4.3所示。
1.014.jpg (18.62 KB, 下載次數: 69)
下載附件
2017-7-1 18:00 上傳
圖4.3 顯示程序流程圖
其中顯示子程序的C語言代碼如下:
uchar code tv[]={0xfe,0xfd,0xfb,0xf7};
uchar code a[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void ledxianshi(void)
{
uchar k,i;
if(tvdata>5000)
tvdata=5000;
led[0]=tvdata%10;
led[1]=tvdata/10%10;
led[2]=tvdata/100%10;
led[3]=tvdata/1000;
for(k=0;k<4;k++)
{
P2=tv[k];
i=led[k];
P0=a[ i];
if(k==3)
{
P07 =1;
}
delay();
}
}
4.4 按鍵程序設計通過按鍵控制ADC0808選擇的輸入通道。開始之后,進行通道選擇,一個按鍵使通道加1,一個減1,從而選擇輸入,影響輸出。按鍵按下之后,重新進行AD轉換,重新顯示電壓值與通道。
1.017.jpg (20.67 KB, 下載次數: 82)
下載附件
2017-7-1 18:00 上傳
圖4.3 按鍵程序流程圖
其中按鍵子程序的C語言代碼如下:
void xuan( uint a)
{
if(a==0)
{
P37=0;P36=0;P35=0;
}
if(a==4)
{
P37=0;P36=0;P35=1;
}
if(a==2)
{
P37=0;P36=1;P35=0;
}
if(a==6)
{
P37=0;P36=1;P35=1;
}
if(a==1)
{
P37=1;P36=0;P35=0;
}
if(a==5)
{
P37=1;P36=0;P35=1;
}
if(a==3)
{
P37=1;P36=1;P35=0;
}
if(a==7)
{
P37=1;P36=1;P35=1;
}
}
if( KEY2==0)
{
b--;
delay();
xuan(b);
delay();
if(b==0)
b=7;
}
if( KEY1==0)
{
b++;delay( );
xuan(b);
if(b==7)
b=0;
}
第5章 系統仿真與調試使用Proteus繪制原理圖,然后將Keil生成的hex程序文件載入到單片機中,點擊運行:
按下按鍵,選擇IN5即通道5時,仿真與如圖5.1所示。
1.018.jpg (52.77 KB, 下載次數: 128)
下載附件
2017-7-1 18:00 上傳
圖5.1 通道5仿真圖
如圖所示,通過按鍵選擇通道五實現顯示單路電壓,數碼管顯示數字5。測量電壓為2.038V,實際電壓為2.03V,誤差小于0.01,滿足設計要求。
為確定結果的準確性,需要多次測量對比。
1.019.jpg (49.28 KB, 下載次數: 120)
下載附件
2017-7-1 18:00 上傳
按下按鍵,選擇IN7即通道7時,仿真與如圖5.2所示。 圖5.2 通道7仿真圖
如圖所示,測量電壓為0.919V,實際電壓為0.92V,誤差小于0.01,滿足設計要求,且可通過按鍵選擇通道七實現顯示單路電壓,數碼管顯示數字7。
仿真結果分析:輸入的電壓從0~5V變化時,數字電壓表能夠測量出并利用數碼管顯示出來。測量的精度與要求的一致,前兩位精確,百分位不作精確。要更精確,只需修改相應的源程序代碼即可。
第6章 總結本系統由單片機系統、A/D轉化電路、LCD顯示和按鍵系統組成。數字電壓表能完成測量0~5V的8路輸入電壓值并且通過按鍵控制可以使LED數碼管單路選擇顯示電壓值的功能。本系統利用單片機控制,LCD顯示,按鍵配合,系統成本低廉,功能強大實用。
本文設計的基于AT89C51的數字電壓表具有簡單的軟硬件設計電路、低廉的開發成本、簡便的操作方法,在實際應用工作應能好,測量電壓準確,精度高。并通過Proteus仿真實現了預期的功能,實現八路輸入電壓單路選擇輸入顯示電路電壓值,且可以滿足現在的誤差要求最小分辨率為0.01V,測量誤差約為±0.01V。。
但是設計數字電壓表需要結合實際綜合考慮很多因素,因此該數字電壓表設計需要在實際中進一步完善和改進。 要想在現實生活中推廣,還必須針對實際應用場合的需要,進一步完善系統功能的程序具有一定的推廣價值。
1.020.jpg (61.87 KB, 下載次數: 107)
下載附件
2017-7-1 18:00 上傳
附錄I:整體電路原理圖 附錄II:元器件清單
以上文檔下載(word格式 可編輯):
數字電壓表的設計.doc
(736.36 KB, 下載次數: 158)
2017-7-1 17:39 上傳
點擊文件名下載附件
下載積分: 黑幣 -5