2022年FPGA数据采集 .pdf

上传人:Che****ry 文档编号:27265529 上传时间:2022-07-23 格式:PDF 页数:12 大小:508.05KB
返回 下载 相关 举报
2022年FPGA数据采集 .pdf_第1页
第1页 / 共12页
2022年FPGA数据采集 .pdf_第2页
第2页 / 共12页
点击查看更多>>
资源描述

《2022年FPGA数据采集 .pdf》由会员分享,可在线阅读,更多相关《2022年FPGA数据采集 .pdf(12页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、ADC0809数据采集及显示系统董文来 通信 0702 引言随着半导体技术和EDA 技术的发展,传统的系统设计方法有了飞跃性的进步。可编程技术被广泛应用到器件设计上,给数字系统设计带来很大的灵活性。现在构成数字系统仅需要微处理器、 存储器和可编程逻辑器件。由于器件可以进行编程,则硬件的设计便可以像设计软件那样方便。高速数据采集系统是多种测量与控制系统的前端单元,其采集速度、 精度、 稳定性等直接影响整个系统的性能。本课题就是利用FPGA 以ADC0809 为基础设计数据采集及显示系统,控制高速、 高精度的 A/D 转换器 ADC0809 实现高速采集并显示在LED 灯上。 数据采集的应用十分广

2、泛。 比如水文、 地震、 火灾等方面的监测,生产的自动控制,雷达、声纳信号处理等。系统框架的分析与设计ADC0809 是 8 位逐次逼近型A/D 转换器,带8 个模拟量输入通道,芯片内带通道地址译码锁存器,输出带三态数据锁存器。ADC0809 内部没有时钟电路,故时钟需要由外部输入,允许范围为10KHZ1280KHZ , 典型值为640KHZ , 每一通道的转换需要6673 个时钟周期。当地址所存允许信号ALE 有效时,将转换器转换输出。输出端具有三态输出锁存缓冲器,收输出允许信号OE 的控制,当该信号为高电平时,打开输出缓冲器三态门,转换结果输出到数据总线上;当该信号为低电平时,输出数据线呈

3、高阻态。根据要求可以将系统分为四个模块:采样时钟产生模块.采样控制模块 .数据转换模块.译码显示模块。如图1 所示各个模块的设计1.采样时钟产生模块名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 12 页 - - - - - - - - - 由输入输出的比例关系可知可以由256 分频器来实现。分频器是对某个给定较高频率的信号进行分频操作,以期得到所需的较低频率信号的电路。本课题需要是分频系数为256 的分频器,我们可以采用我们熟悉的设计数字分频器的原理来实现, 先通过待分

4、频计数器计数;然后将计数器的相应位直接赋给分频器的输出信号。这种方法可以避免毛刺现象的发生。其部分代码如下,其中clk 为原来时钟,fout 为 256 分频后的时钟:SIGNAL FULL : STD_LOGIC; BEGIN P_REG: PROCESS(CLK,RST) VARIABLE CNT8 : STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN IF CLKEVENT AND CLK = 1 AND RST= 0 THEN IF CNT8 = 01111111 THEN CNT8 := 00000000; FULL = 1; ELSE CNT8 := CNT8

5、 + 1; FULL = 0; END IF; END IF; END PROCESS P_REG ; P_DIV: PROCESS(FULL) VARIABLE CNT2 : STD_LOGIC; BEGIN IF FULLEVENT AND FULL = 1 THEN CNT2 := NOT CNT2; IF CNT2 = 1 THEN FOUT = 1; ELSE FOUT ST=0;ALE0=0;START0=0;ICLK0=0;OE0=0; NSTST=1;ALE0=1;START0=0;ICLK0=0;OE0=0; NSTST=2;ALE0=1;START0=1;ICLK0=0;O

6、E0=0; NSTST=3;ALE0=0;START0=1;ICLK0=0;OE0=0; IF(EOC=0)THEN NST=ST4;转换即将结束,转换至下一状态ELSE NSTST=4;ALE0=0;START0=0;ICLK0=0;OE0=0; IF(EOC=1)THEN NST=ST5; EOC 由 0 恢复 1,转换结束ELSE NSTST=5;ALE0=0;START0=0;ICLK0=0;OE0=1; NSTST=6;ALE0=0;START0=0;ICLK0=1;OE0=1; NSTST=7;ALE0=0;START0=0;ICLK0=0;OE0=0; NSTNST=ST0;其他

7、状态返回ST1 END CASE; END PROCESS; PROCESS(CLK1,RST) BEGIN IF(CLK1EVENT AND CLK1=0 AND RST=0) THEN CST=NST; END IF; END PROCESS; PROCESS(CLK1)IS BEGIN IF(CLK1EVENT AND CLK1=0) THEN用于消除毛刺现象名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 12 页 - - - - - - - - - ALE=ALE

8、0;START=START0;OE=OE0;ICLK=ICLK0; END IF; END PROCESS; END ADCX; 第 三 步 , 利 用QuartusII对 状 态 机 的 功 能 进 行 仿 真 , 其 波 形 图 如 下3.数据转换模块本设计模拟电压输入范围为05V,用 8 位二进制表示,则其精度为5/256=0.02,本模块将用二进制表示电压转换成BCD 码,以便在显示译码模块得以显示。本模块为了得到稳定的数据用 ICLK 将 A/D 转换结果进行了锁存。其具体做法如下:将 8 位二进制数右移一位,相当于将本数据乘以2(因为精度为0.02)将移位后的数据转换成整数类型整数

9、数据加上5,以达到四舍五入的目的利用 VHDL 的除法取得百位,十位的数字分别将百位,十位的数据转换成BCD 码:BCDH,BCDL 这样我们得到的BCD 码表示的就是以0.02 为精度,进行过四舍五入的模拟电压值。其部分代码如下:PROCESS(ICLK) VARIABLE A,B,C,D:INTEGER ; VARIABLE AD_DAT0: STD_LOGIC_VECTOR(8 DOWNTO 0); VARIABLE BCDH0,BCDL0: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN BCDH0:=0000; BCDL0:=0000; AD_DAT0(0):

10、=0; AD_DAT0(8 DOWNTO 1):=AD_DAT(7 DOWNTO 0);移位达乘2 目的使精度为0.02 A:=CONV_INTEGER(AD_DAT0);二进制转为十进制A:=A+5; 为达四舍五入B:=A/100; 求得百位位,如果数据只有一位或两位则百位为零C:=A-B*100; D:=C/10; 求得十位位,如果数据只有一位则十位为零BCDH0:=BCDH0+B; BCDL0:=BCDL0+D;十进制数转为BCD 码格式BCDH=BCDH0; BCDLLED7SLED7SLED7SLED7SLED7SLED7SLED7SLED7SLED7SLED7SLED7SCLK1,

11、RST=RESET,FOUT=C); ADC_CTRL1:ADC_CTRL PORT MAP (CLK1=CLK1,EOC=EOC,RST=RESET,CLK2=C,OE=OE,ALE=ALE,START=START,ICLK=D,ST=ST); DAT2BCD1: DAT2BCD PORT MAP(AD_DAT=AD_DAT,ICLK=D,BCDH=E,BCDL=F); LED7S0 : BCD2DISP PORT MAP (DIN=E,LED7S=LED0); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 -

12、 - - - - - - 第 7 页,共 12 页 - - - - - - - - - LED7S1 :BCD2DISP PORT MAP ( DIN=F,LED7S=LED1); END ONE; 系统的仿真波形图如下所示通过以上两种方法的仿真实验,都说明了系统的整个程序设计已经完成了数据采集及显示。完成了在程序初的框架,实现了预期的功能。结束语本文完成了高速、多通道的数据采集及显示系统的设计,在QuartusII 环境下,利用VHDL语言编写了整个系统的程序,设计过程中考虑了优化、消除毛刺现象, 数据模块采用了算法来实现及四舍五入保留,并做了仿真,达到了预期的功能。本设计充分利用了FPGA

13、的高速度和高可靠性,从而解决了传统中用单片机等来控制是时速慢、开发周期长等问题。以下为源程序1.、采样时钟产生模块LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY clkdiv IS PORT ( CLK : IN STD_LOGIC; RST : IN STD_LOGIC; FOUT : OUT STD_LOGIC ); END clkdiv; ARCHITECTURE one OF clkdiv IS SIGNAL FULL : STD_LOGIC; BEGIN P_REG:

14、 PROCESS(CLK,RST) VARIABLE CNT8 : STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN IF CLKEVENT AND CLK = 1 AND RST= 0 THEN IF CNT8 = 01111111 THEN CNT8 := 00000000; FULL = 1; ELSE CNT8 := CNT8 + 1; FULL = 0; END IF; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 12 页 - - -

15、- - - - - - END IF; END PROCESS P_REG ; P_DIV: PROCESS(FULL) VARIABLE CNT2 : STD_LOGIC; BEGIN IF FULLEVENT AND FULL = 1 THEN CNT2 := NOT CNT2; IF CNT2 = 1 THEN FOUT = 1; ELSE FOUT ST=0;ALE0=0;START0=0;ICLK0=0;OE0=0; NSTST=1;ALE0=1;START0=0;ICLK0=0;OE0=0; NSTST=2;ALE0=1;START0=1;ICLK0=0;OE0=0; NSTST=

16、3;ALE0=0;START0=1;ICLK0=0;OE0=0; IF(EOC=0)THEN NST=ST4; ELSE NSTST=4;ALE0=0;START0=0;ICLK0=0;OE0=0; IF(EOC=1)THEN NST=ST5; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 12 页 - - - - - - - - - ELSE NSTST=5;ALE0=0;START0=0;ICLK0=0;OE0=1; NSTST=6;ALE0=0;START0=0;

17、ICLK0=1;OE0=1; NSTST=7;ALE0=0;START0=0;ICLK0=0;OE0=0; NSTNST=ST0; END CASE; END PROCESS; PROCESS(CLK1,RST) BEGIN IF(CLK1EVENT AND CLK1=0 AND RST=0) THEN CST=NST; END IF; END PROCESS; PROCESS(CLK1)IS BEGIN IF(CLK1EVENT AND CLK1=0) THEN ALE=ALE0;START=START0;OE=OE0;ICLK=ICLK0; END IF; END PROCESS; END

18、 ADCX; 3、数据转换模块LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; ENTITY DAT2BCD IS PORT ( AD_DAT:IN STD_LOGIC_VECTOR(7 DOWNTO 0); ICLK: IN STD_LOGIC; BCDH,BCDL: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); END DAT2BCD; ARCHITECTURE ONE OF DAT2BCD IS BEGIN

19、 PROCESS(ICLK) VARIABLE A,B,C,D:INTEGER ; VARIABLE AD_DAT0: STD_LOGIC_VECTOR(8 DOWNTO 0); VARIABLE BCDH0,BCDL0: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 12 页 - - - - - - - - - BCDH0:=0000; BCDL0:=0000; AD_DAT0(0):=0; A

20、D_DAT0(8 DOWNTO 1):=AD_DAT(7 DOWNTO 0); A:=CONV_INTEGER(AD_DAT0); A:=A+5; B:=A/100; C:=A-B*100; D:=C/10; BCDH0:=BCDH0+B; BCDL0:=BCDL0+D; BCDH=BCDH0; BCDLLED7SLED7SLED7SLED7SLED7SLED7SLED7SLED7SLED7SLED7SLED7SCLK1,RST=RESET,FOUT=C); ADC_CTRL1: ADC_CTRL PORT MAP (CLK1=CLK1,EOC=EOC,RST=RESET,CLK2=C,OE=

21、OE,ALE=ALE,START=START,ICLK=D,ST=ST); DAT2BCD1: DAT2BCD PORT MAP(AD_DAT=AD_DAT,ICLK=D,BCDH=E,BCDL=F); LED7S0 : BCD2DISP PORT MAP (DIN=E,LED7S=LED0); LED7S1 :BCD2DISP PORT MAP ( DIN=F,LED7S=LED1); END ONE; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 12 页 - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁