简易电压表设计实验报告

合集下载

简易电压表设计实验报告

简易电压表设计实验报告

数字电路与逻辑设计实验实验报告课题名称:简易数字电压表的设计学院:信息与通信工程学院班级:姓名:学号:班内序号:一.设计课题的任务要求设计并实现一个简易数字电压表,要求使用实验板上的串行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转换启动键,输入。

练习使用电压表实验报告

练习使用电压表实验报告
班级 姓名
通过练习使用电压表,学会电压表的正确使用方法 电池组、电压表、小灯泡、若干导线、开关
一、提出问题: 如何正确使用电压表?
二、猜想和假设:


三、进行实验: 1.阅读电压表的连接,并思考课本的三个问题。 2.阅读电压表的读数,并说一说电压表的读数步骤。 3.用电压表测量电压。 如右图,先将电压表接在小灯泡两端,接通电路,读取数 据是 V;再将电压表接在电源两端,接通电路,读取数 据是 V。 四、分析与论证

只有一个用电器的电路中,用电器两端的电压与电源两端电压

五、评估、交流与合作

用电压表测电压实验报告单

用电压表测电压实验报告单

科目物理年级班级组别时间实验名称用电压表测电压
实验目的1.练习用电压表测干电池电压和一段电路两端的电压。

2.研究干电池串联和并联时的电压关系。

实验器材电源(干电池)、电池夹、灯座、小灯泡、开关、导线、电流表
实验过程
实验步骤:
一、先取三节干电池,分别测出每节电池的电压。

再将这三节干电池按图1-1串联
成电池组,测出串联电池组的电压,将测得的数据记到表1内。

分析串联电池组的电压
跟各节干电池电压之间的关系,写出结论。

二、将两节相同的干电池按图1-2并联组成电池组,用电压表测这个并联电池组的电压,
将测量数据填入表2内。

分析并联电池组的电压跟每节电池的电压之间的关系,写出结
论。

实验记录(实验数据、观察到的现象)
表1:串联电池组的电压
干电池Ⅰ的电压(V) 干电池Ⅱ的电压(V) 干电池Ⅲ的电压(V) 串联电池组的电压(V)
[结论]:。

表2:并联电池组的电压
干电池Ⅰ的电压(V) 干电池Ⅱ的电压(V) 并联电池组的电压(V)
[结论]:。

实验完毕,断开电源,整理仪器,进行总结。

实验结论由学生汇报实验数据和所得到的结论。

(1) 串联电池组的电压等于各节电池的电压之和。

(2) 并联电池组的电压等于每节电池的电压。

简易数字电压表 实验报告

简易数字电压表 实验报告

简易数字电压表设计实验报告姓名陈秀秀学号 201203870404指导教师贾立新专业班级电气1202 学院信息工程学院一.实验要求采用C8051F360单片机最小系统设计一简易数字电压表,实现对0~3.3V直流电压的测量,原理框图如图3-1所示。

模拟输入电压通过一只1 kΩ电位器产生,ADC0将模拟电压转换成数字量后换算成电压值,用十进制的形式在LCD上显示。

进一步,将单片机最小系统与PC通过RS-232通信电缆连接,将A/D转换的数字量在PC终端显示。

图3-1二.实验设计设计方案:由主程序、T0中断服务程序、ADC0中断服务程序组成。

具体流程图如下图3-2所示。

图3-2三.具体设计1.简易数字电压表设计F360初始化及LCD初始化(详细程序代码见附录)①内部振荡器初始化:OscInit()②I/O端口初始化:PortIoInit()③外部数据存储器接口初始化:XramInit()④定时器初始化:TimerInit()⑤中断系统初始化:Int0Init()⑥ADC0初始化:ADC_Init()⑦PCA初始化:PcaInit()2.电压转换方式(将电压转换为十进制)ADCDAT=ADC0H*256+ADC0L;VOLT=ADCDAT*2.4/1024=ADCDAT*0.002344;VOLTOUT=VOLT*1000;for(i=0;i<4;i++){VOLTBCD[i]=VOLTOUT%10;VOLTOUT=VOLTOUT/10;}3.LCD显示程序设计①检查LCD是否空闲子程序void CheckLcd(){uchar temp=0x00;uchar xdata *addr;while(1){addr=RCOMADDR;temp=*addr;temp&=0x80;if(temp==0x00)break;}}②电压值显示WriteCom(0x9C);WriteData(VOLTBCD[3]+0x30);WriteData(0x2E);WriteData(VOLTBCD[2]+0x30);WriteData(VOLTBCD[2]+0x30);WriteData(VOLTBCD[0]+0x30);WriteData(0x56);4.实验中AD转换方式选用逐次逼近型,A/D转换完成后得到10位数据分为高低字节存放在寄存器ADCOH和ADC0L中,此处选择右对齐,转换时针为2MHZ。

简易数字电压表设计报告

简易数字电压表设计报告

摘要--------------------------------------------------------2 1.数字电压表的简介------------------------------------------31.1数字电压表的发展--------------------------------------31.2数字电压表的分类--------------------------------------42.设计的目的------------------------------------------------53.设计的内容及要求------------------------------------------54.数字电压表的基本原理--------------------------------------54.1数字电压表各模块的工作原理----------------------------54.2数字电压表各模块的功能--------------------------------54.3数字电压表的工作过程----------------------------------65.实验器材--------------------------------------------------76.电路设计实施方案------------------------------------------76.1.实验步骤---------------------------------------------76.2各个模块设计------------------------------------------86.2.1 基准电压模块-----------------------------------86.2.2 3 1/2位A/D电路模块---------------------------106.2.3 字形译码驱动电路模块--------------------------126.2.4 显示电路模块----------------------------------136.2.5 字位驱动电路模块------------------------------167.总结-----------------------------------------------------17 参考文件---------------------------------------------------18 附录-------------------------------------------------------19本文介绍了一种简易数字电压表的设计。

简易电压表实验报告1

简易电压表实验报告1
第三章 芯片及软件介绍
3.1 ADC0809
3.1.1 引脚功能(外部特性)
ADC0809 芯片有 28 条引脚,采用双列直插式封装,如右图所示。各引脚功 能如下:
1~5,26~28(IN0~IN7):8 路模拟量输入端。 8,14,15,17~21:8 位数字量输出端。 22(ALE):地址锁存允许信号,输入,高电平有效。 6(START): A/D 转换启动脉冲输入端,输入一个正脉冲(至少 100ns 宽) 使其启动(脉冲上升沿使 0809 复位,下降沿启动 A/D 转换)。 7(EOC): A/D 转换结束信号,输出,当 A/D 转换结束时,此端输出一个 高电平(转换期间一直为低电平)。 9(OE):数据输出允许信号,输入,高电平有效。当 A/D 转换结束时,此 端输入一个高电平,才能打开输出三态门,输出数字量。
2.5.2 性能分析
由于单片机为 8 位处理器,当输入电压为 5.00V 时,输出数据值为 25(5 FFH), 因此单片机最大的数值分辨率为 0.0196V(5/255)。这就决定了该电压表的最大 分辨率(精度)只能达到 0.0196V。测试时电压数值的变化一般以 0.02 的电压 幅度变化,如要获得更高的精度要求,应采用 12 位、13 位的 A/D 转换器。
2.4 A/ 的转换流程图
数字量电压值输入 89C51
启动 ADC0809
等待转换是否结束
将结果转换成 BCD 码并输出 图 2-3 A/DC0809 的转换流程图
图 2-3 A/DC0809 的转换电路图
2.4 液晶显示部分
显示接口用来显示系统的状态,命令或采集的电压数据。本系统显示部分用 的是 LCD 液晶模块,采用一个 16×1 的字符型液晶显示模块, 点阵图形式液晶 由 M 行×N 列个显示单元组成,假设 LCD 显示屏有 64 行,每行有 128 列,每

基于单片机的电压表实验报告

基于单片机的电压表实验报告

附页:
一、学生实验报告
14)8通道,10位高速ADC,速度可达25万次/秒,2路PWM还可当2路D/A使用。

15)2通道捕获/比较单元(PWM/PCA/CCP),也可用来再实现2个定时器或2个外部中断(支持上升沿/下降沿中断)。

16)4个16位定时器,兼容普通8051的定时器T0/T1,2路PCA实现2个定时器。

17)可编程时钟输出功能,T0在P3.4输出时钟,T1在P3.5输出时钟,BRT 在P1.0输出时钟。

18)硬件看门狗(WDT)。

19)高速SPI串行通信端口。

20)全双工异步串行口(UART),兼容普通8051的串口。

21)通用I/O口(36/40/44个),复位后为:准双向口/弱上拉(普通8051传统I/O口)。

可设置成四种模式:准双向口/弱上拉,推挽/强上拉,仅为输入/高阻,开漏。

每个I/O口驱动能力均可达到20mA,但整个芯片最大不得超过120mA。

二、学生参加实验室开放项目的体会与建议。

直流电压表的设计实验报告

直流电压表的设计实验报告

直流电压表的设计实验报告直流电压表的设计实验报告引言:直流电压表是一种测量电路中直流电压的仪器。

在电子工程领域中,直流电压表是一种常用的测试工具。

本实验旨在设计并制作一台简单实用的直流电压表,以便能够准确测量电路中的直流电压。

一、实验目的:本实验的目的是设计并制作一台直流电压表,通过实验验证其准确性和可靠性。

具体目标如下:1. 理解直流电压表的工作原理;2. 学会使用电流表、电阻器等元器件进行电路设计;3. 测试直流电压表的灵敏度和测量范围。

二、实验原理:直流电压表是基于毫伏表的原理设计的。

毫伏表是一种电压测量仪器,它通过将待测电压与已知电阻串联,通过测量电流大小来计算待测电压的值。

直流电压表的关键是选择合适的电阻值,以确保测量电流的幅度适中,既能够保证测量精度,又不会对待测电路产生明显的影响。

三、实验材料和仪器:1. 直流电源;2. 电流表;3. 电阻器;4. 连接线;6. 待测电路。

四、实验步骤:1. 将直流电源的正极与待测电路的正极连接,负极与待测电路的负极连接;2. 将电流表的正极与待测电路的正极连接,负极与电阻器的一端连接;3. 将电阻器的另一端与待测电路的负极连接;4. 打开直流电源,调节电压大小,观察电流表的读数;5. 记录电流表的读数和待测电压的实际值;6. 重复步骤4和步骤5,改变待测电压的大小,以验证直流电压表的准确性和可靠性。

五、实验结果和分析:通过实验测量,我们得到了一系列的待测电压和电流表的读数。

根据实验数据,我们可以绘制出待测电压和电流表读数的关系曲线。

通过分析曲线,我们可以得出以下结论:1. 直流电压表的灵敏度较高,能够准确测量待测电压的变化;2. 直流电压表的测量范围较广,能够满足大部分实际测量需求;3. 直流电压表的测量精度较高,能够满足精确测量的要求。

六、实验总结:通过本实验,我们成功设计并制作了一台直流电压表。

实验结果表明,该直流电压表具有较高的灵敏度、较广的测量范围和较高的测量精度。

电压表实验报告

电压表实验报告

程序:#include<p18f45k20.h>#define uchar unsigned char#define uint unsigned int#define ADGO ADCON0bits.GO #define fmq PORTEbits.RE0#define m1l 57904 //低8度#define m2l 58736#define m3l 59472#define m4l 59804#define m5l 60432#define m6l 60992#define m7l 61488#define m1 61712 //中#define m2 62168#define m3 62500#define m4 62672#define m5 62984#define m6 63264#define m7 63512#define m1h 63624 //高8度#define m2h 63832#define m3h 64048#define m4h 64104#define m5h 64260#define m6h 64400#define m7h 64524#define p 1000 //节拍时长#define ph p/2 //半拍#define pd p*2 //双拍#define pf p*3/4#define pg p/4uintsong[]={m6l,m1,m3,m4,m2,m3,m4,m6,m5,m4,m3,m1,m1,m2,m3,m5,m4,m3,m2,m2,m2,m7l,m1, m2,m4,m3,m2,m2,m2,m2,m3,m3,m3,m5,m6,m3,m3,m3,m3,m5,m2,m2,m2,m3,m5,m2,m2,m3,m6 l,m6l};//《手掌心》简谱uinttime[]={p,ph,ph,pf*2,pg,pg,ph,ph,ph,ph,p,ph,pg,pg,ph,ph,ph,pg,pg,p,ph,pg,pg,ph,ph,pg,pg,pg,pg, pg,pf,pd,ph,ph,pg,pg,pg,pg,pg,ph,pg,p,ph,ph,ph,ph,pg,ph,pg,p};//对应的歌曲节拍uint total = 50;uint counter = 0,num = 0, i = 0;uint flag=0;uint a1=0,a2=0,a3=0,a4=0;uint lednum=0;uchar num_h[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//共阳数码管“0.—9.”定义uchar num_l[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳数码管“0 --9”定义void Delay25us(unsigned int x);//延时函数声明unsigned int AD_Trs();//Ad转换函数声明void display(void);//数码管显示函数声明void Tmr_Init(void);//定时器初始化函数声明void High_Interrupt(void);//定时器中断跳转函数声明void Stopwatch(void);//定时器中断执行函数声明void main(void)//主函数{WDTCONbits.SWDTEN = 0;//关闭看门狗TRISC=0X00;//输入输出端口初始化TRISD=0X00;PORTC=0X00;TRISE=0X00;PORTEbits.RE0=0;//用于音乐输出TRISAbits.TRISA0=1; //AD转换采集电压输入PORTAbits.RA0=0;ADCON0=0x01;//使能ADC,模拟通道选择AN0(RA0)ADCON1 = 0x00;//正负参考电压从单片机内部获取ADCON2 = 0xa5;//A/D 转换结果格式为右对齐//采样周期8TAD//AD转换时钟频率FOSC/16Tmr_Init();//定时器初始化while(1)//等待中断{ClrWdt();lednum = AD_Trs();//获取AD转换得到的数据if(lednum >= 3300)//测得电压达最大量程3.3V时开定时器,播音乐{fmq = 0 ; //拉低INTCONbits.TMR0IE = 1;T0CONbits.TMR0ON = 1;display();//数码管显示当前电压}else//不足3.3V时关闭定时器{fmq = 1 ; //拉高T0CONbits.TMR0ON = 0;INTCONbits.TMR0IE = 0;INTCONbits.TMR0IF = 0;//定时器溢出标志位清零i = 0;//重新定位音乐至开头num = 0;TMR1H = song[num]/256;//定时器赋初值TMR1L = song[num]%256;display();}}}unsigned int AD_Trs()//AD转换程序{unsigned int adval;float advalf;ADGO = 1; //启动AD转化while(ADGO); //说明AD转化完成adval= ADRESH;adval = adval<<8|ADRESL;advalf = adval/1023.0*3.3; //因为参考电压为3.3伏adval = advalf*1000; //转化为整数,以便显示return (adval);}void Delay25us(uint x) //延时函数{unsigned int a,b;for(a=x;a>0;a--)for(b=110;b>0;b--);//执行空语句实现延时}void Tmr_Init(void)//定时器初始化函数{i = 0;num = 0;INTCON = 0XF0;//开全局中断,允许定时器0溢出中断T0CON = 0X08;//配置Timer0为16 位定时器TMR0H = song[num]/256;TMR0L = song[num]%256;}#pragma code high_vector = 0x0008void High_Interrupt(void)//定时器溢出时跳转{if(INTCONbits.TMR0IF && INTCONbits.TMR0IE){_asmgoto Stopwatch_endasm}}#pragma code#pragma interrupt Stopwatchvoid Stopwatch(void)//中断执行函数{if(INTCONbits.TMR0IF && INTCONbits.TMR0IE) {T0CONbits.TMR0ON = 0;//关中断,以便为定时器赋初值INTCONbits.TMR0IF = 0;//溢出标志位清零counter++;if(counter == time[i])//实现音乐节拍{counter = 0;i++;num++;if(i >= total || num >= total)//音乐播完后重头开始{i = 0;num = 0;}}TMR0H = song[num]/256;TMR0L = song[num]%256;if(flag){flag=0;PORTEbits.RE0=0;//蜂鸣器驱动端输出低电平}else{flag=1;PORTEbits.RE0=1;//蜂鸣器驱动端输出高电平}T0CONbits.TMR0ON = 1;//开中断INTCONbits.TMR0IE = 1;}}#pragma codevoid display(void)//数码管显示函数{uint j=20;//数码管扫描时间变量a1 = lednum/1000; //此算法用于取出一个整数的各个位,来显示在数码管上a2 = lednum%1000/100;a3 = lednum%100/10;a4 = lednum%10;PORTC=0X00;PORTC=0x01;//依次选通数码管PORTD=num_h[a1];//查找表并显示数值Delay25us(j); //延时PORTC=0X00;PORTC=0x02;PORTD=num_l[a2];Delay25us(j);PORTC=0X00;PORTC=0x04;PORTD=num_l[a3];Delay25us(j);PORTC=0X00;PORTC=0x08;PORTD=num_l[a4];Delay25us(j);}。

设计制作一个简易数字电压表.doc

设计制作一个简易数字电压表.doc

设计制作一个简易数字电压表目录一、设计要求................................................................................................... 错误!未定义书签。

二、设计方案、电路图和工作原理............................................................... 错误!未定义书签。

三、软件仿真................................................................................................... 错误!未定义书签。

四、PCB设计.................................................................................................. 错误!未定义书签。

五、元器件清单表........................................................................................... 错误!未定义书签。

五、焊接和调试............................................................................................... 错误!未定义书签。

六、过程照片................................................................................................... 错误!未定义书签。

七、总结、心得及其他................................................................................... 错误!未定义书签。

数字电压表实验报告

数字电压表实验报告

数字电压表的综合设计一、设计题目:基于FPGA的数字电压表设计二、设计任务:1、具有0—2.5v的电压量程;2、通过LED灯显示2进制数字量;3、用FPGA设计制作成数字电压表的专用集成芯片,结合LED数码管构成一个能够实时显示的电压表。

三、总体设计框图:1、总体框图22、分模块设计框图:LED数码管显示模块TL549A/D处理模块3、程序代码:查找表程序代码LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;entity chazhaobiao isport(V:in std_logic_vector(7 downto 0);q:out std_logic_vector(11 downto 0));end entity chazhaobiao;architecture behav of chazhaobiao issignal c30,c74,c117,d0,d1:std_logic;signal HB,LB:std_logic_vector(11 downto 0);begin --A/D值的高4位转换成3位BCD码HB<="001001000000" WHEN V(7 DOWNTO 4)="1111" ELSE --2.40 "001000100100" WHEN V(7 DOWNTO 4)="1110" ELSE --2.24"001000001000" WHEN V(7 DOWNTO 4)="1101" ELSE --2.08"000110010010" WHEN V(7 DOWNTO 4)="1100" ELSE --1.92"000101110110" WHEN V(7 DOWNTO 4)="1011" ELSE --1.76"000101100000" WHEN V(7 DOWNTO 4)="1010" ELSE --1.60"000101000100" WHEN V(7 DOWNTO 4)="1001" ELSE --1.44"000100101000" WHEN V(7 DOWNTO 4)="1000" ELSE --1.28"000100010010" WHEN V(7 DOWNTO 4)="0111" ELSE --1.12"000010010110" WHEN V(7 DOWNTO 4)="0110" ELSE --0.96"000010000000" WHEN V(7 DOWNTO 4)="0101" ELSE --0.80"000001100100" WHEN V(7 DOWNTO 4)="0100" ELSE --0.64"000001001000" WHEN V(7 DOWNTO 4)="0011" ELSE --0.48"000000110010" WHEN V(7 DOWNTO 4)="0010" ELSE --0.32"000000010110" WHEN V(7 DOWNTO 4)="0001" ELSE --0.16"000000000000"; --0.00--A/D值低4位变为3位BCD码LB<="000000010101" WHEN V(3 DOWNTO 0)="1111" ELSE --0.15 "000000010100" WHEN V(3 DOWNTO 0)="1110" ELSE --0.14 "000000010011" WHEN V(3 DOWNTO 0)="1101" ELSE --0.13"000000010010" WHEN V(3 DOWNTO 0)="1100" ELSE --0.12"000000010001" WHEN V(3 DOWNTO 0)="1011" ELSE --0.11"000000010000" WHEN V(3 DOWNTO 0)="1010" ELSE --0.10"000000001001" WHEN V(3 DOWNTO 0)="1001" ELSE --0.09"000000001000" WHEN V(3 DOWNTO 0)="1000" ELSE --0.08"000000000111" WHEN V(3 DOWNTO 0)="0111" ELSE --0.07"000000000110" WHEN V(3 DOWNTO 0)="0110" ELSE --0.06"000000000101" WHEN V(3 DOWNTO 0)="0101" ELSE --0.05"000000000100" WHEN V(3 DOWNTO 0)="0100" ELSE --0.04"000000000011" WHEN V(3 DOWNTO 0)="0011" ELSE --0.03"000000000010" WHEN V(3 DOWNTO 0)="0010" ELSE --0.02"000000000001" WHEN V(3 DOWNTO 0)="0001" ELSE --0.01"000000000000" ; --0.00c30<='1' when HB(3 downto 0)+LB(3 downto 0)>"01001" else'0';d1<='1' when HB(3 downto 0)>="1000" and LB(3 downto 0)>="1000" else '0';c74<='1' when HB(7 downto 4)+LB(7 downto 4)>"01001" else'0';d0<='1' when HB(7 downto 4) + LB(7 downto 4) ="01001" else'0';c117<='1' when HB(11 downto 8)+LB(11 downto 8)>"01001" else '0';q(3 downto 0)<=HB(3 downto 0)+LB(3 downto 0)+"0110" whenc30='1' elseHB(3 downto 0)+LB(3 downto 0)+"0110" whend1='1' elseHB(3 downto 0)+LB(3 downto 0);q(7 downto 4)<=HB(7 downto 4)+LB(7 downto 4)+"0111" whenc74='1' and c30='1' elseHB(7 downto 4)+LB(7 downto 4)+"0110" whenc74='1' and c30='0' elseHB(7 downto 4)+LB(7 downto 4)+"0110" whenc74='0' and c30='1' and d0='1' elseHB(7 downto 4)+LB(7 downto 4)+"0001" whenc74='0' and (c30='1'or d1='1') and d0='0' elseHB(7 downto 4)+LB(7 downto 4);q(11 downto 8)<=HB(11 downto 8)+LB(11 downto 8)+"0111" whenc117='1' and c74='1' elseHB(11 downto 8)+LB(11 downto 8)+"0110" whenc117='1' and c74='0' elseHB(11 downto 8)+LB(11 downto 8)+"0001" whenc117='0' and c74='1' elseHB(11 downto 8)+LB(11 downto 8)+"0001" whenc117='0' and c74='0' and (c30='1'or d1='1') and d0='1' elseHB(11 downto 8)+LB(11 downto 8);end ;译码器程序代码LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;entity yima isport(clk:in std_logic;d:in std_logic_vector(11 downto 0);seg: out std_logic_vector(7 downto 0);sel: out std_logic_vector(2 downto 0));end entity yima;architecture behav of yima issignal wei:std_logic_vector(2 downto 0);signal num:std_logic_vector(3 downto 0);signal a:std_logic_vector(2 downto 0);beginnum<=d(3 downto 0) when a="000" elsed(7 downto 4) when a="001" elsed(11 downto 8) ;seg(7)<='0' when wei="011" else'1';wei<="110" when a="000" else"101" when a="001" else"011";sel<=wei;COM1: process(clk)beginif clk'event and clk='1' thena<=a+1;if a="010" then a<="000";end if;end if;end process COM1;COM2: process(num)begincase num iswhen "0000"=>seg(6 downto 0)<="1000000";--0when "0001"=>seg(6 downto 0)<="1111001";--1when "0010"=>seg(6 downto 0)<="0100100";--2when "0011"=>seg(6 downto 0)<="0110000";--3when "0100"=>seg(6 downto 0)<="0011001";--4when "0101"=>seg(6 downto 0)<="0010010";--5when "0110"=>seg(6 downto 0)<="0000010";--6when "0111"=>seg(6 downto 0)<="1111000";--7when "1000"=>seg(6 downto 0)<="0000000";--8when "1001"=>seg(6 downto 0)<="0010000";--9--when "1010"=>seg(6 downto 0)<="1110111";--when "1011"=>seg(6 downto 0)<="1111100";--when "1100"=>seg(6 downto 0)<="0111001";--when "1101"=>seg(6 downto 0)<="1011110";--when "1110"=>seg(6 downto 0)<="1111001";--when "1111"=>seg(6 downto 0)<="1110001";--when others=>seg(6 downto 0)<="0111111";when others=>seg(6 downto 0)<="1000000";end case;end process COM2;end;电压表顶层程序代码:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity dianyabiao isPort (clk : in std_logic; --50m系统时钟din : in std_logic; --(tlc549)串行数据输出端clk_tlc549 : out std_logic;cs_tlc549 : out std_logic; --tlc549的片选信号输入端shift : out std_logic_vector(3 downto 0);--动态扫描时的位选信号cs_led : out std_logic_vector(1 downto 0);--发光二极管及数码管的片选信号输入端dout_led : out std_logic_vector(7 downto 0));--惧的发光器件的信号输出端end dianyabiao;architecture Behavioral of dianyabiao istype state is (st1,st2);signal current_state : state;type state1 is (st0,st1,st2);signal current_state1 : state1;type state2 is (st0,st1,st2,st3,st4);signal current_state2 : state2;signal reg_datain : std_logic_vector(7 downto 0);signal reg_dout : std_logic_vector(15 downto 0);signal dout : std_logic_vector(4 downto 0);signal reg_din : integer range 0 to 80000;signal clk1m,clk1k,clk100 : std_logic;begin--分频部分process(clk) --产生1MHz的频率variable cnt : integer range 0 to 50;beginif clk'event and clk='1' then cnt:=cnt+1;if cnt<50 thenif cnt<25 then clk1m<='0';else clk1m<='1';end if;else cnt:=0;end if;end if;end process;process(clk1m) --产生1KHz的频率variable cnt : integer range 0 to 1000;beginif clk1m'event and clk1m='1' then cnt:=cnt+1;if cnt<1000 thenif cnt<500 then clk1k<='0';else clk1k<='1';end if;else cnt:=0;end if;end if;end process;process(clk1k) --产生100Hz的频率variable cnt : integer range 0 to 10;beginif clk1k'event and clk1k='1' then cnt:=cnt+1;if cnt<10 thenif cnt<5 then clk100<='0';else clk100<='1';end if;else cnt:=0;end if;end if;end process;--tlc549的控制部分process(clk1k)variable cnt : integer range 0 to 7;variable datain : std_logic_vector(7 downto 0);beginif clk1k'event and clk1k='1' thencase current_state iswhen st1=> --将数据进行串并转换cs_tlc549<='0';datain:=datain(6 downto 0)&din; --将读取的数据向高位移位clk_tlc549<='1';current_state<=st2;when st2=>cs_tlc549<='0';clk_tlc549<='0';current_state<=st1;if cnt<7 then cnt:=cnt+1; --读取8位数据else cnt:=0;reg_din<=conv_integer(datain)*195; --每单位数字量乘以系数=当前电压值;reg_datain<=not(datain);end if;when others=>current_state<=st1;end case;end if;end process;--十进制-BCD码转换;process(clk100)variable reg : integer range 0 to 80000;variable d1,d2,d3,d4 : std_logic_vector(3 downto 0);beginif clk100'event and clk100='1' thencase current_state1 iswhen st0=>reg:=reg_din;d1:="0000";d2:="0000";d3:="0000";d4:="0000";current_state1<=st1;when st1=>if reg>9999 then reg:=reg-10000;d1:=d1+1;elsif reg>999 then reg:=reg-1000;d2:=d2+1;elsif reg>99 then reg:=reg-100;d3:=d3+1;elsif reg>9 then reg:=reg-10;d4:=d4+1;else current_state1<=st2;end if;when st2=>reg_dout<=d1&d2&d3&d4;current_state1<=st0;when others=>current_state1<=st0;end case;end if;end process;--动态扫描控制;process(clk1k)beginif clk1k'event and clk1k='1' thencase current_state2 iswhen st0=> --在发光二极管上显示模数转换后的数字量cs_led<="01"; --熄灭数码管shift<="1111";dout<="11111";current_state2<=st1;when st1=> --在数码管的最高位显示数据cs_led<="10"; --熄灭发光二极管shift<="0111"; --最高位数码管显示dout<='0'&reg_dout(15 downto 12); --小数点显示,并且将最高位的数据送给译码器current_state2<=st2;when st2=> --在数码管的次高位显示数据cs_led<="10"; --熄灭发光二极管shift<="1011"; --次高位数码管显示dout<='1'&reg_dout(11 downto 8); --小数点不显示,将次高位的数据送给译码器current_state2<=st3;when st3=> --在数码管的次低位显示数据cs_led<="10"; --熄灭发光二极管shift<="1101"; --次低位数码管显示dout<='1'&reg_dout(7 downto 4); --小数点不显示,将次低位的数据送给译码器current_state2<=st4;when st4=> --在数码管的最低位显示数据cs_led<="10"; --熄灭发光二极管shift<="1110"; --最低位数码管显示dout<='1'&reg_dout(3 downto 0); --小数点不显示,将最低位的数据送给译码器current_state2<=st0;when others=>current_state2<=st0;end case;end if;end process;--**将BCD码进行8段译码(包括小数点)**----**dout(4)代表小数点,低电平点亮**--code1: process (dout,reg_datain)begincase dout(3 downto 0) iswhen "0000"=>dout_led<=dout(4)&"0000001";when "0001"=>dout_led<=dout(4)&"1001111";when "0010"=>dout_led<=dout(4)&"0010010";when "0011"=>dout_led<=dout(4)&"0000110";when "0100"=>dout_led<=dout(4)&"1001100";when "0101"=>dout_led<=dout(4)&"0100100";when "0110"=>dout_led<=dout(4)&"0100000";when "0111"=>dout_led<=dout(4)&"0001111";when "1000"=>dout_led<=dout(4)&"0000000";when "1001"=>dout_led<=dout(4)&"0000100";--"DOUT_LED"送给数码管;whenothers=>dout_led<=reg_datain(7)&reg_datain(0)&reg_datain(1)&reg_datain(2)&re g_datain(3)&reg_datain(4)&reg_datain(5)&reg_datain(6);--"DOUT_LED"送给发光二极管;end case;end process;end Behavioral;四、波形仿真图:五、结论:本次实验达到了实验的基本要求,能够通过调节高精密变阻器实现0—2.5v的电压测量及显示。

数字电压表课程设计实验报告

数字电压表课程设计实验报告

自动化与电气工程学院电子技术课程设计报告题目数字电压表的制作专业班级学号学生指导教师二○一三年七月一、课程设计的目的与意义1.课程设计的主要目的,是通过电子技术综合设计,熟悉一般电子电路综合设计过程、设计要求、完成的工作容和具体的设计方法。

2.同时了解双积分式A/D转换器ICL7107的性能及其引脚功能,熟悉集成电路ICL7107构成直流数字电压表的使用方法,并掌握其在电路中的工作原理。

3.通过设计也有助于复习和巩固以往的模电、数电容,达到灵活应用的目的。

在完成设计后还要将设计的电路进行安、调试以加强学生的动手能力。

在此过过程中培养从事设计工作的整体观念。

4.利用双积分式A/D转换器ICL7107设计一数字电压表,量程为-1.99—+1.99,通过七段数码管显示。

二、电路原理图数字电压表原理图三、课程设计的元器件1.课程设计所使用的元器件清单:2.主要元器件介绍(1)芯片ICL7107:ICL7107的工作原理双积分型A/D转换器ICL7107是一种间接A/D转换器。

它通过对输入模拟电压和参考电压分别进行两次积分,将输入电压平均值变换成与之成正比的时间间隔,然后利用脉冲时间间隔,进而得出相应的数字性输出。

它的原理性框图如图所示,它包括积分器、比较器、计数器,控制逻辑和时钟信号源。

积分器是A/D转换器的心脏,在一个测量周期,积分器先后对输入信号电压和基准电压进行两次积分。

比较器将积分器的输出信号与零电平进行比较,比较的结果作为数字电路的控制信一号。

时钟信号源的标准周期Tc 作为测量时间间隔的标准时间。

它是由部的两个反向器以及外部的RC组成的。

其振荡周期Tc=2RCIn1.5=2.2RC 。

ICL7106A/D转换器原理图计数器对反向积分过程的时钟脉冲进行计数。

控制逻辑包括分频器、译码器、相位驱动器、控制器和锁存器。

分频器用来对时钟脉冲逐渐分频,得到所需的计数脉冲fc和共阳极LED数码管公共电极所需的方波信号fc。

简易数字电压表课程设计

简易数字电压表课程设计

简易数字电压表课程设计一、课程目标知识目标:1. 学生能理解电压表的基本工作原理,掌握其电路组成和功能。

2. 学生能描述简易数字电压表的结构,了解其显示原理。

3. 学生掌握电压的测量方法,能够正确使用简易数字电压表进行电压测量。

技能目标:1. 学生能够独立完成简易数字电压表的组装和调试。

2. 学生能够运用所学的电压测量知识,解决实际电路中的电压测量问题。

3. 学生通过实际操作,提高动手能力和问题解决能力。

情感态度价值观目标:1. 学生培养对电子技术的兴趣,激发学习热情,形成积极探索的学习态度。

2. 学生通过合作学习,培养团队协作精神和沟通能力。

3. 学生了解电压表在实际应用中的作用,认识到电子技术在日常生活和工业生产中的重要性。

课程性质:本课程为电子技术基础课程,通过理论与实践相结合的方式,使学生掌握电压测量方法,提高学生的实际操作能力。

学生特点:本课程针对初中或高中年级学生,他们对电子技术有一定的基础知识,好奇心强,动手能力逐渐提高。

教学要求:教师需采用启发式教学,引导学生主动探索,注重培养学生的动手能力和问题解决能力。

在教学过程中,关注学生的个体差异,给予每个学生充分的实践机会。

通过课后评估,检验学生的学习成果,确保课程目标的实现。

二、教学内容1. 电压表基本原理:介绍电压表的工作原理,包括磁电式和数字式电压表的原理区别。

- 教材章节:第二章第三节《电压与电压测量》2. 简易数字电压表结构:分析简易数字电压表的电路组成,显示部分原理。

- 教材章节:第二章第五节《数字电压表的组成与原理》3. 电压测量方法:讲解电压测量的步骤、注意事项以及不同量程的选择。

- 教材章节:第二章第四节《电压测量方法及注意事项》4. 实践操作:进行简易数字电压表的组装、调试及实际电压测量。

- 教材章节:实验章节《电压测量实验》5. 故障分析与处理:介绍常见的电压表故障现象,分析原因并学会处理方法。

- 教材章节:附录《电压表常见故障及处理方法》教学内容安排与进度:第一课时:电压表基本原理,介绍磁电式和数字式电压表的原理区别。

简易万用表的设计与制作实验报告

简易万用表的设计与制作实验报告

简易万用表的设计与制作实验报告简易万用表的设计与制作实验报告导言:实验目的:本实验旨在设计和制作一款简易的万用表,用于测量电压、电流和电阻。

实验原理:万用表是一种测量电压、电流和电阻的仪器。

它由电压测量部分、电流测量部分和电阻测量部分组成。

实验材料和仪器:1. 电阻器2. 电池3. 电流表4. 电压表5. 电线6. 示波器7. 万用表外壳实验步骤:1. 首先,我们需要将电阻器、电池、电流表和电压表连接起来,构成一个简单的电路。

2. 将电阻器连接到电池的正负极上,以形成一个电阻电路。

3. 将电流表的正极连接到电阻器上,负极连接到电池的负极上。

这样,电流表就可以测量电路中的电流。

4. 将电压表的正极连接到电阻器上,负极连接到电池的负极上。

这样,电压表就可以测量电路中的电压。

5. 将示波器连接到电路中,以观察电路中的电压波形。

6. 将以上所有仪器和电路安装到万用表的外壳中,确保连接牢固。

实验结果:通过以上步骤,我们成功地设计和制作了一款简易的万用表。

在实验中,我们可以通过电流表测量电路中的电流,通过电压表测量电路中的电压,通过示波器观察电路中的电压波形。

这样,我们可以方便地进行电路的测试和测量。

实验总结:通过本次实验,我们深入了解了万用表的原理和结构,并成功地设计和制作了一款简易的万用表。

万用表在电路测试和测量中起到了重要的作用,可以方便、准确地测量电压、电流和电阻。

通过实验,我们不仅掌握了万用表的使用方法,还提高了对电路的理解和实践能力。

实验中可能遇到的问题及解决方法:1. 电路连接错误:在连接电路时,可能会出现连接错误的情况。

解决方法是仔细检查电路连接,确保每个仪器和电阻器的正负极正确连接。

2. 仪器故障:在实验过程中,仪器可能出现故障。

解决方法是更换故障仪器或修理仪器。

展望:本次实验只是设计和制作了一款简易的万用表,还有许多改进的空间。

未来,我们可以考虑增加更多的功能,如温度测量、电容测量等。

同时,我们还可以进一步研究和改进万用表的精度和稳定性,使其更加准确和可靠。

数字电压表实验报告

数字电压表实验报告

实验五电压表实验1.设计过程:按照“建立项目文件”--“新建VHDL源文件”--“配置管脚”--“编译下载”--“芯片测试”的顺序。

原理图:1.FPGA的系统时钟来自于小脚丫FPGA开发板配置的24MHz时钟晶振,连接FPGA的C1引脚。

2.实验借助FPGA底板自带的ADC模块,具体信息如下:ADC模块的功能时实现模拟信号转换数字信号,主要包含P1(测试点)、Radj1(10K的可调电位器)和U3(8位串行模数转换器ADC081S)。

在不外接其他信号的情况下,旋转电位计,ADC081S的输入电压在0到3.3V之间变化,通过模数转换实现ADC的采样,原理图连接如图所示:3.实验思路如下:1.根据ADC模块的时序图,完成将ADC模块和FPGA引脚连接起来。

时序图如下:2. 根据程序的框图把完整的程序写出来,显示模块和译码模块利用以前写过的进行例化使用。

以下是程序的框图:VHDL 汇编语言如下: 2.总代码: library ieee;use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;entity dianyabiao is port( clk: in std_logic;--定义输入和输出 sda: in std_logic; sclk: buffer std_logic; cs: out std_logic; sdata: out std_logic; sck: out std_logic; rck: out std_logic );end dianyabiao;architecture one of dianyabiao is component led_573 --例化port( rst: in std_logic; clk_t_in : in std_logic; sdata: out std_logic; H: in std_logic; ledcode1,ledcode2,ledcode3,ledcode4: in std_logic_vector(6 downto 0); dot: in std_logic_vector(3 downto 0);sda sck cssck: out std_logic;rck: out std_logic);end component;component seg7coderport(data_in: in integer range 0 to 15;seg7_out: out std_logic_vector(6 downto 0));end component;signal ad_phase: integer range 0 to 19;signal clk_t_in: std_logic;signal ad_clk: std_logic;signal ad_out:std_logic_vector(7 downto 0);signal ad:std_logic_vector(7 downto 0);signal data_in1:integer range 0 to 15;signal data_in2:integer range 0 to 15;signal seg1,seg2: std_logic_vector(6 downto 0); --七段码beginu1:seg7coderport map(data_in => data_in1,seg7_out => seg1);u2:seg7coderport map(data_in => data_in2,seg7_out => seg2);u3:led_573port map(rst=>'1',clk_t_in => clk,H => '1',dot => "0000",ledcode1 => seg1,ledcode2 => seg2,ledcode3 =>"1111110",ledcode4 =>"1111110",sdata => sdata,sck => sck,rck => rck);--得到分频时钟,50-20000khz的分频process(clk)variable divcnt: integer range 0 to 1000;beginif clk'event and clk='1' thenif divcnt=1000 thendivcnt:=0;clk_t_in<=not clk_t_in;elsedivcnt:=divcnt+1;clk_t_in<=clk_t_in;end if;end if;end process;--ad模快process(clk_t_in)-- ad_clk<=clk_t_in;beginif clk_t_in'event and clk_t_in = '1' thensclk<=not sclk;if sclk='1' thenif ad_phase = 19 thenad_phase<=0;elsead_phase<=ad_phase+1;end if;end if;if sclk='0' and ad_phase>16 then --保证cs的值cs<='1';elsecs<='0';end if;if ad_phase=3 and sclk='0' then --值的输出ad(7)<=sda;end if;if ad_phase=4 and sclk='0' thenad(6)<=sda;end if;if ad_phase=5 and sclk='0' thenad(5)<=sda;end if;if ad_phase=6 and sclk='0' thenad(4)<=sda;end if;if ad_phase=7 and sclk='0' thenad(3)<=sda;end if;if ad_phase=8 and sclk='0' thenad(2)<=sda;end if;if ad_phase=9 and sclk='0' thenad(1)<=sda;end if;if ad_phase=10 and sclk='0' thenad(0)<=sda;end if;if ad_phase=11 and sclk='0' thenad_out<=ad;end if;end if;end process;process(ad_out) --完成将ad_out的八位输出转化成两位16进制的数begincase ad_out(3 downto 0) is--when "0000"=>data_in1<=0;when "0001"=>data_in1<=1;when "0010"=>data_in1<=2;when "0011"=>data_in1<=3;when "0100"=>data_in1<=4;when "0101"=>data_in1<=5;when "0110"=>data_in1<=6;when "0111"=>data_in1<=7; when "1000"=>data_in1<=8; when "1001"=>data_in1<=9; when "1010"=>data_in1<=10; when "1011"=>data_in1<=11; when "1100"=>data_in1<=12; when "1101"=>data_in1<=13; when "1110"=>data_in1<=14; when "1111"=>data_in1<=15; end case;case ad_out(7 downto 4) is when "0000"=>data_in2<=0; when "0001"=>data_in2<=1; when "0010"=>data_in2<=2; when "0011"=>data_in2<=3; when "0100"=>data_in2<=4; when "0101"=>data_in2<=5; when "0110"=>data_in2<=6; when "0111"=>data_in2<=7; when "1000"=>data_in2<=8; when "1001"=>data_in2<=9; when "1010"=>data_in2<=10; when "1011"=>data_in2<=11; when "1100"=>data_in2<=12; when "1101"=>data_in2<=13; when "1110"=>data_in2<=14; when "1111"=>data_in2<=15; end case;end process;end architecture;3.管脚分配:4.实验现象:旋转电压旋钮,电压从00变化到FF,现象如下面所示:。

数字电压表课程设计报告

数字电压表课程设计报告

数字电压表课程设计报告一、实验目的本实验旨在使学生掌握数字电压表的基本原理、构成和使用方法,通过实践锻炼学生的动手操作能力和实际问题解决能力。

二、实验器材数字电压表、直流稳压电源、电阻箱、待测电路板等。

三、实验内容1.数字电压表的基本原理、构成和使用方法的介绍;2.根据实验要求搭建待测电路;3.调节直流稳压电源输出电压为所需值;4.连接数字电压表到待测电路上并测量电压值;5.对测得的电压值进行分析、处理和讨论。

四、实验流程及步骤1.实验器材准备:数字电压表、直流稳压电源、电阻箱、待测电路板等器材;2.理解数字电压表的基本原理与构成,并熟练掌握使用方法;3.根据实验所需,找到相应的电路板,搭建待测电路,并连接好直流稳压电源;4.调节直流稳压电源的输出电压为所需值,并连接数字电压表到待测电路上;5.测量待测电路的电压值,并在数字电压表上进行记录;6.对测得的电压值进行分析、处理和讨论,并得出实验结论。

五、实验注意事项1.在操作实验器材时,务必严格按照使用说明书和教师的要求进行操作;2.实验器材保持完好无损,任何破损的器材均不能使用;3.实验前需仔细了解实验内容,规划实验流程;4.在操作实验时,要认真记录实验数据,并进行及时分析处理;5.实验结束后,将实验器材妥善归位,保持实验室整洁干净。

六、实验结果及结论通过实验,我们得到了待测电路的电压值,并对其进行了分析、处理和讨论。

根据实验结果和所给数据,我们得出了结论:数字电压表可准确测量待测电路的电压值,为后续研究和实践提供重要依据。

七、实验心得体会通过本次实验,我对数字电压表的原理及其使用方法有了更深入的了解,并通过实践掌握了一定的动手操作能力和实际问题解决能力。

同时,我认识到在实验中必须注重细节和注意安全,仔细完成每一个实验步骤,及时记录和分析实验数据,才能使实验结果更加准确和可靠。

基于51单片机的电压表的设计

基于51单片机的电压表的设计

引言在电量的测量中,电压、电流和频率是最基本的三个被测量,其中电压量的测量最为经常。

而且随着电子技术的发展,更是经常需要测量高精度的电压,所以数字电压表就成为一种必不可少的测量仪器。

数字电压表简称DVM,它是采用数字化测量技术,把连续的模拟量转换成不连续、离散的数字形式并加以显示的仪表。

由于数字式仪器具有读数准确方便、精度高、误差小、测量速度快等特而得到广泛应用[1]。

传统的指针式刻度电压表功能单一,进度低,容易引起视差和视觉疲劳,因而不能满足数字化时代的需要。

采用单片机的数字电压表,将连续的模拟量如直流电压转换成不连续的离散的数字形式并加以显示,从而精度高、抗干扰能力强,可扩展性强、集成方便,还可与PC实时通信。

数字电压表是诸多数字化仪表的核心与基础[2]。

以数字电压表为核心,可以扩展成各种通用数字仪表、专用数字仪表及各种非电量的数字化仪表。

目前,由各种单片机和A/D转换器构成的数字电压表作全面深入的了解是很有必要的。

最近的几十年来,随着半导体技术、集成电路(IC)和微处理器技术的发展,数字电路和数字化测量技术也有了巨大的进步,从而促使了数字电压表的快速发展,并不断出现新的类型[3]。

数字电压表从1952年问世以来,经历了不断改进的过程,从最早采用继电器、电子管和形式发展到了现在的全固态化、集成化(IC化),另一方面,精度也从0.01%-0.005%。

目前,数字电压表的内部核心部件是A/D转换器,转换的精度很大程度上影响着数字电压表的准确度,因而,以后数字电压表的发展就着眼在高精度和低成本这两个方面[4]。

本文是以简易数字直流电压表的设计为研究内容,本系统主要包括三大模块:转换模块、数据处理模块及显示模块。

其中,A/D转换采用ADC0808对输入的模拟信号进行转换,控制核心AT89C51再对转换的结果进行运算处理,最后驱动输出装置LED显示数字电压信号[5]。

1 设计总体方案1.1设计要求:完成系统的硬件电路设计与软件设计; 采用汇编或C 语言编程;采用Proteus 、KeilC 等软件实现系统的仿真调试。

数字电压表实验报告

数字电压表实验报告

数字电压表实验报告《数字电压表实验报告》实验目的:通过使用数字电压表,掌握其基本使用方法并了解电压测量的原理。

实验仪器:数字电压表、直流电源、导线等。

实验原理:数字电压表是一种用于测量电压的仪器,它通过将待测电压转换为数字信号并显示在屏幕上,从而实现对电压的测量。

其测量原理是利用电压测量电路将待测电压转换为相应的电流信号,再通过内部的模数转换器将电流信号转换为数字信号,最后通过显示装置显示出来。

实验步骤:1. 连接实验仪器:首先将数字电压表的正负极与待测电路的正负极相连,并确保连接正确无误。

2. 调整量程:根据待测电压的大小,选择合适的量程,并将数字电压表的旋钮调整到相应的量程档位。

3. 测量电压:打开待测电路的电源,观察数字电压表的显示数值,并记录下来。

4. 关闭电源:待测电压测量完成后,关闭待测电路的电源,并拔掉连接线。

实验结果:根据实验结果,我们可以得出待测电路的电压为多少,并且通过对比不同量程下的测量结果,了解数字电压表的量程选择原则。

实验结论:通过本次实验,我们掌握了数字电压表的基本使用方法,并了解了电压测量的原理。

同时,我们也了解了数字电压表的量程选择原则,并且通过实验结果验证了其准确性。

实验中的注意事项:在进行实验时,要注意连接线路的正确性,避免接错极性导致仪器损坏。

同时,在选择量程时要根据待测电压的大小进行合理选择,避免选择错误导致测量不准确。

总结:通过本次实验,我们对数字电压表的使用方法和原理有了更深入的了解,这对我们今后的实验操作和电路调试都有着重要的指导意义。

希望通过不断的实践和学习,我们能够更加熟练地掌握数字电压表的使用技巧,并且在工程实践中能够准确地测量电压并进行相应的调试。

简易万用表的设计与制作实验报告

简易万用表的设计与制作实验报告

简易万用表的设计与校准物理学院物理学类 2009301020162 沈港博摘要:万用表是一种多功能、多量程便于携带的电学仪器。

它可用不同的量程测量直流电流、直流电压、交流电压及电阻。

有的万用表还可以测量阻抗、容抗和音频功率等。

学习制作和设计万用表非常重要,还有利于我们大学同学提高电路分析的能力并加深对万用电表工作原理的理解,提高自身的动手能力。

关键字:万用电表、表头、测量电路、转换装置。

1 实验目的(1)通过万用表组装实验,进一步熟悉万用表结构、工作原理和使用方法。

(2)了解电路理论的实际应用,进一步学会分析电路,提高自身的能力。

2 实验原理万用表主要是由指示器、测量电路和转换装置三部分组成。

指示器俗称表头,用来指示被测电量的数值,通常为磁电式微安表。

表头是万用表的关键部分,万用表的灵敏度、准确度及指针回零等大都决定于表头的性能。

表头的灵敏度是以满刻度的测量电流来衡量的,满刻度偏转电流越小,灵敏度越高。

一般万用表表头灵敏度在10~100μA 左右。

测量电路的作用是把被测的电量转化为适合于表头要求的微小直流电流,它通常包括分流电路、分压电路和整流电路。

分流电路将被测大电流通过分流电阻变成表头所需要的微小电流,分压电路将被测得高电压通过分压电阻变换成表头所需的低电压;整流电路将被测的交流,通过整流转变成所需的直流电。

万用表的各种测量种类及量程的选择是靠转换装置来实现,转换装置通常由转换开关、接线柱、插孔等组成。

转换开关有固定触点和活动触点,它位于不同位置,接通相应的触点,构成相应的测量电路。

万用表基本原理,如下图1-1所示。

图1-1万用表基本原理图下面以MF-47型万用表为例,分部介绍电路参数的测量原理。

1、直流电流的测量万用表的直流电流档,实质上是一个多量程的磁电式直流电流表,它应用分流电阻与表头并联以达到扩大测量的电流量程。

根据分流电阻值越小,所得的测量量程越大的原理,配以不同的分流电阻,构成相应的测量量程。

  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 ISPORT(en:in std_logic;clk:in STD_LOGIC;cs:out STD_LOGIC;ad_dat: in std_logic;da_out: out std_logic_vector(11 downto 0));END ads;ARCHITECTURE behave OF ads ISsignal oe:integer range 0 to 1;signal en1,en2,f_en:std_logic;signal t:integer range 0 to 16;signal temp_cs:std_logic;signal data_out:std_logic_vector(11 downto 0);BEGINp1:process(clk) --按键防抖beginif clk'event and clk='0' thenen2<=en1;en1<=en;end if;end process;f_en<=clk and en1 and (not en2);p2:process(f_en,clk,oe) --beginif (f_en'event and f_en='1' )then --接收到开始测量按键的信号oe<=1;end if;if oe=1 thenif clk'event and clk='1' then--将ADS输出的12位串行二进制数据转换为12位并行二进制数据case t iswhen 4=>data_out(11)<=ad_dat; --第4个时钟上升沿ADS开始输出数据 when 5=>data_out(10)<=ad_dat;when 6=>data_out(9)<=ad_dat;when 7=>data_out(8)<=ad_dat;when 8=>data_out(7)<=ad_dat;when 9=>data_out(6)<=ad_dat;when 10=>data_out(5)<=ad_dat;when 11=>data_out(4)<=ad_dat;when 12=>data_out(3)<=ad_dat;when 13=>data_out(2)<=ad_dat;when 14=>data_out(1)<=ad_dat;when 15=>data_out(0)<=ad_dat;da_out<=data_out;when others=>data_out<="000000000000";end case;if t<16 then t<=t+1;else t<=0;end if;end if;if clk'event and clk='0' thencase t iswhen 0=>temp_cs<='1'; --t=0时一次转换结束,cs变为高电平 when 1=>temp_cs<='0'; --t=1时下一次转换开始,cs变为低电平when others=>null;end case;end if;end if;end process;cs<=temp_cs;end behave;2. 数据转换控制模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY deal ISPORT(clk: in std_logic;datain:IN STD_LOGIC_VECTOR(11 DOWNTO 0);en: in std_logic;reset: in std_logic;beef: OUT STD_LOGIC;d2,d3,d4:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END deal;ARCHITECTURE behave OF deal ISSIGNAL data0,data1,data2:STD_LOGIC_VECTOR(15 DOWNTO 0);SIGNAL sum1,sum2,sum3,sum4,do1,do2,do3,do4:STD_LOGIC_VECTOR(4 DOWNTO 0); SIGNAL c1,c2,c3:STD_LOGIC_VECTOR(4 DOWNTO 0);signal flag:integer range 0 to 1;signal r:integer range 0 to 1;signal en1,en2,f_en:std_logic;signal reset1,reset2,f_reset:std_logic;BEGINp2:process(clk) --按键防抖beginif clk'event and clk='0' thenreset2<=reset1;reset1<=reset;en2<=en1;en1<=en;end if;end process;f_reset<=clk and reset1 and (not reset2);f_en<=clk and en1 and (not en2);p3:PROCESS(datain,f_en,f_reset) --reset,en组合的4个状态00,01,10,11转移关系 BEGINif (f_en'event and f_en='1') thenif (r=0 and flag=0)or (r=0 and flag=1) thenflag<=1;end if;if (r=1 and flag=1)or( r=1 and flag=0 ) thenflag<=0;end if;end if;if (f_reset'event and f_reset='0') thenif (r=0 and flag=0)or (r=1 and flag=0) thenr<=0;end if;if (r=1 and flag=1)or( r=0 and flag=1) thenr<=1;end if;end if;if (flag=1 and r=0)or(flag=0 and r=1) then –当状态为01,10时,开始数据转换--将高四位二进制数据所代表的电压值转换为16位BCD码CASE datain(11 DOWNTO 8) ISWHEN "0000"=> data2 <= "0000000000000000";WHEN "0001"=> data2 <= "0000000101010100";WHEN "0010"=> data2 <= "0000001100000111";WHEN "0011"=> data2 <= "0000010001100001";WHEN "0100"=> data2 <= "0000011000010100";WHEN "0101"=> data2 <= "0000011101101000";WHEN "0110"=> data2 <= "0000100100100010";WHEN "0111"=> data2 <= "0001000001110101";WHEN "1000"=> data2 <= "0001001000101001";WHEN "1001"=> data2 <= "0001001110000010";WHEN "1010"=> data2 <= "0001010100110110";WHEN "1011"=> data2 <= "0001011010010000";WHEN "1100"=> data2 <= "0001100001000011";WHEN "1101"=> data2 <= "0001100110010111";WHEN "1110"=> data2 <= "0010000101010000";WHEN "1111"=> data2 <= "0010001100000100";WHEN OTHERS=> data2 <= NULL;END CASE;--将中四位二进制数据所代表的电压值转换为16位BCD码CASE datain(7 DOWNTO 4) ISWHEN "0000"=> data1 <= "0000000000000000";WHEN "0001"=> data1 <= "0000000000010000";WHEN "0010"=> data1 <= "0000000000011001";WHEN "0011"=> data1 <= "0000000000101001";WHEN "0100"=> data1 <= "0000000000111000";WHEN "0101"=> data1 <= "0000000001001000";WHEN "0110"=> data1 <= "0000000001011000";WHEN "0111"=> data1 <= "0000000001100111";WHEN "1000"=> data1 <= "0000000001110111";WHEN "1001"=> data1 <= "0000000010000110";WHEN "1010"=> data1 <= "0000000010010110";WHEN "1011"=> data1 <= "0000000100000110";WHEN "1100"=> data1 <= "0000000100010101";WHEN "1101"=> data1 <= "0000000100100101";WHEN "1110"=> data1 <= "0000000100110100";WHEN "1111"=> data1 <= "0000000101000100";WHEN OTHERS=> data1 <= NULL;END CASE;--将低四位二进制数据所代表的电压值转换为16位BCD码CASE datain(3 DOWNTO 0) ISWHEN "0000"=> data0 <= "0000000000000000";WHEN "0001"=> data0 <= "0000000000000001";WHEN "0010"=> data0 <= "0000000000000001";WHEN "0011"=> data0 <= "0000000000000010";WHEN "0100"=> data0 <= "0000000000000010";WHEN "0101"=> data0 <= "0000000000000011";WHEN "0110"=> data0 <= "0000000000000100";WHEN "0111"=> data0 <= "0000000000000100";WHEN "1000"=> data0 <= "0000000000000101";WHEN "1001"=> data0 <= "0000000000000101";WHEN "1010"=> data0 <= "0000000000000110";WHEN "1011"=> data0 <= "0000000000000111";WHEN "1100"=> data0 <= "0000000000000111";WHEN "1101"=> data0 <= "0000000000001000";WHEN "1110"=> data0 <= "0000000000001000";WHEN "1111"=> data0 <= "0000000000001001";WHEN OTHERS=> data0 <= NULL;END CASE;--将高,中,低分别代表的16位BCD(表示为15-0位)进行加法运算--16位BCD码中的(3-0位)相加,和大于9进1sum1<=('0'&data2(3 DOWNTO 0))+('0'&data1(3 DOWNTO 0))+('0'&data0(3 DOWNTO 0)); IF sum1<"01010" THEN c1<="00000";ELSE c1<="00001";END IF;--16位BCD码中的(7-4位)相加,和大于9进1sum2<=('0'&data2(7 DOWNTO 4))+('0'&data1(7 DOWNTO 4))+('0'&data0(7 DOWNTO 4))+c1;IF sum2<"01010" THEN c2<="00000";ELSE c2<="00001";END IF;--16位BCD码中的(11-8位)相加,和大于9进1sum3<=('0'&data2(11 DOWNTO 8))+('0'&data1(11 DOWNTO 8))+('0'&data0(11 DOWNTO 8))+c2;IF sum3<"01010" THEN c3<="00000";ELSE c3<="00001";END IF;--16位BCD码中的(15-12位)相加,和大于9进1sum4<=('0'&data2(15 DOWNTO 12))+('0'&data1(15 DOWNTO 12))+('0'&data0(15 DOWNTO 12))+c3;IF sum1<"01010" THEN do1<=sum1; --和大于9减10ELSE do1<=sum1-"01010";END IF;IF sum2<"01010" THEN do2<=sum2;ELSE do2<=sum2-"01010";END IF;IF sum3<"01010" THEN do3<=sum3;ELSE do3<=sum3-"01010";END IF;IF sum4<"01010" THEN do4<=sum4;ELSE do4<=sum4-"01010";END IF;d2<=do2(3 DOWNTO 0); --输出十进制BCD码中的低四位d3<=do3(3 DOWNTO 0); --输出十进制BCD码中的中四位d4<=do4(3 DOWNTO 0); --输出十进制BCD码中的高四位-- 量程超过1.5V蜂鸣器报警,溢出显示为“5.55”IF(do4(3 DOWNTO 0)>="0001" and do3(3 DOWNTO 0)>="0101" ) THENbeef<='1';elsebeef<='0';END IF;elsed2<="0000";d3<="0000";d4<="0000";beef<='0';end if;END PROCESS;END behave;3. 译码显示模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY display ISPORT(doo2,doo3,doo4: IN STD_LOGIC_VECTOR(3 DOWNTO 0); CLK1: IN STD_LOGIC;CAT: OUT STD_LOGIC_VECTOR(5 DOWNTO 0);dp: OUT STD_LOGIC;seg: OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END display;ARCHITECTURE V1 OF display ISSIGNAL TMP : INTEGER RANGE 0 TO 3;BEGINp1: PROCESS(CLK1)BEGINIF(CLK1'EVENT AND CLK1 = '1' ) THENIF(TMP = 3) THENTMP <= 1;ELSETMP <= TMP + 1;END IF;END IF;end PROCESS;p2: PROCESS(TMP)BEGINCASE TMP IS--高四位译码WHEN 3 => CAT <= "111011";dp<='1';if (doo4="0000") then seg<="1111110";elsif (doo4="0001") then seg<="0110000";elsif (doo4="0010") then seg<="1101101";elsif (doo4="0011") then seg<="1111001";elsif (doo4="0100") then seg<="0110011";elsif (doo4="0101") then seg<="1011011";elsif (doo4="0110") then seg<="1011111";elsif (doo4="0111") then seg<="1110000";elsif (doo4="1000") then seg<="1111111";elsif (doo4="1001") then seg<="1111011";else seg<="1111110";end if;--中四位译码WHEN 2 => CAT <= "111101";dp<='0';if (doo3="0000") then seg<="1111110";elsif (doo3="0001") then seg<="0110000";elsif (doo3="0010") then seg<="1101101";elsif (doo3="0011") then seg<="1111001";elsif (doo3="0100") then seg<="0110011";elsif (doo3="0101") then seg<="1011011";elsif (doo3="0110") then seg<="1011111";elsif (doo3="0111") then seg<="1110000";elsif (doo3="1000") then seg<="1111111";elsif (doo3="1001") then seg<="1111011";else seg<="1111110";end if;--低四位译码WHEN 1 => CAT <= "111110";dp<='0';if (doo2="0000") then seg<="1111110";elsif (doo2="0001") then seg<="0110000";elsif (doo2="0010") then seg<="1101101";elsif (doo2="0011") then seg<="1111001";elsif (doo2="0100") then seg<="0110011";elsif (doo2="0101") then seg<="1011011";elsif (doo2="0110") then seg<="1011111";elsif (doo2="0111") then seg<="1110000";elsif (doo2="1000") then seg<="1111111";elsif (doo2="1001") then seg<="1111011";else seg<="1111110";end if;WHEN OTHERS => seg <= "1111110";CAT <= "111000"; END CASE;END PROCESS;END V1;4. 12分频模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY div_12 ISPORT(clk: IN STD_LOGIC;clk_out: OUT STD_LOGIC);END div_12;ARCHITECTURE struct OF div_12 ISSIGNAL temp :INTEGER RANGE 0 TO 124;SIGNAL clk_temp: STD_LOGIC;BEGINPROCESS(clk)BEGINIF(clk'event AND clk='1') THENIF temp=11 THENtemp<=0;clk_temp<=NOT clk_temp; ELSEtemp<=temp+1;END IF;END IF;END PROCESS;clk_out<=clk_temp;END struct;五. 功能说明及资源利用情况1.功能说明en:为开始测量按键,连接到BIN6,按下此键开始测量。

相关文档
最新文档