高精度数字电压表
摘要
本文介绍的是数字电压表的发展背景和利用单片机和A/D转换芯片结合的方法设计一种直流数字电压表。它的具体功能是:最高量程为200V ,分三个档位量程,即2V ,20V ,200V ,可以通过调档开关来实现各个档位。当测得电压的数值小于1V 时,系统会自动的将电压数值转换为以mV 为电压单位的电压值。并且通过按键的方法能够测得后五秒的平均电压值。
本毕业设计的课题是“高精度数字电压表的设计”。主要是合理的结合A/D转换、数据处理及显示控制等三个模块,利用各自的性能及特点,完成电压的高精度测试。在设计中,控制系统采用的是AT89C52单片机,它是低电压、低功耗、高性能的CMOS8位单片机,片内含8KB 的可反复擦写的只读程序存储器和256B 的随机存取数据存储器。A/D转换器我们采用的是TLC2543这种型号的,TLC2543是TI 公司的12位串行模数转换器,使用开关电容逐次逼近技术完成A/D转换过程。由于是串行输入结构,能够节省单片机I/O资源;且价格适中,分辨率较高,因此在测试仪器仪表中有较为广泛的应用。
关键字介绍:单片机(A T89C52),A/D转换(TLC2543),数据处理,数字电压表。
目录
第一章数字电压表简介 . .............................................................................................. 2
1.1数字电压的设计两种方案简介.......................................................................................... 3
1.2由数字电路及芯片构建 .................................................................................................... 3
1.3由单片机系统及A/D转换芯片构建................................................................................... 4
第二章单片机简介及其选择 ..................................................................................... 5
2.1常用单片机的特点比较及本设计单片机的选择 ................................................................. 5
2.2本设计使用的单片机的简介 ............................................................................................. 5
2.3各种显示器件的介绍和选择 ............................................................................................. 7
2.3.1常用显示器件简介................................................................................................. 7
2.3.2 1602液晶的参数及LED 显示器的资料 . .................................................................. 8
2.4模数(A/D)转换芯片的选择 ......................................................................................... 13
2.5常用的A/D芯片简介...................................................................................................... 13
2.6模数(A/D)芯片TLC2543的资料 .................................................................................. 14
第三章
第四章总体设计 . .......................................................................................................... 16 硬件电路系统模块的设计 .......................................................................... 17 3.1技术要求 ....................................................................................................................... 16 3.2设计方案 ....................................................................................................................... 16
4.1单片机系统.................................................................................................................... 17
4.2 输入电路 ...................................................................................................................... 18
4.3 A/D转换芯片与单片机的连接........................................................................................ 18
4.4 1602液晶与单片机连接 ................................................................................................ 19
4.5键盘与单片机的连接如下............................................................................................... 20
第五章
第六章系统软件的设计 . ............................................................................................ 21 系统的调试 ...................................................................................................... 30 5.1汇编语言和C 语言的特点及选择 .................................................................................... 21 5.2主程序设计.................................................................................................................... 21
6.1软件调试 ....................................................................................................................... 30
第七章总结与展望 ...................................................................................................... 34 参考文献................................................................................................................................ 36
第一章 数字电压表简介
数字电压表出现在50年代初,60年代末发起来的电压测量仪表,简称DVM ,它采用的是数字化测量技术,把连续的模拟量,也就是连续的电压值转变为不连续的数字量,加以数字处理然后再通过显示器件显示。这种电子测量的仪表之所以出现,一方面是由于电子计算机的应用逐渐推广到系统的自动控制信实验研究的领域,提出了将各种被观察量或被控制量转换成数码的要求,即为了实时控制及数据处理的需要;另一方面,也是电子计算机的发展,带动了脉冲数字电路技术的进步,为数字化仪表的出现提供了条件。所以,数字化测理仪表的产生与发展与电子计算机的发展是密切相关的;同时,为革新电子测量中的烦锁和陈旧方式也催促了它的飞速发展,如今,它又成为向智能化仪表发展的必要桥梁。
如今,数字电压表已绝大部分已取代了传统的模拟指针式电压表。因为传统的模拟指针式电压表功能单一,精度低,读数的时候也非常不方便,很容易出错。而采用单片机的数字电压表由于测量精度高,速度快,读数时也非常的方便,抗干扰能力强,可扩展性强等优点已被广泛的应用于电子及电工的测量,工业自动化仪表,自动测试系统等智能化测量领域。显示出强大的生命力。
数字电压表最初是伺服步进电子管比较式,其优点是准确度比较高,但是采样速度慢,重量达几十公斤,体积大。继之出现了斜波式电压表,它的速度方面稍有提高,但是准确度低,稳定性差,再后来出现了比较式仪表改进逐次渐近式结构,它不仅保持了比较式准确度高的优点,而且速度也有了很大的提高,但它有一缺点是抗干扰能力差,很容易受到外界各种因素的影响。随后,在斜波式的基础上双引伸出阶梯波式,它的唯一的进步是成本降低了,可是准确宽,速以及抗干扰能力都未能提高。而现在,数字电压表的发展已经是非常的成熟,就原理来讲,它从原来的一,二种已发展到多种,在功能上讲,则从测单一参数发展到能测多种参数;从制作元件来看,发展到了集成电路,准确度已经有了很大的提高,精度高达1NV ;读数每秒几万次,而相对以前,它的价格也有了降低了很多。
目前实现电压数字化测量的方法仍然模-数(A/D)转换的方法。而数字电压表种类繁多,型号新异,目前国际仍未有统一的分类方法。而常用的分类方法有如下几种: 按用途来分:有直流数字电压表,交、直流数字电压表,交直流万用表等。
1、按显示位数来分:有4位,5位,6位,7位,8位等。
2、按测量准确度来分:有低准确度,中准确度,高准确度等。
3、按测量速度来分:有低速,中速,高速,超高速等。
但在日常生活中,数字电压表一般是按照原理不同进行分类的,目前大致分为以下几类:比较式,电压——时间变换式,积分式等。在电量的测量中,电压、电流和频率是最基本的三个被测量。其中,电压量的测量最为经常。而且随着电子技术的发展,更是经常需要测量高精度的电压,所以数字电压表就成为一种必不可少的测量仪器。另外,由于数字式仪器具有读数准确方便、精度高、误差小、灵敏度高和分辨率高、测量速度快等特点而倍受用户青睐,数字式电压表就是基于这种需求而发展起来的,是一种必不可少的电子测量仪表。
1.1数字电压的设计两种方案简介
设计数字电压表有多种的设计方法,方案是多种多样的,由于大规模集成电路数字芯片的高速发展,各种数字芯片品种多样,导致对模拟数据的采集部分的不一致性,进而又使对数据的处理及显示的方式的多样性。又由于在现实的工作生活中,电压表的测量测程范围是比较大的,所以必须要对输入电压作分压处理,而各个数据处理芯片的处理电压范围不同,则各种方案的分段也不同。下面介绍两种数字电压表的设计方案。
1.2由数字电路及芯片构建
这种设计方案是由模拟电路与数字电路两大部分组成,模拟部分包括输入放大器、A/D转换器和基准电压源;数字部分包括计数器、译码器、逻辑控制器、振荡器和显示器。其中,A/D转换器是它的核心器件,它将输入的模拟量转换成数字量。模拟电路和数字电路是相互联系的,由逻辑控制电路产生控制信号,按规定的时序将A/D转换器中个组模拟开关接通或断开,保证A/D转换正常进行。A/D转换结果通过计数译码电路变换成段码,最后驱动显示器显示出相应的数值。此方案设计其优点是,设计成本低,能够满足一般的电压测量。但设计不灵活,都是采用纯硬件电路。很难将其在原有的基础上进行扩展。
1.3由单片机系统及A/D转换芯片构建
这种方案是利用单片机系统与模数转换芯片、显示模块等的结合构建数字电压表。由于单片机的发展已经成熟,利用单片机系统的软硬件结合,可以组装出许多的应用电路来。此方案的原理是模数(A/D)转换芯片的基准电压端,被测量电压输入端分别输入基准电压和被测电压。模数(A/D)转换芯片将被测量电压输入端所采集到的模拟电压信号转换成相应的数字信号,然后通过对单片机系统进行软件编程,使单片机系统能按规定的时序来采集这些数字信号,通过一定的算法计算出被测量电压的值。最后单片机系统将计算好了的被测电压值按一定的时序送入显示电路模块加以显示。
此方案不仅能够继承上一种方案的各种优点,还能改进上一种设计方案设计不灵活,难与在原基础上进行功能扩展等不足。
第二章 单片机简介及其选择
2.1常用单片机的特点比较及本设计单片机的选择
综合上一章提到的两种设计方案的各方面优点及其在现在的所设计电压表的实用性,我们选择第二种电压表设计方案,即由单片机系统及数字芯片构建的方法来进行我们本次的设计。
在这一设计中,我们涉及到了一个关键系统模块——单片机系统模块,而目前单片机的种类是很繁多的,主要有主流的8位单片机和高性能的32位单片机,结合本设计各方面因素,8位单片机对于本设计已经是绰绰有余了,但将用哪一种类的8位单片机呢。在这里,不得不先简单的介绍一下几种常用的8位单片机。
单片机是指一个集成在一块芯片上的完整计算机系统,具有一个完整计算机所需要的大部分部件:CPU ,内存,总线系统等。而目前常用的8位单片机有51系列单片机,A VR 单片机,PIC 单片机。
应用最广的8位单片机还是Intel 的51系列单片机。51系列单片机的特点是:硬件结构合理,指令系统规范,加之生产历史悠久,世界有许多芯片公司都买了51的芯片核心专利技术,并在其基础上扩充其性能,使得芯片的运行速度变得更快,性价比更高。
A VR 单片机是atmel 公司推出较新的单片机,它的显著特点是:高性能,低功能,高速度,指令单周期为主,但性格方面比51单片机要高。有专门的I/O方向寄存器。虽然有转强的驱动电压,但I/O口使用不比51单片机方便。
PIC 单片机系列是美国微芯公司的产品,也是市面上增长最快的单片机之一,属精简指令集单片机,其特点是:高速度,高性能,但在性格方面比51单片机要高,也有专门的I/O方向寄存器,I/O口使用不比51单片机方便。
综合以上各种单片机的基本性能及本设计的满足需要,我们将选择51系列单片机。
2.2本设计使用的单片机的简介
本设计中选用的是51系列中的AT89C52,它是低电压、低功耗、高性能的CMOS 8位单片机,片内含8KB 的可反复擦写的只读程序存储器和256B 的随机存取数据存储器,32个I/O口线,3个16位定时/计数器,片内振荡器及时钟电路,并与MCS-51系列单片机兼容。在设计中,单片机起着连接硬件电路与程序运行及存储数据的任务,一方面,
它将A/D转换器、显示器和语音芯片等通过I/O口地址线和数据线连接起来;另一方面,它将用户下载的程序通过控制总线控制数据的输入输出,从而实现删电压的功能. 如下图
2.2所示。
图2.2单片机芯片引脚图
1、主电源引脚
Vss-(20脚) :地线
Vcc-(40脚) :+5V电源
2、外接晶振或外部振荡器引脚
XTAL1-(19脚) :当采用芯片内部时钟信号时,接外部晶振的一个引脚;当采用外部时钟信号时,此脚应接地。
XTAL1-(18脚) :当采用芯片内部时钟信号时,接外部晶振的一个引脚;当采用外部时钟信号时,外部信号由此脚输入。
3、控制、选通或电源复用引脚
RST/Vp0-(9脚) :复位信号输入;Vcc 掉电后,此脚可接上备用电源,在低功耗条件下保持内部RAM 中的数据。
ALE/PROG-(30脚) :ALE 即允许地址锁存信号输出,当单片机访问外部存储器时该脚的输出信号用于锁存P0的低8位地址,其输出的频率为时钟振荡频率的1/6。PROG 为编程脉冲输入端,当选用8751单片机时,由此脚输入编程脉冲。
/PSEN-(29脚) :访问外部程序存储器选通信号,低电平有效,用于实现外部程序存储器的读操作。
/EA/Vpp-(31脚) :EA 为访问内部或外部程序存储器选择信号,EA=0,单片机只访问外部程序存储器,故对8031此脚只能接地;EA =1,单片机访问内部程序存储器,固对8051和8751此脚应接高电平,但若程序指针PC 值超过4KB(OFFFH)范围,单片机将自动访问外部程序存储器。
4、多功能I/O引脚
P0口-(32~39脚) :P0数据/地址复用总线端口。
P1口-(1~8脚) :P1静态通用端口。
P2口-(21~28脚) :P2动态端口。
P3口-(10~17脚) :P3双功能静态端口。除作I/O端口外,它还提供特殊的第二功能,其具体含义为:
P3.0-(10脚)RXD :串行数据接收端。
P3.1-(11脚)TXD :串行数据发送端。
P3.2-(12脚)INT0:外部中断0请求端,低电平有效。
P3.3-(13脚)INT1:外部中断1请求端,低电平有效。
P3.4-(14脚)T0:定时器/计数器0计数输入端。
P3.5-(15脚)T1:定时器/计数器1计数输入端。
P3.6-(16脚)WR :外部数据存储器写选通,低电平有效。
P3.7-(17脚)RD :外部数据存储器读选通,低电平有效。
2.3各种显示器件的介绍和选择
2.3.1常用显示器件简介
本次设计中有显示模块,而常用的显示器件比较多,有数码管,LED 点阵,6位LED 动态显示器,1602液晶,12864液晶等。
数码管是最常用的一种显示器件,它是由几个发光二极管组成的8字段显示器件,其特点是价格非常的便宜,使用也非常的方便,显示效果非常的清楚。小电流下可以驱动发光,发光响应时间极短,体积小,重量轻,抗冲击性能好,寿命长。但数码管只能是显示0——9的数据。不能够显示字符。这也是数码管的不足之处。
LED 点阵显示器件是由好多个发光二极管组成的。具有高亮度,功耗低,视角大,寿命长,耐湿,冷,热等特点,LED 点阵显示器件可以显示数字,英文字符,中文字符等。但用LED 点阵显示的软件程序设计比较麻烦。
LED 显示器在单片机应用系统中使用非常广泛,其显示的内容一般是数码和某些字符,这种显示器成本低,配置灵活,与单片机连接方便。具有显示清晰、亮度高,使用电压低,寿命长的特点。
LED 显示器有共阴极和共阳极两种结构,在共阴极结构中,各段发光二极管的阴极连在一起。当将此公共点接地,某一段发光二极管的阳极为高电平时,该段发光。在共阳极结构中,各段发光二极管的阳极连在一起。当将此公共点接+5V,某一段发光二极
管的阴极为低电平时,该段发光。
1602液晶是工业字符型液晶,能够同时显示16*2即32个字符。1602液晶模块内部的字符发生存储器已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码。使用时直接编写软件程序按一定的时序驱动即可。它的特点是显示字迹清楚,价格相对便宜。
12864液晶也是一种工业字符型液晶,它不仅能够显示1602液晶所可以显示的字符,数字等信息,而且还可以显示8*4个中文汉字和一些简单的图片,显示信息也非常的清楚。使用时也直接编写软件程序按一定的时序驱动即可。不过它的价格比1602液晶贵了很多。
在本设计中,我们只需要显示最后电压的数字值和电压的单位,综合上面各种显示器件的特点:数码管只能显示数字,不能显示单位字符,不符合本设计的要求。而点阵显示器件驱动显示软件程序编写麻烦,占用的引脚相对也较多。也不是理想的显示器件。所以在本设计中,我们考虑用液晶显示器件,虽然12864液晶比1602液晶的功能强,不过在价格方面却贵了好多。而1602液晶也足够满足本设计的需要。因此,在本设计实验中我们选择1602液晶显示器件。
2.3.2 1602液晶的参数及LED 显示器的资料
我们选择了1602液晶或LED 显示为此次设计的显示器件,以下是1602液晶的一些资料。
1、接口信号说明如(下表2-1)所示:
2、基本操作时序: ① 读状态:输入:RS=0,RW=1,E=1。输出:D0-D7为状态字
②写状态:输入:RS=0,RW=0,D0-D7为指令码,E 为高脉冲。输出:无 ③读数据:输入:RS=1,RW=1,E=1。输出:D0-D7为数据。
④写数据:输入:RS=1,RW=0,D0-D7为数据,E 为高脉冲。输出:无
3、状态字说明如(下表2-2)所示:
4、指令的说明
显示模式设置如(下表2-3)所示:
显示开/关及光标设置如(下表2-4)所示:
数据控制如(下表2-5)所示:
5、LED 显示器件的资料如下:
1、LED 显示器结构及工作原理
LED 显示器是由发光二极管作为显示字段的数码显示器件,其中七个发光二极管(a-g 七段)构成字形“8”,另外还有一个发光二极管dp 作为小数点。因此这种LED 显示器称为七段数码管显示器或八段数码管显示器。
当显示器的莫一段发光二极管通电时,该段发光。人为控制某几段发光二极管通电,就能显示出某个数码或字符。例如,使b 、c 、f 、g 这4段发光二极管通电,显示出数码“4”:使a 、b 、e 、f 、g 这5段发光二极管通电,则显示字符“P”。
LED 显示器有共阴极和共阳极两种结构,在共阴极结构中,各段发光二极管的阴极连在一起。当将此公共点接地,某一段发光二极管的阳为高电平时,该段发光。在共阳极结构中,各段发光二极管的阳极连在一起。当将此公共点接+5V,某一段发光二极管的阴极为低电平时,该段发光。(如下图2.4所示)
发光二极管的阳极连在一起的称为共阳级显示器,阴极连在一起的为共阴极显示器。
(如下图2.5所示)
2、段码
当LED 显示器与单片机连接时,一般是将LED 各发光二极管的引脚a,b,...,g,dp 顺序接到单片机的一个并行I/O口D0,D1,…,D6,D7。当从这个I/O口引脚输出某个特定的数据时,就能使LED 显示器显示出某个字符,例如要使共阴极LED 显示字符“0”,则要求a 、b 、c 、d 、e 、f 各引脚为高电平,g 和dp 低电平,I/O口线输出的8位数据与对应的显示段位如下表2-6所示
表2-6显示位与段码对照表
不计小数点的字段码称为七段码,包括小数点的段码称为八段码,如下表2-7所示为共阴极LED 和共阳极LED 显示不同字符的字段码,此表为七段码。共阴极LED 和共阳极LED 的字段吗互为反码。
3、软件译码LED 显示器接口
实际使用的LED 显示器通常有多位,多位LED 的控制包括字段码控制(显示什么字符)和字位控制(哪位或哪几位亮)。N 位LED 显示器包括8*N根字段控制线和N 根字位控制线。
由LED 显示原理可知,要使N 位LED 显示器的某一位显示出某个字符,必须要将此字符转换为相应的字段码,同时进行字位的控制,这要通过一定的接口来实现。N 位LED 显示器的接口形式与字段、字位控制线的译码方式以及LED 显示方式有关。字段、字位控制线的译码方式有软件译码和硬件译码两种(硬件译码可以化简程序,减少依赖CPU :而软件译码则能充分发挥CPU 功能,简化硬件装置),下面介绍软件译码方式,LED 显示方式有静态显示和动态显示两种。而本设计我们采用动态显示。
当LED 显示器位数较多时,为了简化电路,降低成本,将所有的字段线对应并联,由一个8位I/O口控制,而共阴极点或共阳极点另由相应的I./O口线控制。每一个时刻只选通其中的一个LED ,同时在段选口送出该位LED 的字型码,并保持一段延时时间,然后选通下一位,直到所有为扫描完。这样用两个8位I/O口能控制8位LED 显示器。图为附录一6位LED 动态显示电路。
图中6位LED 动态显示电路由8255的2个8位I/O口控制。PB 口经过驱动器后作
为6位动态显示电路LED 的字段线,称为字段码口。PA 口经过驱动器后作为LED 的字位线,称为字位码口。由于6位LED 的字段码都由一个I/O口控制,因此,如果其字位控制允许各位LED 都导通,则6位LED 只能显示相同的字符。要想每一位显示不同的字符,必须采用扫描显示方式。即在一瞬间,只让某一位的字位线处于选通状态(共阴极的为低电平,共阳极的为高电平), 其他各位的字位线处于断开状态;同时字段线上的输出相应的位要显示字符的字段码。这样在每一个瞬间时,6位LED 中只有选通的那一位LED 显示出字符,而其他5位则是熄灭的。同样,在下一个瞬时,只显示下一位LED 。如此继续,等6位LED 都依次显示完毕后,循环进行。虽然这些字符时再不同的瞬时轮流显示的字符。
注意由于子位码口的驱动器是反相器,因此8255的PA 口送出的应为其反码。图中的LED 是共阴极结构。如果LED 的显示是从最左位开始,逐位向右,则字位码的变化是依次右移。
2.4模数(A/D)转换芯片的选择
在本设计中,模数(A/D)转换模块是一个重要的模块,它关系到最后数电压表电压值的精确度。所以,A/D芯片的选择是设计过程中一个很重要的环节。
2.5常用的A/D芯片简介
常用的A/D芯片有ADC0809,ADC0832,TLC2543C 等几种。下面简单介绍一下这三种芯片。
ADC0809是8位逐次逼近型A/D转换器,它是由一个8路的模拟开关、一个地址锁存译码器、一个A/D 转换器和一个三态输出锁存器组成。多路开关可选通8个模拟通道,允许8 路模拟量分时输入,共用A/D 转换器进行转换。些A/D转换器是的特点是8位精度,属于并行口,如果输入的模拟量变化大快,必须在输入之前增加采样电路。
ADC0832也是8位逐次逼近型A/D转换器,可支持致命伤个单端输入通道和一个差分输入通道。它易于和微处理器接口或独立使用;可满量程工作;可用地址逻辑多路器选通各输入通道。
TLC2543C 是12位开关电容逐次逼近A/D转换,每个器件有三个控制输入端,
片选,输入/输出时钟以及地址输入端。它可以从主机高速传输转换数据。它有高速的转换,通用的控制能力,具有简化比率转换,刻度以及模拟电路与逻辑电路和电源噪声隔离,耐高温等特点。
综合上述几种A/D转换芯片的特点,前两种芯片的性能和精度都不如第三种芯片。在本设计中,我们的目标是设计高精度的电压表,因此在此,我们选择精度为12位的TLC2543芯片。
2.6模数(A/D)芯片TLC2543的资料
综合本设计的各方面考虑,我们选了TLC2543模数转换芯片。下面就介绍此芯片的各方面资料。
TLC2543芯片的封装引脚图和引脚说明如下图(2.6)所示:
图2.6
引脚说明如(下表2-6) 所示:
各引脚的使用详细介绍。
1、AIN0-AIN10这11个模拟信号输入由内部多路选器选择。对4.1MHZ 的I/O clk ,驱动源阻抗必须小于或等于50欧并且能够将模拟电压由60PF 的电容来限制其斜率。 2、在CS 端的一个由高低低变化将复位内部计数器并控制使能data out,data input 和I/O clk 。一个由低至高的变化将在一个设置时间内禁止data input和I/O clk.
3、串行数据输入端data input是一个4位的串行地址选择下一个即将被转换的所需的模拟输入或测试电压。串行数据以MSB 为前导并在I/O clk 的前4个上升沿被移入。在4个地址位被读入地址寄存器后,I/O clk 将剩下的几位依次输入。
4、Data out在CS 为高时处于高阻抗状态,而当CS 为低时处于激活状态。CS 一旦有效,按照前一次转换结果的MSB/LSB值将data out从高阻抗状态转变成相应的逻辑电平,I/O clk 的下一个下降沿将根据下一个MSB/LSB将data out驱动成相应的逻辑电平,剩下的各位依次移出。
5、EOC 在最后的I/O clk 下降沿之后,从高电平变为低电平并保持低直到转换完成及数据准备传输。
6、GND 端是内部电路的地回路端,除加有说明外,所有电压测量都相对于GND 7、I/O clk端串行输入并完成以下四个功能:第一,在I/O clk的前8个上升沿,它将8个输入数据信键入输入数据寄存器。在第4个上升沿之后为多路器的地址。第二,在I/O clk 的第4个下降沿,在选定的多路器的输入端上的模拟输入电压开始和电容器充电并继续到I/O clk的最后一个下降沿。第三,它将前一次转换的数据的其余11位移出data out端。在I/O clk的下降沿时数据变化。第四,在I/O clk的最后一个下降沿它将转换的控制信号传送到内部的状态控制位,REF-端通常接地。
8、REF+端通常接VCC ,最大输入电压范围取决于加于本端与加于REF-端的电压差。
第三章 总体设计
3.1技术要求
1、最高量程为:200V 。
2、分为三档量程:2V ,20V ,200V 。可以通过调档开关实现各档位。最高精度为0.01mv 。 3、被测电压的电压值小于1V 时,有自动换以MV 为单位显示。 4、通过按键可以显示5秒的平均电压的电压值。
3.2设计方案
根据上述,我们选择单片机与A/D转换芯片结合的方法实现本设计。使用的基本元器件是:AT89C51单片机,TLC2543模数转换芯片,1602液晶显示器,开关,按键,电容,电阻,晶振,标准电源等等。 设计的基本框图如下:
第四章 硬件电路系统模块的设计
根据上述选择的各元器件,各电路模块的电路图如下描述。
4.1单片机系统
单片机最小系统包括晶振电路,复位电路,电源。其原理图如下图4-1:
图4-1
此模块中,单片机的晶振是12MHZ ,C1和C2的电容是30UF ,C3可选30-60UF 。R1电阻为1K 。
4.2 输入电路
由于输入电路的电压比基准电压(2V )高很多,因此在输入电路必须加电压衰减器。衰减电路可由开关来选择不同的衰减率,从而切换档位。 则完整输入电路如下图4-2:
图4-2
通过计算,可知设计衰减器用的电阻R2,R3和R4分别为:9M ,900K ,100K 控制档位的开关是双开关的,目地是能够使单片机CPU 自动识别档位,即可用相应的档位的数据转换的算法计算出正确的电压值。被测电压输入端、整理过的模拟电压输入端,开关与单片机的连接如图所示。
4.3 A/D转换芯片与单片机的连接
此设计中选择的是A/D转换芯片的通道0,A/D芯片的数据输入口连接单片机的P1.3口,数据输出口连接单片机的P1.4口,芯片使能端连接单片机的P1.5口,脉冲端连接单片机的P1.6口。模块连接如下图4-3所示。
图4-3
4.4 1602液晶与单片机连接
此模块液晶的RS ,RW 和E 端分别连接单片机的P1.2,P1.1和P1.0口;液晶的数据各端口连接单片机的P0口。具体如下图4-4所示。
图4-4
4.5键盘与单片机的连接如下
此键盘的一端与单片机的P2.0口连接,另一端接地。原理图如下图4-5所示。
图4-5
该键盘的功能:当键盘被按下时,即可计算后5秒的平均电压值。
第五章 系统软件的设计
5.1汇编语言和C 语言的特点及选择
本设计是硬件电路和软件编程相结合的设计方案,选择合适的编程语言是一个重要的环节。在单片机的应用系统程序设计时,常用的是汇编语言和C 语言。汇编语言的特点是占用内存单元少,执行效率高。执行速度快。但它依赖于计算机硬件,程序可读性和可移植性比较差。而C 语言虽然执行效率没有汇编语言高,但语言简洁,使用方便,灵活,运算丰富,表达化类型多样化,数据结构类型丰富,具有结构化的控制语句,程序设计自由度大,有很好的可重用性,可移植性等特点。
由于现在单片机的发展已经达到了很高的水平,内部的各种资源相当的丰富,CPU 的处理速度非常的快。用C 语言来控制单片机无疑是一个理想的选择。所以在本设计中采用C 语言编写软件程序。
5.2主程序设计
主程序设计包括以下方面: 1 、主程序的总体流程如下图:
2、按照硬件电路对单片机位定义。 #include #define uchar unsigned char #define uint unsigned int
#define key_state0 0 //键盘扫描的各个状态 #define key_state1 1 #define key_state2 2 #define key_state3 3
sbit rs=P1^2;//1602液晶写命令/数据标志,0时写命令 sbit rw=P1^1;//1602液晶写入/读出标志,0时写入数据sbit ep=P1^0; sbit input=P1^4; sbit output=P1^3; sbit cs=P1^5; sbit clk=P1^6; sbit key=P2^0;
sbit flag_1=P2^1;//定义电压表档位相关标志 sbit flag_2=P2^2; sbit flag_3=P2^3; sbit flag_4=P2^4;
uchar code tab0[]="V "; //显示的单位及有关的字符 uchar code tab1[]="MV"; uchar code tab2[]="Power:";
uchar code tab3[]="Aver_V:";//平均电压值标志符 uchar t;
void delay(int z)//延时函数 { int x,y; for(x=z;x>0;x--) for(y=10;y>0;y--);
}
void write_com(uchar com)//往1602液晶写命令函数 { rs=0; P0=com; delay(5); ep=1; delay(5); ep=0; }
void write_dat(uchar dat)//往1602液晶写数据函数 { rs=1;
P0=dat; delay(5); ep=1; delay(5); ep=0; }
3、编写延时模块程序。
void init_1602()//对1602液晶的初始化函数 { rs=0;
rw=0;
write_com(0x38); delay(1); write_com(0x0c); delay(1); write_com(0x06); delay(1); write_com(0x01);
delay(1); }
void init_timer0()//定时计数器0初值化函数, {
TMOD=0x01;//方式一
TH0=(65536-50000)/256;//每50ms 中断一次 TL0=(65536-50000)%256; IE=0x82;//打开中断
TR0=0;//定时器首先不可工作 }
4、编写驱动1602液晶显示模块程序。
void display(uchar x,uchar y,uint dat)//显示电压值的函数,x 行y 列开始显示{ uint add; uchar i,a[5]; switch(x) {
case 0:add=0x80;break;
case 1:add=0x80+0x40;break; }
add=add+y; write_com(add); for(i=0;i
a[i]=dat%10; dat=dat/10; }
write_dat(a[4]+0x30);
write_dat(a[3]+0x30); write_dat(a[2]+0x30); write_dat('.'); write_dat(a[1]+0x30); write_dat(a[0]+0x30); }
void display_zifu(uchar x,uchar y,uchar *str)//显示字符函数,x 行y 列开始显示{ uint add; switch(x) {
case 0:add=0x80;break; case 1:add=0x80+0x40;break; }
add=add+y; write_com(add); while(*str!='\0') {
write_dat(*str); str++; } }
uint read_AD(uchar con_way)//读取AD 转换值操作函数 { uint dat=0; uchar i; cs=0; clk=0; con_way
5、编写驱动A/D转换模块程序。 for(i=0;i
con_way
if(output)/*输出AD 转换结果*/ dat=dat|0x01; delay(2); clk=1; delay(5); clk=0; } cs=1; return dat; }
uint read_value() {
long float dq; long float dat_v;
dq=read_AD(0);//把读取得的AD 转换值给变量dq if(!flag_3)
dat_v=(200*dq)/4096*100;//二档, 量程为200V else if(!flag_2)
dat_v=(20*dq)/4096*100;//二档,量程为20V else if(!flag_1)
dat_v=(2*dq)/4096*100;//一档, 量程2V
return dat_v; }
6、编写键盘扫描模块程序。 void read_key()//键盘扫描函数 {
static uchar key_state=0;
switch(key_state) {
case key_state0: if(key==0)
key_state=key_state1; break;
case key_state1: if(key==0) { TR0=1;
display_zifu(1,0,tab3); key_state=key_state2; } else
key_state=key_state0; break;
case key_state2: if(key)
key_state=key_state0; break; } }
void main() {
long float dat;
long float dat_aver,dat1,dat2,dat3,dat4,dat5;//定义5个随机电压值变量uchar flag;//后五秒取随机电压的标志
init_timer0(); init_1602(); delay(10); while(1) {
dat=read_value();
if(dat>=100)//当电压值大于1V 时, 用V 显示, 否则用mV 显示 {
display_zifu(0,1,tab2); display(0,7,dat); display_zifu(0,13,tab0); } else {
display_zifu(0,1,tab2); display(0,7,dat*1000); display_zifu(0,13,tab1); }
read_key(); //当键盘按下时,计算后五秒的平均电压值 if(t==20) { t=0; flag++; }
if(flag==1)
dat1=dat; if(flag==2) dat2=dat; if(flag==3) dat3=dat; if(flag==4) dat4=dat;
if(flag==5)
{
dat5=dat;
dat_aver=(dat1+dat2+dat3+dat4+dat5)/5; display(1,7,dat_aver); display_zifu(1,13,tab0); dat_aver=0; }
if(flag==8) { flag=0;
write_com(0x01); TR0=0; } } }
void timer0() interrupt 1//定时器中断函数 { TH0=(65536-50000)/256;//重新放入初始值 TL0=(65536-50000)%256; t++;
}
第六章 系统的调试
完成了系统的硬件设计,制作和软件编程之后,要使系统能够按设计意图正
常运行,必须进行系统调试。调试分了硬件和软件调试。
6.1软件调试
软件调试的任务是利用开发工具进行在线仿真调试,发现和纠正程序的错
误,同时也能发现硬件的故障。软件调试是一个模块一个模块进行的。首先单独
调试各子程序是否能够按照预期的功能,接口电路的控制是否正常。最后调试整
个程序。尤其注意的是各模块间能否正确的传递参数。
1、检查液晶显示模块程序。在主程序中调用display()和dislay_zifu()函数,观察
在1602液晶上是否能够显示相应的字符。如果不能,则在相关的子程序中设计
断点,反复调试直到能够显示。
2、检查按键模块程序。本设计的按键模块程序是用状态机的方法,可以在
key_state1状态下加一个任务,如显示一个字符在液晶上。观察是否正确显示。
3、检查A/D转换模块程序。可以在硬件电路的输入端输入已知的几个电压,分
别观察液晶上是否显示相应的电压值。
4、检查数据的转换模块程序。可以拨动硬件电路的档位开关,输入相应的电压,
观察液晶显示的电压值是否一致。如果一致。则数据转换的算法正确的。
5、总调试。当相应的各模块环节都正确后,可程序下载到单片机。接上电源运
行。再检查所有功能,观察是否能预期的一样。如果一样,说明设计成功完成。
6、程序检测如下图6-1到6-6所示。
图6-1
图6-2
图6-3
第七章 总结与展望
由于本设计使用的是高效的51系列单片机作为核心的测量系统,以及高精
度,高速度,高抗干扰的A/D转换器。使得本直流电压表具体精度高,灵敏度
强,性能可靠,电路简单,成本低的特点。因为平时所需要测量的被测电压的电
压值不是一个定值,多多少少都有一些微小的变化。因此本设计为之增加了可测
5秒内平均电压的电压值。大大的提高了测量的准确性。使直流电压表有着较高
的智能水平。
此设计是单片机应用系统的开发性实验。通过此设计可知在单片机系统开发
过程应注意以下事项。
1. 硬件的选择。选择适合设计目地的元器件是一个重要的方设计环节。不能
以元器件是否是最高性能作为选择元器件的标准。往往高性能器件的价格也是较
高的。应根据项目设计的需要选择元器件,能够满足设计需要作为标准选择元器
件。
2. 因为单片机系统设计是硬件和软件相结合的设计,所以系统和硬件和软件
必须紧密配合,协调一致。应不断调整硬软件设计,以提高系统工作效率。
单片机的应用如今已经是在工业,电子等方面展示出了它的优越性,利用单
片机在设计电路逐渐成了趋势,它与外围电路再加上软件程序就可以构建任意的
产品,使得本设计成为现实。随着单片机的日益发展,它必将在未来显示出更大
的活力,为电子设计更多精彩。对于数字电压表而言,功能将会越来越强大。
本设计以AT89C51单片机为控制核心,通过集成摸数转换芯片TLC2543C
将被测信号转换成数字信号,经单片机内部程序处理后,由液晶显示器LCD1602
或6位LED 动态显示器显示测量结果。
仿真测试表明,系统性能良好,测量读数稳定易读、更新速度合理,直流电
压测量范围为0~200V ,最小分辨率为0.01V ,满足任务书指标要求。但是,该
系统也存在一定程度的不足,例如:
1、输入电压易发生干扰不稳定,且驱动能力可能存在不足,需在被测信号的
输入端加上一部分驱动电路,比如将量程转换电路改成带放大能力的自动量程转
换电路,将幅值较小的信号经适当放大后再测量,可显著提高精度;
2、输出量可用平均值算法来改善,使测量准确度更高。
3、若能将测量的电压值实时保存,使用时将更方便。
4、ADC0808可实现对8个通道的输入信号轮流转换,本设计仅仅使用了其中
一个通道,造成了较大的资源浪费。若能对电路稍加改进,实现对多路信号的轮
流测量并自动保存相应结果,其应用价值将会更大。
由于使用的是高效单片机作为核心的测量系统,以及灵敏度和精度较高的
A/D转换器,使本直流电压表具有精度高、灵敏度强、性能可靠、电路简单、成
本低的特点,加上经过优化的程序,使其有很高的智能化水平。
单片机的应用如今已经在工业、电子等方方面面展示出了它的优越性,利用
单片机在设计电路逐渐成了趋势,它与外围的简单电路再加上优化程序就可以构
建任意的产品,使得本设计成为现实。随着单片机的日益发展,它必将在未来显
示出更大的活力,为电子设计增加更多精彩。
经过半年的忙碌和工作,本次毕业设计已经接近尾声,作为一个大专生的毕业
设计,由于经验的匮乏,难免有许多考虑不周全的地方,如果没有导师的督促
指导,以及一起工作的同学们的支持,想要完成这个设计是难以想象的。 在这
里首先要感谢我的导师贺力克老师。贺老师平日里工作繁多,但在我做毕业设
计的每个阶段,从查阅资料到设计草案的确定和修改,中期检查,后期详细设
计,装配草图等整个过程中都给予了我悉心的指导。我的设计较为复杂烦琐,
但是贺老师仍然细心地纠正图纸中的错误。除了敬佩贺老师的专业水平外,他
的治学严谨和科学研究的精神也是我永远学习的榜样,并将积极影响我今后的
学习和工作。 其次要感谢我的同学对我无私的帮助,特别是在软件的使用方面,
正因为如此我才能顺利的完成设计,我要感谢我的母校——湖南工业职业技术
学院,是母校给我们提供了优良的学习环境;另外,我还要感谢那些曾给我授过
课的每一位老师,是你们教会我专业知识。在此,我再说一次谢谢!谢谢大家!!!。
参考文献
2)周立功. 单片机实验与实践. 北京:北京航空航天大学出版社.
3)吴国经. 单片机应用技术. 北京:中国电力出版社,2003.
4)阎石. 数字电子技术基础. 北京:高等教育出版社,2006
5)谭浩强.C 程序设计. 北京:清华大学出版社,2005年.
6)侯振鹏. 嵌入式C 语言程序设计. 北京:人民邮电出版社,2006.
7)李光飞 李良儿. 单片机C 程序设计. 北京:北京航空航天大学出版社,2005
8)王港元. 电工电子实践指导. 江西:江西科学技术出版社,2005年
9)徐仁贵. 《单片微型计算机应用技术》. 机械工业出版社,2001年.
10)张凯. 《MCS-51单片机综合系统及设计开发》. 科学出版社,1996年.
11)吴国经. 《单片机应用技术》. 中国电力出版社,2004年.
14)董少明. 《单片机原理及应用》. 中国铁道出版社,2007年.
15)梅丽凤. 《单片机原理及接口技术》. 清华大学出版社,2004年.
16)余永全. 《FLASH 单片机原理及应用》. 电子工业出版社,1997年.
1)陈洪中。数字电压表。水利电力出版社,1989