资源描述
JIANGSU TEACHERSUNIVERSITY OF TECHNOLOGY
数据采集系统实验报告
A/D采集模块设计
学院名称: 电气信息工程学院
专 业: 测控技术与仪器
班 级: 07测控
姓 名:
学 号:
指导教师:
2010年12月20日
目录
一、实验目的
二、实验原理
1.ADC0809的原理及原理图
2.AD574A的原理及原理图
三、实验过程
四、实验结果
五、结束语
六、参考文献
一、 实验目的:
学习用状态机实现对ADC0809,AD574A等A/D转换器的采样控制。
二、 实验原理:
1.ADC0809的原理及原理图
图2.1和图2.2分别是ADC0809的工作时序图以及采样状态图。时序图中,START为转换启动控制信号,高电平有效,ALE为模拟信号输入宣统端口地址所存信号,上升沿有效;一旦START有效后,状态信号EOC变为低电平,表示进入转换状态,转换时间约为100us。转换结束后,EOC将变为高电平。此后外部控制可使OE由低电平变为高电平(输出有效),此时,ADC0809的输出数据总线D[7…0]从原来的高阻态变为输出数据有效。
由状态图也可看到,状态st2中需要对ADC0809工作状态信号EOC进行测试,如果为低电平,表示转换没有结束,仍需要停留在st2状态中等待,直到变成高电平后才说明转换结束,在下一个时钟脉冲到来时转向状态st3。在状态st3,由状态机向ADC0809发出转换好的8位数据输出允许命令,这一状态周期同时可作为数据输出稳定周期,以便能在下一状态中向锁存器中锁入可靠的数据。在状态st4,由状态机向FPGA中的锁存器发出锁存信号(LOCK的上升沿),将ADC0809的输出数据进行锁存。
图2.1 ADC0809工作时序
图2.2控制ADC0809采样状态图
2.AD574A的原理及原理图
(1)12位A/D转换器芯片AD574A特点:芯片内部包含微机接口逻辑和三态输出缓冲器,可以直接与8 位、12 位或16 位;输出可以是12位一次读出或分两次读出,先读高8位,再读低4位;输入电压可有单极性和双极性两种;对外可提供一个+10V基准电压,最大输出电流1.5mA;有较宽的温度使用范围。
(2) 芯片引脚功能如图2.4所示:
图2.4 AD574A引脚功能
(3)启动转换的时序:
在启动转换后,各控制信号不起作用,只有STS信号标志工作状态。读出数据也同样由CE来启动,读时序如下图2.5所示:
①在CE上升沿之前,先有
图2.5 AD574A读时序图
三、 实验过程
本次实验是采用QuartusⅡ软件进行编译与仿真。步骤如下:
1. 打开QuartusⅡ6.0软件,进入QuartusⅡ欢迎界面。
2. 鼠标单击File---new,出现如下窗口,选择“VHDL FILE”,在弹出的窗口中输入VHDL程序文件。
3. 输入完毕后,点击保存,由于接下来步骤繁琐,我就把它简述为保存并新建工程。
4. 接下来就进行编译,选择下图processing菜单中的start complilation命令。若有VHDL程序有错误,则编译不会完成并弹出对话框提示如下图所示,单击确定后,手动排除错误。方法是在红色的错误提示上双击鼠标左键,软件会自动找到可能是错误的地方或者软件认为不符合规范的地方,排除错误后,再重新执行编译过程。
5. 完成编译后方可进行时序波形的仿真,也称为软件仿真,仿真的前提条件是要有波形文件。仿真的过程可以分为新建波形文件,添加节点,设置仿真时间长度,绘制波形,存储文件,启动仿真等步骤。
6. 附上程序清单:
(1)ADC0809程序清单
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY vhdl1 IS
PORT(D : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
--来自0809转换好的8位数据
CLK : IN STD_LOGIC; --状态机工作时钟
EOC : IN STD_LOGIC; --转换状态指示,低电平表示正在转换
ALE : OUT STD_LOGIC; --8个模拟信号通道地址锁存信号
START : OUT STD_LOGIC; --转换开始信号
OE : OUT STD_LOGIC; --数据输出3态控制信号
ADDA : OUT STD_LOGIC; --信号通道最低位控制信号
LOCK0 : OUT STD_LOGIC; --观察数据锁存时钟
Q : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); --8位数据输出
END vhdl1;
ARCHITECTURE behav OF vhdl1 IS
TYPE states IS (st0, st1, st2, st3,st4) ; --定义各状态子类型
SIGNAL current_state, next_state: states :=st0 ;
SIGNAL REGL : STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL LOCK : STD_LOGIC; -- 转换后数据输出锁存时钟信号
BEGIN
ADDA <= '1';--当ADDA<='0',模拟信号进入通道IN0;当ADDA<='1',则进入通道IN1
Q <= REGL; LOCK0 <= LOCK ;
COM: PROCESS(current_state,EOC,CLK) BEGIN --规定各状态转换方式
IF CLK'EVENT AND CLK='1'
THEN
CASE current_state IS
WHEN st0=>ALE<='0';START<='0';LOCK<='0';OE<='0';
next_state<= st1; --0809初始化
WHEN st1=>ALE<='1';START<='1';LOCK<='0';OE<='0';
next_state<= st2; --启动采样
WHEN st2=> ALE<='0';START<='0';LOCK<='0';OE<='0';
IF (EOC='1') THEN next_state<= st3; --EOC=1表明转换结束
ELSE next_state<= st2; END IF ; --转换未结束,继续等待
WHEN st3=> ALE<='0';START<='0';LOCK<='0';OE<='1';
next_state<= st4;--开启OE,输出转换好的数据
WHEN st4=> ALE<='0';START<='0';LOCK<='1';OE<='1'; next_state<= st0;
WHEN OTHERS =>next_state<= st0; END CASE ;
END IF;
END PROCESS COM ;
REG: PROCESS (CLK)
BEGIN
IF (CLK'EVENT AND CLK='1') THEN current_state<=next_state; END IF;
END PROCESS REG ; -- 由信号current_state将当前状态值带出此进程:REG
LATCH1: PROCESS (LOCK) -- 此进程中,在LOCK的上升沿,将转换好的数据锁入
BEGIN
IF LOCK='1' AND LOCK'EVENT THEN REGL <= D ; END IF;
END PROCESS LATCH1 ;
END behav;
(2)AD574A程序清单:LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY ADCINT1 IS
PORT(D:IN STD_LOGIC_VECTOR(11 DOWNTO 0);
CLK:IN STD_LOGIC;
STS:IN STD_LOGIC;
CE:OUT STD_LOGIC;
CS:OUT STD_LOGIC;
RCN:OUT STD_LOGIC;
A0:OUT STD_LOGIC;
SL: OUT STD_LOGIC;
LOCK0:OUT STD_LOGIC;
Q:OUT STD_LOGIC_VECTOR(11 DOWNTO 0));
END ENTITY ADCINT1;
ARCHITECTURE behav OF ADCINT1 IS
TYPE states IS(st0,st1,st2,st3,st4,ST5);
SIGNAL current_state,next_state:states:=st0;
SIGNAL REGL :STD_LOGIC_VECTOR(11 DOWNTO 0);
SIGNAL LOCK :STD_LOGIC;
BEGIN
A0<='0';
SL<='1';
Q<=REGL;
LOCK0<=LOCK;
COM:PROCESS(current_state,STS)
BEGIN
IF(CLK'EVENT AND CLK='1') THEN
CASE current_state IS
WHEN st0=>CE<='0';CS<='0';RCN<='0';LOCK<='0';
next_state<=st1;
WHEN st1=>CE<='1';CS<='0';RCN<='0';LOCK<='0';
next_state<=st2;
WHEN st2=>CE<='0';CS<='1';RCN<='1';LOCK<='0';
IF(STS='0')THEN next_state<=st3;
ELSE next_state<=st2;
END IF;
WHEN st3=>CE<='0';CS<='0';LOCK<='0';RCN<='1';
next_state<=st4;
WHEN st4=>CE<='1';CS<='0';LOCK<='0';RCN<='1';
next_state<=st5;
WHEN st5=>CE<='1';CS<='0';LOCK<='1';RCN<='1';
next_state<=st0;
WHEN OTHERS=>next_state<=st0;
end case;
END IF;
end process COM;
REG:PROCESS(CLK)
BEGIN
IF(CLK'EVENT AND CLK='1') THEN current_state<=next_state;
END IF;
END PROCESS REG;
LATCH1:PROCESS(LOCK)
BEGIN
IF LOCK='1' AND LOCK'EVENT THEN REGL<=D;END IF;
END PROCESS LATCH1;
END behav;
四、 实验结果
图4 ADC0809采样状态机工作时序
五、 结束语
这次的数据采集系统课程设计,让我们有机会将课堂上所学的理论知识运用到实际中。并通过对知识的综合利用,进行必要的分析、比较,从而进一步验证了所学的理论知识。同时,这次课程设计也为我们以后的学习打下基础,指导我们在以后的学习,多动脑的同时,要善于自己去发现并解决问题。
通过这次实验,我学会了用状态机对ADC0809和AD574A转换器的采样控制。在实验的过程中遇到了很多困难,但通过查书本和查资料都得到了解决。所以,在学习的过程中遇到困难并不可拍,我可以通过努力将问题一一克服。
六、 参考文献
[1]《数据采集与处理技术》马明建编著西安交通大学出版社 2005
[2]《EDA技术与VHDL》潘松,黄继业编著清华大学出版社 2004
展开阅读全文