ADC采样控制电路的设计与实现

什么是adc adc,analog-to-digital converter的缩写,指模/数转换器或者模数转换器。是指将连续变化的模拟信号转换为离散的数字信号的器件。真实世界的模拟信号,例如温度、压力、声音或者图像等,需要转换成更容易储存、处理和发射的数字形式。模/数转换器可以实现这个功能,在各种不同的产品中都可以找到它的身影。
与之相对应的dac,digital-to-analog converter,它是adc模数转换的逆向过程。
adc最早用于对无线信号向数字信号转换。如电视信号,长短播电台发接收等。
数字输出选择 1.高端仪表促进了更快的adc速度和更多的通道数与密度,设计者必须评估转换器的输出格式,以及基本的转换性能。
2.主要的输出选项是cmos(互补金属氧化物半导体)、lvds(低压差分信令),以及cml(电流模式逻辑)。
3.要考虑的问题包括:功耗、瞬变、数据与时钟的变形,以及对噪声的抑制能力。
4.对于布局的考虑也是转换输出选择中的一个方面,尤其当采用lvds技术时。
当设计者有多种adc选择时,他们必须考虑采用哪种类型的数字数据输出:cmos(互补金属氧化物半导体)、lvds(低压差分信令),还是cml(电流模式逻辑)。adc中所采用的每种数字输出类型都各有优缺点,设计者应结合自己的应用来考虑。这些因素取决于adc的采样速率与分辨率、输出数据速率,以及系统设计的功率要求,等等。
adc0809采样控制电路设计 一、实验目的
学习用状态机实现a/d转换器adc0809的采样控制电路。
二、实验内容
利用quartusⅱ实现a/d转换器adc0809的采样控制电路状态机设计;给出仿真波形。最后进行引脚锁定并进行测试,硬件验证设计电路对adc0809的控制功能。
三、实验仪器与器材
计算机1台,gw48-pk2s实验箱1台,quartusⅱ6.0 1套。
四、实验
用vhdl 设计的状态机的一般结构有以下几部分组成:
1. 说明部分
说明部分中有新数据类型type 的定义及其状态类型(状态名)和在此新数据类型下定义的状态变量。状态类型一般用枚举类型,其中每一个状态名可任意选取。但为了便于辨认和含义明确,状态名最好有明显的解释性意义。状态变量应定义为信号,便于信息传递。说明部分一般放在architecture 和begin之间。
2. 主控时序进程:
状态机是随外部时钟信号以同步时序方式工作的,因此状态机中必须包含一个对工作时钟信号敏感的进程作为状态机的“驱动泵”。当时钟发生有效跳变时,状态机的状态才发生变化。状态机的下一状态(包括再次进入本状态)仅仅取决于时钟信号的到来。一般地,主控时序进程不负责进入的下一状态的具体状态取值。当时钟的有效跳变到来时,时序进程只是机械地将代表下一状态的信号next_state 中的内容送入代表本状态的信current_state 中,而信号next_state 中的内容完全由其它的进程根据实际情况来决定。当然此进程中也可以放置一些同步或异步清零、置位方面的控制信号。总体来说,主控时序进程的设计比较固定、单一和简单。
3. 主控组合进程:
主控组合进程的任务是根据外部输入的控制信号(包括来自状态机外部的信号和来自状态机内部其它非主控的组合或时序进程的信号),或(和)当前状态的状态值确定下一状态(next_state)的取向,即next_state的取值内容,以及确定对外输出或对内部其它组合或时序进程输出控制信号的内容。
4. 普通组合进程
用于配合状态机工作的其它组合进程,如为了完成某种算法的进程。
5. 普通时序进程
用于配合状态机工作的其它时序进程,如为了稳定输出设置的数据锁存器等。一个状态机的最简结构应至少由两个进程构成(也有单进程状态机,但并不常用)即一个主控时序进程和一个主控组合进程,一个进程作“驱动泵”,描述时序逻辑,包括状态寄存器的工作和寄存器状态的输出;另一个进程描述组合逻辑,包括进程间状态值的传递逻辑以及状态转换值的输出。当然必要时还可以引入第3 个和第4 个进程,以完成其它的逻辑功能。
从一般意义上说进程间是并行运行的,但由于敏感信号的设置不同以及电路的延迟,在时序上进程间的动作是有先后的。在设计中,如果希望输出的信号具有寄存器锁存功能,则需要为此输出写第3 个进程,并把clk 和reset信号放入敏感信号表中。用于进程间信息传递的信号current_state 和next_state ,在状态机设计中称为反馈信号。状态机运行中,信号传递的反馈机制的作用是实现当前状态的存储和下一个状态的译码设定等功能。在vhdl中可以有两种方式来创建反馈机制,即使用信号的方式和使用变量的方式,通常倾向于使用信号的方式。附图8-1为一般状态机结构图。
图8-1 一般状态机结构框图工作示意图
附图8-2和8-3为控制adc0809采样状态机结构图和状态转换图
图8-2 采样状态机结构框图
设计提示:
设目标器件是ep1c6q240c8,建议选择实验电路结构图no.5(即结构图no.5a,附图1-14,由该图可见,adc0809的转换时钟clk已经事先接有750khz的频率),将实验系统左下角选择插针处的“转换结束”和“a/d使能”用跳线帽短接。下载目标文件后,可用螺丝刀旋转实验系统左下角的电位器,以便为adc0809提供变化的待测模拟信号,这时数码管8和7将显示adc0809采样输出并被锁存的数字值(16进制)。
图8-3 控制adc0809采样状态图
图8-4 控制adc0809采样时序图
五、实验要求
根据以上的实验内容写出实验报告,包括程序设计、软件编译、仿真分析、硬件测试和实验过程;设计程序、程序分析报告、仿真波形图及其分析报告。
1. 设计思路
6. 由题意知,我们要设计一个电路与a/d转换器adc0809相连,通过接受时钟输入来决定状态,通过对不同状态输出不同的控制信号,实现对adc0809的采样控制,最终输出稳定的采样电压。本实验中将设计如下进程。
设置两个信号current_state、next_state,以便实现状态的通知。
① 主控时序进程reg
总体设计思想:用reg控制整个采样控制电路的状态,是整个电路的总指挥。
通过监测adc0809输出的信号,实现不同状态的转换,进而控制不同不同的进程process。
主控时序进程reg只输出状态,只接收st1。
当状态为st0的时候,开始新一轮的采样;
当接收st1的时候,通知com2将采样数据锁存,输出。
进程reg对信号:clk、next_state信号敏感
② 组合进程com1
总体设计思想:用com1实现com2对reg的通知,是整个电路的传令兵;用com2控制整个电路,是整个电路状态改变的具体执行者。

当eoc=1的时候,通知reg,以便改变电路状态。
进程com1对信号current_state和eoc敏感
③ 进程latch
总体设计思想:用latch来锁存转换好的数据,并控制数据的输出。
进程latch对信号lock,regl敏感
程序设计
libraryieee;
useieee.std_logic_1164.all;
entity adcint is
port(d :instd_logic_vector(7downto0);--来自0809转换好的8位数据
clk:instd_logic; --状态机工作时钟
eoc:instd_logic; --转换状态指示,低电平表示正在转换
ale:outstd_logic; --8个模拟信号通道地址锁存信号
start:outstd_logic; --转换开始信号
oe:outstd_logic; --数据输出3态控制信号
adda:outstd_logic; --信号通道最低位控制信号
lock0:outstd_logic; --观察数据锁存时钟
led:outstd_logic; --用来指示仿真程序是否正确
-- led2: out std_logic; --2用来指示仿真程序是否正确
q :outstd_logic_vector(7downto0)--8位数据输出
);
end adcint;
architecture behav of adcint is
type states is(st0,st1,st2,st3,st4); --定义各状态子类型
signal current_state , next_state : states := st0;
signal regl :std_logic_vector(7downto0);
signal lock :std_logic; --转换后数据输出锁存时钟信号
begin
adda 《= ‘1’;--当adda《=‘0’,模拟信号进入通道in0,当adda《=‘1’,则进入通道in1
q 《= regl; lock0 《= lock;
------------------进程reg---------------------
--用reg控制整个采样控制电路的状态,是整个电路的总指挥。
process(clk)
begin
if clk=‘1’ and clk‘eventthen -- 检测时钟上升沿
--led《=’0‘;
if next_state=st0 then -- 初始化状态机
current_state《=st0;
elsif next_state=st1 then --开始转换(st1)
current_state《=st1;
elsif next_state=st2 then --等待转化完毕,检测eoc是否为高电平
current_state《=st2;
elsif next_state=st3 then
-- led《=’1‘;
current_state《=st3;
elsif next_state=st4 then
current_state《=st4;
endif;
endif;
endprocess;
------------------进程com2---------------------
--用com2控制整个电路,是整个电路状态改变的具体执行者。
process(current_state,eoc)
variable first_eoc :std_logic;
begin
--led2《=’0‘;
if current_state=st0 then -- 初始化状态机
ale《=’1‘;
start《=’0‘;
oe《=’0‘;
lock《=’0‘;
next_state《=st1;
elsif current_state=st1 then --开始转换(st1)
start《=’1‘;
ale《=’0‘;
--if eoc=’0‘ then -- 转换结束
next_state《=st2;
first_eoc:=eoc;--在状态1记录eoc,以便后面判断ad是否开始转换
--end if;
elsif current_state=st2 then --等待转化完毕,检测eoc是否为高电平
start《=’0‘;
oe《=’0‘;
if ’1‘=(first_eoc xor eoc)then
if eoc=’1‘ then
-- if eoc=’1‘ then
next_state《=st3;
-- end if;
-- else
-- next_state《=st2;
endif;
else
next_state《=st2;
endif;
elsif current_state=st3 then
--led2《=’1‘;
if eoc=’1‘ then -- 转换结束
oe《=’1‘;
next_state《=st4;
else
oe《=’0‘;
endif;
elsif current_state=st4 then
oe《=’0‘;
lock《=’1‘;
next_state《=st0; --开启下一轮新的转换
endif;
endprocess;
------------------进程latch---------------------
--用来控制电路的输出
process(lock,regl)
variable cq :std_logic_vector(7downto0);--用来保存数值
begin
if lock=’0‘ then
cq:=d;
elsif lock=’1‘ then
regl《=cq;
endif;
endprocess;
endarchitecture behav;
2. 仿真分析
图8-5 仿真波形图
由8-5可知,仿真波形和图8-4控制adc0809采样时序图一致。
3. 硬件测试和实验过程
表1-1 adcint在gwac6板上目标芯片ep1c6q240c8的引脚锁定信息

在L4级别自动驾驶之前 保留方向盘和踏板的趋势非常明显
Nexperia首创交互式数据手册,助力工程师随时随地分析MOSFET行为
盘点时下最火热的几款轻薄笔记本,小米笔记本Air上榜
3M 2273E光缆电缆外皮故障及路由探测仪
张忠谋:台积电今年研发经费将达270亿台币
ADC采样控制电路的设计与实现
搬运机器人显“神威”
华为鸿蒙内测体验曝光,与EMUI有明显区别
新的Google Allo更新带来了备份聊天功能
飞兆半导体提供种类丰富的初级端调节PWM控制器系列
产业联手支持JEDEC统一闪存(UFS)标准
瑞典Silex的产线升级及扩产情况如何?
关于光伏系统防雷注意事项的分析
HOBOT公司在众筹平台Makuake上架了一款全新的家用窗户清洁机器人
5G来临 宽带和WIFI又会有何宿命
嵌入式如何进一步成长,该学习哪些书呢?
iPhoneX市场销量低迷多个苹果供应商遭受重挫
锐捷网络成功完成了基于开放式平台架构的首家SA组网模式测试
并行询问的微环传感器阵列用于光声层析成像
区块链技术怎样可以变得成熟