简易数字电压表基于设计PROTEUS设计与仿真
班 级: 学 号: 学生姓名:
机09-3 31 华岩
1设计总体方案
1.1设计要求
⑴以MCS-51系列单片机为核心器件,组成一个简单的直流数字电压表。 ⑵采用1路模拟量输入,能够测量0-5V之间的直流电压值。
⑶电压显示用4位一体的LED数码管显示,至少能够显示两位小数。 ⑷尽量使用较少的元器件。
1.2 设计思路
⑴根据设计要求,选择ATC51单片机为核心控制器件。 ⑵A/D转换采用ADC0808实现,与单片机的接口为P1口和P2口的高四位引脚。 ⑶电压显示采用4位一体的LED数码管。
⑷LED数码的段码输入,由并行端口P0产生:位码输入,用并行端口P2低四位产生。
1.3设计方案
硬件电路设计由6个部分组成; A/D转换电路,ATC51单片机系统,LED显示系统、时钟电路、复位电路以及测量电压输入电路。硬件电路设计框图如图1所示。
ATC51 P1 P2 P2 P0 时钟电路 A/D转换电路 测量电压输入 显示系统 复位电路 图1 数字电压表系统硬件设计框图
2硬件电路设计
2.1 A/D转换模块
现实世界的物理量都是模拟量,能把模拟量转化成数字量的器件称为模/数转换器(A/D转换器),A/D转换器是单片机数据采集系统的关键接口电路,按照各种A/D芯片的转化原理可分为逐次逼近型,双重积分型等等。双积分式A/D转换器具有抗干扰能力强、转换精度高、价格便宜等优点。与双积分相比,逐次逼近式A/D转换的转换速度更快,而且精度更高,比如ADC0809、ADC0808等,它们通常具有8路模拟选通开关及地址译码、锁存电路等,它们可以与单片机系统连接,将数字量送到单片机进行分析和显示。一个n位的逐次逼近型A/D转换器只需要比较n次,转换时间只取决于位数和时钟周期,逐次逼近型A/D转换器转换速度快,因而在实际中广泛使用[1]。 2.1.1 逐次逼近型A/D转换器原理
逐次逼近型A/D转换器是由一个比较器、A/D转换器、存储器及控制电路组成。它利用内部的寄存器从高位到低位一次开始逐位试探比较。 转换过程如下:
开始时,寄存器各位清零,转换时,先将最高位置1,把数据送入A/D转换器转换,转换结果与输入的模拟量比较,如果转换的模拟量比输入的模拟量小,则1保留,如果转换的模拟量比输入的模拟量大,则1不保留,然后从第二位依次重复上述过程直至最低位,最后寄存器中的内容就是输入模拟量对应的二进制
[5]
数字量。其原理框图如图2所示:
输入电压 输入数字量 顺序脉冲发生器 逐次逼近寄存器 电压 比较器 ADC
图2 逐次逼近式A/D转换器原理图
2.1.2 ADC0808 主要特性
ADC0808是CMOS单片型逐次逼近式A/D转换器,带有使能控制端,与微机直接接口,片内带有锁存功能的8路模拟多路开关,可以对8路0-5V输入模拟电压信号分时进行转换,由于ADC0808设计时考虑到若干种模/数变换技术的长处,所以该芯片非常适应于过程控制,微控制器输入通道的接口电路,智能仪器和机床控制等领域[5]。
ADC0808主要特性:8路8位A/D转换器,即分辨率8位;具有锁存控制的8路模拟开关;易与各种微控制器接口;可锁存三态输出,输出与TTL兼容;转换时间:128μs;转换精度:0.2%;单个+5V电源供电;模拟输入电压范围0-+5V,无需外部零点和满度调整;低功耗,约15mW[6]。
ADC0808的外部引脚特征
ADC0808芯片有2引脚,采用双列直插式封装,其引脚图如图3所示。
图3 ADC0808引脚图
下面说明各个引脚功能:
IN0-IN7():8路模拟量输入线,用于输入和控制被转换的模拟电压。 地址输入控制(4条):
ALE:地址锁存允许输入线,高电平有效,当ALE为高电平时,为地址输入线,用于选择IN0-IN7上那一条模拟电压送给比较器进行A/D转换。
ADDA,ADDB,ADDC:3位地址输入线,用于选择8路模拟输入中的一路,其对应关系如表1所示:
表1 ADC0808通道选择表
地址码 对应的输入通道 C B A 0 0 0 IN0 0 0 1 IN1 0 1 0 IN2 0 1 1 IN3 1 0 0 IN4 1 0 1 IN5 1 1 0 IN6 1 1 1 IN7 START:START为“启动脉冲”输入法,该线上正脉冲由CPU送来,宽度应大于100ns,上升沿清零SAR,下降沿启动ADC工作。
EOC:EOC为转换结束输出线,该线上高电平表示A/D转换已结束,数字量已锁入三态输出锁存器。
D1-D8:数字量输出端,D1为高位。
OE:OE为输出允许端,高电平能使D1-D8引脚上输出转换后的数字量。
REF+、REF-:参考电压输入量,给电阻阶梯网络供给标准电压。
Vcc、GND:Vcc为主电源输入端,GND为接地端,一般REF+与Vcc连接在一起,REF-与GND连接在一起. CLK:时钟输入端。 2.1.4 ADC0808的内部结构及工作流程
ADC0808由8路模拟通道选择开关,地址锁存与译码器,比较器,8位开关树型A/D转换器,逐次逼近型寄存器,定时和控制电路和三态输出锁存器等组成,其内部结构如图4所示。
图4 ADC0808的内部结构
其中:
(1)8路模拟通道选择开关实现从8路输入模拟量中选择一路送给后面的比较器进行比较。
(2)地址锁存与译码器用于当ALE信号有效时,锁存从ADDA、ADDB、ADDC3根地址线上送来的3位地址,译码后产生通道选择信号,从8路模拟通道中选择当前模拟通道。
(3)比较器,8位开关树型A/D转换器,逐次逼近型寄存器,定时和控制电路组成8位A/D转换器,当START信号有效时,就开始对当前通道的模拟信号进行转换,转换完成后,把转换得到的数字量送到8位三态锁存器,同时通过引脚送出转换结束信号。
(4)三态输出锁存器保存当前模拟通道转换得到的数字量,当OE信号有效时,把转换的结果送出。 ADC0808的工作流程为:
(1)输入3位地址,并使ALE=1,将地址存入地址锁存器中,经地址译码器从8路模拟通道中选通1路模拟量送给比较器。
(2)送START一高脉冲,START的上升沿使逐次寄存器复位,下降沿启动A/D转换,并使EOC信号为低电平。
(3)当转换结束时,转换的结果送入到输出三态锁存器中,并使EOC信号回到高电平,通知CPU已转换结束。
(4)当CPU执行一读数据指令时,使OE为高电平,则从输出端D0-D7读出数据。
2.2 复位电路和时钟电路
2.2.1 复位电路设计
单片机在启动运行时都需要复位,使CPU和系统中的其他部件都处于一个确定的初始状态,并从这个状态开始工作。MCS-51单片机有一个复位引脚RST,采用施密特触发输入。当震荡器起振后,只要该引脚上出现2个机器周期以上的高电平即可确保时器件复位[1]。复位完成后,如果RST端继续保持高电平,MCS-51就一直处于复位状态,只要RST恢复低电平后,单片机才能进入其他工作状态。单片机的复位方式有上电自动复位和手动复位两种,图6是51系列单片机统常用的上电复位和手动复位组合电路,只要Vcc上升时间不超过1ms,它们都能很好的工作[1]。
图6 复位电路
2.2.2 时钟电路设计
单片机中CPU每执行一条指令,都必须在统一的时钟脉冲的控制下严格按时间节拍进行,而这个时钟脉冲是单片机控制中的时序电路发出的。CPU执行一条指令的各个微操作所对应时间顺序称为单片机的时序。MCS-51单片机芯片内部有一个高增益反相放大器,用于构成震荡器,XTAL1为该放大器的输入端,XTAL2为该放大器输出端,但形成时钟电路还需附加其他电路[1]。
本设计系统采用内部时钟方式,利用单片机内部的高增益反相放大器,外部电路简,只需要一个晶振和 2个电容即可,如图7所示。
图7 时钟电路
电路中的器件选择可以通过计算和实验确定,也可以参考一些典型电路的参数,电路中,电容器C1和C2对震荡频率有微调作用,通常的取值范围是30±10pF,在这个系统中选择了33pF;石英晶振选择范围最高可选24MHz,它决定了单片机电路产生的时钟信号震荡频率,在本系统中选择的是12MHz,因而时钟信号的震荡频率为12MHz。
2.3 总体电路设计
经过以上的设计过程,可设计出基于单片机的简易数字直流电压表硬件电路原理图如图11所示。
图11 简易数字电压表电路图
此电路的工作原理是:+5V模拟电压信号通过变阻器VR1分压后由ADC08008的IN0通道进入(由于使用的IN0通道,所以ADDA,ADDB,ADDC均接低电平),经过模/数转换后,产生相应的数字量经过其输出通道D0-D7传送给ATC51芯片的P1口,ATC51负责把接收到的数字量经过数据处理,产生正确的7段数码管的显示段码传送给四位LED,同时它还通过其四位I/O口P2.0、P2.1、P2.2、P2.3产生位选信号控制数码管的亮灭。此外,ATC51还控制ADC0808的工作。其中,单片机ATC51通过定时器中断从P2.4输出方波,接到ADC0808的CLOCK,P2.6发正脉冲启动A/D转换,P2.5检测A/D转换是否完成,转换完成后,P2.7置高从P1口读取转换结果送给LED显示出来[3]。
简易数字直流电压表的硬件电路已经设计完成,就可以选取相应的芯片和元器件,利用Proteus软件绘制出硬件的原理,并仔细地检查修改,直至形成完善的硬件原理图。但要真正实现电路对电压的测量和显示的功能,还需要有相应的软件配合,才能达到设计要求。
3程序设计
3.1 程序设计总方案
根据模块的划分原则,将该程序划分初始化模块,A/D转换子程序和显示子程序,这三个程序模块构成了整个系统软件的主程序,如图12所示。
开始 初始化 调用A/D转换子程序 调用显示子程序 结束
图12 数字式直流电压表主程序框图
3.2 系统子程序设计
3.2.1 初始化程序
所谓初始化,是对将要用到的MCS_51系列单片机内部部件或扩展芯片进行初始工作状态设定,初始化子程序的主要工作是设置定时器的工作模式,初值预置,开中断和打开定时器等[9]。 3.2.2 A/D转换子程序
A/D转换子程序用来控制对输入的模块电压信号的采集测量,并将对应的数值存入相应的内存单元,其转换流程图如图13所示。
开始 启动转换 A/D转换结束? 输出转换结果 数值转换 显示 结束
图13 A/D转换流程图
3.2.3 显示子程序
显示子程序采用动态扫描实现四位数码管的数值显示,在采用动态扫描显示方式时,要使得LED显示的比较均匀,又有足够的亮度,需要设置适当的扫描频率,当扫描频率在70HZ左右时,能够产生比较好的显示效果,一般可以采用间隔10ms对LED进行动态扫描一次,每一位LED的显示时间为1ms[10]。
在本设计中,为了简化硬件设计,主要采用软件定时的方式,即用定时器0溢出中断功能实现11μs定时,通过软件延时程序来实现5ms的延时。
3.3程序代码
LED_0 EQU 30H LED_1 EQU 31H
LED_2 EQU 32H ADC EQU 35H CLOCK BIT P2.4 ST BIT P2.5 EOC BIT P2.6 OE BIT P2.7 ORG 00H SJMP START ORG 0BH
LJMP INT_T0 START: MOV LED_0, #00H MOV P2, #0FFH MOV LED_1, #00H MOV LED_2, #00H
MOV DPTR, #TABLE MOV TMOD, #02H MOV TH0, #245H MOV TL0, #00H MOV IE, #82H SETB TR0 WAIT: CLR ST SETB STH CLR ST JNB EOC, $ SETB OE MOV ADC, P1 CLR OE MOV A, ADC MOV B, #51 DIV AB
MOV LED_2, A MOV A, B MOV B, #5 DIV AB MOV LED_1, A MOV LED_0, B LCALL DISP SJMP WAIT
INT_T0: CPL, CLOCK RETI
DISP: MOV A, LED_0 MOVC A, @A+DPTR CLR P2.3
MOV P0, A
LCALL DELAY SETB P2.3 MOV A, LED_1 MOVC A,@A+DPTR CLR P2.2
MOV P0, A LCALL DELAY SETB P2.2 MOV A, LED_2
MOVC A, @A+DPTRL CLR P2.1
ORL A, #80H MOV P0, A LCALL DELAY SETB P2.1 RET
DELAY: MOV R6, #10 D1: MOV R7, #250 DJNZ R7, $ DJNZ R6, D1 RET
TABLE: DB 3FH, 06H, 5BH, 4FH, 66H DB 6DH, 7DH, 07H, 7FH, 6FH END
4调试总结
4.1软件调试
软件调试的主要任务是排查错误,错误主要包括逻辑和功能错误,这些错误有些是显性的,而有些是的,可以通过仿真开发系统发现逐步改正。Proteus软件可以对基于微控制器的设计连同所有的周围电子器件一起仿真,用户甚至可以实时采用诸如LED/LCD、键盘、RS232终端等动态外设模型来对设计进行交互仿真。Proteus支持的微处理芯片包括8051系列、AVR系列、PIC系列、HC11系列及Z80等等。Proteus可以完成单片机系统原理图电路绘制、PCB设计,更为显著点的特点是可以与u Visions3 IDE工具软件结合进行编程仿真调试[8]。
本系统的调试主要以软件为主,其中,系统电路图的绘制和仿真我采用的是Proteus软件,而程序方面,采用的是汇编语言,用Keil软件将程序写入单片机。
显示结果及误差分析
4.2.1 显示结果
1. 当IN0口输入电压值为0V时,显示结果如图14所示,测量误差为0V。
图14 输入电压为0V时,LED的显示结果
2.当IN0输入电压值为1.50V时,显示结果如图15所示。测量误差为0.01V。
图15 输入电压为1.50V时,LED的显示结果
3. 当IN0口输入电压值为3.50V时,显示结果如图16。测量误差为0.01V。
图16 输入电压为3.50V时,LED的显示结果
4.2.2 误差分析
通过以上仿真测量结果可得到简易数字电压表与“标准”数字电压表对比测试表,如下表4所示:
表4 简易数字电压表与“标准”数字电压表对比测试表
标准电简易电压表绝对误差/V 压值/V 测量值/V 0.00 0.00 0.00 0.50 0.51 0.01 1.00 1.00 0.00 1.50 1.51 0.01 2.00 2.00 0.00 2.50 2.50 0.00 3.00 3.00 0.00 3.50 3.50 0.00 4.00 4.00 0.00 4.99 5.00 0.01 由于单片机ATC51为8位处理器,当输入电压为5.00V时,ADC0808输出数据值为255(FFH),因此单片机最高的数值分辨率为0.0196V(5/255)。这就决定了电压表的最高分辨率只能到0.0196V,从上表可看到,测试电压一般以0.01V的幅度变化。
从上表可以看出,简易数字电压表测得的值基本上比标准电压值偏大0-0.01V,这可以通过校正ADC0808的基准电压来解决。因为该电压表设计时直接用5V的供电电源作为电压,所以电压可能有偏差。当要测量大于5V的电压时,可在输入口使用分压电阻,而程序中只要将计算程序的除数进行调整就可以了。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- nryq.cn 版权所有 赣ICP备2024042798号-6
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务