ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:124.08KB ,
资源ID:10714307      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10714307.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于FPGA的数字电压表的设计.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于FPGA的数字电压表的设计.docx

1、基于FPGA的数字电压表的设计基于FPGA的数字电压表的设计基于FPGA的数字电压表的设计摘 要电子设计自动化(electronic design automation,EDA)是近几年迅速发展起来的将计算机软件、硬件、微电子技术交叉运用的现代电子设计技术。其中EDA设计语言中的VHDL语言是一种快速的电路设计工具,功能涵盖了电路描述、电路综合、电路仿真等三大电路设计内容。本电压表的电路设计正是用VHDL语言完成的。此次设计主要应用的软件是美国ALTERA公司自行设计的一种Quartus 。本次所设计的电压表的测量范围是05V,精度为0.01V。此电压表的设计特点为:通过软件编程下载到硬件实现

2、,设计周期短,开发效率高。关键词:电子设计自动化(EDA);FPGA;VHDL;A/D采集;数字电压表 Design of Dital Voltmeter Based on FPGAAbstractThe design of digital system is becoming faster, bulkier ,smaller and lighter than before. Electronic design automation is in the last few years quickly develop, it makes use of software , hardware ,mi

3、cro-electronics technology to form a course of electronic design. Among them , the VHDL language of EDA is a kind of tool of fast circuit design , the function covered the circuit describe , the circuit synthesize , the circuit imitate the true etc . The circuit of the design that use VHDL language

4、to complete . The this time design is primarily the applied software is Quartus lopment the efficiency is high. Key words: Electronic Design Automation (EDA);FPGA;VHDL;A/D Acquisition digital voltage第一章 绪 论1.1研究目的及意义数字电压表(Digital Voltmeter)简称DVM,是大学物理教学和实验中的重要仪表,其数字化是指将连续的模拟电压量转换成不连续、离散的数字量并加以显示。传统的

5、实验用模拟电压表功能单一、精度低、体积大,且存在读数时的视差,长时间连续使用易引起视觉疲劳,使用中存在诸多不便。而目前数字万用表的内部核心多是模数转换器,其精度很大程度上限制了整个表的准确度,可靠性较差。传统的数字电压表设汁通常以大规模ASIC(专用集成电路)为核心器件,并辅以少量中规模集成电路及显示器件构成。ASIC完成从模拟量的输入到数字量的输出,是数字电压表的心脏。这种电压表的设计简单、精确度高,但是这种设计方法由于采用了ASIC器件使得它欠缺灵活性,其系统功能固定,难以更新扩展。后来发展起来的用微处理器(单片机)控制通用A/D转换器件的数字电压表的设计的灵活性明显提高,系统功能的扩展变

6、得简单,但是由于微处理器的引脚数量有限,其控制转换速度和灵活性还是不能满足日益发展的电子工业的需求。而应用EDA(电子设汁自动化)技术及FPGA(现场可编程门阵列),其集成度高、速度快、性能十分可靠、用户可自由编程且编程语言通俗易懂、系统功能扩展非常方便。采用FPGA芯片控制通用A/D转换器可使速度、灵活性大大优于由微处理器和通用A/D转换器构成的数字电压表。本文采用8位AD转换器ADC0809对模拟电压采样,以一片高性能FPGA芯片为控制核心,以软件实现了诸多硬件功能,对电压信号的转换结果进行准确实时的运算处理并送出显示。系统的主要功能都集成在一块芯片上,大大减少了系统的分立元件数量,降低了

7、功耗,增加了可靠性,较好地实现了电压的精准测量。1.2本课题国内外研究概况、应用前景科学技术的发展为测量仪器、仪表提供了新原理和新技术以及新型的元、器体,同 时又对测量仪表提出了更新、更高的要求。数字电压表(简写为 DVM)就是在精密电测量技术、计算技术、自动化技术和电子技术的基础上产生和发展起来的。 数字式仪表是能把连续的被测量自动地变成断续的、用数字编码方式的、并以十进 制数字自动显示测量结果的一种测量仪表。这是一种新型仪表,它把电子技术、计算技术、自动化技术的成果与精密电测量技术密切的结合在一起。成为仪器、仪表领域中独 立而完整的一个分支。 1952 年,美国NLS公司首创四位数字电压表

8、,到现在的五十多年中经过了不断的改进和提高。电压表是从电位差计的自动化考虑中研制成功的,开始是四位然后是五位、六位,而现在发展到七位、八位数码显示;从最初的一、二种工作原理发展到几十种原理,从最早采用继电器、电子管发展到全晶体管化、集成电路化、微处理器化;认一台 DVM 只能测一、二种参数到能测十几种参数的多用型;显示器件也从辉光数码显示发展 到等离子体、发光二极管、液晶显示等。电压表的体积和功耗越来越小,重量不断减轻,价格也逐步下降,可靠性越来越高,量程范围也逐渐扩大。回顾一下电压表的发展过程,大致可分为以下三个阶段: 数字化阶段。5060 年代中期,电压表的特点是运用各种原理实现模数(AD

9、) 转换,即将模拟量转化成数字量,从而实现测量仪表的数字化。 高准确度阶段。由于精密电测量的需要,电压表开始向高准确度、高位数方向发展,出现了所谓复合型原理的仪表。 智能化阶段。60 年代末期,电子技术和工艺结构有了飞跃的发展,而大规模集成 电路(LSI)与计算机技术相结合的产物是微处理器(简写为 P)。1972 年,美国 Intel 公司首创微处理器不久即研制出微处理器式数字电压表,实现了电压表数据处理自动化和可编程序。因为带有存贮器并使用软件,所以可进行信息处理,可通过标准接口组成自动测试系统(简写为 ATS)。这些仪表除了完成原有电压表的各种功能外,还能够自校、 自检,保证了自动测量的高

10、准确度,实现了仪器、仪表的所谓“智能化”。当前,智能表发展十分迅速,而微处理式电压表在智能仪表中占的比重最大。智能化的电压表为实现各种物理量的动态测量提供了可能。第二章 硬件电路设计 2.1 ADC0809模块ADC0809是采样分辨率为8位的、以逐次逼近原理进行模数转换的器件。其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。2.1.1 A/D转换器的主要技术指标(1)分辨率分辨率是指A/D转换器能分辨的最小模拟输入量。通常用能转换成的数字量的位数来表示,如8位、10位、12位、16位等。位数越高,分辨率越高。例如,对于8位A/D转换

11、器,当输入电压满刻度为5V时,其输出数字量的变化范围为0255,转换电路对输入模拟电压的分辨能力为5V/25519.5mV。(2)转换时间转换时间是A/D转换器完成一次转换所需的时间。转换时间是编程时必须考虑的参数。若CPU采用无条件传送方式输入A/D转换后的数据,则从启动A/D芯片转换开始,到A/D芯片转换结束,需要一定的时间,此时间为延时等待时间,实现延时等待的一段延时程序,要放在启动转换程序之后,此延时等待时间必须大于或等于A/D转换时间。(3)量程量程是指A/D转换器所能转换的输入电压范围。(4)精度精度是指与数字输出量所对应的模拟输入量的实际值与理论值之间的差值。A/D转换电路中与每

12、一个数字量对应的模拟输入量并非是单一的数值,而是一个范围。 例如:对满刻度输入电压为5V的12位A/D转换器,122mV,定义为数字量的最小有效位LSB。若理论上输入的模拟量A,产生数字量D,而实际输入模拟量A产生还是数字量D,则称此转换器的精度为0LSB。当模拟电压或还是产生同一数字量D,则称其精度为1/4LSB。目前常用的A/D转换器的精度为1/42LSB。2.1.2 ADC0809工作原理 1.芯片介绍 ADC0809是CMOS的8位A/D转换器,片内有8路模拟开关,可控制8个模拟量中的一个进入转换器中。ADC0809的分辨率为8位,转换时间约1OOus,含锁存控制的8路多路开关,输出有

13、三态缓冲器控制,单5V电源供电。其实物图如所示。图3.2 AD0809实物图2.工作原理START是转换启动信号,高电平有效;ALE是3位通道选择地址(ADDC, ADDB, ADDA)信号的锁存信号。当模拟量送至某一输入端(IN I或IN2等),由3位地址信号选择,而地址信号由ALE锁存;EOC是转换情况状态信号(类似于AD574的STATUS),当启动转换约100us后,EOC产生一个负脉冲,以表示转换结束;在EOC的上升沿后,若使输出使能信号OE为高电平,则控制打开三态缓冲器,把转换好的8位数据结果输至数据总线。至此ADC0809的一次转换结束了。图3.3 ADC0809原理图各引脚功能

14、如下:1IN7IN0模拟量输入通道。ADC0809对输入模拟量的要求主要有:信号单极性,电压范围05V,若信号过小,还需进行放大。另外,模拟量输入在A/D转换的过程中,其值应保持不变,因此,对变化速度快的模拟输入量,在输入前应增加采样保持电路。2A、B、C地址线。A为低位地址,C为高位地址,用于对8路模拟通道进行选择,引脚图中相应为ADDA、ADDB和ADDC。其地址状态与通道的对应关系见表1-1。3ALE地址锁存允许信号。由低至高电平的正跳变将通道地址锁存至地址锁存器中。4START启动转换信号。START上跳沿时,所有内部寄存器清0;START下跳沿时,开始进行A/D转换。在A/D转换期间

15、,START应保持低电平。5D7D0数据输出线。为三态缓冲输出形式,可以和单片机的数据线直接相连。6OE输出允许信号。用于控制三态输出锁存器向单片机上输出转换得到的数据。OE=0,输出数据线呈高电阻态;OE=1,输出转换得到的数据。7CLOCK时钟信号。ADC0809内部没有时钟电路,所需时钟信号由外界提供,要求频率范围10kHz1.2MHz。通常使用频率为500 kHz的时钟信号。8EOC转换结束状态信号。EOC0,正在进行转换;EOC=1,转换结束。该状态信号既可作为查询的状态标志,又可以作为中断请求信号使用。9VCC+5V电源。10REF(+)、REF(-)参考电压。参考电压用来与输入的

16、模拟信号进行比较,作为逐次逼近的基准。其典型值为REF(+)=+5V,REF(-)=0V。2.1.3.工作时序ADC0809的工作时序如图3.4所示。 图3.4 ADC0809工作时序图2.1.4 ADC0809的工作过程首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入之一到比较器。START上升沿将逐次逼近寄存器复位。下降沿启动 AD转换,之后EOC输出信号变低,指示转换正在进行。直到AD转换完成,EOC变为高电平,指示AD转换结束,结果数据已存入锁存器,这个信号可用作中断申请。当OE输入高电平 时,输出三态门打开,转换结果的数字量输出到数据总线上。第三

17、章FPGA功能模块的设计及仿真3.1软件系统原理整个系统由三大模块组成(1)控制模块,A/D转换控制模块,用以初始化A/D转换器(即ADC0809)、并启动且接收ADC0809传递过来的数字转换值;(2)数据处理模块,将接收到的转换值调整成对应的数字信号;(3)显示模块,将数据处理模块输出的4位BCD码译成8位数据输出给LCD1602显示。具体工作方式如下图所示,首先,被测电压信号进入A/D转换器,FPGA中控制信号模块发出控制信号,启动A/D转换器进行转换,其采样得到的数字信号数据在相应的码制转换模块中转换为显示代码。最后译码驱动模块发出显示控制与驱动信号,驱动外部的LCD模块显示相应的数据

18、。3.2控制转换模块我们使用的FPGA是Altera公司的Cyclone器件EP2C8Q208C8,用状态机作法,产生ADC0809CCN的片选信号、读/写控制信号,通过状态信号EOC判断转换是否结束;转换结束后将转换数据锁存并输出。方框图如4.1图4.1 控制转换模块我们可以将整个控制转换分成5个步骤状态:状态0:ale=0;start=0;lock=0;oe=0,转换前对AD0809初始化;状态1:ale=1;start=1;lock=0;oe=0;-start=1,ale=1表示开始转换状态2:ale=0;start=0;lock=0;oe=0;状态3:ale=0;start=0;loc

19、k=0;oe=1;-oe=1表示从AD0809中读取出值状态4:ale=0;start=0;lock=1;oe=1;-lock=1表示锁存从AD0809中读出的值其程序为:beginlock_tnext_statenext_state if (eoc=1) then-eoc=1表明转换结束 next_state=s3; else next_statenext_statenext_statenext_stateale=0;start=0;lock=0;oeale=1;start=1;lock=0;oeale=0;start=0;lock=0;oeale=0;start=0;lock=0;oeal

20、e=0;start=0;lock=1;oeale=0;start=0;lock=0;oe=0; end case;end process COM2; -时序进程REG:process(clk,rst)begin if rst=0 then cs=s0; elsif clkevent and clk=1 then cs=next_state; end if;end process REG;-锁存器进程LATCH:process(lock)begin if lock=1 and lockevent then regl=d; end if;end process LATCH;3.3数据处理模块ADC

21、0809是8位模数转换器,它的输出状态共有256种,如果输入信号Ui为05V电压范围,则每两个状态值为5/(256-1),约为0.0196V,故测量分辨率为0.02V。常用测量方法是:当读取到DB7DB0转换值是XXH时,电压测量值为UXXH0.02V;考虑到直接使用乘法计算对应的电压值将耗用大量的FPGA内部组件,本设计用查表命令来得到正确的电压值。在读取到ADC0809的转换数据后,先用查表指令算出高、低4位的两个电压值,并分别用16位BCD码表示;接着设计16位的BCD码加法,如果每4位相加结果超过9需进行减10进1。这样得到模拟电压的BCD码。其方框图如图4.3图4.3数据处理模块其程

22、序为:data1=0000000000000000 when datain(7 downto 4)=0000 else 0000001100010011 when datain(7 downto 4)=0001 elsento 4)=0011 else 0000000000000000;data2=0000000000000000 when datain(3 downto 0)=0000 else 0000000000100000 when datain(3 downto 0)=0001 else 0000000000111001 when datain(3 downto 0)=0010 el

23、se 0000000001011001 when datain(3 downto 0)=0011 else 0000000001111000 when datain(3 downto 0)=0100 else 0000000010011000 when datain(3 downto 0)=0101 else 0000000100010111 when datain(3 downto 0)=0110 else 0000000100110111 when datain(3 downto 0)=0111 else 0000000101010110 when datain(3 downto 0)=1

24、000 else 0000000101110110 when datain(3 downto 0)=1001 else 0000000110010101 when datain(3 downto 0)=1010 else 0000001000010101 when datain(3 downto 0)=1011 else 0000001000110100 when datain(3 downto 0)=1100 else 0000001001010100 when datain(3 downto 0)=1101 else 0000001001110011 when datain(3 downt

25、o 0)=1110 else 0000001010010011 when datain(3 downto 0)=1111 else 0000000000000000;do1=(0 & data1(3 downto 0)+(0 & data2(3 downto 0);c1=00000 when do101010 else 00001;do2=(0 & data1(7 downto 4)+(0 & data2(7 downto 4)+c1;c2=00000 when do201010 else 00001;do3=(0 & data1(11 downto 8)+(0 & data2(11 down

26、to 8)+c2;c3=00000 when do301010 else 00001;do4=(0 & data1(15 downto 12)+(0 & data2(15 downto 12)+c3;doo1=do1 when do101010 else do1-01010;doo2=do2 when do201010 else do2-01010;doo3=do3 when do301010 else do3-01010;doo4=do4 when do401010 else do4-01010;本模块的功能仿真结果如图4.4所示;当转换数据为10110110,通过查表高4位1011是3.4

27、38V,而低4位0110是0.098V,最后的电压输出结果是3.438V+0.098V=3.536V,它的BCD码表示为,仿真结果正确。3.4扫描、显示模块ain30是数据处理模块输出的电压值的BCD码;lcd_rs是LCD1602的命令/数据选择信号;lcd_rw是LCD1602的读/写选择信号;lcd_en是LCD1602的使能信号;data是LCD1602的数据输入信号。其方框图如4.5图4.5显示模块其程序为:architecture one of lcd1602driver isconstant idle: std_logic_vector(7 downto 0):=00000000

28、;-闲置模式constant clear: std_logic_vector(7 downto 0):=00000001;-清屏模式constant setmode: std_logic_vector(7 downto 0):=00000010;-模式设置constant switchmode: std_logic_vector(7 downto 0):=00000100;-开关控制constant setfunction:std_logic_vector(7 downto 0):=00001000;-功能设置constant setddram: std_logic_vector(7 down

29、to 0):=00010000;-设置DDRAM地址constant writeram: std_logic_vector(7 downto 0):=00100000;-数据写入模式constant bufone: std_logic_vector(7 downto 0):=01000000;-缓冲一constant buftwo: std_logic_vector(7 downto 0):=10000000;-缓冲二 signal state:std_logic_vector(7 downto 0);-状态变量signal charcnt:integer range 0 to 79;-地址变量signal char_addr:std_logic_vector(7 downto 0);-读地址变量signal chardata:std_logic_ve

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1