锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

单片机数字电压表的设计

时间:2022-11-30 12:30:00 电阻数字电流表12v470uf固态电容736二极管tv电源专用固态电容2a250v固态继电器

第1章 绪论1.1系统开发背景

在电量测量中,电压、电流和频率是三个最基本的测量,其中电压测量是最常见的。而且随着电子技术的发展,往往需要测量高精度电压,因此数字电压表成为必不可少的测量仪器。简称数字电压表DVM,采用数字测量技术,将连续模拟量转换为不连续、离散的数字形式并显示。数字仪器因其读数准确方便、精度高、误差小、测量速度快而得到广泛应用。

传统的指针式刻度电压表功能单一,进度低,易引起视差和视觉疲劳,不能满足数字时代的需要。采用单片机数字电压表,将直流电压等连续模拟量转换为不连续离散的数字形式并显示,精度高,抗干扰能力强,可扩展性强,集成方便,也可与PC实时通信。数字电压表是许多数字仪表的核心和基础。以数字电压表为核心,可扩展成各种通用数字仪表、专用数字仪表和各种非电量数字仪表。目前,由各种单片机和A/D有必要对转换器构成的数字电压表有全面深入的了解。

近几十年来,随着半导体技术和集成电路的发展(IC)随着微处理器技术的发展,数字电路和数字测量技术也取得了巨大的进步,促进了数字电压表的快速发展,并不断出现新的类型。自1952年数字电压表问世以来,它经历了不断改进的过程,从最早的继电器、电子管和形式发展到当前的全固化和集成(IC另一方面,精度也从0开始.01%-0.005%。

目前,数字电压表的核心部件是A/D转换器的转换精度极大地影响了数字电压表的准确性。因此,未来数字电压表的发展将重点关注高精度和低成本。.2 本文的研究对象

该系统主要包括三个模块:转换模块、数据处理模块和显示模块。A/D转换采用ADC0808转换输入的模拟信号,控制核心AT89C51然后计算转换结果,最后驱动输出装置LED显示数字电压信号。 方案设计与论证2.设计方案与论证

数字电压表有很多设计方案,但集成电路更受欢迎。其设计主要由模拟电路和数字电路组成,包括模拟部分A/D转换器、基准电源等;数字部分包括振荡器、数字显示器、计数器等。A/D转换器将输入的模拟量转换为数字量,是数字电压表的核心部件,通常有三种选择:

方案一,采用双积分A/D转换器MC14433,多路调制BCD采用动态扫描显示代码输出端和超量程输出端,便于自动控制。但芯片只能完成A/D为了实现显示功能,还需要配合其他驱动芯片,使整个硬件电路板布线复杂,加剧电路设计和实际焊接。

方案二、 A/D转换器采用ICL三位半显示的芯片,输入信号,通过取样电路取样,送到ICL7107型三位半A/D转换器可以形成数字电流表模块,直接驱动三位半LED最后,输入电流显示在显示部分。由于ICL7107做的LED数字表最大的缺点是数字跳跃不稳定,尤其是最后一个。接口模块:使用数字电路,使用译码芯片CD该方案作为接口芯片,可实现功能,但稳定性低,结构复杂。

方案三,逐步接近A/D转换器。转换速度更快,精度更高。ADC0808转换芯片,其中A/D转换器用于实现模拟量向数字量的转换,单电源供电。它具有8路模拟输入和8位数字输出功能A/D转换器的转换时间为100μs,模拟输入电压范围为0V~5V,不需要零点和满刻度校准,功耗低,约15mW。 通过考虑转换速度、精度和价格,模拟转换电路种类繁多。

综上所述,选择方案3。ADC0808是本次设计的转换芯片。采用单片机模块AT89S51单片机作为系统的控制单元,通过A/D转换将测值转换为数字量,然后由单片机显示。该方案易于实现各种功能,成本低,功耗低,显示稳定。

可以使用各种数码管或显示部件LED显示器显示。这里简化了四位八段共阴极数字管对A/D显示转换后的结果。.2 系统设计要求

基于单片机或数字逻辑电路设计数字电压表A/D转换电路、密码验证电路、控制输出和显示电路,实现用户按键输入密码解功能。

1、以单片机为控制核心设计数字电压表;

可测量0~5V8路输入电压值;

3、LED数字管轮流显示或单路选择显示电压值;

最小分辨率为0.01V,测量误差约为±0.01V。2.3整体设计框图

本设计采用以AT89C51单片机控制方案。 灵活的编程设计和丰富的单片机IO端口及其控制的准确性。系统结构框图如图2所示.1所示。

5cedeba053e2ee3dd5d81a6731fbcbcb.png

图2.1系统结构框图

第3章 单元电路设计3.最小系统设计

晶振模块采用内部时钟设计,单片机内部高增益反向放大器,外部电路简单,只需要晶振和 2个电容器,如图3所示.1所示。

图3.1 时钟电路

可通过计算和实验确定电路中的设备选择,也可参考一些典型的电路。参数、电路中的电容器C1和C2对冲击频率有微调作用,一般值范围为30±10pF,该系统选择30pF;石英晶振可选24MHz,它决定了单片机电路产生的时钟信号冲击频率,该系统选择12MHz,因此,时钟信号的振荡频率为12MHz。

复位模块设计AT89C51单片机在启动或死机时需要复位CPU其它功能部件处于确定的初始状态,并从此开始工作。复位信号(高电平有效)由复位电路产生RST对AT89C单片机复位至少需要两个高电平,以便为单片机做好准备。上电时,由于电容器的电压不能突变,会输出高电平。当电容器充电到一定程度时,会输出低电平。单片机在输出高电平时复位。适当选择电阻和电容值。在这要求R1

AT89C51芯片的各引脚功能为:

P0口:8位,漏极开路双向I/O嘴。这组引脚有8条,P0.0是最低的。这八个引脚有两种不同的功能,适用于不同的情况。

P1:8位,准双向I/O口,内部上拉电阻。这八个引脚和P0口的8个引脚

类似,P1.7为最高位,P1.0是最低的,当P1口作为通用I/O口使用时,P1.0-P1.7的功能和P0口的第一功能相同,也用于传送用户的输入和输出数据。

P2口:这组引脚的第一个功能与上述两组引脚的第一个功能相同,即可作为通用I/O口腔使用,它的第一个功能和P配合0口引脚的第二个功能,输出片外存储器的高8位地址,共同选择片外存储器单元,但不像P像0口那样传输存储器的读写数据。

P三口:该组引脚的第一个功能与其他三个端口的第一个功能相同,第二个功能是控制功能,每个引脚不完全相同,如下表2所示:

ALE/PROG:地址锁定允许信号,输出。P访问外部存储器时,使用0口的第二个功能,89C51的CPU在P0.0-P0.7引脚线传输随后的片外存储器读写数据。C51自动在ALE脉冲序列在线输出频率为1/6。脉冲序列可用作外部时钟源或定时脉冲。

/EA:片外存储器访问允许信号,低电平有效。C51使用片内ROM或使用片外ROM,若/EA=允许使用片内ROM,若/EA=只使用片外ROM。

/PSEN:片外ROM低电平选择通信号是有效的。访问片外ROM时,89C51自动在/PSEN在线产生负脉冲作为片外ROM芯片读选通信号。

RST:复位线,可使89C51处于复位(即初始化)工作状态。通常89C51复位有两种:自动上电复位和手动按键复位。

XTAL1和XTAL2:冲击电路输入线用于连接石英晶体和微调电容,即连接89C51片内OSC定振荡器)定期反馈回路。.2 A/D转换设计

A/D转换器是模拟量输入通道的一个环节,单片机通过A/D在处理之前,转换器将输入模拟量转换为数字量。ADC0808是一种采样分辨率为8位的装置,采用模/数转换近的装置。有一个8通道多路开关,可以根据地址码锁定译码后的信号,只选择8通道模拟输入信号中的一个A/D转换。A/D如图3所示.4所示。

图3.4 ADC0808 转换电路

ADC0808芯片有28个引脚,采用双列直插式包装,各引脚功能如下:

(1) IN0~IN7:8路模拟量输入端。

(2) D0~D7:8位数字输出端口。

(3) START:A/D转换启动信号输入端。

(4) ALE:地址锁定允许信号,高电平有效。

(5) EOC:输出允许控制信号,高电平有效。

(6) OE: 输出允许控制信号,高电平有效。

(7) CLK:时钟信号输入端。

(8)ADDA、ADDB、ADDC:转换通道地址,控制8路模拟通道的切换。ADDA、ADDB、ADDC与地址线或数据线分别连接,三位代码对应8个通道地址端口,ADDA、ADDB、ADDC=000~111分别对应IN0~IN7通道地址端口。

使用方法:

ADC0808采用逐步比较的方法完成A/D由单一转换 5V电源供电。由具有锁定功能的8路选1模拟开关组成ADDA、ADDB、ADDC选定的通道由编码决定。ADC0808完成一次转换需要1000μs左右,它有输出TTL三态锁存缓冲器可直接连接AT89C在51数据总线上。通过适当的外部电路,ADC0808可对0~5V转换模拟信号。3.5 显示电路设计

电压显示采用四位共阴极数码管,可显示四位值,每位8个发光二极管(以下简称字段)a、b、c、d、e、f、g、dp通过控制不同的字段构成LED亮灭的不同组合可以用来显示数字09和小数点。数字管分为共阴极和共阳极。本课程设置采用共阴极。

图3.5 四位数码管电路

共阴极数码管0~9的C51编码为:uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x7f,0x6f};

uchar code table[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};

其中1不带小数点,2带小数点。

共阳极就是数码管的每段都接高电平,这样要是哪段亮就这段就得接地。

通道选择显示采用7SEG-BCD,该数码管内含译码器,外部不需要再配,适用于直接加BCD码,即直接加四位二进制数,显示0到F。这个数码管用于显示ADC0808的选择输入通道。

图3.6 数码管电路

3.6 模拟输入设计

通过可变电阻一端接电源+5v,一端接地GND,通过改变电阻的阻值,从而改变所测电压值,实现电压的模拟信号输入。分别将八个输入接入ADC0808中IN0到IN7引脚实现八路的输入电压。将通过按键选择某一路输入,实现单路选择输出电压。

图3.7 模拟输入电路3.7 按键设计

通过两个按键控制ADC0808的输入通道同时将通道数传递给通道显示的数码管。按键一的功能为加一,即每按下一次,通道数加一。按键二的功能为减一,即每按一下,通道数减一。实现单路选择显示电压。按键模型如图3.8所示。

图3.8 按键电路

要实现按键的功能需要知道ADC0808的ADDA、ADDB、ADDC的功能。ADC0808一个8路模拟开关,一个地址锁存与译码器、一个8位A/D转换器和一个三态输出锁存器组成。多路开关可选通8个模拟通道IN0—IN7,允许8路模拟分量输入,共用A/D转换器 进行转换。地址输入和控制线:4条,ALE为地址锁存允许输入线,高电平有效。当ALE线为高电平时,地址锁存与译码器将A,B,C三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转化器进行转换。A,B,C为地址输入线,用于选通IN0—IN7上的一路模拟量输入。

第4章 系统软件设计4.1 主程序的设计

由于ADC0808在进行A/D转换时需要有CLK信号,而此时的ADC0808的CLK是连接在AT89C51单片机的30管脚,也就是要求从30管脚输出CLK信号供ADC0808使用。因此产生CLK信号的方法就等于从软件产生。电压表系统有主程序,A/D转换子程序、按键子程序和显示子程序。主程序框图如图4.1所示。

图4.1 主程序流程图4.2 A/D转换程序设计

ADC0808对模拟量输入信号进行转换通过判断EOC(P3.2来确定转换是否完成若EOC为0则继续等待若EOC为1则把OE置位,将转换完成。加入按键控制,通过按键控制ADC0808对输入电路的选择,从而实现单路选择电路电压满足设计要求。程序流程图如4.2所示。

图4.2 A/D程序流程图

其中A/D转换子程序的C语言代码如下

sbit START=P3^0;

sbit OE=P3^1;

sbit EOC=P3^2;

uint data  tvdata;

void main(void)

{

ET0=1;

EA=1;

TMOD=0x02;

TH0=216;

TL0=216;

TR0=1;

while(1)

{

START=1;

START=0;          //启动转换

while(EOC==0);

OE=1;

tvdata=P1;

tvdata*=20-0.01;

OE=0;

}

}4.3 显示程序设计

系统上电后,配置数码管个引脚,然后对其进行初始化,再调用的读写函数,可将采集处理后的电压数值实时显示。其程序流程图如图4.3所示。

图4.3 显示程序流程图

其中显示子程序的C语言代码如下:

uchar code  tv[]={0xfe,0xfd,0xfb,0xf7};

uchar code  a[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

void ledxianshi(void)

{

uchar k,i;

if(tvdata>5000)

tvdata=5000;

led[0]=tvdata%10;

led[1]=tvdata/10%10;

led[2]=tvdata/100%10;

led[3]=tvdata/1000;

for(k=0;k<4;k++)

{

P2=tv[k];

i=led[k];

P0=a[ i];

if(k==3)

{

P07 =1;

}

delay();

}

}4.4 按键程序设计

通过按键控制ADC0808选择的输入通道。开始之后,进行通道选择,一个按键使通道加1,一个减1,从而选择输入,影响输出。按键按下之后,重新进行AD转换,重新显示电压值与通道。

图4.3 按键程序流程图

其中按键子程序的C语言代码如下:

void xuan( uint a)

{

if(a==0)

{

P37=0;P36=0;P35=0;

}

if(a==4)

{

P37=0;P36=0;P35=1;

}

if(a==2)

{

P37=0;P36=1;P35=0;

}

if(a==6)

{

P37=0;P36=1;P35=1;

}

if(a==1)

{

P37=1;P36=0;P35=0;

}

if(a==5)

{

P37=1;P36=0;P35=1;

}

if(a==3)

{

P37=1;P36=1;P35=0;

}

if(a==7)

{

P37=1;P36=1;P35=1;

}

}

if( KEY2==0)

{

b--;

delay();

xuan(b);

delay();

if(b==0)

b=7;

}

if( KEY1==0)

{

b++;delay( );

xuan(b);

if(b==7)

b=0;

}

第5章 系统仿真与调试

使用Proteus绘制原理图,然后将Keil生成的hex程序文件载入到单片机中,点击运行:

按下按键,选择IN5即通道5时,仿真与如图5.1所示。

图5.1 通道5仿真图

如图所示,通过按键选择通道五实现显示单路电压,数码管显示数字5。测量电压为2.038V,实际电压为2.03V,误差小于0.01,满足设计要求。

为确定结果的准确性,需要多次测量对比。

按下按键,选择IN7即通道7时,仿真与如图5.2所示。

图5.2 通道7仿真图

如图所示,测量电压为0.919V,实际电压为0.92V,误差小于0.01,满足设计要求,且可通过按键选择通道七实现显示单路电压,数码管显示数字7。

仿真结果分析:输入的电压从0~5V变化时,数字电压表能够测量出并利用数码管显示出来。测量的精度与要求的一致,前两位精确,百分位不作精确。要更精确,只需修改相应的源程序代码即可。

第6章 总结

本系统由单片机系统、A/D转化电路、LCD显示和按键系统组成。数字电压表能完成测量0~5V的8路输入电压值并且通过按键控制可以使LED数码管单路选择显示电压值的功能。本系统利用单片机控制,LCD显示,按键配合,系统成本低廉,功能强大实用。

本文设计的基于AT89C51的数字电压表具有简单的软硬件设计电路、低廉的开发成本、简便的操作方法,在实际应用工作应能好,测量电压准确,精度高。并通过Proteus仿真实现了预期的功能,实现八路输入电压单路选择输入显示电路电压值,且可以满足现在的误差要求最小分辨率为0.01V,测量误差约为±0.01V。。

但是设计数字电压表需要结合实际综合考虑很多因素,因此该数字电压表设计需要在实际中进一步完善和改进。 要想在现实生活中推广,还必须针对实际应用场合的需要,进一步完善系统功能的程序具有一定的推广价值。

附录I:整体电路原理图

附录II:元器件清单序号标号元器件名称元器件参数

1U1单片机AT89C51

2U2A/D转化器ADC0808

3RV0-RV7滑动变阻器1K

4R1-R10电阻10K

5LED1四位数码管7SEG-MPX4-CC

6LED2一位数码管7SEG-BCD

7C1、C2电容33pF

8C3电容1uF

9KEY1-KEY3按键6*6*5

以上文档下载(word格式 可编辑):

数字电压表的设计.doc

(736.36 KB, 下载次数: 111)

2017-7-1 17:39 上传

点击文件名下载附件

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章