FPGA与ADC0809接口电路详解
ADC0809应用电路资料

adc0809应用电路资料1、模拟信号输入IN0~IN7:IN0-IN7 为八路模拟电压输入线,加在模拟开关上,工作时采用时分割的方式,轮流进行A/D 转换。
2、地址输入和控制线:地址输入和控制线共 4 条,其中ADDA、ADDB 和ADDC 为地址输入线,用于选择IN0-IN7 上哪一路模拟电压送给比较器进行A/D 转换。
ALE 为地址锁存允许输入线,高电平有效。
当ALE 线为高电平时,ADDA、ADDB和ADDC 三条地址线上地址信号得以锁存,经译码器控制八路模拟开关通路工作。
3、数字量输出及控制线(11 条):START 为“启动脉冲”输入线,上升沿清零,下降沿启动ADC0809 工作。
EOC 为转换结束输出线,该线高电平表示AD 转换已结束,数字量已锁入“三态输出锁存器”。
D0-D7 为数字量输出线,D7 为最高位。
ENABLE 为“输出允许”线,高电平时能使D0-D7 引脚上输出转换后的数字量。
4、电源线及其他(5 条):CLOCK 为时钟输入线,用于为ADC0809 提供逐次比较所需,一般为640kHz 时钟脉冲。
Vcc 为+5V 电源输入线,GND 为地线。
+VREF 和-VREF 为参考电压输入线,用于给电阻网络供给标准电压。
+VREF 常和VDD 相连,-VREF 常接地。
ADC0809 芯片性能特点: 是一个逐次逼近型的A/D 转换器,外部供给基准电压;单通道转换时间116us;分辨率为8 位,带有三态输出锁存器,转换结束时,可由CPU 打开三态门, 读出8 位的转换结果;有8 个模拟量的输入端,可引入8 路待转换的模拟量。
ADC0809 的数据输出结构是内部有可控的三态缓冲器,所以它的数字量输出信号线可以与系统的数据总线直接相连。
内部的三态缓冲器由OE 控制,当OE 为高电平时,三态缓冲器打开,将转换结果送出;当OE 为低电平时,三态缓冲器处于阻断状态,内部数据对外部的数据总线没有影响。
第五章 5.7节 模拟电路接口技术ADC0809

2、主要性能指标 (1)、分辨率
分辨率反映A/D 转换器对输入微小变化响应的能力,通常用数字输
出最低位(LSB)所对应的模拟输入的电平值表示。n 位A/D 能反应 1/2^n 满量程的模拟输入电平。
由于分辨率直接与转换器的位数有关,所以一般也可简单地用数字
量的位数来表示分辨率,即n 位二进制数,最低位所具有的权值,就 是它的分辨率。
值得注意的是,分辨率与精度是两个不同的概念,不要把两者相混
淆。即使分辨率很高,也可能由于温度漂移、线性度等原因,而使其 精度不够高。
例如,ADC输出为八位二进制数, 输入信号最大值为 5V,其分辨率为: U m 19 .61mV 8
2 1
(2)、转换时间
转换时间是指完成一次A/D 转换所需的时间,即由发出启动转换
/**********(C) ADC0809.C**************/ #include <reg51.h> #include "1602.h" #define uchar unsigned char #define uint unsigned int sbit ADC_START=P2^0; //四个控制引脚的定义 sbit ADC_ALE =P2^1; sbit ADC_EOC =P2^2; sbit ADC_OE =P2^3; sbit D0=P0^0; //八盏灯的定义 sbit D1=P0^1; sbit D2=P0^2; sbit D3=P0^3; sbit D4=P0^4; sbit D5=P0^5; sbit D6=P0^6; sbit D7=P0^7;
AD转换速度: 500K频率:130us 640K频率:100us 分辨率:8位
4、ADC0809接口电路
ADC0809与单片机的接口电路

ADC0809是一种CMOS单片型逐次比较式8路模拟输入、8位数字量输出的A/D转换器。
在多点巡回检测和过程控制、运动控制中应用十分广泛。
1.主要特性如下:1)8路8位A/D转换器,即分辨率8位。
2)具有转换起停控制端。
3)转换时间为100μs4)单个+5V电源供电5)模拟输入电压范围0~+5V,不需零点和满刻度校准。
6)工作温度范围为-40~+85摄氏度7)低功耗,约15mW。
2.外部特性(引脚功能)ADC0809芯片有28条引脚,采用双列直插式封装。
下面说明各引脚功能IN0~IN7:8路模拟量输入端。
2-1~2-8:8位数字量输出端。
ADDA、ADDB、ADDC:3位地址输入线,用于选通8路模拟输入中的一路。
ALE:地址锁存允许信号,输入,高电平有效。
START:A/D转换启动信号,输入,高电平有效。
EOC:A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。
OE:数据输出允许信号,输入,高电平有效。
当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。
CLK:时钟脉冲输入端。
要求时钟频率不高于640KHZ。
REF(+)、REF(-):基准电压。
VCC:电源,单一+5V。
GND:地。
ADC0809的工作过程是:首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。
此地址经译码选通8路模拟输入之一到比较器。
START上升沿将逐次逼近寄存器复位。
下降沿启动A/D转换,之后EOC输出信号变低,指示转换正在进行。
直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。
当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。
单片机与ADC0809的接口电路图。
FPGA与ADC0809接口电路详解

FPGA与ADC0809接口电路详解注:(1)本程序基于FPGA和vhdl编写有详尽的程序解释和原理分析以及原理图,状态图(2)对于adc0809具体资料可上网查在此不累述一.FPGA与ADC0809的接口电路图原理二.关于ADC0809的说明(重点)(1)ale信号(引脚):高电平时把三个地址信号送入地址锁存器,并经译码器得到地址数据,以选择相应的模拟输入通道。
(2)oe信号(引脚)en使能信号:电平由低变高时,打开数据输出锁存器,将转换数据送到数据总线上(3)eoc信号(引脚):eoc为高电平时完成转换,为低电平时正在转换。
(4)start信号(引脚):要给start线送一个100ns宽的启动正脉冲,start下跳沿时,开始进行A/D转换,在转换期间start以保持低电平。
三.转换状态图对于状态图的真值表未列出 注意对应的注释为vhdl 语句ale<='1';start<='0';en<='0';----eoc='1' ale<='0';start<='0';en<='0';--再次检测数据是否转换完 if eoc='0' then next_state<=st4;else next_state<=st5;器,将数据送入数据总线存器四.ADC0809采样接口电路程序--*********ADC0809采样控制*************--******因为FPGA 的时钟频率为50MHz ,则256分频后,即ADC0809输入时钟为195KHz****** --******对ADC0809进行简单的采样控制,得到的数据进FPGA 送到8个并排的数码管显示***** library ieee;use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity PL_AD isport ( d : in std_logic_vector(7 downto 0); --ADC0809输出的采样数据输入FPGA clk,eoc: in std_logic; --clk 为系统时钟,eoc 为ADC0809转换结束信号输入FPGA lock1,start, ale,en: out std_logic; --ADC0809控制信号FPGA 输出信号 abc_in :in std_logic_vector(2 downto 0); --模拟选通信号abc_out :std_logic_vector(2 downto 0);--ADC0809模拟信号选通信号q : out std_logic_vector(7 downto 0));送至8个并排数码管信号FPGA 输出数字信号 end pl_AD;architecture behav of PL_AD istype states is ( st0,st1, st2, st3, st4,st5,st6);--定义状态类型枚举类型signal current_state, next_state:states:=st0;--定义总体两个状态现态和次态并且初值为st0态signal regl :std_logic_vector(7 downto 0);--定义中间寄存器signal lock : std_logic;signal qq:std_logic_vector(7 downto 0);--定义计数器用于分频begincom:process(current_state,eoc) –此进程主要是驱动ADC0809工作即数据转换过程begincase current_state iswhen st0=>next_state<=st1;ale<='0';start<='0';en<='0';--准备when st1=>next_state<=st2;ale<='1';start<='0';en<='0';--三个地址信号送入地址锁存器when st2=>next_state<=st3;ale<='0';start<='1';en<='0';--开始数据转换when st3=> ale<='0';start<='0';en<='0';--检测数据是否转换完if eoc='1' then next_state<=st3;else next_state<=st4;end if;when st4=> ale<='0';start<='0';en<='0';--再次检测数据是否转换完if eoc='0' then next_state<=st4;else next_state<=st5;end if;when st5=>next_state<=st6;ale<='0';start<='0';en<='1'; --打开输出数据锁存器,将数据送入数据总线when st6=>next_state<=st0;ale<='0';start<='0';en<='1';regl<=d;--打开输出数据锁存器,将数据送入寄存器regl when others=> next_state<=st0;ale<='0';start<='0';en<='0';end case;end process;clock:process(clk) --对系统时钟进行分频,得到驱动ADC0809的时钟信号beginif clk'event and clk='1' then qq<=qq+1;if QQ="01111111" THEN lock<='1';--实现分频current_state <=next_state;--在lock上升沿,转换至下一状态elsif qq<="01111111" then lock<='0';end if;end if;end process;q<=regl;--寄存器数据输出即FPGA输出lock1<=lock;abc_out<=abc_in;--模拟选通信号送往ADC0809end behav;注:有错when st3=> ale<='0';start<='0';en<='0';--检测数据是否转换完if eoc='1' then next_state<=st3;else next_state<=st4;end if;when st4=> ale<='0';start<='0';en<='0';--再次检测数据是否转换完if eoc='0' then next_state<=st4;else next_state<=st5;end if;不过我这里的注释好像错了,这两个when合起来才是检测数据是否转换完的。
FPGA设计-ADC0809

目录摘要 (2)1设计任务 (4)2系统设计原理 (4)2.1 硬件设计原理 (4)2.1.1 ADC0809的主要特性 (4)2.1.2 ADC0809的外部特性 (4)2.1.3工作过程 (5)2.2 软件设计思路 (6)2.3 程序流程图 (7)3功能与时序仿真 (8)3.1 功能仿真得出的RTL图 (8)3.2 功能仿真得出的状态图 (8)3.3 时序仿真 (9)4总结 (9)5参考文献 (10)附录一程序 (11)摘要实现时必须严格遵守ADC0809的工作时序,对选定的通道输入一个模拟量,调节电位器改变输入的模拟量。
利用quartus2进行文本编辑输入和试仿;给出仿真波形。
最后进行引脚锁定并进行测试,硬件验证ADC0809 的控制功能。
具体过程为:编写ADC0809时序的VHDL代码。
对其进行编译仿真主要控制信号为:Start为转换启动信号,高电平有效;ale为通道选择地址信号的锁存信号。
当启动转换后,程序开始执行,查询状态,状态为0.1.时等待,状态2时,查询EOC信号的状态,判断是否转换结束,当EOC=1时表示转换结束,否则继续等待;转换结束后继续查询状态,若OE信号为高电平则控制打开三态缓冲器,当LOCK信号为高电平时,将转换后的数据进行锁存,至此一次转换结束。
关键词:工作时序、AD0809 、VHDL、quartus2、编译仿真、Start 、EOC、OE、三态缓冲器AbstractImplementation must strictly abide by the work timing of ADC0809, an analogue for the selected channel input, adjust the potentiometer change the analog input. Using quartus2 to input text editing and try copy; The simulation waveform is given. Finally pin lock and test, the control function of the hardware validation ADC0809. Concrete process is: the timing of ADC0809 VHDL code.To compile the simulation main control signal is: Start for conversion Start signal, high efficient;Ale for channel selection address signal is latched signals. , when start the conversion, program starts executing the query status, the status of 0.1. While waiting, state 2, track the status of EOC signal, judge whether the conversion is over, when the EOC = 1 said switch over, or continue to wait for; Transformation after the end of continue to query the state, if the OE signal for high level control to open the tri-state buffer, when the LOCK signal for high electricity at ordinary times, the converted data latches, ended a transformation.Keywords:Work timing、AD0809 、VHDL、quartus2、Compile thesimulation、Start 、EOC、OE、Tri-state buffer1设计任务基于VHDL语言,实现对ADC0809简单控制。
FPGA直接控制ADC0809对模拟信号进行采样.

第二章总体方案设计2.1 系统方案设计在以往的A/D器件采样控制设计中,多数是以单片机或CPU为控制核心,虽然编程简单,控制灵活,但缺点是控制周期长,速度慢。
单片机的速度极大的限制了A/D高速性能的利用,而FPGA的时钟频率可高达100MHz以上。
本设计以高集成度的芯片为核心,进行时序控制、码制变换。
具有开发周期短,灵活性强,通用能力好,易于开发、扩展等优点。
既降低了设计难度,又加快了产品的开发周期。
基于FPGA的信号采集系统主要有:A/D转换器,FPGA,RS232通信,PC 机组成。
A/D 转换器对信号进行会采集,A/D 内部集成了采样、保持电路,可有效的降低误差,减少外围电路的设计,降低系统的功耗。
A/D在接受到指令后进行采集,FPGA采集控制模块首先将采集到的通过A/D 转换城的数字信号引入FPGA,而后对数字信号送往算法实现单元进行处理,并存于FPGA内部RAM 中,再将数据由RS232传送到PC上做FFT,实现对采集信号的时域和频域的显示。
图2.1.1系统的总体框图:FPGA的设计结构如图2.1.2所示。
数字倍频器的倍频输出提供ADC控制器的采样触发脉冲。
根据ADC0809操作时序,ADC控制器来实现ADC0809的数据采集操作,采样的时机由倍频器来控制。
控制器每控制完成一次采样操作,则停止等待下一个触发脉冲的到来。
倍频器每输出一个低电平脉冲,ADC采样控制器的状态机进行一次采样操作。
在倍频器的触发控制下,完成被测信号一个基波周期N个点的等间隔采样,同时数字倍频器跟踪输入信号的频率的变化,尽可能地保持N个点的采样宽度正好为被测信号一个周波的宽度。
-时钟分配及各模块的控制:在协调模块工作时,起到很重要的作用。
引进晶振产的时钟信号,根据实际需要对起进行倍频或分频,使A/D的采样频率,RAM的读写频率,信号处理实现的核心模块的工作频率一致。
图2.1.2系统具体流程框图2.2 各功能模块的设计方案2.2.1 FPGA最小系统板方案设计FPGA是英文Field Programmable Gate Array的缩写,即现场可编程门阵列,它是在PAL、GAL、EPLD等可编程器件的基础上进一步发展的产物[4]。
模数转换器ADC0809应用原理

精品文档AD0809应用原理--很全面的资料1.0809 的芯片说明:ADC0809是带有 8 位 A/D 转换器、 8 路多路开关以及微处理机兼容的控制逻辑的 CMOS 组件。
它是逐次逼近式 A/D 转换器,可以和单片机直接接口。
(1) ADC0809的内部逻辑结构由上图可知, ADC0809由一个 8 路模拟开关、一个地址锁存与译码器、一个A/D 转换器和一个三态输出锁存器组成。
多路开关可选通8 个模拟通道,允许8 路模拟量分时输入,共用 A/D 转换器进行转换。
三态输出锁器用于锁存A/D 转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。
( 2).引脚结构IN0- IN7:8 条模拟量输入通道ADC0809对输入模拟量要求:信号单极性,电压范围是0-5V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。
地址输入和控制线: 4 条ALE为地址锁存允许输入线,高电平有效。
当ALE线为高电平时,地址锁存与译码器将 A,B,C三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行转换。
A,B 和 C 为地址输入线,用于选通 IN0-IN7 上的一路模拟量输入。
通道选择表如下表所示。
C B A 选择的通道000IN0001IN1010IN2011IN3100IN4101IN5110IN6111IN7数字量输出及控制线: 11 条ST 为转换启动信号。
当 ST 上跳沿时,所有内部寄存器清零;下跳沿时,开始进行 A/ D 转换;在转换期间, ST应保持低电平。
EOC为转换结束信号。
当 EOC为高电平时,表明转换结束;否则,表明正在进行 A/D 转换。
OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。
OE= 1,输出转换得到的数据; OE=0,输出数据线呈高阻状态。
D7- D0为数字量输出线。
模数转换器ADC0809应用原理

AD0809应用原理一一很全面的资料1. 0809的芯片说明:ADC0809是带有8位A/D 转换器、8路多路开关以及微处理机兼容的控制逻辑的C MOS 组件。
它是逐次逼近式A/D 转换器,可以和单片机直接接口。
(1) ADC0809的内部逻辑结构由上图可知,ADC0809 111-个8路模拟开关、一个地址锁存与译码器、一个A/D 转 换器和一个三态输出锁存器组成。
多路开关可选通8个模拟通道,允许8路模拟量分 时输入,共用A/D 转换器进行转换。
三态输出锁器用于锁存A/D 转换完的数字量,当OE 端为高电平时,才可以从三态输出锁存器取走转换完的数据。
(2) •引脚结构IN0-IN7: 8条模拟量输入通道ADC0809对输入模拟量要求:信号单极性,电压范围是0 — 5V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需 在输入前增加采样保持电路。
地址输入和控制线:4条67 "aio1T1213 14TN3 IN4 INT5 JLN6 IN7 ST EOC D3 QBCLK vcc VRJEF 斗IN2 INI INO A B C ALEOTJD VREF ・ DI 1>228 26 2423222? 20 19 £8 17亘15BA1EIN0 D41 IN2IN4 IN5 IN6 N70E薦转换器态 输 出 锁 存 器ALE为地址锁存允许输入线,高电平有效。
当ALE线为高电平时,地址锁存与译码器将A, B, C三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行转换。
A, B和C为地址输入线,用于选通IN0-IN7±的一路模拟量数字量输出及控制线:11条ST为转换启动信号。
当ST±跳沿时,所有内部寄存器清零;下跳沿时,开始进行A /D转换;在转换期间,ST应保持低电平。
EOC为转换结束信号。
当EOC为高电平时,表明转换结束;否则,表明正在进行A/D转换。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
FPGA与ADC0809接口电路详解
注:(1)本程序基于FPGA和vhdl编写
有详尽的程序解释和原理分析
以及原理图,状态图
(2)对于adc0809具体资料可上网查在此不累述
一.FPGA与ADC0809的接口电路图原理
二.关于ADC0809的说明(重点)
(1)ale信号(引脚):高电平时把三个地址信号送入地址锁存器,并经译码器得到地址数据,以选择相应的模拟输入通道。
(2)oe信号(引脚)en使能信号:电平由低变高时,打开数据输出锁存器,将转换数据送到数据总线上
(3)eoc信号(引脚):eoc为高电平时完成转换,为低电平时正在转换。
(4)start信号(引脚):要给start线送一个100ns宽的启动正脉冲,start下跳沿时,开始进行A/D转换,在转换期间start以保持低电平。
三.转换状态图
对于状态图的真值表未列出 注意对应的注释为vhdl 语句
ale<='1';start<='0';en<='0';
----eoc='1' ale<='0';start<='0';en<='0';--再次检测数据是否转换完 if eoc='0' then next_state<=st4;
else next_state<=st5;
器,将数据送入数据总线
存器
四.ADC0809采样接口电路程序
--*********ADC0809采样控制*************
--******因为FPGA 的时钟频率为50MHz ,则256分频后,即ADC0809输入时钟为195KHz****** --******对ADC0809进行简单的采样控制,得到的数据进FPGA 送到8个并排的数码管显示***** library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity PL_AD is
port ( d : in std_logic_vector(7 downto 0); --ADC0809输出的采样数据输入FPGA clk,eoc: in std_logic; --clk 为系统时钟,eoc 为ADC0809转换结束信号输入FPGA lock1,start, ale,en: out std_logic; --ADC0809控制信号FPGA 输出信号 abc_in :in std_logic_vector(2 downto 0); --模拟选通信号
abc_out :std_logic_vector(2 downto 0);--ADC0809模拟信号选通信号
q : out std_logic_vector(7 downto 0));送至8个并排数码管信号FPGA 输出数字信号 end pl_AD;
architecture behav of PL_AD is
type states is ( st0,st1, st2, st3, st4,st5,st6);--定义状态类型枚举类型
signal current_state, next_state:states:=st0;--定义总体两个状态现态和次态并且初值为st0态
signal regl :std_logic_vector(7 downto 0);--定义中间寄存器
signal lock : std_logic;
signal qq:std_logic_vector(7 downto 0);--定义计数器用于分频
begin
com:process(current_state,eoc) –此进程主要是驱动ADC0809工作即数据转换过程
begin
case current_state is
when st0=>next_state<=st1;ale<='0';start<='0';en<='0';--准备
when st1=>next_state<=st2;ale<='1';start<='0';en<='0';--三个地址信号送入地址锁存器
when st2=>next_state<=st3;ale<='0';start<='1';en<='0';--开始数据转换
when st3=> ale<='0';start<='0';en<='0';--检测数据是否转换完
if eoc='1' then next_state<=st3;
else next_state<=st4;
end if;
when st4=> ale<='0';start<='0';en<='0';--再次检测数据是否转换完
if eoc='0' then next_state<=st4;
else next_state<=st5;
end if;
when st5=>next_state<=st6;ale<='0';start<='0';en<='1'; --打开输出数据锁存器,将数据送入数据总线
when st6=>next_state<=st0;ale<='0';start<='0';en<='1';regl<=d;--打开输出数据锁存器,将数据送入寄存器regl when others=> next_state<=st0;ale<='0';start<='0';en<='0';
end case;
end process;
clock:process(clk) --对系统时钟进行分频,得到驱动ADC0809的时钟信号
begin
if clk'event and clk='1' then qq<=qq+1;
if QQ="01111111" THEN lock<='1';--实现分频
current_state <=next_state;--在lock上升沿,转换至下一状态
elsif qq<="01111111" then lock<='0';
end if;
end if;
end process;
q<=regl;--寄存器数据输出即FPGA输出
lock1<=lock;
abc_out<=abc_in;--模拟选通信号送往ADC0809
end behav;
注:有错
when st3=> ale<='0';start<='0';en<='0';--检测数据是否转换完
if eoc='1' then next_state<=st3;
else next_state<=st4;
end if;
when st4=> ale<='0';start<='0';en<='0';--再次检测数据是否转换完
if eoc='0' then next_state<=st4;
else next_state<=st5;
end if;
不过我这里的注释好像错了,这两个when合起来才是检测数据是否转换完的。
正确的注释是:
when st3=> ale<='0';start<='0';en<='0';--检测EOC的下降沿
if eoc='1' then next_state<=st3;--如果eoc=1则保持在st3
else next_state<=st4;--否则进入下一状态
end if;
when st4=> ale<='0';start<='0';en<='0';--检测eoc的上升沿
if eoc='0' then next_state<=st4;--如果eoc=0则保持在st4
else next_state<=st5;--否则进入下一状态
end if;
看了ADC0809的工作时序图就知道了:
start是转换启动信号,一个正脉冲后A/D开始转换;ale是3位通道选择地址信号锁存信号。
当模拟量送至某一输入端时,有3位地址信号选择,而地址信号由ALE锁存。
EOC是转换情况状态信号,当启动装换约100us后,eoc将产生一个负脉冲,以示转换完成,在eoc的上升沿后,且输出使能信号enanle为高电时,则打开三态缓冲器,把转换好的8位数据送入数据总线,这样便完成了一次转换。