多路数字电压表设计与仿真

2021-08-18 08:19
山西电子技术 2021年4期
关键词:子程序电压表按键

陈 峰

(江苏商贸职业学院,江苏 南通 226011)

0 引言

数字电压表最基本的功能是用来测量电压,并将结果以数字的形式显示出来,与传统模拟电压表相比,数字电压表具有测量精度高、显示直观等优点[1-2]。本文采用51单片机和ADC0831模数转换器实现8路模拟电压测量系统,系统可分为手动和自动两种工作模式。手动模式下,系统通过按键切换通道进行测量;自动模式下,系统每隔1秒自动切换通道进行测量,液晶显示屏实时显示系统的工作模式、当前测量的通道和电压值。

1 总体设计

多路数字电压表系统的总体设计框图如图1所示,由单片机最小系统、LCD1602液晶显示电路、通道选择电路、模数转换电路和按键控制电路共同组成。

图1 多路数字电压表设计框图

2 硬件设计

多路数字电压表电路原理图如图2所示。系统以单片机为核心,采用8通道模拟多路选择器74HC4051进行通道选择,利用模数转换芯片ADC0831将模拟电压转换为8位二进制数字信号后,送单片机处理并通过LCD1602液晶显示系统的工作模式、测量通道和电压值。其中模拟电压输入信号通过调节可调电位器来获得。

图2 多路数字电压表电路原理图

2.1 单片机最小系统

单片机最小系统主要由电源、时钟电路和复位电路组成[3]。

2.2 通道选择电路

采用8通道模拟多路选择器74HC4051[4]。74HC4051带有3个选择输入端,1个低电平有效使能端,8个独立输入/输出端和1个公共输入/输出端。

使能端为低电平时,8个开关的其中之一将被选中(低阻态);使能端为高电平时,所有开关都进入高阻态。因此将三个选择输入端分别与单片机的P1.5、P1.6、P1.7引脚相连,使能端接地;通过程序控制选择输入端就可以对模拟电压输入通道进行选择。

2.3 模数转换电路

模数转换器采用ADC0831,它是美国国家半导体公司推出的一款8位分辨率、逐次逼近型串行模数转换器,通过三线串行总线与单片机连接,可节省51系列单片机I/0资源,模拟信号可采用单端输入或差分输入。ADC0831与单片机的接口为3条数据线,分别是片选端CS、时钟输入端CLK、串行数据输出端DO。

2.4 液晶显示电路

采用1602液晶显示器实时显示多路数字电压表的工作状态和电压值,液晶的第一行显示工作模式,第二行显示当前测量的通道及其电压值。

2.5 按键控制电路

采用3个独立按键来设置系统的工作模式和通道选择。其中按键K1用于手动和自动两种工作模式的切换,按键K2和K3只有在手动工作模式下使用,用于选择上一个或下一个测量通道。

3 软件设计

根据多路数字电压表的功能,软件设计主要的工作是根据设置选择测量通道,然后进行模数转换读取转换结果,并通过数据处理将数字信号换算为电压值,最后进行显示。

3.1 主流程图

系统的软件设计流程图如图3所示,主要包括通道选择程序、按键检测程序、ADC0831模数转换程序、LCD1602显示程序。定时器0中断服务程序的流程图如图4所示,主要用于自动模式下每隔1秒进行测量通道的切换,定时器定时时间为50ms,变量count用于判断是否1秒时间,变量index用于表示当前测量的通道。

图3 主流程图

图4 定时器0中断服务程序流程图

3.2 通道选择子程序

根据74HC4051的功能说明,编写通道选择函数的源程序如下:

sbit A0=P1^5;sbit A1=P1^6;sbit A2=P1^7;

void CH_Select(unsigned char ch)

{ switch(ch)

{ case 0: A0=0;A1=0;A2=0; break;

case 1: A0=1;A1=0;A2=0; break;

case 2: A0=0;A1=1;A2=0; break;

case 3: A0=1;A1=1;A2=0; break;

case 4: A0=0;A1=0;A2=1; break;

case 5: A0=1;A1=0;A2=1; break;

case 6: A0=0;A1=1;A2=1; break;

case 7: A0=1;A1=1;A2=1; break; }}

3.3 按键检测子程序

按键检测控制程序主要进行系统工作模式设置和手动模式下测量通道的选择,其流程图如图5所示,变量flag用于表示系统的工作模式,flag=0为手动工作模式,flag=1为自动工作模式;变量index用于表示当前测量的通道。

图5 按键检测流程图

3.4 A/D转换子程序

根据ADC0831时序图编写A/D转换子程序[5-6],其工作过程如下:当要进行模数转换时,应将片选端CS置低电平并且保持低电平直到转换结束;芯片开始工作后,还须让单片机向芯片的时钟输入端CLK输入时钟脉冲;从第2个脉冲下降沿开始由串行数据输出端DO输出转换数据最高位;随后每一个脉冲下降沿DO端输出下一位数据,直到第9个脉冲时输出数据的最低位。至此,一个字节数据输出完成,最后将片选端CS拉高停止模数转换。

3.5 数据处理子程序

数据处理子程序主要将模数转换的数字量转换为相应的电压值,控制程序如下:

Vol=adc()*5*100/255;//将电压值扩大100倍

变量Vol为扩大100倍后的电压值,adc()为模数转换函数。

3.6 液晶显示子程序

显示子程序主要根据变量flag、index、Vol值实时显示数字电压表的工作模式、通道和电压值。

4 仿真调试

利用Keil软件与Proteus软件进行联合仿真调试。系统仿真效果如图6所示,采用虚拟仪表中的直流电压表对输入模拟电压进行测量,观察显示电压值与直流电压表显示值是否一致,如图显示信息说明当前工作模式为手动模式,通道CH3的测量电压值为2.60V,结果表明系统能对多路模拟电压进行准确测量。

图6 系统仿真结果图

5 结语

本文利用单片机和ADC0831模数转换芯片设计实现8路数字电压表,循环采集8个通道电压值,能实现手动控制和自动控制两种模式。该系统具有测量精度高、显示直观、易扩展等优点。

猜你喜欢
子程序电压表按键
如何判断电压表的测量对象
基于有限状态机的按键检测程序设计
判断电压表测量对象有妙招
多按键情况下,单片机端口不足的解决方法
按键消抖在单片机和FPGA实验教学中的应用
一种多方向导光按键结构设计
电压表的妙用
再探电压表内阻的测量方法
浅谈子程序在数控车编程中的应用
子程序在数控车加工槽中的应用探索