毕业设计 数字电压表的设计.docx
《毕业设计 数字电压表的设计.docx》由会员分享,可在线阅读,更多相关《毕业设计 数字电压表的设计.docx(26页珍藏版)》请在冰点文库上搜索。
![毕业设计 数字电压表的设计.docx](https://file1.bingdoc.com/fileroot1/2023-5/26/1cd0d2be-de49-4256-8fa1-a0e19c8a28a1/1cd0d2be-de49-4256-8fa1-a0e19c8a28a11.gif)
毕业设计数字电压表的设计
摘要
本设计中的数字电压表主要利用AT89S52单片机进行电压的测量控制,采用ADC0809转换器对输入的电压值进行转换,通过单片机扫描按键来控ADC0809的通道选择,分时测量8路模拟电压值,并处理转换后的数字电压值,然后送给LED数码管动态显示,并同时显示通道值。
实现了对0~5V的8路输入电压值的高精度测量和数字化显示。
关键词:
数字电压表;AT89S52;ADC0809;数码管
Abstract
ThisdesigndigitalvoltmeterforvoltagemeasurementandcontrolusesAT89S52microcontroller,usingADC0809convertertoconvertthevalueoftheinputvoltage,controlledbythemicrocontrollerscanbuttonADC0809channelselection,measures8-channelanalogvoltagevalueoftime-sharing,andprocessesthedigitalvoltagevalueaftertheconversion,andthensentstotheLEDdigitaltubedynamicdisplay,andatthesametimetodisplaysthechannelvalue.Inputvoltagevaluesof0~5V,8-channelhigh-precisionmeasurementanddigitization.
Keywords:
digitalvoltmeter;AT89S52;ADC0809;digitaltube
1引言
1.1设计背景
数字电压表(DigitalVoltmeter)简称DVM,它是在50年代初,60年代末发起来的电压测量仪表。
它采用的是数字化测量技术,把连续的模拟量,也就是连续的电压值转变为不连续的数字量,加以数字处理,然后再通过显示器件显示。
这种电子测量的仪表之所以出现,一方面是由于电子计算机的发展,带动了脉冲数字电路技术的进步,为数字化仪表的出现提供了条件;另一方面,电子计算机的应用逐渐推广到系统的自动控制信实验研究的领域,提出了将各种被观察量或被控制量转换成数码的要求,即为了实时控制及数据处理的需要。
所以,数字化测量仪表的产生和发展与电子计算机的发展是密切相关的;同时,革新电子测量中的繁琐和陈旧方式也催促了它的飞速发展;如今,它又成为向智能化仪表发展的必要桥梁。
如今,数字电压表已绝大部分取代了传统的模拟指针式电压表。
因为传统的模拟指针式电压表功能单一,精度低,读数的时候也非常不方便,很容易出错。
而采用单片机的数字电压表由于测量精度高,速度快,读数时也非常的方便,抗干扰能力强,可扩展性强等优点已被广泛的应用于电子及电工的测量,工业自动化化仪表,自动测试系统等智能化测量领域,显示出强大的生命力。
1.2设计目的
通过制作简易数字电压表,加深对所学专业知识的认识,提高分析、解决工程实际问题的能力,提高对单片机的应用能力,提高收集文献、资料的能力,从而达到综合运用所学的专业知识进行电子产品的设计、制作与调试的能力。
1.3设计要求及功能
设计的基本内容是使基于单片机所设计出的数字电压表可以测量0-5V的8路输入电压值,并在四位LED数码管上轮流显示或单路显示。
测量最小分辨率为0.019V,测量误差约为+0.02V。
系统除能确保实现要求的功能外,还可以方便地进行8路其他A/D转换量的测量功能。
所要解决的主要问题是如何更有效地设计出符合设计要求的简易数字电压表,特别是要注意其测量电压的误差,难点是数码管需轮流显示或单路显示所测出的电压值,并且能使软硬件有效的结合起来。
基本功能:
1)电压测量范围0-5V。
2)测量误差约为+0.02V。
3)系统具备选择显示功能。
4)能用数码管显示电压值。
5)系统具备复位功能。
2总体设计
2.1各模块方案选择
A/D转换模块:
方案一:
采用ADC0809转换芯片,其中A/D转换器用于实现模拟量向数字量的转换,单电源供电。
它是具有8路模拟量输入、8位数字量输出功能的A/D转换器,转换时间为100us,模拟输入电压范围为0V到+5V,不需要零点和满刻度校准,功耗低,约15mW。
方案二:
A/D转换器采用ICL7107型三位半显示的芯片,输入信号,流经取样电路取样后送到ICL7107型三位半A/D转换器,只需要很少的简单外围元件,就可组成数字电流表模块,直接驱动三位半LED显示器显示,最后输入电流在显示部分显示。
但是ICL7107做的LED数字表最大的缺点就是数字乱跳不稳定。
由于模拟转换电路的种类很多,通过对转换速度,精度和价格方面考虑,所以选择方案一,用ADC0809为本次设计的转换芯片。
接口模块:
方案一:
使用数字电路实现,采用译码芯片CD4543作为接口芯片,这种方案能实现功能,但稳定性不高,结构复杂。
方案二:
采用AT89S52单片机作为系统的控制单元,通过A/D转换将被测值转换为数字量送入单片机,再由单片机来送显。
此方案各功能易于实现,成本低、功耗低,显示稳定。
所以通过比较,选择方案二,用AT89S52单片机。
2.2总体设计框图
总体设计框图如图1所示,通过模数转换器ADC0809采集模拟数据并转换为数字信号,在51单片机的控制,将采集的数据显示在LED数码管上。
开关用作是选择测量电压的路数,控制单路显示[1]。
图1总体设计框图
3系统硬件电路设计
3.1单片机芯片AT89S52
单片机采用MCS-51系列单片机。
由ATMEL公司生产的AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
在单芯片上,拥有灵巧的8位CPU和在线系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、有效的解决方案。
AT89S52具有以下标准功能:
8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
而且,它还具有一个看门狗(WDT)定时/计数器,如果程序没有正常工作,就会强制整个系统复位,还可以在程序陷入死循环的时候,让单片机复位而不用整个系统断电,从而保护你的硬件电路[2]。
3.1.1主要特性
AT89S52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本[3]。
其功能如下所示:
1)与MCS-51单片机产品兼容。
2)8K字节在系统可编程Flash存储器。
3)1000次擦写周期。
4)全静态操作:
0HZ~33HZ。
5)三级加密程序存储器。
6)32个可编程I/O口线。
7)三个16位定时器/计数器。
8)八个中断源。
9)全双工UART串行通道。
10)低功耗空闲和掉电模式。
3.1.2引脚说明
图2AT89S52引脚图
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门流。
当P1口的引脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口引脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其引脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的引脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口引脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89S52的一些特殊功能口,如表1所示。
表1AT89S52特殊功能口表
端口引脚
复用功能
P30
RXD(串行输入口)
P31
TXD(串行输出口)
P32
/INT0(外部中断0)
P33
/INT1(外部中断1)
P34
T0(记时器0外部输入)
P35
T1(记时器1外部输入)
P36
/WR(外部数据存储器写选通)
P37
/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/
:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次
有效。
但在访问外部数据存储器时,这两次有效的
信号将不出现。
/VPP:
外部访问允许。
为了使单片机能够有效的传送外部数据存储器从0000H到FFFH单元的指令,
必须同GND相连接。
需要主要的是,如果加密位1被编程,复位时EA端会自动内部锁存。
当执行内部编程指令时,
应该接到VCC端。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
3.1.3振荡器特性
AT89S52单片机有一个用于构成内部振荡器的反相放大器,XTAL1和XTAL2分别是放大器的输入、输出端。
石英晶体和陶瓷谐振器都可以用来一起构成自激振荡器。
从外部时钟远驱动器件的话,XTAL2可以不接,而从XTAL1接入。
由于外部时钟信号经过二分频触发后作为外部时钟电路输入的,所以对外部时钟信号的占空比没有其它要求,最长低电平持续时间和最少高电平持续时间等还是要符合要求的[4]。
3.1.4芯片擦除
整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms来完成。
在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。
此外,AT89S52设有稳态逻辑,支持两种软件可选的掉电模式。
在闲置模式下,CPU停止工作。
但RAM,定时器,计数器,串口和中断系统仍在工作。
在掉电模式下,能保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止[5]。
3.2A/D转换模块设计
3.2.1ADC0809简介
ADC0809是美国国家半导体公司生产的8位ADC,它是采用逐次逼近的方法来完成A/D转换的。
ADC0809由单一+5V电源供电,片内有带锁存功能的8路模拟多路开关,可对8路0~5V的输入模拟电压信号分时进行转换,完成一次转换约需100us;输出具有TTL三台锁存缓冲器,可以直接接到单片机数据总线上。
通过适当的外接电路,ADC0809可对0~5V的双级性模拟信号进行转换[6]。
其主要特性有以下几点:
1)8路8位A/D转换器,即分辨率8位。
2)具有转换起停控制端。
3)转换时间为100μs。
4)单+5V电源供电。
5)模拟输入电压范围0~+5V,不需零点和满刻度校准。
6)工作温度范围为-40~+85摄氏度。
7)低功耗,约15mW。
3.2.2引脚说明
图3ADC0809引脚图
各引脚功能说明如下:
VCC:
电源电压,+5V。
GND:
地线输入端。
D0~D7:
8位数字量输出引脚。
A/D转换结果由这8根线传送给单片机。
D7为最高有效位,D0为最低有效位。
IN0~IN7:
8路模拟量输入引脚。
VREF(+):
参考电压正端。
VREF(-):
参考电压负端。
START:
启动信号输入端。
START为正脉冲,其上升沿清除ADC0808的内部的各寄存器,其下降沿启动A/D开始转换。
ALE:
地址锁存启动信号。
在ALE的上升沿,将A、B、C上的通道地址锁存到内部的地址锁存器。
START和ALE两信号用于启动A/D转换。
EOC:
转换完成信号。
当EOC上升为高电平时,表明内部A/D转换已完成。
OE:
允许输出信号。
当OE=1时,即为高电平,允许输出锁存器输出数据。
CLK:
时钟输入信号。
0809的时钟频率范围在10~1200kHz,典型值为640kHz。
A、B、C:
3位地址输入线。
经过译码后可选通IN0~IN78个通道中的一个通道进行转换。
A、B、C的输入与选通的通道的关系如表2所示。
表2A、B、C的输入与选通的通道的关系
被选通的通道
CBA
被选通的通道
CBA
IN0
000
IN4
100
IN1
001
IN5
101
IN2
010
IN6
110
IN3
011
IN7
111
3.2.3ADC0809工作原理
ADC0809的工作过程是:
首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。
此地址经译码选通8路模拟输入之一到比较器。
START上升沿将逐次逼近寄存器复位。
下降沿启动A/D转换,之后EOC输出信号变低,指示转换正在进行。
直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。
当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。
ADC0809转换完成的数字信号通过P0.0传给单片机处理电路如图4所示。
图4ADC0809与AT89S52接口图
3.3显示电路设计
设计中采用的是8段LED数码管来显示电压值。
LED具有耗电低、亮度高、视角大、线路简单、耐震及寿命长等优点,它由8个发光二极管组成,其中7个按‘8’字型排列,另一个发光二极管为圆点形状,位于右下角,常用于显示小数点。
把8个发光二极管连在一起,公共端接高电平,叫共阳极接法,相反,公共端接低电平的叫共阴极接法,本文采用共阴极接法。
当发光二极管导通时,相应的一段笔画或点就发亮,从而形成不同的发光字符。
根据设计要求,显示电路需要4位LED数码管来显示电压值。
利用单片机的I/O口驱动LED数码管的亮灭,设计中由P1口驱动LED的段码显示,即显示字符,由P3口选择LED位码[7]。
图5LED显示电路接口图
3.4时钟电路设计
单片机工作是在同一的时钟脉冲下一拍一拍的进行的,这个脉冲是单片机控制中的时序电路发出的。
单片机的时序就是CPU在执行指令时所需控制信号的时间顺序。
为了保证各部件的同步工作,单片机内部电路应在唯一的时钟信号下严格地按时序进行工作。
89S52内部有一个高增益反相放大器,用于构成振荡器,但要形成时钟脉冲,外部还需要附加电路。
89S52的时钟产生方法有两种:
一种是内部时钟方式,一种是外部时钟方式。
本设计采用内部时钟方式,利用单片机内部的高增益反相放大器,外部电路简单,只需要一个晶振和2个电容即可,如图6所示[8]。
图6时钟电路
3.5复位电路设计
复位是单片机的初始化操作。
单片机系统在上电启动运行时,都需要先复位,其作用是使CPU和系统中其他部件处于一个确定的初始状态,并从这个状态开始工作,单片机复位后(RST从高电平变为低电平),从0000H地址开始执行指令。
单片机的RST引脚为主机提供一个外部复位信号输入端口。
复位信号是高电平有效,高电平有效的持续时间应为2个机器周期以上。
单片机的复位方式有上电复位和手工复位两种,图7是51系列单片机常用的上电复位和手动复位组合电路,只要VCC上升时间不超过1mS,他们都能很好的工作[9]。
图7复位电路
3.6通道选择电路设计
根据要求在数码管上轮流显示或单路选择显示测量电压,我选择的是单路选择显示方式。
用一个按键来选择通道,用一个1位的LED来显示所选的通道数,如图8和图9所示。
比如,现在显示的是1通道的测量电压值,而要显示3通道的测量电压值,则按2次键,4位的LED数码管显示的是通道3的测量电压值,1位的LED数码管显示的是通道数3。
图8通道选择按键接口图
图9通道显示LED
4软件设计
4.1主程序设计
初始化中主要对准备工作做好后便启动ADC0809对INT脚输入进的0~5V电压模拟信号进行数据采集并转换成对应的0~255十进制数字量。
在数据处理子程序中,运用表度变换知识,编写算法将0~255十进制数字量转换成0.00~5.00V的数据,输出到显示子程序进行显示。
整个主程序就是在A/D转换,数据处理及显示程序循环执行。
整个程序流程框图如图10所示。
图10主程序流程图
4.2各子程序设计
4.2.1A/D转换子程序
启动ADC0809对模拟量输入信号进行转换,通常判断EOC来确定转换是否完成,若EOC为0,则继续等待;若EOC为1,则把OE置位,将转换完成的数据输出并储存。
程序流程图如图11所示。
图11A/D转换程序流程图
4.2.2显示子程序
显示子程序采用动态扫描法实现数码管的数值显示。
测量所得的A/D转换数据放在70H内存单元中,测量数据在显示时需转换成10进制BCD码放在78H~7AH单元中。
寄存器R1用作显示数据地址指针。
程序流程图如图12所示[10]。
图12显示程序流程图
4.2.3按键子程序
按键子程序为了检测是否有键按下而设计的,图13所示的流程图大致说明了其运行过程。
当系统上电后,程序初始化。
扫描过程是对键盘上的按键进行扫描,在此过程中,需在程序中加入防抖设计。
图13按键程序流程图
5结束语
通过这次对简易数字电压表的设计,让我了解了设计电路的程序,也让我了解了关于电压表的原理与设计理念等专业知识。
所以说,坐而言不如立而行,对于这些电路还是应该自己动手实际操作才会有深刻理解。
除了学会了许多专业知识外,在遇到困难时,积极地去请教我的指导老师,我通过看现有的教材、去图书馆查阅资料、去网上搜索相关信息这些方式,不仅完成了我的毕业设计,而且大大增强了我的自学能力和独立能力。
更重要的是提高了我认识问题、分析问题、解决问题的能力。
参考文献
[1]高吉祥.电子技术基础实验与课程设计[M].北京:
电子工业出版社,2004:
470-479.
[2]唐颖.单片机原理与应用及C51程序设计[M].北京:
北京大学出版社,2008:
178-203.
[3]何立民.单片机高级教程应用与设计[M].北京:
北京航空航天大学出版社,2000:
53-60.
[4]余永权,汪明慧,黄英.单片机在控制系统中的应用[M].北京:
电子工业出版社,2003:
34-56.
[5]刘文涛.单片机应用开发实例[M].北京:
清华大学出版社,2005:
16-31.
[6]王幸之.AT89系列单片机原理与接口技术[M].北京:
北京航空大学出版社,2004:
48-58.
[7]张凯.LED介绍完全手册[M].北京:
北京航空航天大学出版社,2000:
22-56.
[8]潘永雄.电子线路CAD实用教程[M].西安:
西安电子科技大学出版社,2007:
330-337.
[9]康华光.电子技术基础模拟部分[M].北京:
高等教育出版社,1999:
444-460.
[10]王宝香.数字电压表自动测试系统[J].宇航计测技术,1998:
5-12.
附录A总电路图
附录BPCB图
附录C程序
#include
#defineuintunsignedint
#defineucharunsignedchar
ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x6f};//字符段码表
sbitSTART=P2^7;//ADC启动
sbitEOC=P2^6;//转换完成信号
sbitOE=P2^5;//输出允许控制
sbitCLOCK=P2^4;//ADC时钟信号
sbitL4=P3^7;//LED位选
sbitL3=P3^6;
sbitL2=P3^5;
sbitL1=P3^4;
sbitL0=P3^2;//通道显示位选
sbitanjian=P3^3;
floati,AD_data;
uintv;
ucharkey=0;
voiddelay(uintt)//延时函数
{
while(t--);
}
voidAD_clk(uintm)//AD时钟产生函数
{
while(m--)
{
CLOCK=1;
delay(20);
CLOCK=0;
delay(20);
}
}
ANJIAN()//按键查询函数
{
if(anjian==0)
{
delay(10000);//延时消抖
if(anjian==0)
{
if(key<8)
{
key++;
}
elsekey=0;
return(key);
}
}
}
AD_START()//AD启动函数
{
OE=0;//输出高阻
START=0;
AD_clk(10);//ADC时钟信号
START=1;//启动AD转换并锁定信号地址
AD_clk(10);
START=0;
AD_clk(100);//等待AD转换完成
while(!
EOC);
{
OE=1;//使能