基于单片机的数字直流电压表设计.docx

上传人:b****6 文档编号:16776866 上传时间:2023-07-17 格式:DOCX 页数:24 大小:770.50KB
下载 相关 举报
基于单片机的数字直流电压表设计.docx_第1页
第1页 / 共24页
基于单片机的数字直流电压表设计.docx_第2页
第2页 / 共24页
基于单片机的数字直流电压表设计.docx_第3页
第3页 / 共24页
基于单片机的数字直流电压表设计.docx_第4页
第4页 / 共24页
基于单片机的数字直流电压表设计.docx_第5页
第5页 / 共24页
基于单片机的数字直流电压表设计.docx_第6页
第6页 / 共24页
基于单片机的数字直流电压表设计.docx_第7页
第7页 / 共24页
基于单片机的数字直流电压表设计.docx_第8页
第8页 / 共24页
基于单片机的数字直流电压表设计.docx_第9页
第9页 / 共24页
基于单片机的数字直流电压表设计.docx_第10页
第10页 / 共24页
基于单片机的数字直流电压表设计.docx_第11页
第11页 / 共24页
基于单片机的数字直流电压表设计.docx_第12页
第12页 / 共24页
基于单片机的数字直流电压表设计.docx_第13页
第13页 / 共24页
基于单片机的数字直流电压表设计.docx_第14页
第14页 / 共24页
基于单片机的数字直流电压表设计.docx_第15页
第15页 / 共24页
基于单片机的数字直流电压表设计.docx_第16页
第16页 / 共24页
基于单片机的数字直流电压表设计.docx_第17页
第17页 / 共24页
基于单片机的数字直流电压表设计.docx_第18页
第18页 / 共24页
基于单片机的数字直流电压表设计.docx_第19页
第19页 / 共24页
基于单片机的数字直流电压表设计.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于单片机的数字直流电压表设计.docx

《基于单片机的数字直流电压表设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的数字直流电压表设计.docx(24页珍藏版)》请在冰点文库上搜索。

基于单片机的数字直流电压表设计.docx

基于单片机的数字直流电压表设计

 

基于单片机的数字直流电压表设计

作者:

指导教师:

摘要:

采用单片机作为系统主控制器设计出的多量程数字直流电压表,能够方便快捷的测量出直流电压,并通过1602LCD液晶显示出来。

此系统由过压保护电路、信号输入电路、单片机控制电路、A/D转换电路、1602LCD液晶显示电路五个模块组成,共设计了0-200mV,0-2V,0-20V,0-200V四个量程。

为使得系统更加稳定,电压表测量的精度更高,测量范围更宽,转换速度更快,也考虑到设计的成本问题,故采用了AT89C52单片机作为主控制器、ADC0808作为模数转换芯片,显示部分用1602LCD液晶显示。

关键词:

AT89C52单片机;量程;数字直流电压表

Basedonthesinglechipmicrocomputerdigitaldirectcurrentvoltagemeterdesign

Abstract:

Multi-rangedigitalvoltmeter,whichdesignedthroughthesinglechipmicrocomputerasthemastercontrollerofthesystemcanbeconvenienttomeasurethe DCvoltage,anddisplayedthrough1602LCD.Thissystemconsistsoffivepartscircuit,whicharetheOver-voltageprotection circuit,the input circuit,thesinglechipmicrocomputercontrol circuit, theA / Dconversioncircuit,andthe1602LCDdisplaycircuit.Designedatotaloffour range,whichare0-200mV, 0-2V, 0-20V, 0-200V.Inordertomakethesystem morestable, measuring awiderrange, orconversion faster,alsotakeintoaccount thecost ofthe design, thesystemused theAT89C52 microcontroller asthemaincontroller,andusedtheADC0808 as the digital-analog converterchip.Atthedisplayingpart,thesystemusedthe1602LCD.

Keywords:

AT89C52MCU,measuringrange,thedigitaldirectcurrentvoltagemeter

1前言

数字电压表(digitalvoltmeter)简称DVM,是一种采用数字化测量技术,将输入的连续、不间断的模拟信号(直流或交流输入电压)转换成离散的、不连续的数字信号形式,并准确显示出来的智能化仪表。

传统的数字电压表不仅测量范围有限、功能单一,而且测量精度不高,很大程度上不能满足现代化生产的实际要求。

随着电子工业技术的飞速发展,自动化、智能化设备已经逐渐代替原有的传统设备,而且倍受青睐。

由单片机控制,A/D转换器、LCD液晶显示器等构成的数字电压表不仅抗干扰能力强、测量精度高、测量范围宽,而且电路结构简单、读取数字方便,已广泛应用于电子电气测量、工业智能化仪表、自动控制系统、过程控制系统等领域的检测设备中。

与此同时,由数字电压表扩展而成的其它数字仪表,如数字电流表、万用表等,也发挥出了较大优势。

2总体方案设计与论证

2.1基于模拟电路和数字电路

基于模拟电路和数字电路的基础上完成的数字电压表设计是通过模拟电路将输入信号放大,放大后的信号接入A/D转换器,使模拟型号转换为数字信号,通过数字电路中的逻辑器件产生控制电路,以此来驱动A/D转换器的导通与关断,最后通过显示器显示。

此方案的核心是A/D转换器,优点是价格低廉,但是电路设计却较为复杂,且不易改进。

2.2基于单片机系统

基于单片机功能实现,将被测信号输入A/D转换器进行模数转换,得到的数字信号输入单片机做相应的算法处理,最后通过LCD显示。

此方案的核心为AT89C52单片机,主要分为模数转换,单片机控制处理和液晶显示三个模块。

此方案不仅继承了上述方案的所有优点,而且设计灵活,测量速度快,使用方便,因此本文选择方案二。

3设计思路

数字电压表的设计采用单片机作为主控制器,利用AT89C52作为系统主控制核心,通过编写相应的程序代码,将模拟电压信号经隔离干扰送入ADC0808中进行A/D转换,转换后的数据送入LCD中显示出来。

方案原理方框图如图1所示。

图1系统基本框图

按照设计要求,决定控制模块采用低功耗、高性能的AT89C52单片机作为核心元器件,模数转换模块采用易仿真且功能扩展较为方便的ADC0808转化器。

系统的设计主要分为硬件电路部分和软件程序部分两大块。

硬件电路部分:

主要包括单片机控制电路、稳压电源电路、模/数转换电路、LCD显示电路和过压保护电路,各部分电路结构和工作原理将会在硬件电路设计部分做详细介绍。

软件程序部分:

采用C语言编写程序,通过KEIL和PROTEUS软件对其进行编译和仿真。

4硬件电路系统模块的设计

4.1单片机控制模块

本系统采用AT89C52单片机作为中央处理器。

其主要任务收集模数转换器输出的数字信号,并执行相应的处理操作,让液晶能够正确显示。

单片机最小系统包括电源电路、复位电路和晶振电路。

一般仿真时需搭建晶振电路和复位电路,如下图2所示。

晶振电路工作原理:

在XTAL1、XTAL2端接上11.0592M(或12M)的晶振及两个30PF的谐振电容,即可完成单片机的晶振电路。

当单片机上位时,XTAL1、XTAL2引脚均为高电平,对30PF的陶瓷电容进行充电,通过电容不停的充放电产生高低电平脉冲,触发晶振产生谐振。

复位电路工作原理:

在RESET端接上相应的电阻(200K)、10uF的电解电容,加上按键即可完成复位电路。

当按键没有按下时,由于10uF电解电容两端需要一定时间的充电,相当于电路被断开,此时RESET端口为低电平;当按键按下时,电解电容两端被短路,此时RESET端口为高电平,单片机系统复位。

图2单片机最小系统

4.2稳压电源电路

实际应用中,要驱动单片机正常工作,电源电路也是必不可少的一部分。

给单片机供电的稳压电源电路原理图如下图3所示。

电源电路工作原理:

该电路由变压器、整流桥、7805稳压器和若干电容电阻构成。

首先将220V的交流电压降压后输入整流桥整流,可以得到带有纹波的直流电,之后滤波。

滤波电路由两个100PF的电容和一个40欧姆的电阻构成。

由于单片机的电源电压是+5V的稳定直流电,因此需接入一个7805稳压器。

通过7805稳压器稳压后,得到+5V的稳定直流电压。

图3稳压电源电路

4.3过压保护电路

出于耐压和安全考虑,数字电压表通常会限定最大测量范围。

一般规定最高直流电压量程为1000V。

因此,在设计电路过程中,需在模拟信号输入系统前加入一个过压保护电路。

过压保护电路有多种实现方式,可以采用火花放大器或压敏电阻器。

本设计采用电路结构较为简单,工作范围(6~3000V)较宽,对电压冲击响应速度较快的压敏电阻器,压敏电阻器是电压灵敏器VS(Voltage-Sensitive-Resistor)的简称,是一种新型的过压保护器件。

压敏电阻的伏安特性具有非常明显的对称性,在正、反两部分伏安特性中能起到稳压作用。

本设计直接将压敏电阻接在分压电位器前面,因此不需加限流电阻。

压敏电阻器的标称电压值应根据实际电路需求来确定。

本系统采用850规格的压敏电阻器作为保护电路。

压敏电阻的伏安特性如下图4(a)所示。

图中的

分别表示通过1mA、-1mA直流电流时的耐压值。

图4过压保护电路

4.4A/D转换电路

4.4.1ADC0808硬件结构

ADC0808作为A/D转换器中应用较为广泛的一种芯片,主要作用是将输入的模拟信号转换为数字信号,是一种CMOS单片型逐次逼近式A/D转换器,由多路模拟量输入通道选择开关、地址锁存器、译码器、比较器、D/A转换器、三态输出锁存器和8位开关树形等组成,模拟输入电压的范围是-0.3V~+15V,转换时间是128us。

多路模拟信号输入选择开关可选通8路模拟通道,允许8路模拟分时输入,并且共用一个A/D转化器进行转换。

通过地址锁存器和译码器对ADDA、ADDB、ADDC三个地址位进行地址锁存和译码。

当ADDA、ADDB、ADDC选择000,即选择IN0通道输入,选择111即IN7通道输入。

4.4.2ADC0808工作原理

ADC0808具体工作原理如下:

(1)当地址锁存允许信号ALE为高电平“1”时,将输入地址传入地址锁存器中锁存,经过地址译码器进行译码,从8路模拟通道中选择一路模拟通道送到比较器。

(2)送给A/D转换器启动信号START一个高低脉冲信号,START的上升沿会使逐次逼近寄存器复位,下降沿会启动A/D转换,此时使A/D转换器结束信号EOC信号为低电平。

(3)当转换结束后,得到的转换结果将会被送到输出三态锁存器中锁存,此时使EOC信号为高电平,通知CPU转换结束。

(4)当CPU执行读数据指令时,使数据输出允许信号OE为高电平,从输出端口D0~D7读取数据。

4.4.3ADC0808与单片机的连接

ADC0808与单片机的连接示意图如图5所示,其中单片机的P3.3~P3.7这五个引脚分别接ADC0808的OE、ALE、EOC、START、CLOCK五个控制引脚,用来控制A/D转换器进行正确的模数转换。

P3.0~P3.2引脚分别接A/D转换器的三位地址线ADDA、ADDB、ADDC。

P1口接A/D转换器的输出端OUT0~OUT8。

图5AT89C52单片机与A/D转换器的连接

4.5液晶显示电路

4.5.11602LCD液晶引脚说明

1602LCD采用标准的14引脚(无背光)或16引脚(带背光)接口,各引脚接口说明见表2。

表21602液晶接口引脚定义

编号

符号

引脚说明

编号

符号

引脚说明

1

VSS

电源地

9

D2

DateI/O

2

VDD

电源正极

10

D3

DateI/O

3

VL

液晶显示对比度调节端

11

D4

DateI/O

4

RS

数据/命令选择端(H/L)

12

D5

DateI/O

5

R/W

读/写选择端(H/L)

13

D6

DateI/O

6

E

使能信号

14

D7

DateI/O

7

D0

DateI/O

15

BLA

背光源正极

8

D1

DateI/O

16

BLK

背光源负极

(1)2组电源:

一组是模块的电源;另一组是背光板的电源;两者均为5V供电。

(2)VL:

是调节对比度的引脚。

(3)RS:

是命令/数据选择端引脚。

当该引脚为高电平时,表示将进行数据操作;该引脚为低电平时,表示进行命令操作。

(4)RW:

是读写选择端。

当该引脚为高电平时,表示要对液晶进行读操作;该引脚为低电平时,表示要对液晶进行写操作。

(5)E:

使能信号引脚。

通常当总线上的信号稳定后会给一个正脉冲,通知把数据读走,当引脚为高电平时不允许总线变化。

(6)D0—D7:

8位双向并行总线,用来传送数据和命令。

(7)BLA是背光电源正极,BLK是背光电源负极。

4.5.21602LCD的指令码(命令码)

(1)液晶上电时需要初始化,典型的指令码是0x38H(如表3),即上电时需调用voidwrite_com(ucharcom)函数写命令码,代码为write_com(0x38)。

执行完这个函数就可把液晶初始化成16x2显示,5x7的点阵,8位数据接口。

表3显示模式设置

指令码

功能

0

0

1

1

1

0

0

0

设置16×2显示,5×7点陈,8位数据接口

(2)显示开/关及光标设置,第一行指令能完成的功能是控制液晶是否显示,光标是否显示,光标是否闪烁,控制命令码,如表4所示。

表4显示开/关及光标设置

指令码

功能

0

0

0

0

1

D

C

B

D=1开显示;D=0关显示

C=1显示光标;C=0不显示光标

B=1光标闪烁;B=0光标不显示

0

0

0

0

0

1

N

S

N=1当读或写一个字符后地址指针加1,且光标加1

N=0当读或写一个字符后地址指针减1,且光标减1

S=1当写一个字符时,整屏显示左移(N=1)或右移(N=0),以得到光标不移动而屏幕移动的效果

S=1当写一个字符是,整屏显示不移动

4.5.3液晶与单片机接口说明

(1)液晶1,2端为电源;15,16为背光电源;为避免直接加5V电压烧坏背光灯,通常在15引脚上串接一个10欧电阻用来限流。

(2)液晶3端为液晶对比度调节端;通过把一个10千欧电位器接地来调节液晶显示器的对比度。

第一次使用时,在给液晶上电的状态下,调节电位器,直到液晶上行显示黑色小格为止。

(3)液晶4端为液晶控制器写数据/命令选择端,接在单片机的P2.5口上。

(4)液晶5端为读/写选择端,因系统设计不从液晶读数据,只向液晶写入命令、显示数据,故该端选择写状态,即让其接地成为低电平。

(5)液晶6端为使能端信号,是液晶操作的一个必要信号,接在单片机P2.4口上。

液晶与单片机的连接如图6所示。

图6液晶显示电路

4.6系统总电路设计

4.6.1系统总电路的工作原理

系统是基于AT89C52单片机、ADC0808转换器、1602液晶显示器、拨码开关等器件组成的多量程数字电压表。

分别设计0V~200mV,0V~2V,0V~20V,0V~200V四个档位,通过拨码开关来选择相应的输入通道,0V~200mV选择100,0V~2V选择101,0V~20V选择110,0V~200V选择111。

系统共分为输入电路、模数转换、单片机控制、液晶显示四个模块。

具体工作原理如下:

(1)根据输入电压的大体范围确定拨码开关的数值,如0~2V选择101,将此数值作为A/D转换器三位地址线ADDA、ADDB、ADDC的地址送入地址所存器锁存,并选通IN5作为输入通道。

(2)通过单片机控制A/D转换器的ALE、OE、START、EOC、CLK五个引脚,使A/D转换器进行相应的模数转换。

(3)单片机的P1口读取A/D转换器输出端口D0~D7输出的数字信号。

(4)单片机的P0口接液晶显示器,通过用C语言编写程序代码来控制液晶显示器,让其显示出最后的直流电压值。

4.6.2系统总电路连接示意图

系统总原理图如图7所示,分别用A/D转换器的IN4、IN5、IN6、IN7作输入通道。

单片机的P3.0~P3.2口接拨码开关,用于控制A/D转换器的三个地址输入端ADDA、ADDB、ADDC。

P3.3~P3.7接A/D转换器的五个控制引脚,用于控制A/D转换器进行正确的模数转换。

P0口和P2.4、P2.5引脚接液晶显示器。

P1口接A/D转换器的输出端。

图7系统总电路

 

5系统软件的设计

5.1汇编语言与C语言的特点及选择

本设计是一个既需要硬件电路连接,又需要软件编程辅助的设计方案。

因此,要顺利完成课题要求,选择一个合适的编程语言也是不可或缺的重要环节。

目前,我们常用的编程语言有汇编语言和C语言两种。

汇编语言是一种原始的机器语言,它的优点是占用内存单元少,执行的速度非常快,执行的效率也很高。

但其也有不可避免的弊端,那就是语言复杂,程序繁琐,有很多的语法规定需要记。

它要求编程者有较深的功底,对于初学者来说,要想编一个完整的,正确的源程序代码较为不易。

而且汇编语言对于程序的依赖性比较强,因此可移植性差。

C语言是二十世纪七十年代在汇编语言的基础上演变而来的,它是一种结构式的语言,程序的各个部分相互独立(除了必要的信息交流外)。

其最大的特点就是支持函数的调用,并且引入了指针的概念,是的程序的执行效率大大提高。

相对于汇编语言来说,C语言不仅程序简单、易学易懂,而且设计灵活、使用方便,提供给用户的数据类型丰富,能让设计者自由发挥。

结构化的控制语句,让程序的可移植性也大大增强。

综上比较,本设计选择各方面都更有优势的C语言作为编程语言。

5.2主程序设计

主程序的设计包括以下几个方面:

(1)根据硬件电路对单片机进行必要的位定义;

(2)编写程序运行时的延时函数;

(3)编写给单片机提供CLK脉冲的延时函数:

要产生CLK脉冲,通用的做法是将单片机的ALE信号经过分频器分频,再送给ADC0808的CLK引脚。

通过编写延时函数来产生时钟脉冲是本程序的一个创新点。

经过一段时间(本设计取大约0.2s)的延时将CLK取反,由此来产生高低电平脉冲。

既简化了电路的复杂程度又优化了程序的运行时间。

(4)编写A/D转换器的转换驱动程序:

首先送给ALE引脚一个高低脉冲信号,将输入地址锁存;接着送给START引脚一个高低脉冲信号,启动A/D转换;等待一段延时后,判断EOC引脚的信号。

如果EOC引脚为高电平则通知CPU转换结束,将转换后的数据从输出端口D0~D7读出。

(5)编写1602LCD液晶显示模块的驱动程序:

本模块程序共分为display()、display1()、display2()、display3()四个子函数,分别对应0~200mV、0~2V、0~20V、0~200V四个量程。

当量程为0~200mV时对应A/D转换器的数字量为0~255。

设外部电压为X,对应二进制编码为num,根据公式

=

可得X=num/1.275,未便于取每一位的数据,将num放大1000倍,得到一个四位整数。

接着分离出该整数每一位上的数字,如千位qian=num/1000,百位bai=num%1000/100,十位shi=num%100/10,个位ge=num%10。

再通过write_dianya()函数将分离出的结果送到1602LCD显示。

此时需根据公式write_data(0x2E),点亮十位上的小数点,即可显示出0~200mV范围内的电压值。

当量程为0~2V时对应A/D转换器的数字量为0~255。

设外部电压为x,对应二进制编码为num,根据公式

=

可得x=num/127.5,未便于取每一位的数据,将num放大100倍,得到一个三位整数。

分离出该整数每一位上的数字,如百位bai=num/100,十位shi=num%100/10,个位ge=num%10。

再通过write_dianya1()函数将分离出的结果送到1602LCD显示。

此时需根据指令write_data(0x2E),点亮百位上的小数点,即可显示出0~2V范围内的电压值。

0~20V范围内的电压显示与0~2V原理一样,只需将百位的小数点根据公式write_data(0x2E)移动到十位点亮即可。

0~200V范围内的电压与0~2V原理大体相同,根据公式

=

可得x=num/1.275,未便于取每一位的数据,将num放大1000倍,得到一个四位整数。

接着分离出该整数每一位上的数字,如千位qian=num/1000,百位bai=num%1000/100,十位shi=num%100/10,个位ge=num%10。

再通过write_dianya3()函数将分离出的结果送到1602LCD显示。

此时需根据公式write_data(0x2E),点亮十位上的小数点,即可显示出0~200V范围内的电压值。

6系统调试

6.1硬件调试

硬件调试主要的任务就是检查电路,排除故障。

初次完成的设计大多不会马上就能顺利,总会存在这样或那样的问题。

因此需要仔细检查,逐个排除各个故障。

硬件调试从如下几个模块进行:

1)检查总电路。

排除电路存在的原则性工艺错误和焊接错误;

2)检查各个模块电路。

从输入电路开始,到单片机控制电路,到A/D转换电路,到LED数码管的显示电路依次检查,排除每一部分可能存在的隐患。

包括电阻电容的数值,各个元器件的引脚顺序等。

6.2软件调试

软件调试的主要任务是利用开发工具(KEILC51)进行在线的仿真调试,扫描出程序存在的错误,以便逐个修改。

仿真调试有时也能挖掘出硬件电路故障,一举两得。

通常修改完所有错误后,载入单片机系统还是不能得到预期的结果。

此时,把系统拆分成一个个小模块,对各个模块进行检测并查看结果是否正确。

若正确就检查下一个模块,不正确就对程序中的参数进行适当的调整,直到检测出想要的结果。

7仿真结果

7.10V~200mV仿真效果

当输入的模拟电压信号较小时,选用量程为0V~200mV的通道,输入选用ADC0808的IN4口,将拨码开关置于100。

此时的输入电压设为200mV,通过调节电位器来调整不同的输入电压进行仿真,仿真效果如图8。

仿真结果:

输入电压为130mV,液晶显示结果为130.1mV,在误差允许范围内,符合设计的要求。

图80V~200mV仿真效果图

7.20V~2V仿真效果

当输入电压范围稍高但低于2V时,选用较小量程的0V~2V通道,输入选用ADC0808的IN4口,将拨码开关置于101。

此时的输入电压设为2V,通过调节电位器来调整不同的输入电压进行仿真,仿真效果如图9。

仿真结果:

输入电压为1.3V,液晶显示结果为1.31V,在误差允许范围内,符合设计的要求。

 

图90~2V仿真效果图

7.30V~20V仿真效果

当输入电压范围超过2V但低于20V时,就必须更换较大量程的0V~20V通道,输入选用ADC0808的IN6口,将拨码开关置于110。

此时的输入电压设为20V,通过调节电位器来调整不同的输入电压进行仿真,仿真效果如图10。

仿真结果:

输入电压为11.6V,液晶显示结果为11.7V,在误差允许范围内,符合设计的要求。

图100~20V仿真效果图

7.40V~200V仿真效果

当输入电压范围超过20V时,就必须更换较大量程的通道,如下图所示,输入选用ADC0808的IN7口,将拨码开关置于111。

此时的输入电压设为200V,通过调节电位器来调整不同的输入电压进行仿真,仿真效果如图11。

仿真结果:

输入电压为153V,液晶显示结果为153V。

在误差允许范围内,符合设计的要求。

7.50V~20V溢出仿真效果

图12为0~20V溢出仿真效果图,在实际测量中,当被测电压大于该档位的最大测量范围时,液晶将会显示溢出信号1.0.0。

其余三个量程的溢出效果和0~20V相同。

图110~200V仿真效果图

图12溢出仿真效果图

8电路实物调试

图13量程为200mV测量结果

该图为0~200mV的实物效果图,将拨码开关置于100,调节电位器即可。

用实际电压表测得输入电压为158.7V,在允许误差范围内,符合设计要求。

图14量程为2V测

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2