vhdl状态机ad采样控制电路实现 vhdl状态机设计
本篇文章给大家谈谈vhdl状态机ad采样控制电路实现,以及vhdl状态机设计对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、用verilog写了个状态机,实现ad采集的时序控制。给出convst后,检测busy,要是为低,就拉低RD,读出数据
- 2、VHDL能调AD转换器的采样精度和采样率吗?是怎么调的?
- 3、如何设计AD采样保护电路
- 4、基于FPGA的AD0809采样控制器设计 仿真代码
用verilog写了个状态机,实现ad采集的时序控制。给出convst后,检测busy,要是为低,就拉低RD,读出数据
4个建议:
1、第二行“nest_states”命名错误。
2、状态机的迁移最好加上复位,如下:
always @ (posedge clk or negedge rst)
if (!rst)
state = IDLE;
else
state = next_state;
3、状态机的第二段可以采用组合逻辑写,always(*)是可以的,但是严禁在同一个组合逻辑always模块里同时出现= 和=,改成都用=。
4、硬件描述语言,最好用1'b1,1'b0把位宽也描述上而不要用直接用1,0。
VHDL能调AD转换器的采样精度和采样率吗?是怎么调的?
实际上,采样率不必太高。根据采样定理,采样频率是信号最大频率的两倍就足够了。根据你的情况,采样频率200Hz就够了(当然为了方便,也可以过采样,400Hz就够了)。串行通信的波特率足以实时传输信号。比如采样位数是16位,常用的9600就可以了。
如何设计AD采样保护电路
老实说:用AD做充电保护电路实在是太奢侈vhdl状态机ad采样控制电路实现了vhdl状态机ad采样控制电路实现,也只有高级电源或者高校里会有人这么做。一般工程上通用电源都用模拟电路来做充电保护电路vhdl状态机ad采样控制电路实现,又便宜又方便。
具体操作大致是:在电源vhdl状态机ad采样控制电路实现的输出端,并接一个电阻支路,大概由2-4个电阻串联而成,从中间抽头,然后根据你需要vhdl状态机ad采样控制电路实现的电源电压计算电阻的具体阻值,使这个抽头的电压变动范围在0-5V之间(根据最基本的电路分析定理,这个电阻抽样网路中点电压会随着电源电压变化而变化),电阻必须选用精密电阻。然后把这个抽头的电压送AD和单片机进行转换和比较,把控制信息通过单片机的管脚输出,驱动MOS管或者继电器导通或截断充电回路。
再告诉你一个模电做的办法,一般是用基准电源TL431之类和电压比较器做,抽样电阻网络也同样,但成本省得多,只有AD方法的几分之一。
基于FPGA的AD0809采样控制器设计 仿真代码
实验一 用状态机实现ADC0809的采样控制电路
一、实验目的:
学习用状态机对A/D转换器ADC0809的采样控制电路的实现。
二、原理说明:
ADC0809是CMOS的8位A/D转换器,片内有8路模拟开关,可控制8个模拟量中的一个进入转换器中。ADC0809的分辨率为8位,转换时间约100us,含锁存控制的8路多路开关,输出有三态缓冲器控制,单5V电源供电。
主要控制信号说明:如图1所示,START是转换启动信号,高电平有效;ALE是3位通道选择地址(ADDC、ADDB、ADDA)信号的锁存信号。当模拟量送至某一输入端(如IN1或IN2等),由3位地址信号选择,而地址信号由ALE锁存;EOC是转换情况状态信号(类似于AD574的STATUS),当启动转换约100us后,EOC产生一个负脉冲,以示转换结束;在EOC的上升沿后,若使输出使能信号OE为高电平,则控制打开三态缓冲器,把转换好的8位数据结果输至数据总线。至此ADC0809的一次转换结束了。
图1
三、实验内容:
1、利用MAX+plusII对例3-1进行文本编辑输入和仿真测试;给出仿真波形。最后进行引脚锁定并进行测试,硬件验证例3-1电路对ADC0809的控制功能。
2、根据附图2-12,建议引脚锁定为:START接PIO34,OE接PIO35,EOC接PIO8,ALE接PIO33,状态机时钟CLK接clock0(PIN2,可选“65536Hz”或更高),ADDA接PIO32(ADDB和ADDC都接GND),ADC0809的8位输出数据线接PIO23~PIO16,锁存输出Q显示于数码8/数码7(PIO47~PIO40)。
3、设目标器件是EPF10K10,建议选择实验电路结构图NO.5(即结构图NO.5A,ADC0809的转换时钟CLK已经事先接有750KHz的频率),将实验系统左下角选择插针处的“转换结束”和“A/D使能”用二短路帽短接。下载目标文件后,可用螺丝刀旋转实验系统左下角的电位器,以便为ADC0809提供变化的待测模拟信号,这时数码管8和7将显示ADC0809采样输出并被锁存的数字值(16进制)。
【例3-1】
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY ADCINT IS
PORT ( D
: IN STD_LOGIC_VECTOR(7 DOWNTO 0); --0809的8位转换数据输出
CLK ,EOC : IN
STD_LOGIC; --CLK是转换工作时钟
LOCK1, ALE, START, OE, ADDA : OUT STD_LOGIC;
Q
: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)
);
END ADCINT;
ARCHITECTURE behav OF ADCINT
IS
TYPE states IS (st0, st1,
st2, st3,st4,st5,st6) ; --定义各状态子类型
SIGNAL current_state, next_state: states
:=st0 ;
SIGNAL REGL : STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL LOCK : STD_LOGIC; -- 转换后数据输出锁存时钟信号
BEGIN
ADDA = '1'; LOCK1 =LOCK;
PRO: PROCESS(current_state,EOC) BEGIN
--规定各状态转换方式
CASE current_state IS
WHEN st0 =
ALE='0';START='0';OE='0';LOCK='0' ;next_state = st1;
WHEN st1 =
ALE='1';START='0';OE='0';LOCK='0' ;next_state = st2;
WHEN st2 =
ALE='0';START='1';OE='0';LOCK='0' ;next_state = st3;
WHEN st3 =
ALE='0';START='0';OE='0';LOCK='0';
IF (EOC='1') THEN next_state =
st3; --测试EOC的下降沿
ELSE next_state =
st4;
END IF ;
WHEN st4=
ALE='0';START='0';OE='0';LOCK='0';
IF (EOC='0') THEN next_state = st4; --测试EOC的上升沿,=1表明转换结束
ELSE next_state =
st5; --继续等待
END IF ;
WHEN st5=
ALE='0';START='0';OE='1';LOCK='0';next_state = st6;
WHEN st6=
ALE='0';START='0';OE='1';LOCK='1';next_state = st0;
WHEN OTHERS =
ALE='0';START='0';OE='0';LOCK='0';next_state = st0;
END CASE ;
END PROCESS PRO ;
PROCESS (CLK)
BEGIN
IF ( CLK'EVENT AND CLK='1') THEN
current_state = next_state; -- 在时钟上升沿,转换至下一状态
END IF;
END PROCESS;
-- 由信号current_state将当前状态值带出此进程,进入进程PRO
PROCESS (LOCK) -- 此进程中,在LOCK的上升沿,将转换好的数据锁入
BEGIN
IF LOCK='1' AND LOCK'EVENT THEN REGL = D ;
END IF;
END PROCESS ;
Q = REGL;
END behav;
四、思考题:
在不改变原代码功能的条件下将例3-1表达成用状态码直接输出型的状态机。
五、实验报告:
根据以上的实验要求、实验内容和实验思考题写出实验报告。
写到这里,本文关于vhdl状态机ad采样控制电路实现和vhdl状态机设计的介绍到此为止了,如果能碰巧解决你现在面临的问题,如果你还想更加了解这方面的信息,记得收藏关注本站。
相关文章
发表评论