1、1 基于 AT89S52 的直流数字电压表设计 摘要 随着电子科学技术的发展,电子测量成为广大电子工作者必须掌握的手段,对测量的精度和功能的要求也越来越高,而电压的测量甚为突出,因为电压的测量最为普遍。本设计在参阅了大量前人设计的数字电压表的基础上,利用单片机技术结合 A/D 转换芯片构建了一个直流数字电压表。本文首先简要介绍了设计电压表的主要方式以及单片机系统的优势;然后详细介绍了直流数字电压表的设计流程,以及硬件系统和软件系统的设计,并给出了硬件电路的设计细节,包括各部分电路的走向、芯片的选择以及方案的可行性分析等 。 近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,在多方面显示
2、出了它的优势,值得进一步学习和研究。但是仅单片机方面的知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,加以完善。 关键词 : 单片机( MCU) 电压 A/D 转换 AD574A ISD1420 Abstract Keywords : Micro Controller Unit,Voltmeter,A/D switch,AD574A,ISD1420 目录 摘要 1 2 Abstract 1 目录 1 前言 1 前言 3 在电量的测量中,电压、电流和频率是最基本的三个被测量,其中电压量的测量最为经常。而且随着电子技术的发展,更是经常需要测量高精度的电压,所以数字电压表就成
3、为一种必不可少的测量仪器。数字电压表( Digital Voltmeter)简称 DVM,它是采用数字化测量技术,把连续的模拟量(直流或交流输入电压)转换成不连续、离散的数 字形式并加以显示的仪表。由于数字式仪器具有读数准确方便、精度高、误差小、灵敏度高和分辨率高、测量速度快等特点而倍受青睐。本设计从各个角度分析了由单片机组成的数字电压表的设计过程及各部分电路的组成及其原理,并且分析了程序如何驱动单片机进而使系统运行起来的原理及方法。框图如下: 本设计主要分为两部分:硬件电路及软件程序。而硬件电路又大体可分为单片机小系统电路、分压电路、 A/D 转换电路、 LED 显示电路及语音报读电路,各部
4、分电路的设计及原理将会在硬件电路设计部分详细介绍;程序的设计使用 C 语言编程,利用 Keil 软件对其编译和仿真,详细的设计算法将会在程序设计部分详细介绍。 3、 AT89S52 以及其它电路的分析 单片机 A/D 转换器AD574A 电压显示器 模拟电压输入 ISD1420 语音芯片 量程控制电路 4 1 系统硬件电路设计 1.1 单片机小系统电路 1.1.1.单片机芯片选择 单片机采用 MCS-51系列单片机。由 ATMEL公司生产的 AT89S52是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程 Flash 存储器。使用 Atmel 公司高密度非易失性存储器技术制造,
5、与工业 80C51 产品指令和引脚完全兼容。在单芯片上,拥有灵巧的 8 位CPU 和在线系统可编程 Flash,使得 AT89S52为众多嵌入式控制应用系统提供高灵活、有效的解决方案。 AT89S52具有以下标准功能: 8k字节 Flash, 256字节 RAM, 32 位 I/O 口线,看门狗定时器, 2 个数据指针,三个 16 位定时器 /计数器,一个 6向量 2级中断结构,全双工串行口,片内晶振及时钟电路。空闲模式下, CPU停止工作,允许 RAM、定时器 /计数器、串口、中断继续工作。掉电保护方式下, RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。而
6、且,它还具有一个看门狗( WDT)定时 /计数器,如果程序 没有正常工作,就会强制整个系统复位,还可以在程序陷入死循环的时候,让单片机复位而不用整个系统断电,从而保护你的硬件电路。 AT89S52有 40个引脚, 32个外部双向输入 /输出( I/O)端口,同时内含 2个外中断口, 2个 16位可编程定时计数器 ,2个全双工串行通信口, 片上 Flash允许程序存储器在系统可编程,亦适于常规编程器。 其将通用的微处理器和 Flash存储器结合在一起,特别是可反复擦写的 Flash存储器可有效地降低开发成本。其芯片外观及引脚图如下: 图 1.1_1 图 1.1_2 1.1.2.单片机管脚说明 V
7、CC:供电电压。 GND:接地。 P0口: P0口为一个 8位漏级开路双向 I/O口,每脚可吸收 8TTL门流。当 P1口的管脚第一次写 1时,被定义为高阻输入。 P0能够用于外部程序数据存储器,它可以被定义为数据 /地址的第八位。在 FIASH编程时, P0 口作为原码输入口,当 FIASH进行校验时, P0输出原码,5 此时 P0外部必须被拉高。 P1口: P1口是一个内部提供上拉电阻的 8位双向 I/O口, P1口缓冲器能接收输出 4TTL门电流。 P1口管脚写入 1后,被内部上拉为高,可用作输入, P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在 FLASH编程和校验
8、时, P1口作为第八位地址接收。 P2口: P2口为一个内部上拉电阻的 8位双向 I/O口, P2口缓冲器可接收,输出 4个 TTL门电流,当 P2口被写“ 1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。 P2口当用于外部程序存储器或 16位地址外部数据存储器进行存取时, P2口输出地址的高八位。在给出地址“ 1” 时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时, P2口输出其特殊功能寄存器的内容。 P2口在 FLASH编程和校验时接收高八位地址信号和控制信号。 P3口: P3口管脚是 8个带内部上拉电
9、阻的双向 I/O口,可接收输出 4个 TTL门电流。当 P3口写入“ 1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平, P3口将输出电流( ILL)这是由于上拉的缘故。 P3口也可作为 AT89S52的一些特殊功能口,如下表所示: 管脚 备选功能 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口同
10、时为闪烁编程和编程校验接收一些控制信号。 RST:复位输入。当振荡器复位器件时,要保持 RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在 FLASH编 程期间,此引脚用于输入编程脉冲。在平时, ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的 1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个 ALE脉冲。如想禁止 ALE的输出可在 SFR8EH地址上置 0。此时, ALE只有在执行 MOVX, MOVC指令是 ALE才起作用。另外,该引脚被略微拉高。如果
11、微处理器在外部执行状态 ALE禁止,置位无效。 6 /PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次 /PSEN有效。但在访问外部 数据存储器时,这两次有效的 /PSEN信号将不出现。 /EA/VPP:当 /EA保持低电平时,则在此期间外部程序存储器( 0000H-FFFFH),不管是否有内部程序存储器。注意加密方式 1时, /EA将内部锁定为 RESET;当 /EA端保持高电平时,此间内部程序存储器。在 FLASH编程期间,此引脚也用于施加 12V编程电源( VPP)。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的
12、输出。 1.1.3.单片机小系统电路连接 电路连接图如下图: 图 1.1_3 1.2 A/D 转换 器与单片机接口电路 1.2.1.A/D 转换器芯片选择 A/D 转换器是模拟量输入通道中的一个环节,单片机通过 A/D 转换器把输入模拟量变成数字量再处理。 随着大规模集成电路的发展,目前不同厂家已经生产出了多种型号的 A/D 转换器,以满足不同应用场合的需要。如果按照转换原理划分,主要有 3种类型,即双积分式 A/D 转换器、逐次逼近式 A/D 转换器和并行式 A/D 转换器。目前最常用的是双积分和逐次逼近式。 双积分式 A/D 转换器具有抗干扰能力强、转换精度高、价格便宜等优点,比如 ICL
13、71XX系列等,它们通常带有自动较零、七段码 输出等功能。与双积分相比,逐次逼近式 A/D 转换的转换速度更快,而且精度更高,比如 ADC0808、 ADC0809 等,它们通常具有 8路模拟选通开关及地址译码、锁存电路等,它们可以与单片机系统连接,将数字量送单片机进行分7 析和显示。 本设计中,要求精度小于 0.1%,则必须选用分辨率大于 8位的芯片,如 10 位、 12 位、14位或 16 位 A/D 转换器,比如 AD573、 AD574A、 ADC1140 等。本电路采用 AD574A。 AD574A 是美国 Analog Device 公司在 AD574 的基础上改进过的一种完全 1
14、2 位单片 A/D转 换器。它采用逐次逼近型的 A/D 转换器,最大转换时间为 25us,转换精度为 0.05%,所以适合于高精度的快速转换采样系统。芯片内部包含微处理器借口逻辑(有三态输出缓冲器),故可直接与各种类型的 8位或者 16 位的微处理器连接,而无需附加逻辑接口电路,切能与 CMOS 及 TTL 电路兼容。 AD574A 采用 28 脚双列直插标准封装,其引脚图如下 : 图 1.2_1 1.2.2.A/D 转换器管脚说明 A/D574A 有 5根控制线,逻辑控制输入信号有: A0:字节选择控制信号。 CE:片启动信号。 /CS:片选信号。当 /CS=0, CE=1 同时满足时, A
15、D574 才处于工作状态,否则工作被禁止。 R/-C:读数据 /转换控制信号。 12/-8:数据输出格式选择控制信号。当其为高电平时,对应 12 位并行输出;为低电平时,对应 8位输出。 当 R/-C=0,启动 A/D 转换:当 A0=0,启动 12 位 A/D 转换方式;当 A0=1,启动 8位转换方式。 当 R/-C=1,数据输出, A0=0 时,高 8 位数据有效; A0=1 时,低 4位数据有效,中间 4位为 0,高 4位为三态。 输出信号有: STS:工作状态信号线。当启动 A/D 进行转换时, STS 为高电平;当 A/D 转换结束时为低电平。则可以利用此线驱动一信号二极管的亮灭,
16、从而表示是否处于 A/D 转换。 8 其它管脚功能如下: 10Vin,20Vin:模拟量输入端,分别为 10V 和 20V 量程的输入端,信号的另一端接至AGND。 DB11DB0: 12 位数字量输出端,送单片机进行数据处理。 REF OUT : 10V 内部参考电压输出端。 REF IN :内部解码网络所需参考电压输入端。 BIP OFF :补偿校正端,接至正负可调的分压网络, 0输入时调整数字输出为 0; AGND:接模拟地。 DGND:接数字地。 1.2.3.AD574A 与单片 机接口 由于对 AD574A 8、 10、 12 引脚的外接电路有不同连接方式,所以 AD574A 与单片
17、机的接口方案有两种,一种是单极性接法,可实现输入信号 0 10V 或者 0 20V 的转换;另一种为双极性接法,可实现输入信号 -5 +5V 或者 -10 +10V 之间转换。 我们采用单极性接法,电路图如下 1.2_2: 根据芯片管脚的原理,无论启动、转换还是结果输出,都要保证 CE 端为高电平,所以可以将单片机的 /RD 引脚和 /WR 端通过与非门与 AD574A 的 CE 端连接起来。转换结果分高 8位、低 4 位与 P0 口相连,分两次读入,所以 12/-8 端接地。同时,为了使 CS、 A0、 R/-C在读取转换结果时保持相应的电平,可以将来自单片机的控制信号经 74LS373 锁
18、存后再接9 入。 CPU 可采用中断、查询或者程序延时等方式读取 AD574A 的转换结果,本设计采用中断方式,则将转换结束状态 STS 端接到 P3.2(外部中断 /INT0)。其工作过程如下: A. 当单片机执行对外部数据存储器的写指令,并使 CE=1, /CS=0, R/-C=0, A0=0 时, 进行 12 位 A/D 转换启动。 B. CPU 等待 STS 状态信号送 P3.2 口 ,当 STS 由高电平变为低电平时,就表示转换结束。 C. 转换结束后,单片机通过分两次读外部数据存储器操作,读取 12 位的转换结果数据。当 CE=1, /CS=0, R/-C=1, A0=0 时,读取
19、高 8 位;当 CE=1, /CS=0, R/-C=1, A0=1 时,读取低 4位。 1.3 量程划分电路 由于本设计要求测量的范围是 0 500V,而 A/D 转换器的最大输入电压为 20V,所以要对输入的模拟电压进行分段和降压处理。根据 AD574A 与单片机的单极性接法,可以将量程分为以下三段,并作相应处理: 分段电压 降压 输入 A/D 转换器 电压 0 20V V/1 0 20V 20 200V V/10 2 20V 200 500V V/100 2 5V 降压处理有多种方法,本设计用固定电阻的分压电路进行降压,分压电阻分别为R1=90K, R2=9K, R3=1K,则 R=R1+
20、R2+R3=100K,继电器 K1 闭合之后选择了 0 20V 段电压;当继电器 K2 闭合之后选择了 20 200V 段电压;选择了 200 500V 段电压。电路如下图1.3_1: 图 1.3_1 由图可见,使用了继电器控制量程的选择,所以为了控制继电器的闭合,又要由单片机的 I/O 口产生持续的高(低)电平。本设计使用 P3 口控制。当 P3.0 接的按键 S0 被按下时,单片机由 P3.3 口输出持续的高电平,接入到 2003 驱动芯片的输入口 1,进而驱动继10 电器 K1 的闭合;当 P3.1 接的按键 S1 被按下时,单片机由 P3.4 输出持续的高电平,接到2003 芯片的输入
21、口 2,进而驱动继电器 K2 的闭合;当 P3.2 接的按键 S2 被按下时,单片机由 P3.5 输出持续的高电平,接到 2003 芯片的输入口 3,进而驱动继电器 K3的闭合。 1.4 电压显示电路 设计中采用的是 8段 LED 数码管来显示电压值。 LED 具有耗电低、亮度高、视角大、线路简单、耐震及寿命长等优点,它由 8 个发光二极管组成,其中 7个按 8字型排列,另一个发光二极管为圆点形状,位于右下角,常用于显示小数点。把 8 个发光二极管连在一起,公共端接高电平,叫共阳极接法,相反,公共端接低电平的叫共阴极接法,我们采用共阳极接法。当发光二极管导通时,相应的一段笔画或点就发亮,从而形
22、成不同的发光字符。其 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(共阳极)。若要显示多个数字,只要让若干个数码管的位码循环为低电平就可以了。 根据设计要求,显示电路需要至少 4 位 LED 数码管来显示电压值,我们再多加一位用来显示电压单位“ V”,则有 7 位 LED 循环显示。利用单片机的 I/O 口驱动 LED 数码管的亮灭,设计中由 P0 口驱动 LED 的段码显示,即显示字符,由 P2 口选择 LED 位码,即选择点亮哪位 LED 来显示。电路如下: 图 1.4_1 另外,一般 I/O 接口芯片的驱动能力是很有限的,在 LED 显示器接口电路中,输出口所能提供的驱动电流一般是不够的尤其是设计中需要用到多位 LED,此时就需要增加 LED驱动电路。驱动电路有多种,常用的是 TTL 或 MOS 集成电路驱动器,在本设计中采用了74LS245 芯片驱动电路,如上图所示。 1.5 语音报读电路 1.5.1.语音芯片选择 近年来,语音电路发展极为迅速,在单片机系统中的应用越来越广。 设计中使用ISD1420 作为语音芯片。 美国信息存储器件的 ISD1420 语音芯片采用直接模拟存储技术,