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

下載本文檔

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

文檔簡介

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

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

3、01IN5【 1 1【10IN6IN711數(shù)字量輸出及控制線: 11 條ST 為轉(zhuǎn)換啟動信號。當 ST 上跳沿時,所有內(nèi)部寄存器清零;下跳沿時,開始進行A/D轉(zhuǎn)換;在轉(zhuǎn)換期間, ST 應保持低電平。 EOC 為轉(zhuǎn)換結(jié)束信號。當 EOC 為高電平 時,表明轉(zhuǎn)換結(jié)束;否則,表明正在進行 A/D 轉(zhuǎn)換。 0E 為輸出允許信號,用于控制 三條輸出鎖存器向單片機輸出轉(zhuǎn)換得到的數(shù)據(jù)。0E = 1,輸出轉(zhuǎn)換得到的數(shù)據(jù); 0E=0, 輸出數(shù)據(jù)線呈高阻狀態(tài)。 D7 D0為數(shù)字量輸出線。CLK 為時鐘輸入信號線。因 ADC0809的內(nèi)部沒有時鐘電路,所需時鐘信號必須由外界提供,通常使用頻率為500KHZ ,VRE

4、F ( + ),VREF ( ) 為參考電壓輸入。2. ADC0809 應用說明(1) . ADC0809 內(nèi)部帶有輸出鎖存器,可以與 AT89S51 單片機直接相連。(2) . 初始化時,使 ST 和 OE 信號全為低電平。(3). 送要轉(zhuǎn)換的哪一通道的地址到A,B,C 端口上。(4) . 在 ST 端給出一個至少有 100ns 寬的正脈沖信號。(5) . 是否轉(zhuǎn)換完畢,我們根據(jù) EOC 信號來判斷。(6). 當 EOC 變?yōu)楦唠娖綍r,這時給OE 為高電平,轉(zhuǎn)換的數(shù)據(jù)就輸出給單片機了。3. 實驗任務如下圖所示,從ADC0809 的通道 IN3 輸入 0 5V 之間的模擬量,通過ADC0809

5、 轉(zhuǎn) 換成數(shù)字量在數(shù)碼管上以十進制形成顯示出來。4. 電路原理圖ADC0809 的 VREF 接+ 5V 電壓。2/125.程序設計:(1) . 進行 A/D 轉(zhuǎn)換時,采用查詢 EOC 的標志信號來檢測 A/D 轉(zhuǎn)換是否完畢,若 完畢則把數(shù)據(jù)通過 P0 端口讀入,經(jīng)過數(shù)據(jù)處理之后在數(shù)碼管上顯示。(2) . 進行 A/D 轉(zhuǎn)換之前,要啟動轉(zhuǎn)換的方法:ABC = 110 選擇第三通道ST = 0,ST = 1,ST = 0 產(chǎn)生啟動轉(zhuǎn)換的正脈沖信號.(3) .關(guān)于 0809 的計算:ad0809 是根據(jù)逐位逼近的方法產(chǎn)生數(shù)據(jù)的。參考電壓為 0-5V 的話。以 0809 八位 255 的轉(zhuǎn)換精度每一

6、位的電壓值為( 5-0)/255 ? 0.0196V設輸入電壓為 X 則:X-27*0.0196>=0則 AD7=1否則 AD7=0 。X-26*0.0196>=0則 AD6=1否則 AD6=0 。X-20*0.0196>=0則 AD0=1否則 AD0=0 。( 27 指 2 的 7 次方。 26 - 20 同理 )若參考電壓為 0-1V(1-0)/255 ? 0.0039V 精度自然高了。可測量范圍小了。1) 匯編源程序:CH EQU 30HDPCNT EQU 31HDPBUF EQU33HGDATA EQU32HST BITP3.0OE BIT P3.1EOC BIT P

7、3.2ORG OOHLJMP STARTORG OBHLJMP TOXORG 30HSTART: MOV CH,#0BCHMOV DPCNT,#00HMOV R1,#DPCNTMOV R7,#5MOV A,#10MOV R0,#DPBUFLOP: MOV R0,AINC R03/12DJNZ 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 STSE

8、TB STCLR STWAIT: JNB EOC,WAITSETB OEMOV GDATA,P0CLR OEMOV A,GDATAMOV B,#100DIV ABMOV 33H,AMOV A,BMOV B,#10DIV ABMOV 34H,AMOV 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,A4/12MOV DPTR,#DPBTMOV A,DPC

9、NTMOVC A,A+DPTRMOV P2,AINC DPCNTMOV A,DPCNTCJNE A,#8,NEXTMOV DPCNT,#00HNEXT: RETIDPCD: DB 3FH,06H,5BH,4FH,66HDB 6DH,7DH,07H,7FH,6FH,00HDPBT: DB 0FEH,0FDH,0FBH,0F7HDB 0EFH,0DFH,0BFH,07FHEND2) C 語言源程序#i ncludeunsigned char code dispbitcode=0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f; unsigned char code d

10、ispcode=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;Asbit ST="P3"0;sbit 0E="P3W ;unsigned char channel="0xbc"/IN3 unsigned char getdata; void main (void)TMOD=0x01;TH0=(65536-4000)/256;TL0=(65536-

11、4000)%256;TR0=1;ET0=1;EA=1;P3=cha nn el;while(1)ST=0;ST=1;ST=0;5/12while(EOC=0);OE=1;getdata=P0;OE=0;dispbuf2=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=dispcodedispbufdispco un t;P2=dispbitcod

12、edispco un t;dispco un t+;if(dispco un t=8)dispco un t=0;3)FPGA 實現(xiàn)的程序: ( verilog )module AD0809(clk,/ 脈寬 ( 至少 100 ns )rst_n,EOC, 約 100us 后 EOC 變?yōu)楦唠娖睫D(zhuǎn)換結(jié)束START, 啟動信號,上升沿有效( 至少 100 ns )OE,高電平打開三態(tài)緩沖器輸出轉(zhuǎn)換數(shù)據(jù)ALE, 高電平有效,選擇信道口ADDA,/ 因為 ADDB,ADDC 都接地了,這里只有 ADDA 為變量 DATA,/ 轉(zhuǎn)換數(shù)據(jù)DATA_R);output START,OE,ALE,ADDA;

13、in putEOC,clk,rst_n;in put7:0DATA;output7:0 DATA_R;6/12regSTART,OE,ALE,ADDA;reg7:0 DATA_R;reg4:0 CS,NS;parameter IDLE=5 ” b00001,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_

14、END:if(EOC)NS=GET_DATA; elseNS=CHECK_END; GET_DATA:NS=IDLE;default:NS=IDLE;endcasealways (posedge clk)if(!rst_n)CS<=IDLE; elseCS<=NS;always (posedge clk)case(NS)IDLE:begi n7/12OE<=0;START<=0;ALE<=0;ADDA<=1;endSTART_H:begi nOE<=0;START<=1;產(chǎn)生啟動信號ALEv=1;ADDA<=1; 選擇信道口IN0endST

15、ART_L:begi nOE<=0;START<=0;ALE<=1; 啟動信號脈寬要足夠長 ,在啟動的時候 ALE 要一直有效 endCHECK_END:begi nOE<=0;START<=0;ALE<=0;endGET_DATA:begi nOE<=1;高電平打開三態(tài)緩沖器輸出轉(zhuǎn)換數(shù)據(jù)DATA_Rv=DATA; 提取轉(zhuǎn)換數(shù)據(jù)START<=0;ALE<=0;enddefault:begi nOE<=0;START<=0;ALE<=0;ADDA<=0;endendcaseen dmodule8/124) FPGA 實

16、現(xiàn)的程序: ( VHDL LIBRARY IEEE;PORT( D: IN STD_LOGIC_VECTOR(7 DOWNTO 0); CLK,EOC: IN STD_LO GIC;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 OF AD0809 ISTYPE states IS (st0,st1,st2,st3,st4);SI

17、GNAL 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_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL LOWLED7S:STD_LOGIC_VECTOR

18、(6 DOWNTO 0);SIGNAL HIGHLED7S:STD_LOGIC_VECTOR(6DOWNTO 0);BEGINLOCK0<=LOCK;PROCESS(REGL)BEGINLOWDATA<=REGL(3 DOWNTO 0);HIGHDATA<=REGL(7 DOWNTO 4);CASE LOWDATA ISWHEN"0000" =>LOWLED7S<="0111111"WHEN"0001" =>LOWLED7S<="0000110"WHEN"0010

19、" =>LOWLED7S<="1011011"WHEN"0011" => LOWLED7S<="1001111"WHEN"0100" =>LOWLED7S<="1100110"WHEN"0101" =>LOWLED7S<="1101101"WHEN"0110" => LOWLED7S<="1111101"WHEN"0111" =

20、>LOWLED7S<="0000111"9/12WHEN"1000" =>LOWLED7S<="1111111"WHEN"1001" =>LOWLED7S<="1101111"WHEN"1010" =>LOWLED7S<="1110111"WHEN"1011"=> LOWLED7S<="1111100"WHEN"1100"=> LO

21、WLED7S<="0111001"WHEN"1101"=> LOWLED7S<="1011110"WHEN"1110" =>LOWLED7S<="1111001"WHEN"1111" =>LOWLED7S<="1110001"WHENOTHERS=> Null;END CASE;CASE HIGHDATA ISWHEN"0000" =>HIGHLED7S<="0111

22、111"WHEN"0001" =>HIGHLED7S<="0000110"WHEN"0010" =>HIGHLED7S<="1011011"WHEN"0011"=> HIGHLED7S<="1001111"WHEN"0100" =>HIGHLED7S<="1100110"WHEN"0101" =>HIGHLED7S<="1101101&q

23、uot;WHEN"0110"=> HIGHLED7S<="1111101"WHEN"0111" =>HIGHLED7S<="0000111"WHEN"1000" =>HIGHLED7S<="1111111"WHEN"1001" =>HIGHLED7S<="1101111"WHEN"1010" =>HIGHLED7S<="1110111"W

24、HEN"1011"=> HIGHLED7S<="1111100"WHEN"1100"=> HIGHLED7S<="0111001"WHEN"1101"=> HIGHLED7S<="1011110"WHEN"1110" =>HIGHLED7S<="1111001"WHEN"1111" =>HIGHLED7S<="1110001"WHENOT

25、HERS=> Null;END CASE;END PROCESS;PROCESS(CLOCK)BEGINIF CLOCK'EVENT AND CLOCK='1' THEN CNT1<=CNT1+1;END IF;END PROCESS;PROCESS(CNT1)BEGINCASE CNT1 ISWHEN "0" =>SEL<="111" A<=0;WHEN "1" =>SEL<="110" A<=1;10 /12WHEN OTHERS =>NULL;END CASE;END PROCESS;PROCESS(A)BEGINCASE A ISWHEN 0 =>DOUT< 二 LOWLED7S;WHEN 1 =>DOUT< 二 HIGHLED7S;WHEN OTHERS =>NULL;END CASE;END PROCESS;COM: PROCESS(curre nt_state,EOC)BEGINCASE current_state ISWHEN st0=>ALE<='0 :STARTv=&

溫馨提示

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

評論

0/150

提交評論