简易电压表设计实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;