1、 模拟量数据采集Liaoning Normal University(单击输入4位年,如2010届)本科生毕业论文(设计)题 目: EDA应用及原理学 院: 单击输入学院全称专 业: 单击输入规范的专业名称学 号: 单击输入14位学号学生姓名: 张浩指导教师: 单击输入教师姓名单击输入4位年,如2010年5月模拟量数据采集摘要本次课程设计是一种基于FPGA技术的模拟数据采集的设计方案,本文所提出的一种基于FPGA技术的模拟量采集,利用FPGA的I/O端口多,且可以自由编程支配、定义其功能的特点,配以VHDL编写的FPGA内部执行软件,能很好地解决采集的信号路数多的问题。因为用VHDL编写的执行
2、软件内部对各组数字量是按并行处理的,而且FPGA硬件的速度是ns级的,因此本设计能实时地、快速地监测信号量的变化。本设计鉴于FPGA和VHDL语言自身的特点,本设计具有较好的扩展性,在监测和控制系统中也具有一定的通用性。系统主要包括:FPGA芯片区、多路选择与A/D采样电路、ADC0809芯片等几部分。关键词:FPGA A/D采样 模拟量采集 VHDL语言设计AbstractThe curriculum design is an FPGA-based analog data acquisition technology in the design of the proposed FPGA-ba
3、sed analog technology, digital acquisition and processing system using FPGAs I / O ports and more, and be free programming control, the definition of the functions of the characteristics of the FPGA with VHDL within the preparation of the implementation of software, can be collected very good soluti
4、on to the problem of multi-signal approach. Because VHDL implementation of the software prepared by the internal volume of the set of figures is based on parallel processing, and FPGA hardware ns speed class, so the design in real time, monitoring of fast changes in the volume signal. In view of the
5、 FPGA and VHDL design language of its own characteristics, the design of better scalability, in the monitoring and control system also has some versatility. System mainly includes: FPGA chip area, multi-channel selection and A / D sampling circuit, ADC0809 chip such as several parts.Keywords: FPGA A
6、 / Dsampling Analog Acquisition VHDL Language Acquisition Design目 录 1 绪论.12 课程设计内容及要求.22.1 课题设计内容.2 2.2 课题设计要求.23 课程设计方案及原理.3 3.1 课程设计总体方案.3 3.1.1 设计思路.3 3.1.2 设计流程图.3 3.2 课程设计原理.4 3.2.1 模拟量采集设计原理.43.2.2 FPGA应用原理.43.2.3 VHDL应用原理.54 课程设计步骤及过程.64.1可编程器件控制的模数A/D转换软件设计.6 4.2用数码管显示模数A/D转换器的输入电压.7 4.3 ADC
7、0809的应用.8 4.3.1 ADC0809内部结构.8 4.3.2 ADC0809引脚功能.10 4.4 DAC0832的应用11 4.4.1 DAC0832内部结构.11 4.4.2 DAC0832引脚功能.124.5 实验仿真图形135 课程设计的心得体会.14参考文献.15附录.16321 绪论课程设计是课程教学中的重要环节,不仅是对所学课程的一种实践性总结和应用,而往往是对多门课程的综合性设计与应用。EDA 是英文“ Electronics Design Automation (电子设计自动化)”的缩写, EDA 技术是 90 年代迅速发展起来的,是现代电子设计的最新技术潮流,是综
8、合现代电子技术和计算机技术的最新研究成果,是从事电子线路设计与分析的一门技术,包括电子线路的设计、计算机模拟仿真和电路分析、印制电路板的自动化设计三个方面的内容。EDA课程设计要求学生根据所学知识设计出一套基于EDA的应用系统。它要求学生除了掌握EDA的工作原理、接口设计和程序设计之外,还要求学生结合Protel、电路、模拟电子技术和数字电子技术以及EDA等课程对系统进行综合设计。本次课程设计主要应用VHDL语言,VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。VHDL的程序结构特点是将
9、一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可是部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点,用VHDL编写FPGA的内部执行程序,能很好地解决采集的信号路数多的问题。因为用VHDL编写的执行软件内部对各组数字量是按并行处理的,而且FPGA硬件的速度是ns级的,因此本设计能实时地、快速地监测信号量的变化。2 课程设计内容及要求2.1 课题设计内容本次课程设计的主要目的旨在通过独立
10、完成一个“模拟量数据采集”的设计,达到对EDA技术的熟练掌握,提升对EDA技术及应用课程所学内容的掌握和应用。在本次课程设计中使用Altera公司的EPF10K10系列的FPGA芯片,基于实验室现有的EDA实验箱,实现“模拟量数据采集”的设计内容。2.2 课题设计要求1、由电位器调节的可变电压(05V)输入到模/数转换器ADC0809的IN0通道,利用FPGA设计电路控制ADC0809对该输入电压进行模/数转换,并将转换的结果(十六进制数)输出至数码管显示。2、功能键:(1) 停止(2) 启动3、利用FPGA设计电路实现对数/模转换器DAC0832的驱动,并将模/数转换器ADC0809的转换结
11、果(数字量)通过DAC0832转换为模拟量的输出。3 课程设计思路及原理3.1 课程设计总体方案3.1.1 设计思路先将每一个模块分别设计出来,再由软件生成图形,最后用软件连线,定义好每个引脚,最后在试验箱上进行最后的验证(1)设计分频电路FEN模块。(2)设计时序控制AD0809模块。(3)设计进制转换DDDF模块。(4)设计YM模块,用于控制数码管的位码。(5)设计DISP模块,用于控制数码管的段码。3.1.2 设计流程图DISPYMDDDFAD0809FEN分频器模拟信号数码管显示DA0832模拟量输出3.2 课程设计原理3.2.1 模拟量采集设计原理1 先通过电位器来调节可变电压2 把
12、调节电压输入到模/数转换器ADC0809的INO通道3 利用FPGA设计电路控制ADC0809对该输入进行模/数转换4 将结果输出到数码管显示5 利用FPGA设计电路控制DAC0832对该输入进行数/模转换3.2.2 FPGA应用原理FPGA是英文Field Programmable Gate Array的缩写,即现场可编程门阵列,它是在PAL、GAL、EPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。 FPGA采用了逻辑单元阵列LCA(Logic Cell Array
13、)这样一个新概念,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输出输入模块IOB(Input Output Block)和内部连线(Interconnect)三个部分。FPGA的基本特点主要有: 1)采用FPGA设计ASIC电路,用户不需要投片生产,就能得到合用的芯片。 2)FPGA可做其它全定制或半定制ASIC电路的中试样片。 3)FPGA内部有丰富的触发器和IO引脚。 4)FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。 5)FPGA采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容。 可以说,FPGA芯片是小批量系
14、统提高系统集成度、可靠性的最佳选择之一。 目前FPGA的品种很多,有XILINX的XC系列、TI公司的TPC系列、ALTERA公司的FIEX系列等。 FPGA是由存放在片内RAM中的程序来设置其工作状态的,因此,工作时需要对片内的RAM进行编程。用户可以根据不同的配置模式,采用不同的编程方式。 加电时,FPGA芯片将EPROM中数据读入片内编程RAM中,配置完成后,FPGA进入工作状态。掉电后,FPGA恢复成白片,内部逻辑关系消失,因此,FPGA能够反复使用。FPGA的编程无须专用的FPGA编程器,只须用通用的EPROM、PROM编程器即可。当需要修改FPGA功能时,只需换一片EPROM即可。
15、这样,同一片FPGA,不同的编程数据,可以产生不同的电路功能。因此,FPGA的使用非常灵活。 FPGA有多种配置模式:并行主模式为一片FPGA加一片EPROM的方式;主从模式可以支持一片PROM编程多片FPGA;串行模式可以采用串行PROM编程FPGA;外设模式可以将FPGA作为微处理器的外设,由微处理器对其编程。3.2.3 VHDL语言VHDL语言目前在数字设计领域已为广大设计者所接受,众多CAD厂商纷纷使自己新开发的电子设计软件与VHDL兼容,VHDL语言成了电子设计工程师必须掌握的工具。在目前,CPU和可编程逻辑器件已经成为数字系统的硬件基础,从事数字系统的设计必须掌握可编程逻辑器件的设
16、计方法,而VHDL语言作为可编程逻辑器件设计时最重要的输入方法,为所有可编程逻辑器件厂商所支持。因此要从事可编程逻辑器件的设计工作,必须掌握VHDL语言。VHDL的英文是Very-High-Speed Integrated Circuit HardwareDescription Language,诞生于1982年。1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言 。自IEEE公布了VHDL的标准版本,IEEE-1076(简称87版)之后,各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具可以和VHDL接口。此后VHDL在电子设计领域得到了广泛的接受,并逐步取代
17、了原有的非标准的硬件描述语言。1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展VHDL的内容,公布了新版本的VHDL,即IEEE标准的1076-1993版本,(简称93版)。现在,VHDL和Verilog作为IEEE的工业标准硬件描述语言,又得到众多EDA公司的支持,在电子工程领域,已成为事实上的通用硬件描述语言。有专家认为,在新的世纪中,VHDL于Verilog语言将承担起大部分的数字系统设计任务。VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。VHDL的
18、程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可是部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。 开始初始化参数输出段码输出位码位码移位结束循环结束 图4.4 数码管显示仿真电路图4.3 ADC0809的应用ADC0809带有8通道多路开关,单片COMS器件,采用逐次逼近法进行转换。它的转换时间为100s,分辨率为8位,转换误差小于LSB/2,单电源5V供电,输入模拟电压范围为05V,内部集成了可以锁存控制的8路模拟多路开关
19、,输出采用三态输出锁存器,电平与TTL电平兼容。4.3.1 ADC0809内部结构ADC0809内部结构如图4.2所示。图4.5 ADC0809内部结构图由上图可知,ADC0809由一个8路模拟开关、一个地址锁存与译码器、一个A/D转换器和一个三态输出锁存器组成。多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。三态输出锁器用于锁存A/D转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。ADC0809 芯片性能特点: 是一个逐次逼近型的A/D 转换器,外部供给基准电压;单通道转换时间116s;分辨率为8 位,带有三态输出锁存器,转换结束时,
20、可由CPU 打开三态门,读出8 位的转换结果;有8 个模拟量的输入端,可引入8 路待转换的模拟量。ADC0809 的数据输出结构是内部有可控的三态缓冲器,所以它的数字量输出信号线可以与系统的数据总线直接相连。内部的三态缓冲器由OE 控制,当OE 为高电平时,三态缓冲器打开,将转换结果送出;当OE 为低电平时,三态缓冲器处于阻断状态,内部数据对外部的数据总线没有影响。因此,在实际应用中,如果转换结束,要读取转换结果,则只要在OE 引脚上加一个正脉冲,ADC0809 就会将转换结果送到数据总线上。4.3.2 ADC0809引脚功能图4.6 ADC0809引脚结构1、模拟信号输入IN0IN7: IN
21、0-IN7 为八路模拟电压输入线,加在模拟开关上,工作时采用时分割的方式,轮流进行A/D 转换。2、地址输入和控制线 :地址输入和控制线共4 条,其中ADDA、ADDB 和ADDC 为地址输入线,用于选择IN0-IN7 上哪一路模拟电压送给比较器进行A/D 转换。ALE 为地址锁存允许输入线,高电平有效。当ALE 线为高电平时,ADDA、ADDB和ADDC 三条地址线上地址信号得以锁存,经译码器控制八路模拟开关通路工作。3、数字量输出及控制线(11 条):START 为“启动脉冲”输入线,上升沿清零,下降沿启动ADC0809 工作。EOC 为转换结束输出线,该线高电平表示AD 转换已结束,数字
22、量已锁入“三态输出锁存器”。D0-D7 为数字量输出线,D7 为最高位。ENABLE 为“输出允许”线,高电平时能使D0-D7 引脚上输出转换后的数字量。4、电源线及其他(5 条):CLOCK 为时钟输入线,用于为ADC0809 提供逐次比较所需,一般为640kHz 时钟脉冲。Vcc 为+5V 电源输入线,GND 为地线。+VREF 和-VREF 为参考电压输入线,用于给电阻网络供给标准电压。+VREF 常和VDD 相连,-VREF 常接地。4.4 DAC0832的应用DAC0832是采样频率为八位的D/A转换器件。4.4.1 DAC0832内部结构DAC0832内部结构资料:芯片内有两级输入
23、寄存器,使DAC0832具备双缓冲、单缓冲和直通三种输入方式,以便适于各种电路的需要(如要求多路D/A异步输入、同步转换等)。D/A转换结果采用电流形式输出。要是需要相应的模拟信号,可通过一个高输入阻抗的线性运算放大器实现这个供功能。运放的反馈电阻可通过RFB端引用片内固有电阻,海可以外接。 该片逻辑输入满足TTL电压电平范围,可直接与TTL电路或微机电路相接,下面是芯片电路内部结构图:图4.7 DAC0832内部结构图4.4.2 DAC0832引脚功能DAC0832引脚图如下所示:图4.8 DAC0832引脚结构图D0D7:8位数据输入线,TTL电平,有效时间应大于90ns(否则锁存器的数据
24、会出错);ILE:数据锁存允许控制信号输入线,高电平有效;CS:片选信号输入线(选通数据锁存器),低电平有效;WR1:数据锁存器写选通输入线,负脉冲(脉宽应大于500ns)有效。由ILE、CS、WR1的逻辑组合产生LE1,当LE1为高电平时,数据锁存器状态随输入数据线变换,LE1的负跳变时将输入数据锁存;XFER:数据传输控制信号输入线,低电平有效,负脉冲(脉宽应大于500ns)有效;WR2:DAC寄存器选通输入线,负脉冲(脉宽应大于500ns)有效。由WR1、XFER的逻辑组合产生LE2,当LE2为高电平时,DAC寄存器的输出随寄存器的输入而变化,LE2的负跳变时将数据锁存器的内容打入DAC
25、寄存器并开始D/A转换。IOUT1:电流输出端1,其值随DAC寄存器的内容线性变化;IOUT2:电流输出端2,其值与IOUT1值之和为一常数;Rfb:反馈信号输入线,改变Rfb端外接电阻值可调整转换满量程精度;Vcc:电源输入端,Vcc的范围为+5V+15V;VREF:基准电压输入线,VREF的范围为-10V+10V;AGND:模拟信号地;DGND:数字信号地; 4.5 实验仿真图形实验仿真图形如下图所示:图4.9 实验仿真图形5 课程设计心得体会这次EDA课程设计历时两个星期,前面几天就是在寝室学习和熟悉MAX+plus软件,学到了很多很多的东西,同时不仅可以巩固以前所学过的知识,而且学到了
26、很多在书本上所没有学到过的知识。过程中也遇到了很多问题,不过及时的问老师解决问题,使我更加了解了模拟量采集的原理。在自己有余的时间还帮助同学修改性能指标,通过这次设计,进一步加深了对EDA的了解,让我对它有了更加浓厚的兴趣。特别是当每一步成功时,心里特别的开心。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟是第一次接触EDA设计,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己不足之处
27、,对以前所学过的知识理解得不够深刻,掌握得不够牢固。 总的来说,这次模拟量采集的设计还是比较成功的,在设计中遇到了很多问题,最后在老师的辛勤的指导下,终于游逆而解,有点小小的成就感,终于觉得平时所学的知识有了实用的价值,达到了理论与实际相结合的目的,不仅学到了不少知识,而且锻炼了自己的能力,使自己对以后的路有了更加清楚的认识,同时,对未来有了更多的信心。最后,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!参考文献1 阎石 主编,数字电子技术基础,高等教育出版社,19982 谭会生等主编,EDA技术及应用,西安电子科技大学出版社,20013 廖裕评等主编,CPLD数字电路设计使用MAX
28、+plus入门篇,清华大学出版社,20014 冯涛等主编,可编程逻辑器件开发技术:MAX+plus入门与提高,人民邮电出版社,20025 杨崇志,特殊新型电子元件手册,辽宁科学技术出版社,19996 彭介华,电子技术课程设计指导高等教育出版社.2000年出版.7 Mark Zwolinski, Digital System Design with VHDL, 电子工业出版社,20028 Alan B. Marcovitz Introduction to logic Design, 电子工业出版社,2002附录ADC0809控制模块源程序如下:library ieee;use ieee.std_
29、logic_1164.all;entity AD0809 isport(clk,eoc:in std_logic;din:in std_logic_vector(7 downto 0);start,oe,ale:out std_logic;dout:out std_logic_vector(7 downto 0);end AD0809 ;architecture AD0809_arc of AD0809 isbeginprocess(clk)variable x,y:std_logic;variable state:integer range 0 to 2; beginif clkevent
30、and clk=1 thenif x=0 thencase state iswhen 0=alestartale=0;startoedoutoe=0;state:=0;x:=0;y:=0;end case; end if; end if; end if; end if; end process;end AD0809_arc;DAC0832控制模块源程序如下:library IEEE;use IEEE.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity bcd_to_8421
31、 isport(clk: in std_logic;reset: in std_logic; bcd: in std_logic_vector(7 downto 0);b_out: out std_logic_vector(7 downto 0);end bcd_to_8421;architecture bcd_arch of bcd_to_8421 issignal da,db: std_logic_vector(7 downto 0);beginprocess(reset,clk,bcd)beginif clkevent and clk=1 thenif reset=0 thenda=00
32、000000;db=00000000; b_out=00000000;elseda=00110010 then db=11111111;elsedb=da*101; end if;b_out=db;end process;end bcd_arch;分频电路FEN模块源程序如下:library ieee;use ieee.std_logic_1164.all;entity fen isport(clk4m:in std_logic;q:out std_logic );end fen;architecture fen_arc of fen isbeginprocess(clk4m)variable
33、 cnt:integer range 0 to 3; variable x:std_logic;begin if clk4mevent and clk4m=1 thenif cnt3 then cnt:=cnt+1; elsecnt:=0;x:=not x;end if; end if;q=x;end process;end fen_arc;用数码管显示模数A/D转换器的输入电压源程序如下:library IEEE;use IEEE.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;e
34、ntity dddf isport(in_all: in STD_LOGIC_VECTOR(7 downto 0);out_l,out_h,out_hh,out_hhh:out STD_LOGIC_VECTOR (3 downto 0);clk24,clr:in std_logic);end dddf;architecture def_arch of dddf issignal b1,b2,b3,b4:std_logic_vector(3 downto 0);signal a:std_logic_vector(1 downto 0);signal mid:std_logic_vector(11
35、 downto 0);signal e,f:std_logic_vector(11 downto 0);signal big,bigg,biggg:integer range 0 to 10000000;beginprocess(clk24,in_all,clr)beginif clk24event and clk24=1 thenif clr=0 thena=00;b1=0000;b2=0000;b3=0000;b4e=0000&in_all;biggg=conv_integer(e);bigg=biggg*5000;big=bigg/256;f=conv_std_logic_vector(
36、big ,12); mid=f;aif mid=1010 then mid=mid-1010;b2=b2+1;if b2=1001 thenb2=0000;b3=b3+1;if b3=1001 thenb3=0000;b4=b4+1;end if; end if;elseb1=mid(3 downto 0);end if;anull;end case;end if;end if;end process;out_l=b1;out_h=b2;out_hh=b3;out_hhh=b4;end def_arch;4位二-十进制数转换数码管字符源程序如下:library IEEE;use IEEE.st
37、d_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity disp isport(clk64:in std_logic;inl:in std_logic_vector(3 downto 0);inm:in std_logic_vector(3 downto 0);inh:in std_logic_vector(3 downto 0);inhh:in std_logic_vector(3 downto 0);midd:out std_logic_vector(7 downto 0);d
38、isp1:out std_logic_vector(1 downto 0);end disp;architecture arch of disp issignal mid: std_logic_vector(4 downto 0);signal disp2: std_logic_vector(1 downto 0);beginprocess(clk64,inl,inm,inh,inhh)beginif clk64event and clk64=1 thenif disp2=11 thendisp2=00;elsedisp2= disp2+1;end if;disp1midmidmidmidnull;end case;case mid iswhen00000=middmiddmiddmiddmiddmiddmiddmiddmiddmiddmiddmiddmiddmiddmiddmiddmiddmiddmiddmiddnull;end case;end i