简易电压表设计实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数字电路与逻辑设计实验

实验报告

课题名称:简易数字电压表的设计

学院:信息与通信工程学院

班级:

姓名:

学号:

班内序号:

一.设计课题的任务要求

设计并实现一个简易数字电压表,要求使用实验板上的串行AD 芯片ADS7816。

1. 基本要求:

(1)测量对象:1~2 节干电池。

(2)AD 参考电压:2.5V。

(3)用三位数码管显示测量结果,保留两位小数。

(4)被测信号超过测量范围有溢出显示并有声音提示。

(5)按键控制测量和复位。

2. 提高要求:

(1)能够连续测量。

(2)自拟其他功能。

二. 系统设计(包括设计思路、总体框图、分块设计)

1. 设计思路

本次实验利用ADS7816作为电压采样端口,FPGA作为系统的核心器件,用LED数码管进行已测电压值的显示,先把读取的12位串行二进制数据转换成并行的12位二进制数据,然后再把并行的12位二进制数据转换成便利于输出的3位十进制BCD码送给数码管,以显示当前测量电压值。这些工作由ADS7816转换控制模块、数据转换控制模块、译码显示模块完成。

2. 总体框图

3. 分块设计

3.1 ADS7816转换控制模块

(1)ADS7816工作原理

在ADS7816的工作时序中,串行时钟DCLK用于同步数据转换,每位转换后的数据在DCLK 的下降沿开始传送。因此,从Dout引脚接收数据时,可在DCLK的下降沿期间进行,也可以在DCLK的上升沿期间进行。通常情况下,采用在DCLK的上升沿接收转换后的各位数据流。CS 的下降沿用于启动转换和数据变换,CS有效后的最初1至2个转换周期内,ADS7816采样输入信号,此时输出引脚Dout呈三态。DCLK的第2个下降沿后,Dout使能并输出一个时钟周期的低电平的无效信号。在第4个时钟的上升沿,Dout开始输出转换结果,其输出数据的格式是最高有效位(B11位)在前。当最低有效位(B0位)输出后,若CS变为高电位,则一次转换结束,Dout显三态。

(2)元件设计:

en:A/D转换启动键,输入。输入高电平时开始转换。

clk:时钟输入。

ad_dat:ADS7816转换结束后的12位串行二进制数据输入端。

cs:A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。

data_out[11..0]:12位并行二进制数据输出端。

3.2 数据转换控制模块

(1)元件设计

en:开始测量键,输入。按键按下为高电平。

reset:复位键,输入。按键按下为高电平。

clk:时钟输入。

datain[11..0]:12位并行二进制数据输入端。

beef:蜂鸣器,高电平有效。

d2[3..0]:低四位十进制BCD码输出端

d3[3..0]:中四位十进制BCD码输出端

d4[3..0]:高四位十进制BCD码输出端

(2)状态说明

reset,en两个按键有四个状态组合00,01,10,11,按键按下为“1”,状态转移图如下所示,当状态为01,10时开始数据转换。

(3)数据处理

ADS7816是12位模数转换器,它的输出状态共有4096种,输入信号Ui为0~2.5V 电压范围,则每两个状态值为2.5/(4096-1),约为0.0006V,故测量分辨率为0.006V。常用测量方法是:当读取到DB11~DB0转换值是XXXH时,电压测量值为U≈XXXH×0.02V;考虑到直接使用乘法计算对应的电压值将耗用大量的FPGA内部组件,本设计用查表命令来得到正确的电压值。在读取到ADS7816的转换数据后,先用查表指令算出高,中,低4位的3个电压值,并分别用16位BCD码表示;接着设计16位的BCD码加法,如果每4位相加结果超过9需进行减10进1。这样得到模拟电压的BCD码。

3.3译码显示模块

clk1:时钟输入。

doo2[3..0]:低四位十进制BCD码输入端doo3[3..0]:中四位十进制BCD码输入端doo4[3..0]:高四位十进制BCD码输入端CAT[5..0]:片选信号,输出

seg[6..0]:7段数码管显示,输出

dp:小数点显示,输出

三. 仿真波形及波形分析

1. ADS7816转换控制模块

cs下降沿后的第一个时钟周期上升的计数变量t=1,根据代码,当t=4时开始接收ADS7816传进来的第一个数据B11到data_out(11);t=5时开始接收ADS7816传进来的第二个数据B10到data_out(10);直到t=15时开始接收ADS7816传进来的第十二个数据B0到data_out(0),然后一次性将并行的12个数据data_out传给输出端da_out。

2. 数据转换控制模块

如图所示,当en有一个上升沿时,开始数据转换。例如从ADS转换控制模块接收的数据为“000110111101”时,查表可知输出电压应为0.154+0.106+0.008=0.26V,即d4=“0000”,d3=“0010”,d2=“0110”;而当reset有一个下降沿时,d4=“0000”,d3=“0000”,d2=“0000”;以上预计结果与仿真图输出相同,仿真结果正确。

3. 译码显示模块

图1

图2

仿真图中多个数码管是依次显示,当频率较高,切换速度足够快时,观察到所有数码管都是同时在显示。如图2,当输入是“000000100000”时,数码管显示“0.20”,CAT为“111110”时,seg为“1111110”,个位显示“0”;CAT为“1111101”时,seg为“1101101”,小数点第二位显示“2”。

四. 源程序

1. ADS7816转换控制模块

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_ARITH.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY ads IS

PORT(

en:in std_logic;

clk:in STD_LOGIC;

cs:out STD_LOGIC;

ad_dat: in std_logic;

相关文档
最新文档