專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

ADC0804測(cè)直流電壓

作者:佚名   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2011年01月18日   【字體:

/*

    ADC0804屬于8位CMOS三態(tài)鎖定輸出逐次逼近型A/D轉(zhuǎn)換器,存取時(shí)間135us,轉(zhuǎn)換時(shí)間100us,總誤差

1LSB。現(xiàn)在講一下它的轉(zhuǎn)換原理和硬件連接:

 

它的管腳有20個(gè):

 

/CS:芯片選通信號(hào),低電平選通,只有CS為低電平的時(shí)候,芯片才被選通工作(但不一定開(kāi)始數(shù)據(jù)轉(zhuǎn)換,由/WR

控制起停轉(zhuǎn)換)。

 

/RD:讀宣統(tǒng)信號(hào),也就是外部單片機(jī)讀取轉(zhuǎn)換結(jié)果的控制信號(hào),/RD為高電平,DB0~DB7處于高阻態(tài),處于低電

平數(shù)字?jǐn)?shù)據(jù)才會(huì)輸出。

 

/WR:啟動(dòng)轉(zhuǎn)換的控制輸入,轉(zhuǎn)換的開(kāi)始與停止由它控制,/CS=0的前提下,/WR由高變?yōu)榈停D(zhuǎn)換器被清除,/WR

由低變?yōu)楦,轉(zhuǎn)換正式開(kāi)始。

 

CLK IN、CLK R:時(shí)鐘輸入或接震蕩元件(R、C),頻率約限制在100KHZ~1460KHZ,如果使用RC電路則其振蕩頻

率為1/(1.1RC).

 

/INTR:中斷請(qǐng)求信號(hào)輸出,低電平動(dòng)作,準(zhǔn)備轉(zhuǎn)換前置1,轉(zhuǎn)換結(jié)束后,自動(dòng)產(chǎn)生一個(gè)低電平信號(hào),通過(guò)查詢可

控制讀取數(shù)據(jù)的時(shí)間。

 

VIN(+)、VIN(-):差動(dòng)模擬電壓輸入端,輸入單端正電壓時(shí),VIN(-)接地,而差動(dòng)輸入時(shí),直接加入VIN(+)、

VIN(-).

 

AGND:模擬信號(hào)接地端。

 

DGND:數(shù)字信號(hào)接地段。

 

VREF:輔助參考電壓。

 

DB0~DB7:8位數(shù)字輸出。

 

VCC:電源供應(yīng)以及作為電路的參考電壓。

*/
 

#include<reg52.h>

 

code unsigned char seg7code[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

 

sbit int1=P3^3;

sbit cs=P3^2;

sbit wr=P3^6;

sbit rd=P3^7;

 

void Delay(unsigned int tc)

{

       while(tc!=0)

       {

              unsigned int i;

              for(i=0;i<100;i++);

              tc--;

       }

}

 

unsigned char adc0804(void)

{

       unsigned char addata,i;

       rd=1;wr=1;int1=1;

       P1=0xff;

       cs=0;wr=0;wr=1;

       while(int1==1);

       rd=0;

       i=i;i=i;

       addata=P1;

       rd=1;cs=1;

       return(addata);

}

 

unsigned int datpro(void)

{

       unsigned char x;

       unsigned int dianyah,dianyal;

       unsigned int dianya=0;

       for(x=0;x<10;x++)

       {     

              dianya=adc0804()+dianya;

       }

       dianya=dianya/10;

       dianyah=dianya&0xf0;

       dianyah=dianyah>>4;

       dianyal=dianya&0x0f;

       dianya=dianyal*20+dianyah*320;

       return(dianya);

}

 

void Led()

{

       unsigned int date;

       date=datpro();

       P2=P2&0x7f;

       P0=seg7code[date/1000]|0x80;

       Delay(8);P2=P2|0xf0;P2=P2&0xbf;

       P0=seg7code[date%1000/100];

       Delay(8);P2=P2|0xf0;P2=P2&0xdf;

       P0=seg7code[date%100/10];

       Delay(8);P2=P2|0xf0;P2=P2&0xef;

       P0=seg7code[date%10];

       Delay(8);P2=P2|0xf0;

}

 

main()

{

       while(1)

       {

              Led();

       }

}

/*

    這個(gè)程序?qū)懙倪是很不錯(cuò)的,用到了多次采樣求平均值以減少誤差,由于參考電壓選取的是+5V,所以

測(cè)量的模擬量不能超過(guò)5V,也就是說(shuō)測(cè)量結(jié)果的整數(shù)位只有一位,其他三位為小數(shù)部分。關(guān)于轉(zhuǎn)換器的轉(zhuǎn)換精

度問(wèn)題,用分辨率(DAC)和轉(zhuǎn)換誤差(DAC)來(lái)描述其轉(zhuǎn)換精度。
完整程序下載:http://www.torrancerestoration.com/f/0804dd.rar

 

分辨率:電路所能分辨的最小輸出電壓U(LSB)與滿刻度輸出電壓U(omax)之比。

 
分辨率=U(LSB)/U(omax)=1/(2^n-1)

 

轉(zhuǎn)換誤差:指輸入端加滿刻度的數(shù)字量時(shí),DAC輸出電壓的理論值與實(shí)際值只差。轉(zhuǎn)換誤差一般<0.5U(LSB)

 

最小分辨電壓:U(LSB)=分辨率*U(omax)=U(omax)/(2^n-1)

 

如果要求一系統(tǒng)的(DAC)轉(zhuǎn)換誤差(相對(duì)誤差)小于0.25%,那么應(yīng)該選擇多少位的DAC轉(zhuǎn)換器呢?

 

轉(zhuǎn)換誤差/U(omax)<0.25%

 

轉(zhuǎn)換誤差/U(omax)<0.5U(LSB)/U(omax)

 

0.5U(LSB)/U(omax)<0.25%

 

U(LSB)/U(omax)<0.5%

 

1/(2^n-1)100%<0.5%

 

n≈7.64

 

n=8

 
就adc0804來(lái)說(shuō),它的最小分辨電壓(Uref=5V)為0.019,采用四位數(shù)碼管比較合適。

*/

關(guān)閉窗口

相關(guān)文章