数字电压表设计实验_第1页
数字电压表设计实验_第2页
数字电压表设计实验_第3页
数字电压表设计实验_第4页
数字电压表设计实验_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

数字电压表设计何宾2008.11第13章数字电压表设计-本章概要本章给出了PLD器件在数字和模拟系统的典型应用-数字电压表的设计。数字电压表实际上是一个模拟和数字混合系统,该设计通过A/D转换器将模拟信号转换成离散的数字量,通过可编程逻辑器件PLD进行处理,最后通过7段数码管显示测量值。该章首先介绍了数字电压表的功能要求和整体结构;随后具体介绍了数字电压表的模块设计,其中包括数字电压表的控制信号、ADC转换原理和控制模块的具体结构。本章最后详细描述了设计的具体实现过程,具体包括ADC控制模块的原理及实现、显示控制模块原理及实现、顶层模块的设计。第13章数字电压表设计

-数字电压表的功能要求

数字电压表是一个模拟和数字混合系统,该数字电压表完成模拟直流信号的测试,并将结果在数码管上显示。数字电压表主要有以下几个功能:1、模拟信号通过ADC0809转换为离散的数字量,设计模块和ADC0809通过并口连接,并且向ADC0809发出控制信号;2、数字电压表设计模块,将外部的时钟信号分频后得到合适的采样时钟送给ADC0809;3、每当ADC0809完成一次模/数转换过程后,设计模块对采样数据进行处理,并通过3个7段数码管显示测量的直流电压值。第13章数字电压表设计

-数字电压表的整体结构

第13章数字电压表设计

-数字电压表的整体结构从图中可以看出,实验平台上,在PLD和ADC0809之间加入了ADC控制模块,由于该模块的加入使PLD产生ADC控制模块可以识别的信号,然后送到ADC0809。图中的PLD的设计部分和ADC控制模块、7段数码管、外部时钟信号、按键进行连接。第13章数字电压表设计

-数字电压表控制信号

该数字电压表的控制逻辑由PLD完成,该模块的输入和输出接口由下面信号组成:1、输入信号外部时钟信号(clk_in)外部复位信号(reset)ADC转换后的数字信号(din)ADC转换完的中断信号(INTR)第13章数字电压表设计

-数字电压表控制信号2、输出信号ADC片选信号(ncs)ADC读信号(nrd)ADC写信号(nwr)ADC通道选择信号(nadd)ADC时钟信号(nclock)LED选择信号(led_select)LED数码显示控制信号(seg)第13章数字电压表设计-ADC转换原理

ADC0809是CMOS的8位A/D转换器,片内有8路模拟开关,可控制8个模拟量中的一个进入转换器中。ADC0809的分辨率为8位,转换时间约100us,含锁存控制的8路多路开关,输出有三态缓冲器控制,单5V电源供电。第13章数字电压表设计-ADC转换原理第13章数字电压表设计-控制模块结构第13章数字电压表设计-控制模块结构1、ADC控制模块ADC控制模块产生ADC控制模块需要的控制信号,同时读取ADC转换后的中断信号和数据信号。该设计采用了教学实验系统,该系统的ADC控制模块接收ncs,nrd,nwr和nintr信号。图13.4给出了该模块的控制信号时序关系。第13章数字电压表设计-控制模块结构2、显示控制模块显示控制模块产生LED显示所需要的LED选择信号和LED数码控制信号。3、采样时钟生成模块采样时钟生成模块对外部输入的1MHz信号进行分频后,为ADC0809产生合适的采样时钟信号。4、扫描时钟生成模块扫描时钟生成模块对外部输入的1MHz信号进行分频后,为LED正确显示测量值产生合适的扫描时钟信号。第13章数字电压表设计

-主要控制信号说明

1、START是转换启动信号,高电平有效;

2、ALE是3位通道选择地址(ADDC、ADDB、ADDA)信号的锁存信号。当模拟量送至某一输入端(如IN1或IN2等),由3位地址信号选择,而地址信号由ALE锁存;

第13章数字电压表设计

-主要控制信号说明

3、EOC是转换情况状态信号,当启动转换约100us后,EOC产生一个负脉冲,以示转换结束;在EOC的上升沿后,若使输出使能信号OE为高电平,则控制打开三态缓冲器,把转换好的8位数据结果输出至数据总线。至此ADC0809的一次转换结束了。

第13章数字电压表设计-控制时序说明第13章数字电压表设计

-实验箱控制信号

在实验仪器中CS与WR相与后接在了ALE和START端,CS与RD相与后接在了OE端,通过对时序和电路的综合考虑,建议使用如下的AD控制时序。第13章数字电压表设计

-FSM的设计可以将整个控制分成4个步骤状态:S0、S1、S2、S3,各状态的动作方式如下:

1、状态S0:CS=1、WR=1、RD=0(由控制器发出信号要求ADC0809开始进行模/数信号的转换)。

2、状态S1:CS=0、WR=0、RD=0(ADC0809进行转换动作,转换完毕后INT将低电位升至高电位)。

3、状态S2:CS=1、WR=0、RD=1(由控制器发出信号以读取ADC0809的转换数据)。

4、状态S3:CS=0、WR=0、RD=0(由控制器读取数据总线上的数字转换数据)。第13章数字电压表设计

-FSM的状态图描述S1S2S3S4第13章数字电压表设计

-FSM的设计由上述的四个状态可以归纳出整个控制器的动作功能有:

1、负责在每个步骤送出所需的CS、WR、RD控制信号。

2、在状态S1时,监控INT信号是否由低变高,如此以便了解转换动作结束与否。

3、在状态S3,读取转换的数字量。第13章数字电压表设计

-编码转换电路

计算转换后的数字电压信号与BCD码的对应关系:对8位的ADC0809而言,它的输出准位共有2**8=256种,即它的分辨率是1/256。

VIN=输入到ADC0808的电压

Vfs=满量程电压

VZ=0电压

DX=输出的数字量

DMAX=最大数字量

DMIN=最小数字量

第13章数字电压表设计

-编码转换电路假设输入信号为0~5V电压范围,参考电压(Vref/2)为2.56V时,则它最小输出电压是5V/256=0.01953V,这代表ADC0809所能转换的最小电压值,我们在该实验中取最小电压准位为0.02V。当ADC0809收到的信号是01110110(76H),则其对应的电压值为:76H×0.02V=2.36V第13章数字电压表设计

-编码转换电路要实现电压值与BCD码的对应关系用多种方法(如查表法、比较法等)。查表法需要写大量的数据,比较麻烦,在示例程序中使用了比较法。第13章数字电压表设计-具体算法例如:10100101表示165*2=330=101001010165/255*5=3.26,用三个七段数码管显示,分离326=0011,0010,0110将1010高四位,0101低四位分离.0101表示0000,0000,1010,BCD码11010表示0010,1100,0000,BCD码2下面就是BCD码1+BCD码2第13章数字电压表设计-具体算法

0000,0000,1010+0010,1100,0000,

0010,1100,10100000,0011,0000

比如:9+1=10,6+7=13,BCD码的加法实际上就是10进制的加法判断:由于BCD码显示0-9,所以加法运算要符合BCD码的运算当>9时,BCD+6,并且+1进位否则<9,BCD<=BCD+1第13章数字电压表设计-VHDL描述libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;librarywork;usework.disp_driver.all;entitydisp_controllerisport( rst:instd_logic;scan_clk:instd_logic;din:instd_logic_vector(7downto0);sel:outstd_logic_vector(1downto0);seg:outstd_logic_vector(6downto0);dp:outstd_logic);enddisp_controller;第13章数字电压表设计-VHDL描述architectureBehavioralofdisp_controllerissignalvol_value:std_logic_vector(7downto0);signalbcd_value:std_logic_vector(11downto0);signalbcd_h,bcd_l:std_logic_vector(11downto0);signalscan_out:std_logic_vector(1downto0);begin第13章数字电压表设计-VHDL描述process(rst,scan_clk)begin

if(rst='0')then

vol_value<="00000000";

bcd_value<="000000000000";

elsif(rising_edge(scan_clk))then

vol_value<=din;

bcd_h<=bin_bcd(vol_value(7downto4),'1');

bcd_l<=bin_bcd(vol_value(3downto0),'0');

bcd_value<=bcd_h+bcd_l;if(bcd_value(3downto0)>"1001")then

bcd_value<=bcd_value+"000000000110";endif;if(bcd_value(7downto4)>"1001")then

bcd_value<=bcd_value+"000001100000";endif;endif;endprocess;第13章数字电压表设计-VHDL描述process(scan_clk)begin

if(rising_edge(scan_clk))then

if(scan_out="10")then

scan_out<="00";else

scan_out<=scan_out+'1';endif;endif;endprocess;第13章数字电压表设计-VHDL描述process(scan_out)begincasescan_outiswhen"00"=>

seg<=display(bcd_value(3downto0));sel<="00";dp<='0';when"01"=>

seg<=display(bcd_value(7downto4));sel<="01";dp<='0';when"10"=>

seg<=display(bcd_value(11downto8));sel<="10";dp<='1';whenothers=>

seg<=display("1111");sel<="11";dp<='1';endcase;endprocess;endBehavioral;第13章数字电压表设计-程序包的设计

在该设计中,在处理数码管显示部分会多次使用到BCD码到7段码,为了提高对程序代码的复用和减少程序代码长度,在设计中将BCD码到7段码的转换过程通过函数调用实现。下面给出在程序包中的函数声明过程。第13章数字电压表设计-程序包的设计libraryIEEE;useIEEE.STD_LOGIC_1164.all;packagedisp_driverisfunctiondisplay(a:instd_logic_vector(3downto0))returnstd_logic_vector;functionbin_bcd(bin:instd_logic_vector(3downto0);flag:std_logic)returnstd_logic_vector;enddisp_driver;第13章数字电压表设计-程序包的设计packagebodydisp_driverisfunctionbin_bcd(bin:std_logic_vector;flag:std_logic)returnstd_logic_vectorisvariablebcd_x:std_logic_vector(11downto0);beginif(flag='0')thencasebiniswhen"0000"=>bcd_x:="000000000000";when"0001"=>bcd_x:="000000000010";when"0010"=>bcd_x:="000000000100";when"0011"=>bcd_x:="000000000110";when"0100"=>bcd_x:="000000001000";when"0101"=>bcd_x:="000000001010";when"0110"=>bcd_x:="000000001100";when"0111"=>bcd_x:="000000001110";when"1000"=>bcd_x:="000000010000";when"1001"=>bcd_x:="000000010010";when"1010"=>bcd_x:="000000100000";when"1011"=>bcd_x:="000000100010";when"1100"=>bcd_x:="000000100100";when"1101"=>bcd_x:="000000100110";when"1110"=>bcd_x:="000000101000";when"1111"=>bcd_x:="000000110000";whenothers=>bcd_x:="111111111111";endcase;elsif(flag='1')then第13章数字电压表设计-程序包的设计casebiniswhen"0000"=>bcd_x:="000000000000";when"0001"=>bcd_x:="000000110010";when"0010"=>bcd_x:="000001100100";when"0011"=>bcd_x:="000010010110";when"0100"=>bcd_x:="000100101000";when"0101"=>bcd_x:="000101100000";when"0110"=>bcd_x:="000110010010";when"0111"=>bcd_x:="001000100100";when"1000"=>bcd_x:="001001010110";when"1001"=>bcd_x:="001010001000";when"1010"=>bcd_x:="001100110010";when"1011"=>bcd_x:="001101010010";when"1100"=>bcd_x:="001110000100";when"1101"=>bcd_x:="010000010110";when"1110"=>bcd_x:="010001001000";when"1111"=>bcd_x:="010010000000";whenothers=>bcd_x:="111111111111";endcase;endif;returnbcd_x;endbin_bcd;第13章数字电压表设计-程序包的设计functiondisplay(a:std_logic_vector)returnstd_logic_vectorisvariabler:std_logic_vector(6downto0);begincaseaiswhen"0000"=>r:="0111111";when"0001"=>r:="0000110";when"0010"=>r:="1011011";when"0011"=>r:="1001111";when"0100"=>r:="1100110";when"0101"=>r:="1101101";when"0110"=>r:="1111101";when"0111"=>r:="0000111";when"1000"=>r:="1111111";when"1001"=>r:="1101111";whenothers=>r:="1111111";endcase;returnr;enddisplay;enddisp_driver;第13章数字电压表设计-顶层模块libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entitytopisport(rst:instd_logic;clk:instd_logic;int:instd_logic;cs:outstd_logic;wr:outstd_logic;rd:outstd_logic;din:instd_logic_vector(7downto0);sel:outstd_logic_vector(1downto0);seg:outstd_logic_vector(6downto0);dp:outstd_logic);endtop;第13章数字电压表设计-顶层模块architectureBehavioraloftopissignald:std_logic_vector(7downto0);componentadc0809_controllerport(clk:instd_logic;rst:instd_logic;int:instd_logic;cs:outstd_logic;wr:outstd_logic;rd:outstd_logic;din:instd_logic_vector(7downto0);dout:outstd_logic_vector(7downto0));endcomponent;第13章数字电压表设计-顶层模块componentdisp_controllerport(rst:instd_logic;scan_clk:instd_logic;din:instd_logic_vector(7downto0);sel:outstd_logic_vector(1downto0);seg:outstd_logic_vector(6downto0);dp:outstd_logic);endcomponent;第13章数字电压表设计-顶层模块Inst_adc0809_controller1:adc0809_controllerportmap(clk=>clk,rst=>rst,int=>int,cs=>cs,wr=>wr,rd=>rd,din=>din,dout=>d);第13章数字电压表设计-顶层模块Inst_disp_controller1:disp_controllerportmap(rst=>rst,scan_clk=>clk,din=>d,sel=>sel,seg=>seg,dp=>dp);endBehavioral;第13章数字电压表设计-顶层约束该设计在基于xilinx的SPARTAN3的xc3s400pqg208-4c器件上实现,在百科融创的EDA-IV实验平台上

温馨提示

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

评论

0/150

提交评论