武汉绘芯科技有限公司欢迎您!
10余年经验沉淀展览展示运动控制的专家
全国咨询热线:027-87052087
联系我们
武汉绘芯科技有限公司
电话:027-87052087
手机:13329706647
邮箱:956693667@qq.com
地址:武汉市江夏区藏龙岛谭湖一路8号
联系人:黄先生
您的位置: 滑轨屏|绘芯科技 > 知识库 >
知识库

基于AT89S52的直流数字电压表设计

日期:2016-07-30 12:50:34 来源:未知 点击

基于AT89S52的直流数字电压表设计

摘要随着电子科学技术的发展,电子测量成为广大电子工作者必须掌握的手段,对测量的精度和功能的要求也越来越高,而电压的测量甚为突出,因为电压的测量最为普遍。本设计在参阅了大量前人设计的数字电压表的基础上,利用单片机技术结合A/D转换芯片A/D574A构建了一个直流数字电压表。本文首先简要介绍了设计电压表的主要方式以及单片机系统的优势;然后详细介绍了直流数字电压表的设计流程,以及硬件系统和软件系统的设计,并给出了硬件电路的设计细节,包括各部分电路的走向、芯片的选择以及方案的可行性分析等。

1.前言

在电量的测量中,电压、电流和频率是最基本的三个被测量,其中电压量的测量最为经常。而且随着电子技术的发展,更是经常需要测量高精度的电压,所以数字电压表就成为一种必不可少的测量仪器。数字电压表(Digital Voltmeter)简称DVM,它是采用数字化测量技术,把连续的模拟量(直流或交流输入电压)转换成不连续、离散的数字形式并加以显示的仪表。由于数字式仪器具有读数准确方便、精度高、误差小、灵敏度高和分辨率高、测量速度快等特点而倍受青睐。本设计从各个角度分析了由单片机组成的数字电压表的设计过程及各部分电路的组成及其原理,并且分析了程序如何驱动单片机进而使系统运行起来的原理及方法。框图如下:

本设计主要分为两部分:硬件电路及软件程序。而硬件电路又大体可分为单片机小系统电路、分压电路、A/D转换电路、LED显示电路及语音报读电路,各部分电路的设计及原理将会在硬件电路设计部分详细介绍;程序的设计使用C语言编程,利用Keil 软件对其编译和仿真,详细的设计算法将会在程序设计部分详细介绍。

 

2.系统硬件电路设计

2.1 单片机小系统电路

2.1.1.单片机芯片选择

单片机采用MCS-51系列单片机。由ATMEL公司生产的AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。在单芯片上,拥有灵巧的8 CPU 和在线系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、有效的解决方案。AT89S52具有以下标准功能: 8k字节Flash256字节RAM32 I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。而且,它还具有一个看门狗(WDT)定时/计数器,如果程序没有正常工作,就会强制整个系统复位,还可以在程序陷入死循环的时候,让单片机复位而不用整个系统断电,从而保护你的硬件电路。

AT89S5240个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,216位可编程定时计数器,2个全双工串行通信口,片上Flash允许程序存储器在系统可编程,亦适于常规编程器。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。其芯片引脚图如下:


2.1_1 AT89S52引脚图

 

2.1.2.单片机管脚说明

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口缓冲器可接收,输出4TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

P3口也可作为AT89S52的一些特殊功能口,如下表所示:

P3口引脚

第二功能

P3.0

RXD(串行口输入)

P3.1

TXD(串行口输出)

P3.2

INT0(外部中断0输入)

P3.3

INT1(外部中断1输入)

P3.4

T0(定时器0外部脉冲输入)

P3.5

T1(定时器1外部脉冲输入)

P3.6

WR(外部数据存储器写脉冲输出)

P3.7

RD(外部数据存储器读脉冲输出)

 

P3口同时为闪烁编程和编程校验接收一些控制信号。

RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVXMOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。

/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2:来自反向振荡器的输出。

 

2.1.3.单片机小系统电路连接


电路连接图如下图:

2.1_2 单片机小系统

 

2.2 A/D转换器与单片机接口电路

2.2.1.A/D转换器芯片选择

A/D转换器是模拟量输入通道中的一个环节,单片机通过A/D转换器把输入模拟量变成数字量再处理。

随着大规模集成电路的发展,目前不同厂家已经生产出了多种型号的A/D转换器,以满足不同应用场合的需要。如果按照转换原理划分,主要有3种类型,即双积分式A/D转换器、逐次逼近式A/D转换器和并行式A/D转换器。目前最常用的是双积分和逐次逼近式。

双积分式A/D转换器具有抗干扰能力强、转换精度高、价格便宜等优点,比如ICL71XX系列等,它们通常带有自动较零、七段码输出等功能。与双积分相比,逐次逼近式A/D转换的转换速度更快,而且精度更高,比如ADC0808ADC0809等,它们通常具有8路模拟选通开关及地址译码、锁存电路等,它们可以与单片机系统连接,将数字量送单片机进行分析和显示。

本设计中,要求精度小于0.1%,则必须选用分辨率大于8位的芯片,如10位、12位、14位或16A/D转换器,比如AD573AD574AADC1140等。本电路采用AD574A

AD574A是美国Analog Device公司在AD574的基础上改进过的一种完全12位单片A/D转换器。它采用逐次逼近型的A/D转换器,最大转换时间为25us,转换精度为0.05%,所以适合于高精度的快速转换采样系统。芯片内部包含微处理器借口逻辑(有三态输出缓冲器),故可直接与各种类型的8位或者16位的微处理器连接,而无需附加逻辑接口电路,切能与CMOSTTL电路兼容。


AD574A采用28脚双列直插标准封装,其引脚图如下:

2.2_1

2.2.2.A/D转换器管脚说明

A/D574A5根控制线,逻辑控制输入信号有:

A0:字节选择控制信号。

CE:片启动信号。

/CS:片选信号。当/CS=0CE=1同时满足时,AD574才处于工作状态,否则工作被禁止。

R/-C:读数据/转换控制信号。

12/-8:数据输出格式选择控制信号。当其为高电平时,对应12位并行输出;为低电平时,对应8位输出。

R/-C=0,启动A/D转换:当A0=0,启动12A/D转换方式;当A0=1,启动8位转换方式。

R/-C=1,数据输出,A0=0时,高8位数据有效;A0=1时,低4位数据有效,中间4位为0,高4位为三态。

输出信号有:

STS:工作状态信号线。当启动A/D进行转换时,STS为高电平;当A/D转换结束时为低电平。则可以利用此线驱动一信号二极管的亮灭,从而表示是否处于A/D转换。

其它管脚功能如下:

10Vin,20Vin:模拟量输入端,分别为10V20V量程的输入端,信号的另一端接至AGND

DB11~DB012位数字量输出端,送单片机进行数据处理。

REF OUT 10V内部参考电压输出端。

REF IN  :内部解码网络所需参考电压输入端。

BIP OFF :补偿校正端,接至正负可调的分压网络,0输入时调整数字输出为0

AGND:接模拟地。

DGND:接数字地。

2.2.3.AD574A与单片机接口

由于对AD574A 81012引脚的外接电路有不同连接方式,所以AD574A与单片机的接口方案有两种,一种是单极性接法,可实现输入信号010V或者020V的转换;另一种为双极性接法,可实现输入信号-5+5V或者-10+10V之间转换。


我们采用单极性接法,电路图如下2.2_2

2.2_2 AD574A与单片机接口电路

根据芯片管脚的原理,无论启动、转换还是结果输出,都要保证CE端为高电平,所以可以将单片机的/RD引脚和/WR端通过与非门与AD574ACE端连接起来。转换结果分高8位、低4位与P0口相连,分两次读入,所以12/-8端接地。同时,为了使CSA0R/-C在读取转换结果时保持相应的电平,可以将来自单片机的控制信号经74LS373锁存后再接入。CPU可采用中断、查询或者程序延时等方式读取AD574A的转换结果,本设计采用中断方式,则将转换结束状态STS端接到P3.2(外部中断/INT0)。其工作过程如下:

A.    当单片机执行对外部数据存储器的写指令,并使CE=1/CS=0R/-C=0A0=0时,

进行12A/D转换启动。                       

B. CPU等待STS状态信号送P3.2口,当STS由高电平变为低电平时,就表示转换结束。

C. 转换结束后,单片机通过分两次读外部数据存储器操作,读取12位的转换结果数据。当CE=1/CS=0R/-C=1A0=0时,读取高8位;当CE=1/CS=0R/-C=1A0=1时,读取低4位。

2.3量程划分电路

由于本设计要求测量的范围是0500V,而A/D转换器的最大输入电压为20V,所以要对输入的模拟电压进行分段和降压处理。根据AD574A与单片机的单极性接法,可以将量程分为以下三段,并作相应处理:

分段电压

降压

输入A/D转换器电压

020V

V/1

020V

20200V

V/10

220V

200500V

V/100

25V


降压处理有多种方法,本设计用固定电阻的分压电路进行降压,分压电阻分别为R1=90KR2=9KR3=1K,则R=R1+R2+R3=100K,继电器K1闭合则选择了020V段电压;当继电器K2闭合则选择了20200V段电压;当继电器K3闭合则选择了200500V段电压。电路如下图:                    

2.3_1量程划分电路

由图可见,使用了继电器控制量程的选择,所以为了控制继电器的闭合,又要由单片机的I/O口产生持续的高(低)电平。本设计使用P3口控制。当P3.0接的按键S0被按下时,单片机由P3.3口输出持续的高电平,接入到2003驱动芯片的输入口1,进而驱动继电器K1的闭合;当P3.1接的按键S1被按下时,单片机由P3.4输出持续的高电平,接到2003芯片的输入口2,进而驱动继电器K2的闭合;当P3.2接的按键S2被按下时,单片机由P3.5输出持续的高电平,接到2003芯片的输入口3,进而驱动继电器K3的闭合。

 

2.4 电压显示电路

设计中采用的是8LED数码管来显示电压值。LED具有耗电低、亮度高、视角大、线路简单、耐震及寿命长等优点,它由8个发光二极管组成,其中7个按‘8’字型排列,另一个发光二极管为圆点形状,位于右下角,常用于显示小数点。把8个发光二极管连在一起,公共端接高电平,叫共阳极接法,相反,公共端接低电平的叫共阴极接法,我们采用共阳极接法。当发光二极管导通时,相应的一段笔画或点就发亮,从而形成不同的发光字符。其8段分别命名为dp g f e d c b a。例如,要显示“0”,则dp g f e d c b a分别为:1100 0000B;要显示“A”,则dp g f e d c b a分别为:0001 0001B(共阳极)。若要显示多个数字,只要让若干个数码管的位码循环为低电平就可以了。


根据设计要求,显示电路需要至少4LED数码管来显示电压值,我们再多加一位用来显示电压单位“V”,则有7LED循环显示。利用单片机的I/O口驱动LED数码管的亮灭,设计中由P0口驱动LED的段码显示,即显示字符,由P2口选择LED位码,即选择点亮哪位LED来显示。电路如下:

2.4_1电压显示电路

另外,一般I/O接口芯片的驱动能力是很有限的,在LED显示器接口电路中,输出口所能提供的驱动电流一般是不够的尤其是设计中需要用到多位LED,此时就需要增加LED驱动电路。驱动电路有多种,常用的是TTLMOS集成电路驱动器,在本设计中采用了74LS245芯片驱动电路,如上图所示。

 

2.5 语音报读电路

2.5.1.语音芯片选择

近年来,语音电路发展极为迅速,在单片机系统中的应用越来越广。设计中使用ISD1420作为语音芯片。美国信息存储器件的ISD1420语音芯片采用直接模拟存储技术,不需要专用开发工具和编程器,它由振荡器、语音存储单元、前置放大器、自动增益控制电路、抗干扰滤波器、输出放大器组成,先将语音经A/D转换后存入存储器中,放音时取出再经D/A转换输出。并且ISD1420具有以下特点:

1)外围电路简单,仅需少量阻容元件、麦克风即可组成一完整录放系统。

2)放音时间20S,可扩充级联。

3)可持续放音,也可分段放音,最小分段为20S/160段即0.125S/段,可分为160段。

4)录放次数达10万次。

5)断电信息存储,无需备用电池,信息可保存100年。

6)操作简单,无需专用编程器及语音开发器,典型+5V供电。

2.5.2.ISD1420管脚说明


ISD1420封装为28脚,引脚图如下图:              

2.5_1

其各引脚功能如下:

1)A0A7脚,地址或操作模式控制端。

2)NC脚,空脚。

3)Vssd,数字地;Vssa,模拟地。

4)MIC脚,话筒输入端,可用驻极体话筒通过电容偶合。

5)MIC Ref脚,话筒输入参考端,若不用,浮空。

6)AGC脚,自动增益控制端,调整芯片内部前置放大器增益,使录入信号不失真。

7)ANAINANAOUT脚,模拟信号输入、输出端,两端间接接电容,该端可用于模拟信号的直接输入。

8)/PLAYL脚,电平放音控制,低电平有效。

9)/PLAYE脚,边沿触发放音控制。

10/RECLED脚,录音指示。

11XCLK脚,外部时钟或接地。

12/REC脚,录音/放音控制,高电平为放音,低电平为录音。

13VCCD脚,数字电源。

2.5.3.ISD1420与单片机接口


电路图如下图:

2.5_2 ISD1420与单片机接口电路

 

单片机通过P1.0P1.5分别与ISD1420A2A7地址线连接,其接口地址为7FFFHP1.6控制放音开始,D7控制录音及放音选择,A0A1固定接地。单片机输出数据P1.0P1.7ISD1420的录放控制码对应关系见下表:

 

 

单片机

P1.7

P1.6

P1.5

P1.4

P1.3

P1.2

P1.1

P1.0

分段

段控制码

ISD1420

RD

PL

A7

A6

A5

A4

A3

A2

0

40H

 

 

 

录音

0

1

0

0

0

0

0

0

   1

41H

0

1

0

0

0

0

0

1

   2

42H

                       ......

0

1

1

0

0

1

1

0

38

66H

0

1

1

0

0

1

1

1

   39

67H

 

 

 

放音

0

0

0

0

0

0

0

0

80H

1

0

0

0

0

0

0

1

   1

81H

                       ......

1

0

1

0

0

1

1

0

38

A6H

1

0

1

0

0

1

1

1

   39

A7H

 

由于设计中要求报读的数值中有“0123456789、百、十、点、伏”几个字符,则至少要分为14段,而为了使报读时的流畅性和合理利用性考虑,本设计将地址分为20段,即每段为1S。另外,由于每报一次数值就至少需要(6*1)S,最大需要(10*1)S,则我们最快也只能每隔10S报一次数据,所以我们每隔12S报一次电压值。

在单片机调用即读出ISD1420芯片中的字符之前,得利用录音功能将以上14个字符逐个的录音并分别放在对应的地址上,单片机执行报读程序时,就可以到相对应的地址上将数值读出。需要注意的是:在单片机放音时,控制码=录音时的控制码+40H

 

 

 

 

 

 

 

 

 

 

 

3.系统程序设计

3.1软件总体框架设计

系统软件的总体框架如下图所示:

   

 

在系统上电开始测量前,要用万用表的电压档对被测电压进行估测,然后以此选择适当的量程,防止过大电压烧坏A/D转换器。选择好量程之后就可以对系统上电测量了。

系统上电即初始化,首先,单片机片选A/D转换器,然后发出信号启动A/D转换。此时单片机内部定时/计数器也开始工作,不断扫描A/D转换结束端口有无结束信号。若有,即启动信号采集,对A/D转换器的数据输出口送来的数值进行存储,定时/计数器重新置零,并且准备下一次的采集;若没有,则继续等待。每当采集系统采集一次,a的值就自增1,直至采集满10次时归零,然后单片机一边对数据处理,一边进入下一次的扫描。数据处理完之后,利用查表法将电压数值送显示器显示出来。与此同时另一定时/计数器在显示一次数值后开始12S定时/记数,并利用查表法对电压值报读出来。

 

 

 

 

4.系统调试及结果分析

 

设计完成之后,我们要对系统进行调试。调试过程可以利用对部分给定电压的测量结果分析来完成。首先要校对零点:将A/D转换器的模拟输入端口接地,即让电压为0V,此时可以调整R2的值,直至显示电压为0V时为止。校准零点之后,就可以进行调试了。以下表所示对系统进行测试并调节:

实际电压(V

显示电压(V

语音报读电压(V

0.000

0.000

0.000

0.005

 

 

1.000

 

 

100.000

 

 

200.000

 

 

500.000

 

 

若显示电压与实际电压的误差在误差范围之内,并且语音报读电压与显示电压的差别不大的话,则表示系统运行正常;若显示电压与实际电压的误差很大,则有可能是校零电阻没有调整,可以进一步的校准。此外需要注意的是,由于语音报读相对于显示来说有一定的延时,所以跟显示电压存在误差是必然的,如果差别不大,是正常的;但是如果相差很大的话,就有可能是语音模块内部存储的字符地址与单片机调用存在误差,或者程序存在一定问题,可以分别排除。

5.系统改进及优化

5.1 量程自动化

使用手动控制电压表的量程,不仅使用不方便,而且有可能因为按错按键选错量程而导致损坏A/D转换器,而自动化已经发展成电子产品中一个必不可少的部分了,所以在本设计中也可以利用优化软件的方法将量程的选择设计成自动化。

首先将三个按键去掉,而将继电器K3的默认状态设为闭合,则系统一上电K3就闭合,也即选择了V/100档,将电压衰降了100倍,从而确保了模拟输入电压被限制在5V以内,不会对A/D转换器造成损害。电路如下:


5.1_1

当单片机采集到的电压V>2v,则不再选择其它继电器,所测电压即为实际电压;若V<2v,并且V<0.2v,则选择继电器K1,即V/1档量程;若V<2v,V>0.2v,则选择继电器K2,即V/100档量程。条件语句的设计完成了量程的自动化。

 

 

 

6.系统总图及程序

 

    见附图。

 

 

 

 

 

 

 

 

 

参考文献

 

[1] 谢自美. 电子线路设计*实验*测试.华中科技大学出版社.

[2] 张友德等. 单片微型机原理、应用和实验.电子工业出版社.

[3] 吴经国等.单片机应用技术. 中国电力出版社.

[4] 李群芳.单片机微型计算机与接口技术.电子工业出版社.

[5] 阉石.数字电子技术基础.高等教育出版社.

[6] 黄智伟.全国大学生电子设计竞赛训练教程.电子工业出版社.

[7] 周立功.单片机实验与实践.北京航空航天大学出版社.

[8] 全国大学生电子设计竞赛组委会.全国大学生电子设计竞赛获奖作品汇编.北京理工大学出版社.

[9] 刘高锁等.单片机使用技术.

[10] 张学. 数字电压表.http://www.eefocus.com/html/07-06/18917s.shtml.

 

 


在线客服
联系方式

热线电话

13329706647

上班时间

周一到周五

公司电话

027-87052087

二维码
线