日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ADC0804工作原理及过程

發布時間:2023/12/20 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ADC0804工作原理及过程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ADC0804

前言:本文詳細說明了ADC0804工作原理及過程,還附有一個ADC0804在單片機中的典型應用,包含原理圖,源程序,程序注釋詳細清楚,這有助于更好地理解與應用ADC0804芯片。

本文引用了百度文庫一篇文章,原文鏈接:
https://wenku.baidu.com/view/823c5913964bcf84b9d57b78.html?wkts=1672974785358

文章目錄

  • ADC0804
    • A/D轉換概念
    • 分辨率概念
    • ADC0804引腳功能
    • ADC0804工作過程
    • ADC0804在單片機中的簡單應用舉例
    • 上述Proteus仿真文件下載地址
    • 參考文獻

A/D轉換概念

即模數轉換(Analog to DigitalConversion),輸入模擬量(比如電壓信號),輸出一個與模擬量相對應的數字量(常為二進制形式)。例如參考電壓VREF為5V,采用8位的模數轉換器時,當輸入電壓為0V時,輸出的數字量為0000 0000,當輸入的電壓為5V時,輸出的數字量為1111 1111。當輸入的電壓從從0V到5V變化時,輸出的數字量從0000 0000到1111 1111變化。這樣每個輸入電壓值對應一個輸出數字量,即實現了模數轉換。

分辨率概念

分辨率是指使輸出數字量變化1時的輸入模擬量,也就是使輸出數字量變化一個相鄰數碼所需輸入模擬量的變化值。

分辨率與A/D轉換器的位數有確定的關系,可以表示成FS / 2 n 。FS表示滿量程輸入值,n為A/D轉換器的位數。

例如,對于5V的滿量程,采用4位的ADC時,分辨率為5V/16=0.3125V (也就是說當輸入的電壓值每增0.3125V,輸出的數字量增加1);采用8位的ADC時,分辨率為5V/256=19.5mV(也就是說當輸入的電壓值每增加19.5mV,則輸出的數字量增加1);當采用12位的ADC時,分辨率則為5V/4096=1.22mV(也就是說當輸入的電壓值每增加1.22mV ,則輸出的數字量增加1)。顯然,位數越多,分辨率就越高。

ADC0804引腳功能


CS: 芯片片選信號,低電平有效。即=0時,該芯片才能正常工作,高電平時芯片不工作。在外接多個ADC0804芯片時,該信號可以作為選擇地址使用,通過不同的地址信號使能不同的ADC0804芯片,從而可以實現多個ADC通道的分時復用。
)

WR:啟動ADC0804進行ADC采樣,該信號低電平有效,即信號由低電平變成高電平時,觸發一次ADC轉換。

RD:低電平有效,即=0時,DAC0804把轉換完成的數據加載到DB口,可以通過數據端口DB0~DB7讀出本次的采樣結果。

VIN(+)和VIN(-):模擬電壓輸入端,單邊輸入時模擬電壓輸入接VIN(+)端,VIN(-)端接地。雙邊輸入時VIN(+)、VIN(-)分別接模擬電壓信號的正端和負端。當輸入的模擬電壓信號存在“零點漂移電壓”時,可在VIN(-)接一等值的零點補償電壓,變換時將自動從VIN(+)中減去這一電壓。

VREF/2:參考電壓接入引腳,該引腳可外接電壓也可懸空,若外接電壓,則ADC的參考電壓為該外界電壓的兩倍,如不外接,則VREF與Vcc共用電源電壓,此時ADC的參考電壓即為電源電壓Vcc的值。

CLKIN和CLKR:外接RC振蕩電路產生模數轉換器所需的時鐘信號,時鐘頻率CLK = 1/1.1RC,一般要求頻率范圍100KHz~1460KHz。

AGND和DGND:分別接模擬地和數字地。

INTR:轉換結束輸出信號,低電平有效,當一次A/D轉換完成后,將引起=0,實際應用時,該引腳應與微處理器的外部中斷輸入引腳相連(如51單片機的,中斷腳),當產生信號有效時,還需等待=0才能正確讀出A/D轉換結果,若ADC0804單獨使用,則可以將引腳懸空。

DB0~DB7:輸出A/D轉換后的8位二進制結果。
補充說明:ADC0804片內有時鐘電路,只要在外部“CLKIN(引腳4)”和“CLKR(引腳19)”兩端外接一對電阻電容即可產生A/D轉換所要求的時鐘,其振蕩頻率為fCLK≈1/1.1RC。其典型應用參數為:R=10KΩ,C=150PF,fCLK≈640KHz,轉換速度為100μs。若采用外部時鐘,則外部fCLK可從CLKIN端送入,此時不接R、C。允許的時鐘頻率范圍為100KHz~1460KHz。

ADC0804工作過程

時序:
ADC0804手冊給出的ADC轉換時序圖

ADC0804手冊給出的電器特性表

實現一次ADC轉換主要包含下面三個過程:

1.啟動轉換:由時序圖中的上部“FIGURE 10A”可知,在信號為低電平的情況下,將引腳先由高電平變成低電平,經過至少tW(WR)I 延時后,再將引腳拉成高電平,即啟動了一次AD轉換。

注:ADC0804使用手冊中給出了要正常啟動AD轉換的低電平保持時間tW(WR)I的最小值為100ns,即拉低后延時大于100ns即可以,具體做法可通過插入NOP指令或者調用delay()延時函數實現,不用太精確,只要估計插入的延時大于100ns即可。

2.延時等待轉換結束:依然由時序圖中的上部“FIGURE 10A”可知,由拉低信號啟動AD采樣后,經過1到8個Tclk+INTERNAL Tc延時后,AD轉換結束,因此,啟動轉換后必須加入一個延時以等待AD采樣結束。

注:手冊中給出了內部轉換時間“INTERNAL Tc”的時間范圍為62~73個始終周期,因此延時等待時間應該至少為8+73=81個時鐘周期。比如,若R為150K, C為150pF,則時鐘頻率為Fclk=1/1.1RC=606KHz,因此時鐘周期約為Tclk=1/Fclk=1.65us。所以該步驟至少應延時81*Tclk=133.65us. 具體做法可通過插入NOP指令或者調用delay()延時函數實現,不用太精確,只要估計插入的延時大于133.65us即可。

3.讀取轉換結果:由時序圖的下部“FIGURE 10B”可知,采樣轉換完畢后,在信號為低的前提下,將腳由高電平拉成低電平后,經過tACC的延時即可從DB腳讀出有效的采樣結果。

注:手冊中給出了tACC的典型值和最大值分別為135ns和200ns,因此將引腳拉低后,等待大于200ns后即可從DB讀出有效的轉換結果。具體做法可通過插入NOP指令或者調用delay()延時函數實現,不用太精確,只要估計插入的延時大于200ns即可。

對采樣值進行運算變換,換算出實際的滑動變阻器輸入電壓值。
對于任何一個A/D采樣器而言,其轉換公式如下:

其中:
Vout: 輸入ADC的模擬電壓值。
Dsample:ADC轉換后的二進制值。本試驗的ADC0804為八位。
Dmax:ADC能夠表示的刻度總數。ADC0804為八位ADC,因此Dmax=28=256
Vref:ADC參考電壓值,本試驗ADC0804的Vref被設置為5V
因此,對于本試驗,轉換公式為

ADC0804在單片機中的簡單應用舉例

如下圖所示,本例ADC0804中的VCC=5V, VREF/2引腳懸空(懸空則相當于與VCC共接5V電源),因此ADC轉換的參考電壓為VCC的值,即5V。VIN-接地,而VIN+連接滑動變阻器RV1的輸出,因此VIN+的電壓輸入范圍為0V~5V,正好處于參考電壓范圍內。
引腳接地, 和分別連接單片機的P3^6和P3^7引腳,而DB0~DB7連接單片機的P1口.
P0口接數碼管的段選線,P2口低四位接數碼管的位選線。

程序主要實現以下功能:
(1)控制ADC0804芯片對VIN(+)引腳輸入的電壓值進行正確采樣,讀取采樣結果。
(2)對采樣值進行模數變換,將轉換后數字量后顯示在4段數碼管上。
C程序如下:

#include <reg51.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char sbit wr=P3^6; sbit rd=P3^7; uchar code dis[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共陽顯示代碼 void delay(uint x) //延時函數 delay(1)延時0.992ms,大約為1ms {uchar i;while(x--)for(i=0;i<120;i++); } void display(uchar db) //數碼管顯示函數,用于顯示模數轉換后得到的數字量 {uchar bw,sw,gw; //bw,sw,gw分別等于db百位,十位,個位上的數bw=db/100;sw=db%100/10;gw=db%10; P2=0x01; //點亮第一只數碼管P0=dis[bw]&0x7f; //最高位置0,點亮第一只數碼管的小數點,delay(5);P2=0x02; //點亮第二只數碼管P0=dis[sw];delay(5);P2=0x04; //點亮第三只數碼管P0=dis[gw];delay(5); P2=0x08; //點亮第四只數碼管P0=dis[0]; //第四只數碼管一直顯示0 delay(5); } void main() {uchar i;while(1){wr=0; //在片選信號CS為低電平情況下(由于CS接地,所以始終為低電平),_nop_(); //WR由低電平到高電平時,即上升沿時,AD開始采樣轉換wr=1;delay(1); //延時1ms,等待采樣轉換結束 P1=0xff; //這條語句不能少,我也還不知道為什么rd=0; //將RD腳置低電平后,再延時大于135ns左右(這里延時1us),_nop_(); //即可從DB腳讀出有效的采樣結果,傳送到P1口for(i=0;i<10;i++) //刷新顯示一段時間display(P1); //顯示從DB得到的數字量 } }

Proteus仿真運行結果如下:

上述Proteus仿真文件下載地址

鏈接:https://pan.baidu.com/s/1T8m7dvd1maeFnmOnoHGAKQ
提取碼:o42a
–來自百度網盤超級會員V4的分享

參考文獻

[1]彭偉.單片機C語言程序設計實訓100例.北京:電子工業出版社.2009
[2]賈振國,許琳.智能化儀器儀表原理及應用.北京:中國水利水電出版社.2011

總結

以上是生活随笔為你收集整理的ADC0804工作原理及过程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。