找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7564|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

基于單片機(jī)的自動換擋電壓表實(shí)驗(yàn)指導(dǎo)及資料下載

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主

自動換擋數(shù)字電壓表

    電壓表是用于測量當(dāng)前電路兩點(diǎn)之間電壓值的儀器,而數(shù)字電壓表是用模/數(shù)轉(zhuǎn)換器將測量電壓值轉(zhuǎn)換成數(shù)字形式并以數(shù)字形式表示的儀器,它是電路設(shè)計中最常用的儀器之一。

  本章應(yīng)用實(shí)例涉及的知識如下:

  >數(shù)字電壓表的實(shí)現(xiàn)原理;

  >運(yùn)算放大器LM324的應(yīng)用原理:

  > A/D芯片ADC0809的應(yīng)用原理;

  > 1602數(shù)字字符液晶模塊的應(yīng)用原理。

1  自動換擋數(shù)字電壓表的背景介紹

數(shù)字電壓表通常都有擋程的概念,所謂擋程是指電壓表當(dāng)前的測量范圍,這個范圍決定了測量的精度。例如,當(dāng)被測量電壓范圍為0~2V時選擇0~5V擋就比選擇0~10V擋測量精度要高。

自動換擋數(shù)字電壓表就是一個能自動切換擋程的數(shù)字電壓表,可以測量0~20V的電壓,并且有0~0.2V、0~2V和0~20V三個擋程可供選擇,當(dāng)待測量電壓值發(fā)生變化之后,電壓表可以根據(jù)輸入電壓的情況自動選擇合適的擋程進(jìn)行測量,并且把測量結(jié)果顯示出來。

2  自動換擋數(shù)字電壓表的設(shè)計思路

2.1  自動換擋數(shù)字電壓表的工作流程

自動換擋數(shù)字電壓表的工作流程如圖所示。

2.2  自動換擋數(shù)字電壓表的需求分析

設(shè)計自動換擋數(shù)字電壓表,需要考慮以下幾方面的內(nèi)容:

(1) 51單片機(jī)使用何種方式將模擬電壓值轉(zhuǎn)換為數(shù)字值;

(2) 51單片機(jī)如何控制進(jìn)行相應(yīng)的擋位切換:比較

(3) 51單片機(jī)如何顯示對應(yīng)的采集值:

(4)需要設(shè)計合適的單片機(jī)軟件。

2.3  自動換擋數(shù)字電壓表的換擋原理

自動換擋數(shù)字電壓表對當(dāng)前的輸入電壓信號進(jìn)行調(diào)理,得到三種不同放大倍率的電壓信號,然后分別對這三組信號進(jìn)行檢測,通過相應(yīng)的算法選擇合適的電壓信號進(jìn)行采集。

3  自動換擋數(shù)字電壓表的硬件設(shè)計

3.1  自動換擋數(shù)字電壓表的硬件模塊

自動換擋數(shù)字電壓表的硬件模塊如圖所示,其各個部分詳細(xì)說明如下。

(1) 51單片機(jī):自動換擋數(shù)字電壓表的核心控制器。

(2)顯示模塊:顯示當(dāng)前的測量電壓。

(3)擋位切換/電壓調(diào)理模塊:對輸入電壓進(jìn)行調(diào)理,并且選擇合適的測量擋位。

(4) A/D采集模塊:將當(dāng)前的模擬電壓信號轉(zhuǎn)換為數(shù)字信號。

3.2  自動換擋數(shù)字電壓表的電路

自動換擋數(shù)字電壓表的電路如圖所示,51單片機(jī)使用P0端口以及P2.0. P2.1驅(qū)動一塊1602液晶模塊用于顯示當(dāng)前的電壓值,使用P1和P3的部分引腳擴(kuò)展一片ADC0808作為模擬擻字信號轉(zhuǎn)換器,輸入的待檢測電壓信號經(jīng)過調(diào)理模塊腳心調(diào)理后變成三路獨(dú)立的信號輸出。

圖中AMP模塊是輸入信號電路調(diào)理模塊,如圖所示。

由上圖可知,輸入信號經(jīng)過三個不同放大倍率的放大電路進(jìn)行放大之后,再通過一個跟隨器處理得到三個不同倍率的電壓信號,以供ADC0808進(jìn)行處理。

自動換擋數(shù)字電壓表中涉及的典型元件說明參考下表。

3.3  硬件模塊基礎(chǔ)-LI\/1324

LM324是四運(yùn)放集成電路,它采用14腳雙列直插塑料封裝,其引腳封裝結(jié)構(gòu)如圖所示。

LM324的內(nèi)部集成了四組形式完全相同的運(yùn)算放大器,它們除公用電源外彼此獨(dú)立,其引腳說明如下。

(1)“+”:同相輸入引腳,表示和運(yùn)放輸出引腳Vo的信號相同。

(2)“-”:反相輸入引腳,表示和運(yùn)放輸出引腳Vo的信號相反。

(3)“V+”:正電源輸入引腳。

(4)“V-”:負(fù)電源輸入引腳。

(5)“Vo":信號輸出端。

運(yùn)算放大器的具體使用方法可以參考如下內(nèi)容。

uA741是最常用的通用高增益運(yùn)算放大器,其基本參數(shù)如下:

(1)雙列直插8引腳或圓筒8引腳封裝。

(2)工作電壓:+、-12V。

(3)差分電壓:+/-30V。

(4)輸入電壓:+/-18V

(5)允許功耗:500mW。

其引腳與OP7運(yùn)算放大器完全一樣,可以互相替代。使用方法如下:

  單片機(jī)應(yīng)用系統(tǒng)通常使用集成運(yùn)算放大器來對信號進(jìn)行放大操作。集成運(yùn)算放大器(運(yùn)放)

是具有很高放大倍數(shù)的電路單元,在實(shí)際應(yīng)用電路中,通常結(jié)合反饋網(wǎng)絡(luò)共同組成某種功能模塊。由于早期應(yīng)用于模擬計算機(jī)中,用于實(shí)現(xiàn)數(shù)學(xué)運(yùn)算,故得名“運(yùn)算放大器”,此名稱一直沿用至今。運(yùn)算放大器是一個從功能的角度命名的電路單元,其功能既可以由分立的元器件實(shí)現(xiàn),也可以在半導(dǎo)體芯片中實(shí)現(xiàn)。隨著半導(dǎo)體技術(shù)的發(fā)展,如今絕大部分的運(yùn)算放大器是以單片的形式存在。運(yùn)算放大器的種類繁多,應(yīng)用廣泛。

  如下圖左所示,運(yùn)算放大器通常包括反相輸入端(-,引腳2)、同相輸入端(+,引腳3)和一個輸出端(引腳1),引腳4和引腳8則分別接供電電源正極和供電電源負(fù)極,最常見的集成運(yùn)算放大器的芯片有uA741等。

  使用運(yùn)算放大器對輸入信號進(jìn)行放大的應(yīng)用電路如上圖右所示,運(yùn)算放大器的輸入和輸出電壓的關(guān)系如下。

從上式可以看到,通過修改R1和R2的電阻值,可以得到不同的放大倍率,下圖是一個正弦波通過同相放大器的輸入、輸出信號波形的對比。

上圖是使用集成放大器實(shí)現(xiàn)同相放大(也就是說輸出電壓和輸出電壓的極性是相同的)的應(yīng)用電路,而在實(shí)際使用中常常使用反相放大電路對電壓進(jìn)行放大,其應(yīng)用電路如下圖所示。

運(yùn)算放大器反相放大電路的輸入、輸出電壓關(guān)系可通過下式獲得,下圖是正弦波通過反相放大器的輸入、輸出信號波形對比。

同理可知,通過修改R1和R3的電阻值,可以獲得不同的放大倍率。

3.4硬件模塊基礎(chǔ)——ADC0809

圖是ADC0809的外部引腳封裝結(jié)構(gòu),其詳細(xì)說明如下。

(1) OUT1~OUT8:8位并行數(shù)字量輸出引腳。

(2) INO~I(xiàn)N7:8位模擬量輸入引腳。

(3) VCC:正電源(圖中無標(biāo)示)。

(4) GND:電源地(圖中無標(biāo)示)。

(5)VREF(+):參考電壓正端引腳。

(6) VREF(-):參考電壓負(fù)端引腳。

(7) START: A/D轉(zhuǎn)換啟動信號輸入端。

(8) ALE:地址鎖存允許信號輸入端。

(9) EOC:轉(zhuǎn)換結(jié)束信號輸出引腳,開始轉(zhuǎn)換時為低電平,當(dāng)轉(zhuǎn)換結(jié)束時為高電平。

(10) OE:輸出允許控制端,用于打開三態(tài)數(shù)據(jù)輸出鎖存器。

(11) CLOCK:時鐘信號輸入引腳。

(12) ADDA、ADDB、ADDC:地址輸入引腳,用于選擇輸入通道。

ADC0808進(jìn)行模擬數(shù)字轉(zhuǎn)換的操作步驟如下。

(1)清除START和OE引腳電平,對ADC0809進(jìn)行初始化。

(2)設(shè)置地址通道ADDA~ADDC,選擇待采集的通道數(shù)。

(3)設(shè)置START引腳,發(fā)送啟動采集信號。

(4)等待轉(zhuǎn)換完成,EOC引腳輸出高電平。

(5)設(shè)置OE引腳為高電平,讀取A/D轉(zhuǎn)換數(shù)據(jù)。

4  自動換擋數(shù)字電壓表的軟件設(shè)計

4.1  自動換擋數(shù)字電壓表的軟件模塊劃分和工作流程

自動換擋數(shù)字電壓表的軟件可以劃分為顯示模塊和A/D采集模塊兩個部分,其工作流程如下圖所示。


,4.2  1602液晶驅(qū)動模塊函數(shù)設(shè)計

1602液晶驅(qū)動模塊函數(shù)主要用于對1602液晶進(jìn)行相應(yīng)的基礎(chǔ)操作,包括以下操作函數(shù),其應(yīng)用代碼如下所示。

(1) void delay(unsignedintz):ms級延時函數(shù)。

(2) voicl write_com(unsigned char c):向1602寫命令子函數(shù)。

(3) void write_data(unsigned char d):向1602寫數(shù)據(jù)子函數(shù)。

(4) voidlnltialize():LCD初始化子函數(shù)。

應(yīng)用代碼使用P0端口作為數(shù)據(jù)通信端口,然后使用P2.0和P2.1作為相應(yīng)的控制引腳對1602進(jìn)行控制。

void delay(unsignedintz)   //延時子函數(shù) z*1ms

{

unsigned int x,y;

for(x=z;x>0x--)

for(y=110;y>0;y--);

}

void write_com(unsigned char c)  //寫命令子函數(shù)

{

lcdrs=0;//低電平選擇為“寫指令”

lcden=0;

LEDDATA=c;//把指令寫入P0口

delay(5);//參考時序圖

lcden=1;    //開使能

delay(5);//讀取指令

lcden=0;//關(guān)閉使能

}

void write_data(unsigned char d)  //寫數(shù)據(jù)子函數(shù)

{

lcdrs=1;    //高電平選擇為“寫數(shù)據(jù)”

LEDDATA=d; //把數(shù)據(jù)寫入P0口

delay(5);    //參考時序圖

lcden=1;    //開使能

delay(5);    //讀取數(shù)據(jù)

lcden=0;    //關(guān)閉使能

}

void initialize()   //LCD初始化函數(shù)

{

unsigned char num;

lcden=0;

write_com(0x38);    //設(shè)辮16x2顯示,5x7點(diǎn)陣顯示.8位數(shù)據(jù)接口

writc_com(0x0c);    //00001DCB,D(開關(guān)顯示).C(是否顯示光標(biāo)),B(光標(biāo)閃爍,

    //光標(biāo)不顯示)

write_com(0x06);    //000001N0,N(地址指針+-1)

write_com(0x01);    //清屏指令  每次顯示下一屏內(nèi)容時,必須清屏

write_com(0x80+0xl0);    //第一行,頂格顯示

tor(num=0;num<17;num++)

write_data(mytable0[num]);

delay(10);

write_com(0x80+0x50);    //第二行,從第一格開始顯示

for(num=0;num<15; num++)

{

   write_data(mytable1[num]);

   delay(10);

}

for(num=0;num<16;num++)

{

write_com(0x1c);    //0001(S/C)(R/L)**;S/C:高電平移動字符,低電平移動光標(biāo);

    //R/L:高電平左移,低電平右移

delay(300);

}

delay(1000);

write_com(0x01);∥清屏指令,每次顯示下一屏內(nèi)容時,必須清屏

write_com(0x80);

for(num=0;num<14;num++)

{

write_data(line0[num]);

delay(10);

}

write_com(0x80+0x40);

for(num=0;num<15;num++)

{

  write_data(line1[num]);

delay(10);

}

}

void value(unsigned char add,unsigned char dat)

{

write_com(0x80+0x47+add);

  if(l= =3&&add==2||l!=3&&add==1)

  {

write_data(0x2e);

  }

else

   {

   write_data(0x30+dat);

}

}

4.3  自動換擋數(shù)字電壓表的軟件綜合

自動換擋數(shù)字電壓表的軟件綜合如下所示,其中涉及的1602液晶的驅(qū)動模塊函數(shù)代碼可以參考前一節(jié)。

應(yīng)用代碼分別定義了v20_on,v2_on和v02_on三個宏定義,用于擋位的切換。


5  自動換擋數(shù)字電壓表應(yīng)用系統(tǒng)仿真與總結(jié)

在Proteus中繪制如圖16.3所示的電路,其中涉及的Proteus電路器件參見表。

單擊運(yùn)行,調(diào)節(jié)RV1的電阻值,可以看到對應(yīng)的測量輸出,如圖所示。

總結(jié):如果設(shè)置更多的放大器放大倍率,則可以增加數(shù)字電壓表的擋位。


單片機(jī)源程序如下:
  1. #include <AT89X52.H>
  2. #define LEDDATA P0
  3. #define v20_on {s3=0;s2=0;s1=1;}  //宏定義不同量程,不同的開關(guān)狀態(tài)
  4. #define v2_on {s3=0;s2=1;s1=0;}
  5. #define v02_on {s3=1;s2=0;s1=0;}
  6. unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4~0x66,0x6d,0x7d,0x07,0x7f,0x6t0x00};
  7. unsigned char dispbuf[8]={0,0,0,0,0,0,0,0};
  8. unsigned char getdata;
  9. unsigned long temp;
  10. unsigned char i,k,l,m;
  11. unsigned char code mytable0[]="Welc0met0use “;
  12. unsigned char code mytable1[]="Auto Voltmeter!";
  13. unsigned char code line0[]=" Voltmeter ";  //初始化顯示
  14. unsigned char code Iine1[]=”Value:         V ";
  15. //引腳定義
  16. sbit lcdrs=P2^0;
  17. sbit lcden=P2^1;
  18. sbit s3=P3^7;
  19. sbit s2=P3^6;
  20. sbit s1=P3^5;
  21. sbit OE=P3^0;
  22. sbit EOC=P3^1;
  23. sbit ST=P3^2;
  24. main()
  25. {
  26. initialize();
  27. while(1)
  28. _20v:
  29. {
  30. v20_on;
  31. ST=0;
  32. ST=1;
  33. ST=0;
  34. while(EOC==0);
  35.   OE=1;
  36. getdata=P1;
  37.   OE=0;
  38.   if(getdata<21)
  39.    {goto _2v; }
  40. l=3;
  41. temp=getdata;
  42.    temp=temp*1000/51)/2;
  43.    goto disp;
  44. _2v:
  45. v2_on;
  46. ST=0;
  47. ST=1;
  48. ST=0;
  49. while(EOC==0);
  50. OE=1;
  51. getdata=P1;
  52. OE=0;
  53. if(getdata<21)
  54. {
  55.   goto _02v;
  56. }
  57. else if(getdata>204)
  58. {
  59.   goto _20v;
  60. }
  61. l=2;
  62. temp=getdata;
  63. tempjtemp*1000/51)/2;
  64. goto disp;
  65. ……………………

  66. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼



proteus仿真+源碼+教程下載:
http://www.torrancerestoration.com/bbs/dpj-100242-1.html



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:307101 發(fā)表于 2018-4-13 09:26 | 只看該作者
厲害,大神,正在學(xué)習(xí)您
回復(fù)

使用道具 舉報

板凳
ID:307101 發(fā)表于 2018-4-13 09:45 | 只看該作者
proteus中的找不到LCD1602模塊怎么辦
回復(fù)

使用道具 舉報

地板
ID:307101 發(fā)表于 2018-4-13 11:08 | 只看該作者
大神,請問一下,你上面的截圖是那一本書上的?
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表