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

ADC0804測直流電壓

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

/*

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

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

 

它的管腳有20個:

 

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

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

 

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

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

 

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

由低變?yōu)楦撸D(zhuǎn)換正式開始。

 

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

率為1/(1.1RC).

 

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

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

 

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

VIN(-).

 

AGND:模擬信號接地端。

 

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

 

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();

       }

}

/*

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

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

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

 

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

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

 

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

 

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

 

如果要求一系統(tǒng)的(DAC)轉(zhuǎn)換誤差(相對誤差)小于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來說,它的最小分辨電壓(Uref=5V)為0.019,采用四位數(shù)碼管比較合適。

*/

關(guān)閉窗口

相關(guān)文章