基于的数字电压表设计_第1页
基于的数字电压表设计_第2页
基于的数字电压表设计_第3页
基于的数字电压表设计_第4页
基于的数字电压表设计_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

(优选)基于的数字电压表设计现在是1页\一共有23页\编辑于星期二实验设计思路数字电压表设计核心:FPGA设计,FPGA负责ADC0809的启动以及转换数据的读取,再将读取的8位二进制数据进行变换,形成便于输出的3位LED段码送给LED数码管,显示被测电压值。FPGA的设计主要包括几个部分:

ADC0809转换控制模块实现ADC0809的启动以及转换数据的读取;数据处理模块实现ADC08094位数字量对应BCD码的变换和处理;显示控制模块实现LED段码译码输出。现在是2页\一共有23页\编辑于星期二ADC0809与FPGA接口电路

ADC0809是CMOS的8位A/D转换器,片内有8路模拟开关,可控制8个模拟量中的一个进入转换器中。ADC0809的精度是8位,转换时间约为100µs,含锁存控制的8路开关,输出有三态缓冲控制,单5V电源供电。

现在是3页\一共有23页\编辑于星期二FPGA与ADC0809接口电路原理图

现在是4页\一共有23页\编辑于星期二ADC0809与FPGA接口电路设计IO_B13、B4、B12、B7、B14、B15、B16、B17接收ADC08098位数数据;IO_B10接收ADC0809转换结束信号EOC;IO_B21、B20、B19为ADC0809提供8路模拟信号开关的3位地址选通信号(ADD-A~C);IO_B18为ADC0809提供地址锁存控制信号ALE:高电平时把三个地址信号送入地址锁存器,并经译码器得到地址输出,以选择相应的模拟输入通道;接下页现在是5页\一共有23页\编辑于星期二IO_B6为ADC0809提供输出允许控制信号ENABLE:电平由低变高时,打开输出锁存器,将转换结果的数字量送到数据总线上;IO_B11为ADC0809提供启动控制信号START:一个正脉冲过后A/D开始转换;IO_B5为ADC0809提供时钟信号信号CLOCK;IN0~IN7:8路模拟信号输入端口;Vref+和Vref-:参考电压输入端口;现在是6页\一共有23页\编辑于星期二ADC0809VHDL采样控制程序设计现在是7页\一共有23页\编辑于星期二ADC0809的工作时序图

现在是8页\一共有23页\编辑于星期二START是转换启动信号,一个正脉冲过后A/D开始转换;ALE是3位通道选择地址(ADDC、ADDB、ADDA)信号锁存信号。当模拟量送至某一输入端(如IN-0或IN-1)等,由3位地址信号选择,而地址信号由ALE锁存。EOC是转换情况状态信号,当启动转换约100μs后,EOC产生一个负脉冲,以示转换结束。在EOC的上升沿后,且输出使能信号ENABLE为高电平,则控制打开三态缓冲器,把转换好的8位数据送至数据总线。至此ADC0809的一次转换结束

现在是9页\一共有23页\编辑于星期二ADC0809采样控制状态图

FPGA器件可以根据其采样时序用状态机来描述采样控制过程,其状态转换关系如左图所示。现在是10页\一共有23页\编辑于星期二ADC0809VHDL采样控制程序

现在是11页\一共有23页\编辑于星期二ADC0809采样控制程序电路符号

现在是12页\一共有23页\编辑于星期二程序的端口信号与中间信号entityADC0809isport(d:instd_logic_vector(7downto0);--ADC0809输出的采样数据

clk,eoc:instd_logic;--clk为系统时钟,eoc为ADC0809转换结束信号clk1,start,ale,en:outstd_logic;--ADC0809控制信号

abc_in:instd_logic_vector(2downto0);--模拟选通信号abc_out:outstd_logic_vector(2downto0);--ADC0809模拟信号选通信号

q:outstd_logic_vector(7downto0));--送至8个并排数码管信号endADC0809;architecturebehavofADC0809istypestatesis(st0,st1,st2,st3,st4,st5,st6);--定义各状态的子类型signalcurrent_state,next_state:states:=st0;signalregl:std_logic_vector(7downto0);--中间数据寄存信号signalqq:std_logic_vector(7downto0);begin现在是13页\一共有23页\编辑于星期二状态转换模块(com)casecurrent_stateiswhenst0=>next_state<=st1;ale<='0';start<='0';en<='0';whenst1=>next_state<=st2;ale<='1';start<='0';en<='0';whenst2=>next_state<=st3;ale<='0';start<='1';en<='0';whenst3=>ale<='0';start<='0';en<='0';ifeoc='1'thennext_state<=st3;--检测EOC的下降沿

elsenext_state<=st4;endif;whenst4=>ale<='0';start<='0';en<='0';ifeoc='0'thennext_state<=st4;--检测EOC的上升沿

elsenext_state<=st5;endif;whenst5=>next_state<=st6;ale<='0';start<='0';en<='1';whenst6=>next_state<=st0;ale<='0';start<='0';en<='1';regl<=d;whenothers=>next_state<=st0;ale<='0';start<='0';en<='0';endcase;现在是14页\一共有23页\编辑于星期二分频模块(clock)clock:process(clk)--对系统时钟进行分频,得到ADC0809转换工作时钟beginifclk'eventandclk='1'thenqq<=qq+1;--在clk1的上升沿,转换至下一状态ifQQ="01111111"THENclk1<='1';current_state<=next_state;elsifqq<="01111111"thenclk1<='0'; endif;endif;endprocess;q<=regl;abc_out<=abc_in;endbehav;现在是15页\一共有23页\编辑于星期二

显示模块

现在是16页\一共有23页\编辑于星期二显示模块libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entityvalconvisport( q:instd_logic_vector(7downto0);--ad a:outstd_logic_vector(6downto0);--小数点后第2位 b:outstd_logic_vector(6downto0);--小数点后第1位 c:outstd_logic_vector(6downto0));--个位

endvalconv;现在是17页\一共有23页\编辑于星期二显示模块architecturebhvofvalconvis signalvar1,var2,var3:integer;--分别对应将二进制数据转化为十进制beginprocess(q)--数据读出时转化成十进制并显示beginvar1<=50*CONV_INTEGER(q)/2550;--计算个位var2<=50*CONV_INTEGER(q)/255rem10;--计算小数点后第一位var3<=500*CONV_INTEGER(q)/255rem10;--计算小数点后第二位现在是18页\一共有23页\编辑于星期二显示模块casevar1is--对个位译码

when0=>c<="1000000";--0 when1=>c<="1111001";--1 when2=>c<="0100100";--2 when3=>c<="0110000";--3 when4=>c<="0011001";--4 when5=>c<="0010010";--5 when6=>c<="0000010";--6 when7=>c<="1111000";--7 when8=>c<="0000000";--8 when9=>c<="0010000";--9 whenothers=>c<="1111111";endcase;现在是19页\一共有23页\编辑于星期二显示模块casevar2is--对小数点后第一位译码

when0=>b<="1000000"; when1=>b<="1111001"; when2=>b<="0100100"; --2 when3=>b<="0110000"; --3 when4=>b<="0011001"; --4 when5=>b<="0010010"; --5 when6=>b<="0000010"; --6 when7=>b<="1111000"; --7 when8=>b<="0000000"; --8 when9=>b<="0010000"; --9 whenothers=>b<="1111111";endcase;现在是20页\一共有23页\编辑于星期二显示模块casevar3is--对小数点后第二位译码

when0=>a<="1000000"; when1=>a<="1111001"; when2=>a<="0100100"; --2 when3=>a<="0110000"; --3 when4=>a<="0011001"; --4 when5=>a<="0010010"; --5 when

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论