模數(shù)轉(zhuǎn)換器ADC應(yīng)用原理_第1頁(yè)
模數(shù)轉(zhuǎn)換器ADC應(yīng)用原理_第2頁(yè)
模數(shù)轉(zhuǎn)換器ADC應(yīng)用原理_第3頁(yè)
模數(shù)轉(zhuǎn)換器ADC應(yīng)用原理_第4頁(yè)
模數(shù)轉(zhuǎn)換器ADC應(yīng)用原理_第5頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、AD0809應(yīng)用原理很全面的資料1. 0809的芯片說明:ADC0809是帶有8位A/D轉(zhuǎn)換器、8路多路開關(guān)以及微處理機(jī)兼容的控制邏輯的CMOS組件。它是逐次逼近式A/D轉(zhuǎn)換器,可以和單片機(jī)直接接口。 (1)ADC0809的內(nèi)部邏輯結(jié)構(gòu) 由上圖可知,ADC0809由一個(gè)8路模擬開關(guān)、一個(gè)地址鎖存與譯碼器、一個(gè)A/D轉(zhuǎn)換器和一個(gè)三態(tài)輸出鎖存器組成。多路開關(guān)可選通8個(gè)模擬通道,允許8路模擬量分時(shí)輸入,共用A/D轉(zhuǎn)換器進(jìn)行轉(zhuǎn)換。三態(tài)輸出鎖器用于鎖存A/D轉(zhuǎn)換完的數(shù)字量,當(dāng)OE端為高電平時(shí),才可以從三態(tài)輸出鎖存器取走轉(zhuǎn)換完的數(shù)據(jù)。 (2) 引腳結(jié)構(gòu) IN0IN7:8條模擬量輸入通道  

2、60;  ADC0809對(duì)輸入模擬量要求:信號(hào)單極性,電壓范圍是05V,若信號(hào)太小,必須進(jìn)行放大;輸入的模擬量在轉(zhuǎn)換過程中應(yīng)該保持不變,如若模擬量變化太快,則需在輸入前增加采樣保持電路。 地址輸入和控制線:4條     ALE為地址鎖存允許輸入線,高電平有效。當(dāng)ALE線為高電平時(shí),地址鎖存與譯碼器將A,B,C三條地址線的地址信號(hào)進(jìn)行鎖存,經(jīng)譯碼后被選中的通道的模擬量進(jìn)轉(zhuǎn)換器進(jìn)行轉(zhuǎn)換。A,B和C為地址輸入線,用于選通IN0IN7上的一路模擬量輸入。通道選擇表如下表所示。CBA選擇的通道000IN0001IN1010IN2011IN310

3、0IN4101IN5110IN6111IN7數(shù)字量輸出及控制線:11條ST為轉(zhuǎn)換啟動(dòng)信號(hào)。當(dāng)ST上跳沿時(shí),所有內(nèi)部寄存器清零;下跳沿時(shí),開始進(jìn)行A/D轉(zhuǎn)換;在轉(zhuǎn)換期間,ST應(yīng)保持低電平。EOC為轉(zhuǎn)換結(jié)束信號(hào)。當(dāng)EOC為高電平時(shí),表明轉(zhuǎn)換結(jié)束;否則,表明正在進(jìn)行A/D轉(zhuǎn)換。OE為輸出允許信號(hào),用于控制三條輸出鎖存器向單片機(jī)輸出轉(zhuǎn)換得到的數(shù)據(jù)。OE1,輸出轉(zhuǎn)換得到的數(shù)據(jù);OE0,輸出數(shù)據(jù)線呈高阻狀態(tài)。D7D0為數(shù)字量輸出線。 CLK為時(shí)鐘輸入信號(hào)線。因ADC0809的內(nèi)部沒有時(shí)鐘電路,所需時(shí)鐘信號(hào)必須由外界提供,通常使用頻率為500KHZ, VREF(),VREF()為參考電壓輸入。 2 ADC0

4、809應(yīng)用說明 (1) ADC0809內(nèi)部帶有輸出鎖存器,可以與AT89S51單片機(jī)直接相連。 (2) 初始化時(shí),使ST和OE信號(hào)全為低電平。 (3) 送要轉(zhuǎn)換的哪一通道的地址到A,B,C端口上。 (4) 在ST端給出一個(gè)至少有100ns寬的正脈沖信號(hào)。 (5) 是否轉(zhuǎn)換完畢,我們根據(jù)EOC信號(hào)來判斷。 (6) 當(dāng)EOC變?yōu)楦唠娖綍r(shí),這時(shí)給OE為高電平,轉(zhuǎn)換的數(shù)據(jù)就輸出給單片機(jī)了。 3 實(shí)驗(yàn)任務(wù) 如下圖所示,從ADC0809的通道IN3輸入05V之間的模擬量,通過ADC0809轉(zhuǎn)換成數(shù)字量在數(shù)碼管上以十進(jìn)制形成顯示出來。ADC0809的VREF接5V電壓。 4 電路原理圖 5.程序設(shè)計(jì):(1)

5、 進(jìn)行A/D轉(zhuǎn)換時(shí),采用查詢EOC的標(biāo)志信號(hào)來檢測(cè)A/D轉(zhuǎn)換是否完畢,若完畢則把數(shù)據(jù)通過P0端口讀入,經(jīng)過數(shù)據(jù)處理之后在數(shù)碼管上顯示。 (2) 進(jìn)行A/D轉(zhuǎn)換之前,要啟動(dòng)轉(zhuǎn)換的方法: ABC110選擇第三通道 ST0,ST1,ST0產(chǎn)生啟動(dòng)轉(zhuǎn)換的正脈沖信號(hào) .(3). 關(guān)于0809的計(jì)算:ad0809是根據(jù)逐位逼近的方法產(chǎn)生數(shù)據(jù)的。 參考電壓為0-5V的話。以0809八位255的轉(zhuǎn)換精度每一位的電壓值為(5-0)/2550.0196V 設(shè)輸入電壓為X則: X-27*0.0196>=0則AD7=1否則AD7=0。 X-26*0.0196>=0則AD6=1否則AD6=0。 X-20*0

6、.0196>=0則AD0=1否則AD0=0。 (27指2的7次方。26-20同理) 若參考電壓為0-1V (1-0)/2550.0039V精度自然高了。可測(cè)量范圍小了。  1)匯編源程序:CH EQU 30HDPCNT EQU 31HDPBUF EQU 33HGDATA EQU 32HST BIT P3.0OE BIT P3.1EOC BIT P3.2ORG 00HLJMP STARTORG 0BHLJMP T0XORG 30HSTART: MOV CH,#0BCHMOV DPCNT,#00HMOV R1,#DPCNTMOV R7,#5MOV A,#10MOV R0,#DPBU

7、FLOP: MOV R0,AINC R0DJNZ R7,LOPMOV R0,#00HINC R0MOV R0,#00HINC R0MOV R0,#00HMOV TMOD,#01HMOV TH0,#(65536-4000)/256MOV TL0,#(65536-4000) MOD 256SETB TR0SETB ET0SETB EAWT: CLR STSETB STCLR STWAIT: JNB EOC,WAITSETB OEMOV GDATA,P0CLR OEMOV A,GDATAMOV B,#100DIV ABMOV 33H,AMOV A,BMOV B,#10DIV ABMOV 34H,AM

8、OV 35H,BSJMP WTT0X: NOPMOV TH0,#(65536-4000)/256MOV TL0,#(65536-4000) MOD 256MOV DPTR,#DPCDMOV A,DPCNTADD A,#DPBUFMOV R0,AMOV A,R0MOVC A,A+DPTRMOV P1,AMOV DPTR,#DPBTMOV A,DPCNTMOVC A,A+DPTRMOV P2,AINC DPCNTMOV A,DPCNTCJNE A,#8,NEXTMOV DPCNT,#00HNEXT: RETIDPCD: DB 3FH,06H,5BH,4FH,66HDB 6DH,7DH,07H,7F

9、H,6FH,00HDPBT: DB 0FEH,0FDH,0FBH,0F7HDB 0EFH,0DFH,0BFH,07FHEND2)C語言源程序#include unsigned char code dispbitcode=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;unsigned char code dispcode=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00;unsigned char dispbuf8=10,10,10,10,10,0,0,0;unsigned char dispcount

10、; sbit ST="P3"0;sbit OE="P3"1;sbit EOC="P3"2;unsigned char channel="0xbc"/IN3unsigned char getdata;void main(void)TMOD=0x01;TH0=(65536-4000)/256;TL0=(65536-4000)%256;TR0=1;ET0=1;EA=1;P3=channel;while(1)ST=0;ST=1;ST=0;while(EOC=0);OE=1;getdata=P0;OE=0;dispbuf2=

11、getdata/100;getdata=getdata%10;dispbuf1=getdata/10;dispbuf0=getdata%10;void t0(void) interrupt 1 using 0TH0=(65536-4000)/256;TL0=(65536-4000)%256;P1=dispcodedispbufdispcount;P2=dispbitcodedispcount;dispcount+;if(dispcount=8)dispcount=0; 3)FPGA實(shí)現(xiàn)的程序:(verilog)moduleAD0809(clk, /脈寬(至少100ns) rst_n,

12、 EOC, /約100us后EOC變?yōu)楦唠娖睫D(zhuǎn)換結(jié)束 START, /啟動(dòng)信號(hào),上升沿有效(至少100ns) OE, /高電平打開三態(tài)緩沖器輸出轉(zhuǎn)換數(shù)據(jù) ALE, /高電平有效,選擇信道口 ADDA,/因?yàn)锳DDB,ADDC都接地了,這里只有ADDA為變量 DATA,/ /轉(zhuǎn)換數(shù)據(jù) DATA_R);outputSTART,OE,ALE,ADDA;inputEOC,clk,rst_n;input7:0DATA;output7:0 DATA_R;regSTART,OE,ALE,ADDA;reg7:0DATA_R;reg4:0 CS,NS;parameter IDLE=5''b000

13、01,START_H=5''b00010,START_L=5''b00100,CHECK_END=5''b01000,GET_DATA=5''b10000;always(*)case(CS)IDLE:NS=START_H;START_H:NS=START_L;START_L:NS=CHECK_END;CHECK_END:if(EOC)NS=GET_DATA;elseNS=CHECK_END;GET_DATA:NS=IDLE;default:NS=IDLE;endcasealways(posedge clk)if(!rst_n)CS

14、<=IDLE;elseCS<=NS;always(posedge clk)case(NS)IDLE:beginOE<=0;START<=0;ALE<=0;ADDA<=1;endSTART_H:beginOE<=0;START<=1; /產(chǎn)生啟動(dòng)信號(hào)ALE<=1;ADDA<=1;/選擇信道口IN0endSTART_L:beginOE<=0;START<=0;ALE<=1;/啟動(dòng)信號(hào)脈寬要足夠長(zhǎng),在啟動(dòng)的時(shí)候ALE要一直有效endCHECK_END:beginOE<=0;START<=0;ALE<=0;

15、endGET_DATA:beginOE<=1;/高電平打開三態(tài)緩沖器輸出轉(zhuǎn)換數(shù)據(jù)DATA_R<=DATA;/提取轉(zhuǎn)換數(shù)據(jù)START<=0;ALE<=0;enddefault:beginOE<=0;START<=0;ALE<=0;ADDA<=0;endendcaseendmodule  4)FPGA實(shí)現(xiàn)的程序:(VHDL)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY AD0809 IS  PORT

16、( D: IN STD_LOGIC_VECTOR(7 DOWNTO 0);   CLK,EOC: IN STD_LOGIC;   CLOCK:IN STD_LOGIC;   ALE,START,OE,LOCK0: OUT STD_LOGIC;  DOUT:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);   SEL:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);END AD0809;ARCHITECTURE behav

17、 OF AD0809 ISTYPE states IS (st0,st1,st2,st3,st4); SIGNAL current_state,next_state:states:=st0; SIGNAL REGL :STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL LOCK :STD_LOGIC; SIGNAL CNT1:STD_LOGIC_VECTOR(0 DOWNTO 0);SIGNAL A :INTEGER RANGE 0 TO 1;SIGNAL LOWDATA:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL HIGHDATA:STD_LO

18、GIC_VECTOR(3 DOWNTO 0);SIGNAL LOWLED7S:STD_LOGIC_VECTOR(6 DOWNTO 0);SIGNAL HIGHLED7S:STD_LOGIC_VECTOR(6 DOWNTO 0);BEGINLOCK0<=LOCK;  PROCESS(REGL)  BEGIN    LOWDATA<=REGL(3 DOWNTO 0);  HIGHDATA<=REGL(7 DOWNTO 4);  CASE LOWDATA IS&#

19、160; WHEN "0000" => LOWLED7S<="0111111"  WHEN "0001" => LOWLED7S<="0000110"  WHEN "0010" => LOWLED7S<="1011011"  WHEN "0011" => LOWLED7S<="1001111"  WH

20、EN "0100" => LOWLED7S<="1100110"  WHEN "0101" => LOWLED7S<="1101101"  WHEN "0110" => LOWLED7S<="1111101"  WHEN "0111" => LOWLED7S<="0000111"  WHEN "100

21、0" => LOWLED7S<="1111111"  WHEN "1001" => LOWLED7S<="1101111"  WHEN "1010" => LOWLED7S<="1110111"  WHEN "1011" => LOWLED7S<="1111100"  WHEN "1100" =>

22、; LOWLED7S<="0111001"  WHEN "1101" => LOWLED7S<="1011110"  WHEN "1110" => LOWLED7S<="1111001"  WHEN "1111" => LOWLED7S<="1110001"  WHEN OTHERS => Null;  END

23、 CASE;   CASE HIGHDATA IS  WHEN "0000" => HIGHLED7S<="0111111"  WHEN "0001" => HIGHLED7S<="0000110"  WHEN "0010" => HIGHLED7S<="1011011"  WHEN "0011" => HIGHLE

24、D7S<="1001111"  WHEN "0100" => HIGHLED7S<="1100110"  WHEN "0101" => HIGHLED7S<="1101101"  WHEN "0110" => HIGHLED7S<="1111101"  WHEN "0111" => HIGHLED7S<=

25、"0000111"  WHEN "1000" => HIGHLED7S<="1111111"  WHEN "1001" => HIGHLED7S<="1101111"  WHEN "1010" => HIGHLED7S<="1110111"  WHEN "1011" => HIGHLED7S<="11

26、11100"  WHEN "1100" => HIGHLED7S<="0111001"  WHEN "1101" => HIGHLED7S<="1011110"  WHEN "1110" => HIGHLED7S<="1111001"  WHEN "1111" => HIGHLED7S<="1110001&qu

27、ot;  WHEN OTHERS => Null;    END CASE; END PROCESS;PROCESS(CLOCK)  BEGIN  IF CLOCK'EVENT AND CLOCK='1' THEN CNT1<=CNT1+1;  END IF;END PROCESS;PROCESS(CNT1)  BEGIN  CASE CNT1 IS  WHEN "0&q

28、uot; =>SEL<="111" A<=0;   WHEN "1" =>SEL<="110"  A<=1;   WHEN OTHERS =>NULL;  END CASE;END PROCESS; PROCESS(A)  BEGIN  CASE A IS  WHEN 0 =>DOUT<=LOWLED7S;  WH

29、EN 1 =>DOUT<=HIGHLED7S;  WHEN OTHERS =>NULL;  END CASE;END PROCESS;COM:  PROCESS(current_state,EOC)       BEGIN  CASE current_state IS  WHEN st0=>ALE<='0'START<='0'LOCK<='1'OE<='0'next_state<=st1;   WHEN st1=>ALE<='1'START<='0'LOCK<=

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論