您的当前位置:首页正文

数字电压表

2020-04-23 来源:爱站旅游
导读数字电压表


数 字 电 压 表

原 理 报 告

数字电压表原理及设计报告

摘要

数字电压表(Digital Voltmeter)简称DVM,它是采用数字化测量技术,把连续的模拟量(直流输入电压)转换成不连续、离散的数字形式并加以显示的仪表。传统的指针式电压表功能单一、精度低,不能满足数字化时代的需求,采用单片机的数字电压表,由精度高、抗干扰能力强,可扩展性强、集成方便,还可与PC进行实时通信。目前,由各种单片A/D 转换器构成的数字电压表,已被广泛用于电子及电工测量、工业自动化仪表、自动测试系统等智能化测量领域,示出强大的生命力。与此同时,由DVM扩展而成的各种通用及专用数字仪器仪表,也把电量及非电量测量技术提高到崭新水平。

本文介绍一种基于89S52单片机的一种电压测量电路,该电路采用ICL7135高精度、双积分A/D转换电路,测量范围直流0-5伏,使用LCD液晶模块显示,可以与PC机进行串行通信。

关键词:电压测量,ICL7135,双积分A/D转换器,1284液晶模块。

一、概述

数字电压表在1952年由美国NLS公司首次创造,它刚开始是4位,50多年来,数字电压表有了不断的进步和提高。数字电压表是从电位差计的自动化过程中研制成功的。开始是4位数码显示,然后是5位、6位显示,而现在发展到7位、8位数码显示;从最初的一两种类型发展到原理不同的几十种类型;从最早的采用继电器、电子管发展到全晶体管、集成电路、微处理器化;从一台仪器只能测1-2种参数到能测几十种参数的多用型;显示器件也从辉光数码管发展到等离子体管、发光二极管、液晶显示器等。数字电压表的体积和功耗越来越小,重量不断变轻,价格也逐步下降,可靠性越来越高,量程范围也逐步扩大。

DVM的高速发展,使它已成为实现测量自动化、提高工作效率不可缺少的仪表,数字化是当前计量仪器发展的主要方向之一,而高准度的DC-DVC的出现,又使DVM进入了精密标准测量领域。随着现代化技术的不断发展,数字电压表的功能和种类将越来越强,越来越多,其使用范围也会越来越广泛。采用智能化的数字仪器也将是必然的趋势,它们将不仅能提高测量准确度,而且能提高电测量技术的自动化程序,可以扩展成各种通用数字仪表、专用数字仪表及各种非电量的数字化仪表(如:温度计、湿度计、酸度计、重量、厚度仪等),几乎覆盖了电子电工测量、工业测量、自动化仪表等各个领域。从而提高计量检定人员的工作效率。

这个课题的目的和意义在于使自己掌握对数字电压表的理解,自己动手设计数字电压表与仿真,它可以广泛的应用于电压测量外,通过各种变换器还可以测量其他电量和非电量,测量是一种认识过程,就是用实验的方法将被测量和被选用的相同参量进行比较,从而确定它的大小。DVM广泛应用于测量领域每期测量的准确度和可信度取决于它的主要性能和技术指标。所示我们要学习和了解掌握DVM就显得十分重要。

二、系统的组成框图及工作原理

选择AT89S52作为单片机芯片,选用两位8段共阳极LED数码管实现电压显示,利用ADC0809作为数模转换芯片。将数据采集接口电路输入电压传入ADC0809数模转换元件,经转换后通过D0至D7与单片机P1口连接,把转换完的模拟信号以数字信号的信号的形式传给单片机,信号经过单片机处理从LED数码显示管显示。P2口接数码管位选,P0接数码管段选,实现数据的动态显示,如图2.1所示。

AD0809 待测电压 D0~D7 IN0~IN7 VREF+ VREF- CLK OE ST、ALE 控制线 数据 AT89S52 P1 P0 P3 P2 段选 两位数码管 位选 图2.1 系统原理框图

对于AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提 供高灵活、超有效的解决方案。

单片机(AT89S52)引脚图

1、AT89S52内部结构概述: (1)三级程序存储器保密锁定; (2)256*8位内部RAM; (3)32条可编程I/O线 ; (4)三个16位定时器/计数器; (5)八个中断源;

(6)低功耗的闲置和掉电模式; (7)可编程串行通道; (8)片内振荡器和时钟电路。

CPU 是单片机的核心部件。它由运算器和控制器等部件组成。运算器以完成二进制的算术/逻辑运算部件ALU为核心。它可以对半字节、单字节等数据进行操作。程序计数器PC是一个16位的计数器,用于存放一条要执行的指令地址,寻址范围为64kB,PC有自动加1功能,即完成了一条指令的执行后,其内容自动加1。指令寄存器指令寄存器用于存放指令代码。CPU执行指令时,由程序存储器中读取的指令代码送如指令寄存器,经指令译码器译码后由定时有控制电路发出相应的控制信号,完成指令功能。

存储器(Memory)是计算机系统中的记忆设备,用来存放程序和数据。它根据控制器指定的位置存入和取出信息。特殊功能寄存器(SFR)的地址范围为80H~FFH。在MCS-51中,除程序计数器PC和四个工作寄存器区外,其余21个特殊功能寄存器都在这SFR块中。

P0—P3口结构功能:P0口具有两种功能:第一,P0口可以作为通用I/O接口使用,P0.7—P0.0用于传送CPU的输入/输出数据。输出数据时可以得到锁存,不需外接专用锁存器,输入数据可以得到缓冲。第二,P0.7—P0.0在CPU访问片外存储器时用于传送片外存储器的低8位地址,然后传送CPU对片外存储器的读写;P1口的功能和P0口的第一功能相同,仅用于传递I/O输入/输出数据;P2口的第一功能和上述两组引脚的第一功能相同,即它可以作为通用I/O使用。它的第二功能和P0口引脚的第二功能相配合,作为地址总线用于输出片外存储器的高8位地址;P3口有两个功能:第一功能与其余三个端口的第一功能相同;第二功能作控制用,每个引脚都不同。

引脚 名称 功能 P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 RXD TXD INT0 INT1 T0 T1 WR RD 表2.1 P3口第二功能

串行数据接收口 串行数据发送口 外中断0输入 外中断1输入 计数器0计数输入 计数器1计数输入 外部RAM写选通信号 外部RAM读选通信号 2、ADC0809的介绍和工作原理:

ADC0809内部结构

ADC0809引脚图

IN0-IN7为8条模拟量输入通道 ;

ADC0809 对输入模拟量要求:信号单极性,电压范围是0-5V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路;

地址输入和控制线:4条。ALE 为地址锁存允许输入线,高电平有效。当ALE线为高电平时,地址锁存与译码器将A, B,C 三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行转换。A,B 和C 为地址输入线,用于选通IN0-IN7 上的一路模拟量输入。通道选择表如表2.3所示。

表2.3 ADC0809通道选择表 ADC0809工作时序图

C 0 0 0 0 1 1 1 1 B 0 0 1 1 0 0 1 1 A 选择的通道 0 1 0 1 0 1 0 1 IN0 IN1 IN2 IN3 IN4 IN5 IN6 IN7 数字量输出及控制线:11 条 ST :转换启动信号。当ST 上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D转换;在转换期间,ST应保持低电平。 EOC :转换结束信号。当EOC 为高电平时,表明转换结束;否则,表明正在进行A/D 转换。 OE:输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。OE=1,输出转换得到的数据;OE=0,输出数据线呈高阻状态。 D7-D0: 数字量输出线。 CLK:时钟输入信号线。因ADC0809的内部没有时钟电路,所需时钟信号必须由外界提供,通常使用频率为500KHZ。 VREF(+)、VREF(-):参考电压输入。 三、硬件设计图

四、软件流程图及源程序

ADC0809的分辨率为8位,当输入电压为0~5时,对应的数字量为00H~FFH,而显示范围为0.0~5.0,故显示前应进行标度变换,即将00H~FFH的变化转换为0.0~5.0的变化范围。对于该数字电压表将采集的数值除以51即可,该数字电压表的软件流程图如图5.1所示。

程序见后页。

开始 启动A/D N 转换完? Y 标度转换 十进制转换 查段码,带小数点输出高位 查段码,输出低位

图5.1 数字电压表软件流程图

五、总结心得

这次的大作业有了很多的感想,通过这次作业首先我从网上学到了很多很多的关于单片机的知识,记得以前开始单片机的时候好多东西都不会,导致对它不是很感兴趣,这几天在网上找资料的时候把以前一些不懂的都弄的差不多懂了,觉得单片机在编程序的时候的灵活性和一些结果现象还是蛮有趣的,自己对也比以前更有兴趣了。

说实话对于数字电压表以前我懂的很少,没有想过它里面的结构不是想的那么简单但也不是那么的复杂,要想对这个系统彻底的明白必须了解其内部的各个模块的功能和作用,每个芯片都有自己对应的功能和作用。这次的作业让我更加深刻的了解到了数字电压表的功能了解。

感觉每次大作业都能收获好多的东西,这也许就是由于自己在平时上理论课的时候知识点没有学好的原因吧,所以以后在理论课上要的认真的听讲了,并且要多多的复习,加强记忆。

C语言源程序 主程序程序代码:

/*============================================================

#include

unsigned char LED_W[]= //位选 { 0x02, 0x01, };

unsigned char DATA[]= {

0xc0, // 0 0xf9, // 1 0xa4, // 2 0xb0, // 3 0x99, // 4 0x92, // 5 0x82, // 6 0xf8, // 7 0x80, // 8 0x90, // 9 };

unsigned char temp; unsigned char high; unsigned char low; bit wei=0; sbit ST=P3^0; sbit OE=P3^1;

//0000 0010 P2.1选通 //0000 0001 P2.0选通

sbit EOC=P3^2; sbit CLK=P3^3;

void INT_0 (void); // 定时/计数器初始化子程序声明 void delay(int i); // 延时子程序声明 void main (void) // 主程序 { INT_0(); while(1) {

OE=0; ST=0; delay(10); ST =1; delay(10); ST =0;

while(!EOC); //判断转换是否结束 OE=1;

//转换结束 允许输出 //禁止0809数据输出

//给脉冲让0809工作

temp=P1*50/256;

high=temp/10; //高位数据 low=temp%10; //低位数据 } }

void INT_0 (void) {

TMOD=0x12; //计数器0设为方式2计数 定时器1设为方式1定时 TH0 =216; TL0 =216;

//装初值

//定时/计数器用于定时/计数初始化

TH1 =(65536-5000)/256; TL1 =(65536-5000)%256;

EA =1; //开中断 ET0 =1; ET1 =1;

TR0 =1; //启动定时/计数器 TR1 =1; }

void T_0 (void)interrupt 1 using 1 {

CLK=~CLK; }

void T_1(void) interrupt 3 using 3 {

TH1 =(65536-60000)/256; //再次装入初值 TL1 =(65536-60000)%256; wei=!wei; P2=LED_W[wei]; if(wei) {

P0=DATA[high]&0x7f; //显示高位数据和小数点

//选输出的位

//定时器1中断程序 //计数器0中断程序

}

else

{

P0=DATA[low]; }

//显示低位数据

}

void delay(int i) {

while(--i); }

//延时子程序

汇编语言源程序 ZHENGSHU EQU 71H SHIFENWEI EQU 72H

;71H-72H存放显示数据,依次为个位、十分位

SHUJU EQU 70H ;地址70H存放采集数据 ST BIT P3.0 ;START和ALE共用一个端口 OE BIT P3.1 EOC BIT P3.2 CLK BIT P3.3 ORG 0000H LJMP START ORG 0030H

TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,

92H,82H,0F8H,80H,90H ; 0,1,2,3,4,5,6,7,8,9

START:

MAIN: LCALL TEST ;数据采集函数

LCALL TURNDATA ;数据处理函数

LCALL DISPLAY ;显示函数 LJMP MAIN

/***************延时函数****************/ DELAY: MOV R7,#06H ;约延时1.5ms LOOP1: LOOP2:

MOV R6,#0FFH DJNZ R6,LOOP2

DJNZ R7,LOOP1

RET

/***************ADC0809采集函数*************/ TEST: CLR ST

CLR OE

SETB ST

CLR ST ;ST端口下降沿,开始转换

LOOPCLK: SETB CLK ;由软件来提供ADC0809工作的时钟频率

CLR CLK

JNB EOC,LOOPCLK ;EOC=1时,退出循环 SETB OE

;转换后数据的传送

MOV P1,#0FFH ;P1端口读数据,需先给高电平 MOV A,P1 CLR OE

MOV SHUJU,A ;存储数据到地址70H

RET

/**************数据处理函数***********/ TURNDATA: MOV A,SHUJU

MOV B,#51

DIV AB ;余数在B,相除以后C=0 MOV ZHENGSHU,A

;储存个位

CLR F0

MOV A,B

SUBB A,#1AH ;A减去26,测试上面AB相除时,余数与

26相比较

MOV F0,C ;余数<26,则C=1,不用加5调整 MOV A,#10 MUL AB MOV B,#51 DIV AB JB F0,LP1

ADD A,#5 ;若AB相除后B>=26,十分位加五 MOV SHIFENWEI,A ;储存十分位

LP1:

RET

/***************显示函数*******************/

DISPLAY: MOV R1,#2 ;循环两次

MOV R2,#0FEH

MOV R0,#71H ;存放显示初始地址

XIANSHI: MOV DPTR,#TAB

NOT_ONE:

RET

MOV A,@R0 MOVC A,@A+DPTR

CJNE R2,#0FEH,NOT_ONE ;ORL A,#80H ;MOV P0,A ;MOV P2,R2 ;LCALL DELAY ;MOV A,R2

RL A ;MOV R2,A

INC R0 ;DJNZ R1,XIANSHI

END

不是左边第一个数码管,则转移左边第一个数码管显示小数点

数码管段选 数码管位选 延时 循环左移 选取下一个地址

因篇幅问题不能全部显示,请点此查看更多更全内容