摘要
本作品是基于fpga的adc0809采集控制电路。adc0809是美国国家半导体公司生产的cmos工艺8通道,8位逐次逼近式a/d模数转换器。其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行a/d转换。
abstract
this work is adc0809 sampling control circuit based on fpga. adc0809 is produced national semiconductor cmos 8 channel, eight successive approximation a/d analog-to-digital converter. its internal have a 8 channel multiplex switch, it can according to the address latch signal after decoding, only gate 8 analog input signals of an a/d conversion.
1. 设计任务
基于fpga的adc0809控制电路设计,并阐明其控制原理。
2. adc0809简介
2.1. adc0809主要特性
①8路8位a/d转换器,即分辨率8位。
②具有转换起停控制端。
③转换时间为100μs
④单个+5v电源供电
⑤模拟输入电压范围0~+5v,不需零点和满刻度校准。
⑥工作温度范围为-40~+85摄氏度
⑦低功耗,约15mw
2.2. adc0809外部特性(引脚功能)
①adc0809芯片有28条引脚,下面说明各引脚功能。
②in0~in7:8路模拟量输入端。
③d0~d7: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:地。
2.3. adc0809工作原理
首先输入3位地址,并使ale=1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入之一到比较器。start上升沿将逐次逼近寄存器复位。下降沿启动 a/d转换,之后eoc输出信号变低,指示转换正在进行。直到a/d转换完成,eoc变为高电平,指示a/d转换结束,结果数据已存入锁存器,这个信号可用作中断申请。当oe输入高电平 时,输出三态门打开,转换结果的数字量输出到数据总线上。
3. 理论分析与计算
3.1. 系统设计原理
图3-1:系统设计原理图
工作原理:fpga通过控制总线输入采集端口地址,此地址经adc0809译码后选通8路模拟采集输入口之一。fpga输出控制信号使ad的start脚信号出现高电平,上升沿将逐次逼近寄存器复位,下降沿启动 a/d转换。启动转换之后adc0809的eoc脚输出信号变低,指示fpga ad转换工作正在进行。直到a/d转换完成,eoc脚变为高电平,指示a/d转换结束,结果数据已存入锁存器。当fpga检测到eoc脚变为高电平时,控制adc0809的oe脚变为高电平,输出三态门打开,转换结果的数字量输出到数据总线上,再由fpga存储起来。
3.2. ad计算分析
①转换量程:0~5v
②分辨率:参考电压为0-5v的话,adc0809为8位ad,则每一位的电压值为(5-0)/255≈0.0196v
③转换时间: 取决于芯片时钟频率,本作品提供给ad的时钟频率为500khz,按官方资料知道ad转换时间为100μs(时钟为640khz时),按此比例算出时钟为500khz时的转换时间为130μs;
④采集最高频率:按130us转换时间来算,依据实际经验,在一个信号周期内采集6~7个点能使信号较好恢复原状,则能采集的最高频率大约为1khz。
4. adc0809硬件电路设计
图4-1:adc0809硬件电路图
注意事项:
①电阻r2用于限流,发光二级管d1用于指示电源是否接通
②电容c1、c2用于滤波
③滑动变阻器r1接ad采集输入口in3主要用于测试精确ad是否正常工作
④排针用于连接fpga和方便调试
⑤ad信号线与fpga接口直接相连
⑥ad的工作频率由fpga分频直接提供
5. 软件设计
5.1. 程序流程图
图5-1:程序流程图
确认ad转换完成有三种办法,分别是定时传送办法、查询方式、中断方式。本作品采用查询方式,即查询eoc的状态,即可确认转换是否完成,并接着进行数据传送。
附录:verilog程序
/*fpga实现的程序:(verilog)
module ad0809(clk, //脉宽(至少100ns)
rst_n,
eoc, //约100us后eoc变为高电平转换结束
start, //启动信号,上升沿有效(至少100ns)
oe, //高电平打开三态缓冲器输出转换数据
ale, //高电平有效,选择信道口
adda, //因为addb,addc都接地了,这里只有adda为变量
data, //转换数据
clk500k,
data_r);
output start,oe,ale,adda,clk500k;
input eoc,clk500k,rst_n;
input[7:0] data;
output[7:0] data_r;
reg start,oe,ale,adda,clk500k;
reg[7:0] data_r;
reg[4:0] cs,ns;
reg[5:0] counter;
/**********************产生ad时钟500khz***********************************/
always @(posedge clk)
begin
if(counter==6‘b11_0010)
begin
clk500k《=~clk500k;//1000hz
counter《=6’b0;
end
else
counter《=counter+1‘b1;
end
/****************************编码*******************************************/
parameter idle=5’b00001,start_h=5‘b00010,start_l=5’b00100,check_end=5‘b01000,get_data=5’b10000;
/**********************利用有限状态机设计ad工作流程************************/
always @(posedge clk500k)
case(cs)
idle:
ns=start_h;
start_h:
ns=start_l;
start_l:
ns=check_end;
check_end:
if(eoc)
ns=get_data;
else
ns=check_end;
get_data:
ns=idle;
default:
ns=idle;
endcase
always @(posedge clk500k)
if(!rst_n)
cs《=idle;
else
cs《=ns;
always @(posedge clk500k)
case(ns)
idle: //停止转换状态
begin
oe《=0;
start《=0;
ale《=0;adda《=1;
end
start_h:
begin
oe《=0;
start《=1; //产生启动信号
ale《=1;
adda《=1;//选择信道口in0
end
start_l:
begin
oe《=0;
start《=0;
ale《=1;//启动信号脉宽要足够长,在启动的时候ale要一直有效
end
check_end:
begin
oe《=0;
start《=0;
ale《=0;
end
get_data:
begin
oe《=1; //高电平打开三态缓冲器输出转换数据
data_r《=data;//提取转换数据
start《=0;
ale《=0;
end
default:
begin
oe《=0;
start《=0;
ale《=0;
adda《=0;
end
endcase
endmodule
驾考难度大升级!男子开顺风车出事,网约车发生事故保险不赔,驾考升级培养安全行车意识
网关是什么?有什么功能和应用场景?
基于Blackfin系列处理器和操作系统实现数据采集系统的设计
低功耗蓝牙5.0在智能家居领域有什么优势
可穿戴设备市场Q3苹果Apple Watch暴跌71% 智能手环占据上风
基于FPGA的ADC0809控制电路
众志成城,抗击疫情:智能照明联合会在行动
在人工智能时代 宇视智能化安防油库有效的守护了国家能源安全
现场可配置片上系统TA7V05的应用研究
紧凑型步进电机驱动器的灵活安装选项
互调干扰导致低速率案例分析
一款可靠且高效的固态LiDAR——大陆集团的SRL1
喷墨打印机打印微型锂离子电池电极技术有望实现
国家出手管控_三大运营商到底如何去整改
场效应管的介绍和用途
中国AI专利数赶超美国_跻身全球第一梯队
高压断路器有什么作用?
投影机的使用与日常维护
第六代WiFi技术的802.11ax,具备哪些功能
基于YCT的云途SDK配置工程升级方法