基于单片机实现的数字电压表 毕业设计.docx
《基于单片机实现的数字电压表 毕业设计.docx》由会员分享,可在线阅读,更多相关《基于单片机实现的数字电压表 毕业设计.docx(37页珍藏版)》请在冰豆网上搜索。
基于单片机实现的数字电压表毕业设计
信息职业技术学院
毕业设计说明书(论文)
设计(论文)题目:
基于单片机实现的
数字电压表
专业:
通信技术
班级:
学号:
姓名:
指导教师:
二ΟΟ八年十二月三十日
信息职业技术学院毕业设计(论文)任务书
学生
姓名
学号
0
班级
通技06-2
专业
通信技术
设计(或论文)题目
基于单片机实现的数字电压表
指导教师姓名
职称
工作单位及所从事专业
联系方式
备注
助教
高级工程师
四有限公司
设计内容:
1.设计一款基于单片机实现的直流数字电压表。
2.主要功能:
(1)可测量0~50V直流电压,分辨率0.02V;
(2)具有数码管或LCD显示电压值功能;
(3)具有量程自动转换功能;
(4)能实现多路信号的分时测量(可选项)。
进度安排:
第5周:
查询资料和制定方案;
第7~9周:
电路设计与仿真;
第10~11周:
软件设计与仿真;
第12~15周:
样机联调与撰写设计报告;
第16~17周:
参加答辩。
主要参考文献、资料(写清楚参考文献名称、作者、出版单位):
1.徐爱钧.智能化测量控制仪表原理与设计(第二版).北京航空航天大学出版社,2004
2.吴金戌,沈庆阳.8051单片机实践与应用.郭庭吉清华大学出版社,2002
3.黄智伟.全国大学生电子设计竞赛训练教程.电子工业出版社,2004
4.汪德彪.MCS-51单片机原理及接口技术(第一版).电子工业出版社,2003
审
批
意
见
教研室负责人:
年月日
备注:
任务书由指导教师填写,一式二份。
其中学生一份,指导教师一份。
目 录
摘 要
电压表是测量仪器中不可缺少的设备,目前广泛应用的是采用专用集成电路实现的数字电压表。
本系统以AT89C51单片机为核心,以逐次逼近式A/D转换器ADC0808、液晶显示器LCD1602为主体,设计了一款简易的数字电压表,能够测量0~50V的直流电压,最小分辨率为0.02V。
关键词 AT89C51单片机;电压测量;A/D转换;LCD1602液晶显示
第1章 绪论
数字电压表的基本工作原理是利用A/D转换电路将待测的模拟信号转换成数字信号,通过相应换算后将测试结果以数字形式显示出来的一种电压表。
较之于一般的模拟电压表,数字电压表具有精度高、测量准确、读数直观、使用方便等优点。
电压表的数字化测量,关键在于如何把随时连续变化的模拟量转化成数字量,完成这种转换的电路叫模数转换器(A/D)。
数字电压表的核心部件就是A/D转换器,由于各种不同的A/D转换原理构成了各种不同类型的DVM。
一般说来,A/D转换的方式可分为两类:
积分式和逐次逼近式。
积分式A/D转换器是先用积分器将输入的模拟电压转换成时间或频率,再将其数字化。
根据转化的中间量不同,它又分为U-T(电压-时间)式和U-F(电压-频率)式两种。
逐次逼近式A/D转换器分为比较式和斜坡电压式,根据不同的工作原理,比较式又分为逐次比较式及零平衡式等。
斜坡电压式又分为线性斜坡式和阶梯斜坡式两种。
在高精度数字电压表中,常采用由积分式和比较式相结合起来的复合式A/D转换器。
本设计以AT89C51单片机为核心,以逐次比较型A/D转换器ADC0808、液晶显示器LCD1602为主体,构造了一款简易的数字电压表,能够测量1路0~50V直流电压,最小分辨率0.02V。
第2章 方案设计
实现数字电压表的方案较多,目前广泛采用的是基于74系列逻辑器件方案,本设计将介绍基于单片机实现的方案。
74系列逻辑器件方案采用双积分电路+液晶显示器+逻辑电路+定时采样电路+数据处理实现,被测电压信号由信号输入端加到测量系统,进行预处理后送到后级电路。
单片机系统方案此方案采用输入处理电路+ADC0808+AT89C51+液晶显示实现,被测信号由ADC0808模拟输入端输入,单片机采集转换数据,将转换数据送出显示。
2.1 方案选择
2.1.1 量程转换方案设计
方案一:
考虑到ADC0808的八路模拟量输入通道本质上也是模拟开关,因此可以利用其八个模拟通道中的三个作为量程转换器,即根据通道对应的电压测量范围确定对应的电压放大倍数设计对应的前置放大电路。
方案二:
选用模拟开关芯片4066实现量程转换。
4066集成了4个模拟开关,每一路开关都有一个控制端控制对应开关的通断。
用单片机对控制端进行控制,实现不同量程的转换。
方案三:
利用手动开关实现量程转换。
该方案可简化控制程序,减小系统开销,缩短反应时间,不足之处在于操作麻烦。
终上所述:
方案三所需元件少、成本低且易于实现,可选此方案。
2.1.2 显示部分方案设计
方案一:
用液晶LCD1602来显示电压读数可进行片选,实现液晶的动态点亮。
因为只需一片液晶就可以完成现示工作,所以当单片机控制前两个控制端时,最高位控制端应接地。
用软件作为液晶的驱动显示,且具体译码由软件控制。
方案二:
同方案一选用ADC0808进行片选,在译码驱动部分选用液晶LCD1602,用软件译码。
终上所述:
由于两个方案都可以实现同样的功能,但方案二设计简单、系统开销小、反应速度较快,因此选择此方案。
2.2 方案论证
经过以上方案设计,决定采用如图2-1所示方案。
图2-1 系统框图
第3章 硬件设计
3.1 单片机控制模块设计
单片机控制模块的作用是为控制各单元电路的运行并完成数据的换算或处理,主要由单片机、时钟电路、复位电路组成。
3.1.1 时钟电路
单片机工作的时间基准是由时钟电路提供的,在单片机的XTAL1和XYAL2两个管脚接一只晶振及两只电容就构成了单片机的时钟电路,电路中电容器
和
对振荡频率有微调作用,通常取(30±10)pF石英晶体选择6MHz或12MHz都可以。
时钟电路如图3-1所示。
图3-1 系统时钟电路图3-2 系统复位电路
3.1.2 复位电路
单片机的RST管脚为主机提供了一个外部复位信号输入口。
复位信号是高电平有效,高电平有效的持续时间为2个机器周期以上。
单片机的复位方式可由手动复位方式完成。
电阻、电容器的参考值
=10KΩ、
=10uF、
=0.01uF。
复位电路如图3-2所示。
3.2 量程转换模块设计
3.2.1 电路选择
图3-3 量程转换开关图3-4 衰减输入电路
输入电路的作用是把不同量程的被测电压,规范到A/D转换器所要求的电压值。
数字电压表所采用的是逐次逼近式A/D转换芯片ADC0808,它要求输入电压0-±2V。
本仪表设计的是0-50V电压,灵敏度高所以可以不加前置放大器,只需衰减器,如图所示9MΩ、900KΩ、90KΩ、和10KΩ电阻构成1/10、1/100、1/1000的衰减器。
衰减输入电路可由开关来选择不同的衰减率,从而切换档位。
3.2.2 工作原理及换算关系
如上图通过电阻网络实现电压衰减测量的输入阻抗约为R4、R5、R6。
1端、2端单独合上时,Vout的大小分别是:
1脚单独合上Vout=Vin×1;2脚单独合上Vout=Vin×(R4+R5+R6)/(R3+R4+R5+R6)。
由上式可以看出,Vout在一定范围时电阻网络衰减程度越大其可输入电压Vin。
量程调节,只要把R5,R6的参数选好然后,由开关1端、2断选择测量电压输出端即完成量程选定。
3.3 逐次逼近式A/D转换模块设计
逐次逼近型A/D转换器属于直接型A/D转换器,它能把输入的模拟电压直接转换为输出的数字代码,而不需要经过中间变量。
主要由比较器、环形分配器、控制门、寄存器与D/A转换器组成。
3.3.1 ADC0808简介
1.ADC0808引脚功能
图3-5 ADC0808引脚图
IN0~IN7:
8路模拟量输入。
A、B、C:
3位地址输入,2个地址输入端的不同组合选择八路模拟量输入。
ALE:
地址锁存启动信号,在ALE的上升沿,将A、B、C上的通道地址锁存到内部的地址锁存器。
D0~D7:
八位数据输出线,A/D转换结果由这8根线传送给单片机。
OE:
允许输出信号。
当OE=1时,即为高电平,允许输出锁存器输出数据。
START:
启动信号输入端,START为正脉冲,其上升沿清除ADC0808的内部的各寄存器,其下降沿启动A/D开始转换。
EOC:
转换完成信号,当EOC上升为高电平时,表明内部A/D转换已完成。
2.ADC0808内部结构图
逐次逼近型A/D转换器ADC0808由八路模拟开关、地址锁存与译码器、比较器、D/A转换器、寄存器、控制电路和三态输出锁存器等组成。
其内部结构如图3-6所示。
图3-6 ADC0808内部结构
3.3.2 A/D转换电路设计
集成摸数转换芯片ADC0808实现的A/D转换电路如图3-7所示,被测信号由ADC0808模拟输入端输入,完成A/D转换后送入单片机,经相应处理后送出显示。
图3-7 ADC0808与单片机的连接
3.4 显示模块设计
3.4.1 LCD显示模块
LCD显示器分为字段显示和字符显示两种。
其中字段显示与LED显示相似,只要送对应的信号到相应的管脚就能显示。
字符显示是根据需要显示基本字符。
本设计采用的是字符型显示。
系统中采用LCD1602作为显示器件输出信息。
与传统的LED数码管显示器件相比,液晶显示模块具有体积小、功耗低、显示内容丰富等优点,而且不需要外加驱动电路,现在液晶显示模块已经是单片机应用设计中最常用的显示器件了。
LCD1602可以显示2行16个汉字。
3.4.2 LCD1602的引脚功能
LCD1602模块的引脚如图3-8所示,其引脚功能如下:
RS:
数据和指令选择控制端,RS=0命令状态;RS=1数据
R/W:
读写控制线,R/W=0写操作;R/W=1读操作
A:
背光控制正电源K:
背光控制地
E:
数据读写操作控制位,E线向LCD模块发送一个脉冲,LCD模块与单片机间将进行一次数据交换
DB0~DB7:
数据线,可以用8位连接,也可以只用高4位连接,节约单片机资源。
VDD:
电源端VEE:
亮度控制端(1-5V)
VSS:
接地端
图3-8 LCD1602模块
3.4.3 LCD1602的显示操作
1.四种基本操作
LCD有四种基本操作,具体如表3-1所示。
表3-1 LCD与单片机之间有四种基本操作
RS
R/W
操作
0
0
写命令操作(初始化,光标定位等)
0
1
读状态操作(读忙标志位)
1
0
写数据操作(要显示内容)
1
1
读数据操作(可以把显示存储区中的数据反读出来)
(1)读状态字
执行读状态字操作,如表3-1满足RS=0,R/W=1。
根据管脚功能,当为有效电平时,状态命令字可从LCD模块传输到数据总线。
同时可以保持一段时间,从而实现读状态字的功能。
读状态字流程如图3-9所示。
图3-9 读入状态字流程图
(2)命令字
表3-2所示为命令字,其主要介绍了指令名称、控制信号及控制代码。
其指令名称是指要实现的功能;控制代号是采用的十六进制的数值表示的。
1)清零操作是指输入某命令字后即能将整个屏幕显示的内容全部清除;
2)归home位:
将光标送到初始位;其中的*号为任意,高低电平均可;
3)输入方式:
设光标移动方向并指定整体显示,是否移动。
I/D=0:
减量方式,S=1:
移位方式,S=0:
不移位;
4)显示状态:
D指设置整体显示开关;C指设置光标显示开关;B指设置光标的字符闪耀;
5)光标画面滚动:
R/L指右移或左移;S/C指移动总体或光标;
6)功能设置:
DL接口数位,L指显示行数,F显示字型;如DL=1:
8位=0,4位N=1:
2行=0:
1行,G=1:
5×10=0:
5×7(点阵)
7)CGRAM地址设制:
相当于一个数据库,可以在其中选择所需要的符号;
8)DDRAM地址设制:
显示定位;
9)读BF和AC:
B为最高位忙的标志,F为标志位;
10)写数据:
将数据按要求写入到对应的单元;
11)读数据:
读相应单元内的数据;
表3-2 命令字
指令名称
控制信号
控制代码
RS
RW
D7
D6
D5
D4
D3
D2
D1
D0
清屏
0
0
0
0
0
0
0
0
0
1
归HOME位
0
0
0
0
0
0
0
0
1
*
输入方式设制
0
0
0
0
0
0
0
1
I/D
S
显示状态设制
0
0
0
0
0
0
1
D
C
B
无标画面滚动
0
0
0
0
0
1
S/C
RL
*
*
功能设置
0
0
0
0
1
DL
N
F
*
*
CGRAM地址设制
0
0
0
1
A5
A4
A3
A2
A1
A0
DDRAM地址设制
0
0
1
A6
A5
A4
A3
A2
A1
A0
读BF和AC
0
1
BF
AC6
AC5
AC4
AC3
AC2
AC1
AC0
写数据
1
0
数据
读数据
1
1
数据
(3)写命令字
由表3-2可知当RS=0,R/W=0时,才可以通过单片机或用户指令把数据写到LCD模块,此时就对LCD进行调制。
可采用查询方式:
先读入状态字,再判断忙标志位,最后写命令字。
图3-10所示为写命令字的流程图。
图3-10 写命令字流程图
1)定义光标位置
显示数据的某位,就是把显示数据写在相应的DDRAM地址中,DDRAM地址占7位。
Set DDRAM address命令如表3-3所示。
光标定位,写入一个显示字符后,DDRAM地址会自动加1或减1,加或减由输入方式设置。
表3-3 SetDDRAMaddress命令
RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0
0
1
AC6
AC5
AC4
AC3
AC2
AC1
AC0
第1行DDRAM地址与第2行DDRAM地址并不连续,如表3-4所示。
表3-4 DDRAM地址
row
1
2
3
4
5
…
14
15
16
line1
80H
81H
82H
83H
84H
…
8dH
8eH
8fH
line2
0c0H
0c1H
0c2H
0c3H
0c4H
…
0cdH
0ceH
0cfH
2)LCD初始化
从通电开始延时,先经过判忙后再进行功能设置,过一段时间后可以设制显示状态(如设制行、位或阵列)再经过延时清屏后才可以设置输入方式,具体实现过程如图3-11所示。
图3-11 LCD初始化流程图
2.LCD显示程序设计
LCD显示程序的设计一般先要确定LCD的初始化、光标定位、确定显示字符后,显示流程如图3-12显示。
图3-12 LCD显示程序流程图
第4章 系统软件设计
根据需要,可将系统软件按照功能划分为4个模块,分别是主程序模块、A/D转换模块、液晶显示模块、中断服务程序模块(改变显示的小数点位置),各模块的功能关系如图4-1所示。
编写系统软件时,可首先编写各模块的底层驱动程序,而后是系统联机调试,编写上层主程序。
图4-1 系统软件框图
4.1 主程序设计
图4-2 主程序流程图
主程序主要负责各个模块的初始化工作:
设置定时器、寄存器的初值,启动A/D转换,读取转换结果,处理量程转换响应,控制液晶实时显示等,其流程图如图4-2所示。
4.2 A/D转换程序
A/D转换程序的功能是采集数据,在整个系统设计中占有很高的地位。
当系统设置好后,单片机扫描转换结束管脚P2.6的输入电平状态,当输入为高电平则转换完成,将转换的数值转换并显示输出。
若输入为低电平,则继续扫描。
程序流程图如图4-3所示。
图4-3 A/D转换程序流程图
4.3 中断服务程序
中断服务程序的功能是为ADC0808提供时钟信号,当中断发生时将AT89C51单片机的P2.4管脚将输出信号取反,为ADC0808提供12kHz时钟信号。
第5章 系统仿真与调试
在进行电路的局部调试之后,我又进行了系统整机调试。
首先为ADC0808接上+12V的电压,为其它芯片接上+5V的工作电压。
另外还要输入待测的模拟电压,该电压从200mV以下的电压开始输起,依次增大,直到达到待测电压的上限50V为止,记录测量数据并分析系统性能。
5.1 分局部调试
1.检查ADC0808是否工作
ADC0808集成了三个控制端。
如果某一控制端为高电平则对应的开关将接通。
为测量其是否工作,我们将它的三个控制端用导线引出分别接高低电平,发现测量结果与理论分析结果一致,ADC0808工作正常。
2.各量程调节
这一步调试是建立在上述两步调试的基础上的。
针对不同的档位,我们通过接入不同待测的模拟量来调节电压。
5.2 整机调试
本系统的测试采用Proteus软件,系统在Proteus软件中仿真时使用的元件如表5-1所示。
测试表明,系统运行正常,能准确将直流模拟信号的电压转换成数值显示,并能精确到5位有效数字,达到了设计的要求。
表5-1 元件名称及属性
序号
元件名
属性
序号
元件名
属性
1
AT89C51
单片机
7
LM016L
LCD1602
3
CAP
电容
8
ADC0808
8位A/D转换器
4
CAP-ELEC
电解电容
9
PULLUP
上拉电阻
5
CRYSTAL
晶振
10
SW-POT4
4路模拟开关
6
RES
电阻
11
74LS02
与非门
5.3 系统仿真
采用Keil编译器进行源程序编译及仿真调试,调好程序后将目标程序导入Proteus进行软硬件调试,基于单片机实现的数字电压表测试值见表5-2所示。
表5-2 测试值与真实值
电压表测得值/V
0.00
0.332
0.39
0.507
0.996
1.250
1.503
2.000
2.480
绝对误差/V
0.00
+0.02
+0.01
+0.02
+0.01
+0.01
+0.03
+0.00
+0.01
电压表测得值/V
4.980
5.07
9.96
12.50
15.03
19.92
29.88
39.84
49.80
绝对误差/V
+0.00
+0.02
+0.01
+0.01
+0.02
+0.02
+0.02
+0.03
+0.02
从表中可以看出,电压表测得值误差均在0.02V以内,这与采用8位A/D转换器所能达到的理论误差精度相比较接近,因此在一般的应用场合都可以满足要求。
结 论
本设计以AT89C51单片机为控制核心,通过集成摸数转换芯片ADC0808将被测信号转换成数字信号,经单片机内部程序处理后,由液晶显示器LCD1602显示测量结果。
仿真测试表明,系统性能良好,测量读数稳定易读、更新速度合理,直流电压测量范围为0~50V,最小分辨率为0.02V,满足任务书指标要求。
但是,该系统也存在一定程度的不足,例如:
1、输入电压易发生干扰不稳定,且驱动能力可能存在不足,需在被测信号的输入端加上一部分驱动电路,比如将量程转换电路改成带放大能力的自动量程转换电路,将幅值较小的信号经适当放大后再测量,可显著提高精度;
2、输出量可用平均值算法来改善,使测量准确度更高。
3、若能将测量的电压值实时保存,使用时将更方便。
4、ADC0808可实现对8个通道的输入信号轮流转换,本设计仅仅使用了其中一个通道,造成了较大的资源浪费。
若能对电路稍加改进,实现对多路信号的轮流测量并自动保存相应结果,其应用价值将会更大。
致 谢
本文是在杨柳老师的精心指导下完成的。
在此向他表示衷心的感谢。
感谢同学的鼓励和帮助,让我顺利完成本次设计任务。
通过短暂的毕业设计,从而提高了我的理论水平,真正做到学有所用,虽然在其过程中我也遇到一些困难,但是从中我也得到了很多的帮助,没有半途而废,没有灰心丧气,我都一一克服了,这些都是一种收获,最让我感到高兴的是终于按质按量的完成了毕业设计。
感谢我的指导老师,他严谨细致、一丝不苟的作风一直是我工作、学习中的榜样;他循循善诱的教导和不拘一格的思路给予我无尽启迪。
本次毕业设计的每一个细节都离不开您的细心指导。
感谢同学、朋友的帮助,在这里请接受我诚挚的谢意!
参考文献
[1] 徐爱钧.智能化测量控制仪表原理与设计(第二版).北京:
北京航空航天大学出版社,2004
[2] 吴金戌,沈庆阳,郭庭吉.8051单片机实践与应用.北京:
清华大学出版社,2002
[3] 黄智伟.全国大学生电子设计竞赛训练教程.北京:
电子工业出版社,2004
[4] 汪德彪.MCS-51单片机原理及接口技术(第一版).北京:
电子工业出版社,2003
附录1 系统源程序
COMEQU50H
DATEQU51H
RSEQUP2.1
;LCD寄存器选择信号
RWEQUP2.2
;LCD读/写选择信号
EEQUP2.3
;LCD使能信号
ORG0000H
LJMPMAIN
ORG000BH
LJMPBT0
;T0中断入口
ORG0030H
;主程序初始化
MAIN:
MOVSP,#60H
LCALLINT
MOV30H,#30H
MOV31H,#0A5H
MOV32H,#30H
MOV33H,#30H
MOV34H,#30H
MOVR7,#30H
LCALLN1
;显示Voltage=0.000
LCALLN2
;定时器初始化程序
MOVTMOD,#00H
MOVTH0,#00H
MOVTL0,#00H
SETBTR0
MOV24H,#03H
MOVIE,#82H
LP:
MOVR7,#30H
;显示缓冲区首地址
LCALLDISPLY
SJMPLP
;循环显示
;定时器中断服务程序,读取0809第0通道的转换结果并转换为显示值
BT0:
PUSHACC
PUSHPSW
MOVPSW,#00H
CLRTR0
MOVTH0,#00H
MOVTL0,#00H
DEC24H
MOVA,24H
MOVA,P1
ANLA,#03H
DECA
ZLC0
DECA
JZLC1
LC0:
JNZRTN1
MOV24H,#03H
MOVDPTR,#0F6FFH
MOVA,#00H
MOVX@DPTR,A
MOVR7,#0ccH
DJNZR7,$
MOVXA,@DPTR
MOV40H,A
MOVB,#05H
;A/D转换结果化为显示值
MULAB
;(AD*5)/25
MOV30H,B
;AD*5的高字节为整数部分
MOVB,#0AH
MULAB
;AD*5的低字节为/256的结果,为小数部分
MOV32H,B
;二进制小数换为10进制数
MOVB,#0AH
MULAB
MOV33H,B
MOVB