数字电压表的设计与仿真毕业论文.docx
《数字电压表的设计与仿真毕业论文.docx》由会员分享,可在线阅读,更多相关《数字电压表的设计与仿真毕业论文.docx(33页珍藏版)》请在冰豆网上搜索。
数字电压表的设计与仿真毕业论文
数字电压表的设计与仿真毕业论文
1数字电压表简介
数字电压表出现在50年代初,60年代末发起来的电压测量仪表,简称DVM,它采用的是数字化测量技术,把连续的模拟量,也就是连续的电压值转变为不连续的数字量,加以数字处理然后再通过显示器件显示。
这种电子测量的仪表之所以出现,一方面是由于电子计算机的应用逐渐推广到系统的自动控制的领域,提出了将各种被观察量或被控制量转换成数码的要求,即为了实时控制与数据处理的需要[3],也是电子计算机的发展,带动了脉冲数字电路技术的进步,为数字化仪表的出现提供了条件。
所以,数字化测量仪表的产生与发展与电子计算机的发展是密切相关的;同时,为革新电子测量中的繁琐和旧方式也催促了它的飞速发展,如今,它又成为向智能化仪表发展的必要桥梁。
如今,数字电压表已绝大部分已取代了传统的模拟指针式电压表。
因为传统的模拟指针式电压表功能单一,精度低,读数的时候也非常不方便,很容易出错。
而采用单片机的数字电压表由于测量精度高,速度快,读数时也非常的方便,抗干扰能力强,可扩展性强等优点已被广泛的应用于电子与电工的测量,工业自动化仪表,自动测试系统等智能化测量领域[7]。
显示出强大的生命力。
数字电压表最初是伺服步进电子管比较式,其优点是准确度比较高,但是采样速度慢,重量达几十公斤,体积大。
继之出现了斜坡式电压表,它的速度方面稍有提高,但是准确度低,稳定性差,再后来出现了比较式仪表改进逐次渐近式结构,它不仅保持了比较式准确度高的优点,而且速度也有了很大的提高,但它有一缺点是抗干扰能力差,很容易受到外界各种因素的影响。
随后,在斜波式的基础上双引伸出阶梯波式,它的唯一的进步是成本降低了,可是准确宽,速以与抗干扰能力都未能提高。
而现在,数字电压表的发展已经是非常的成熟,就原理来讲,它从原来的一、二种已发展到多种,在功能上讲,则测单一参数发展到能测多种参数;从制作元件来看,发展到了集成电路,准确度已经有了很大的提高,精度高达1NV;读数每秒几万次,而相对以前,它的价格也有了降低了很多[1]。
目前实现电压数字化测量的方法仍然模-数(A/D)转换的方法[8]。
而数字电压表种类繁多,型号新异,目前国际仍未有统一的分类方法。
而常用的分类方法有如下几种[11]:
1.按用途来分:
有直流数字电压表,交、直流数字电压表,交直流万用表等。
2.按显示位数来分:
有4位,5位,6位,7位,8位等。
3.按测量速度来分:
有低准确度,中准确度,高准确度等。
4.按测量速度来分:
有低速,中速,高速,超高速等。
但在日常生活中,数字电压表一般是按照原理不同进行分类的,目前大致分为以下几类:
比较式,电压——时间变换式,积分式等。
在电量的测量中,电压、电流和频率是最基本的三个被测量。
其中,电压量的测量最为经常。
而且随着电子技术的发展,更是经常需要测量高精度的电压,所以数字电压表就成为一种必不可少的测量仪器。
另外,由于数字式仪器具有读数准确方便、精度高、误差小、灵敏度高和分辨率高、测量速度快等特点而倍受用户青睐,数字式电压表就是基于这种需求而发展起来的,是一种必不可少的电子测量仪表[15]。
2设计方案
设计数字电压表有多种的设计方法,方案是多种多样的,由于大规模集成电路数字芯片的高速发展,各种数字芯片品种多样,导致对模拟数据的采集部分的不一致性,进而又使对数据的处理与显示的方式的多样性。
又由于在现实的工作生活中,电压表的测量测程围是比较大的,所以必须要对输入电压作分压处理,而各个数据处理芯片的处理电压围不同,则各种方案的分段也不同。
下面介绍两种数字电压表的设计方案。
2.1由数字电路与芯片构建
这种设计方案是由模拟电路与数字电路两大部分组成,模拟部分包括输入放大器、A/D转换器和基准电压源;数字部分包括计数器、译码器、逻辑控制器、振荡器和显示器。
其中,A/D转换器是它的核心器件,它将输入的模拟量转换成数字量。
模拟电路和数字电路是相互联系的,由逻辑控制电路产生控制信号,按规定的时序将A/D转换器中个组模拟开关接通或断开,保证A/D转换正常进行。
A/D转换结果通过计数译码电路变换成段码,最后驱动显示器显示出相应的数值。
此方案设计其优点是,设计成本低,能够满足一般的电压测量。
但设计不灵活,都是采用纯硬件电路。
很难将其在原有的基础上进行扩展。
2.2由单片机系统与A/D转换芯片构建
这种方案是利用单片机系统与模数转换芯片、显示模块等的结合构建数字电压表。
由于单片机的发展已经成熟,利用单片机系统的软硬件结合,可以组装出许多的应用电路来。
此方案的原理是模数(A/D)转换芯片的基准电压端,被测量电压输入端分别输入基准电压和被测电压。
模数(A/D)转换芯片将被测量电压输入端所采集到的模拟电压信号转换成相应的数字信号,然后通过对单片机系统进行软件编程,使单片机系统能按规定的时序来采集这些数字信号,通过一定的算法计算出被测量电压的值[4]。
最后单片机系统将计算好了的被测电压值按一定的时序送入显示电路模块加以显示。
此方案不仅能够继承上一种方案的各种优点,还能改进上一种设计方案设计不灵活,难与在原基础上进行功能扩展等不足。
3元件的选取
3.1单片机简介与本设计单片机的选择
3.1.1常用单片机的特点比较与本设计单片机的选择
综合上一章提到的两种设计方案的各方面优点与其在现在的所设计电压表的实用性,我选择第二种电压表设计方案,即由单片机系统与数字芯片构建的方法来我们本次设计。
在这一设计中,我涉与到了一个关键系统模块——单片机系统模块,而目前单片机的种类是很繁多的,主要有主流的8位单片机和高性能的32位单片机,结合本设计各方面因素,8位单片机对于本设计已经是绰绰有余了,但将用哪一种类8的单片机呢。
在这里,不得不先简单的介绍一下几种常用的8单片机。
单片机是指一个集成在一块芯片上的完整计算机系统,具有一个完整计算机所需要的大部分部件:
CPU,存,总线系统等。
而目前常用的单片机的8位有51系列单片机,AVR单片机,PIC单片机。
应用最广的8位单片机还是intel的51系列单片机。
51系列单片机的特点是:
硬件结构合理,指令系统规,加之生产历史悠久,世界有许多芯片公司都买了51的芯片核心专利技术,并在其基础上扩充其性能,使得芯片的运行速度变得更快,性价比更高[10]。
AVR单片机是atmel公司推出较新的单片机,它的显著特点是:
高性能,低功能,高速度,指令单周期为主,但性格方面比51单片机要高。
有专门的I/O方向寄存器。
虽然有转强的驱动电压,但I/O口使用不比51单片机方便[11]。
PIC单片机系列是美国微芯公司的产品,也是市面上增长最快的单片机之一,属精简指令集单片机,其特点是:
高速度,高性能,但在性格方面比51单片机要高,也有专门的I/O方向寄存器,I/O口使用不比51单片机方便[12]。
综合以上各种单片机的基本性能与本设计的满足需要,我将选择51系列单片机。
3.1.2本设计使用的单片机的简介
本设计中选用是51系列的AT89C52,它是低电压、低功耗、高性能的CMOS8位单片机,片含8KB的可反复擦写的只读程序存储器和256B的随机存取数据存储器,32个I/O口线,3个16位定时/计数器,片振荡器与时钟电路,并与MCS-51系列单片机兼容。
在设计中,单片机起着连接硬件电路与程序运行与存储数据的任务,一方面,它将A/D转换器、显示器和语音芯片等通过I/O口地址线和数据线连接起来;另一方面,它将用户下载的程序通过控制总线控制数据的输入输出,从而实现测电压的功能。
3.2各种显示器件的介绍和选择
3.2.1常用显示器件简介
本次设计中有显示模块,而常用的显示器件比较多,有数码管,LED点阵,1602液晶,12864液晶等。
数码管是最常用的一种显示器件,它是由几个发光二极管组成的8字段显示器件,其特点是价格非常的便宜,使用也非常的方便,显示效果非常的清楚。
小电流下可以驱动每光,发光响应时间极短,体积小,重量轻,抗冲击性能好,寿命长。
但数码管只能是显示0——9的数据。
不能够显示字符。
这也是数码管的不足之处。
LED点阵显示器件是由好多个发光二极管组成的。
具有高亮度,功耗低,视角大,寿命长,耐湿,冷,热等特点,LED点阵显示器件可以显示数字,英文字符,中文字符等。
但用LED点阵显示的软件程序设计比较麻烦。
1602液晶是工业字符型液晶,能够同时显示16*2即32个字符。
1602液晶模块部的字符发生存储器已经存储了160个不同的点阵字符图形,这些字这些字符有:
阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码。
使用时直接编写软件程序按一定的时序驱动即可。
它的特点是显示字迹清楚,价格相对便宜[2]。
12864液晶也是一种工业字符型液晶,它不仅能够显示1602液晶所可以显示的字符,数字等信息,而且还可以显示8*4个中文汉字和一些简单的图片,显示信息也非常的清楚。
使用时也直接编写软件程序按一定的时序驱动即可。
不过它的价格比1602液晶贵了很多。
在本设计中,我们只需要显示最后电压的数字值和电压的单位,综合上面各种显示器件的特点:
数码管只能显示数字,不能显示单位字符,不符合本设计的要求。
而点阵显示器件驱动显示软件程序编写麻烦,占用的引脚相对也较多。
也不是理解的显示器件。
所以在本设计中,我们考虑用液晶显示器件,虽然12864液晶比1602液晶的功能强,不过在价格方面却贵了好多。
而1602液晶也足够满足本设计的需要。
因此,在本设计实验我们选择1602液晶显示器件。
3.2.21602液晶的参数资料
我们选择了1602液晶作为本设计的显示模块的显示器件。
以下是1602液晶的各方面参数如表4.1所示:
表3.1接口信号说明
编号
符号
引脚说明
1
VSS
电源地
2
VDD
电源正极
3
VL
液晶显示偏压信号
4
RS
数据/命令选择端
5
R/W
读/写选择端
6
E
使能信号
8-14
D0-D7
DataI/O
15
BLA
背光源正极
16
BLK
背光源负极
2.基本操作时序:
1.读状态:
输入:
RS=0,RW=1,E=1。
输出:
D0-D7为状态字
2.写状态:
输入:
RS=0,RW=0,D0-D7为指令码,E为高脉冲。
输出:
无
3.读数据:
输入:
RS=1,RW=1,E=1。
输出:
D0-D7为数据。
4.写数据:
输入:
RS=1,RW=0,D0-D7为数据,E为高脉冲。
输出:
无
3.状态字说明如表4.2所示
表3.2状态字说明表
STA7
STA6
STA5
STA4
STA3
STA2
STA1
STA0
STA0-6
当前数据地址指针的数值
STA7
读写操作使能
1:
禁止0:
允许
4.指令的说明如表4.3,4.4,4.5所示。
3.3显示模式设置
指令码
功能
0
0
1
1
1
0
0
0
设置16*2显示,5*7点阵,8位数据口
3.4显示开/关与光标设置
指令码
功能
0
0
0
0
1
D
C
B
D=1开显示;D=0关显示
C=1显示光标;C=0不显示关标
B=1光标闪烁;B=0光标不显闪烁
0
0
0
0
0
1
N
S
N=1当读写一个字条款后地址指针加一,且光标加一。
N=0当读或写一个字符后地址指针减一,且光标减一。
S=1当写一个安条款,整屏显示左移(N=1)或右移(N=0),以得到光标不移动而屏幕移动的效果。
S=0当写一个字符,整屏显示不移动。
3.5数据控制
指令码
功能
80H+地址码(0-27H,40H-67H)
设置数据地址指针
01H
显示清屏:
1,数据指针清0
2,所有显示清0
02H
显示回车:
数据指针清0
3.3模数(A/D)转换芯片的选择
在本设计中,模数(A/D)转换模块是一个重要的模块,它关系到最后数电压表电压值的精确度。
所以,A/D芯片的选择是设计过程中一个很重要的环节。
3.3.1常用的A/D芯片简介
常用的A/D芯片有AD0809,AD0832,TLC2543C等几种。
下面简单介绍一下这三种芯片。
AD0809是8位逐次逼近型A/D转换器,它是由一个8路的模拟开关、一个地址锁存译码器、一个A/D转换器和一个三态输出锁存器组成。
多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。
些A/D转换器是的特点是8位精度,属于并行口,如果输入的模拟量变化大快,必须在输入之前增加采样电路[3]。
AD0832也是8位逐次逼近型A/D转换器,可支持致命三个单端输入通道和一个差分输入通道。
它易于和微处理器接口或独立使用;可满量程工作;可用地址逻辑多路器选通各输入通道。
TLC2543C是12位开关电容逐次逼近A/D转换,每个器件有三个控制输入端,片选,输入/输出时钟以与地址输入端。
它可以从主机高速传输转换数据。
它有高速的转换,通用的控制能力,具有简化比率转换,刻度以与模拟电路与逻辑电路和电源噪声隔离,耐高温等特点[6]。
综合上述几种A/D转换芯片的特点,前两种芯片的性能和精度都不如第三种芯片。
在本设计中,我的目标是设计高精度的电压表,因此在此,我们选择精度为12位的TLC2543芯片。
3.3.2模数(A/D)芯片TLC2543的资料
综合本设计的各方面考虑,我们选了TLC2543模数转换芯片。
下面就介绍此芯片的各方面资料。
TLC2543芯片的封装引脚图和引脚说明如下:
图1TLC2543芯片封装
表3.6引脚说明
引脚号
名称
I/O
说明
1-9,11,12
AIN0-AIN10
I
模拟输入端。
15
~CS
I
片选端。
17
Datainput
I
串行数据输入端。
16
Dataout
O
用于A/D转换结果输也的3态串行输出端
19
EOC
O
转换完毕端
10
GND
接地端
18
I/Oclk
I
输入/输出时钟端
14
REF+
I
正基准电压端
13
REF-
I
负基准电压端
20
VCC
正电压端
。
各引脚的使用详细介绍。
1.AIN0-AIN10这11个模拟信号输入由部多路选器选择。
对4.1MHZ的I/Oclk,驱动源阻抗必须小于或等于50欧并且能够将模拟电压由60PF的电容来限制其斜率。
2.在CS端的一个由高低变化将复位部计数器并控制使能dataout,datainput和I/Oclk。
一个由低至高的变化将在一个设置时间禁止datainput和I/Oclk.
3.串行数据输入端datainput是一个4位的串行地址选择下一个即将被转换的所需的模拟输入或测试电压。
串行数据以MSB为前导并在I/Oclk的前4个上升沿被移入。
在4个地址位被读入地址寄存器后,I/Oclk将剩下的几位依次输入。
4.Dataout在CS为高时处于高阻抗状态,而当CS为低时处于激活状态。
CS一旦有效,按照前一次转换结果的MSB/LSB值将dataout从高阻抗状态转变成相应的逻辑电平,I/Oclk的下一个下降沿将根据下一个MSB/LSB将dataout驱动成相应的逻辑电平,剩下的各位依次移出。
5.EOC在最后的I/Oclk下降沿之后,从高电平变为低电平并保持低直到转换完成与数据准备传输。
6.GND端是部电路的地回路端,除加有说明外,所有电压测量都相对于GND
7.I/Oclk端串行输入并完成以下四个功能:
第一,在I/Oclk的前8个上升沿,它将8个输入数据信键入输入数据寄存器。
在第4个上升沿之后为多路器的地址。
第二,在I/Oclk的第4个下降沿,在选定的多路器的输入端上的模拟输入电压开始和电容器充电并继续到I/Oclk的最后一个下降沿。
第三,它将前一次转换的数据的其余11位移出dataout端。
在I/Oclk的下降沿时数据变化。
第四,在I/Oclk的最后一个下降沿它将转换的控制信号传送到部的状态控制位。
8.REF+端通常接VCC,最大输入电压围取决于加于本端与加于REF-端的电压差。
9.REF-端通常接地。
4.总体设计
4.1技术要求
1)最高量程为:
500V。
2)分为三档量程:
5V,50V,500V。
可以通过调档开关实现各档位。
最高精度为0.01mv。
3)能测交流电压。
4)被测电压的电压值小于1V时,有自动换以MV为单位显示。
5)通过按键可以显示5秒的平均电压的电压值。
2.设计方案:
根据上述,我选择单片机与A/D转换芯片结合的方法实现本设计。
使用的基本元器件是:
AT89C51单片机,TLC2543模数转换芯片,1602液晶显示器,开关,按键,电容,电阻,晶振,标准电源等等。
设计的基本框图如下:
图2系统设计框图
4.2硬件电路系统模块的设计
根据上述选择的各元器件,各电路模块的电路图如下描述。
1.单片机系统
单片机最小系统包括晶振电路,复位电路,电源。
其原理图如下:
图3单片机最小系统原理图
此模块中,单片机的晶振是12MHZ,C1和C2的电容是10UF,C3可选1-10UF。
R1电阻为1K。
2.输入电路
由于输入电路的电压比基准电压(2V)高很多,因此在输入电路必须加电压衰减器。
衰减电路可由开关来选择不同的衰减率,从而切换档位。
则完整输入电路如下:
图4输入电路
通过计算,可知设计衰减器用的电阻R2,R3和R4分别为:
9M,900K,100K控制档位的开关是双开关的,目地是能够使单片机CPU自动识别档位,即可用相应的档位的数据转换的算法计算出正确的电压值。
被测电压输入端、整理过的模拟电压输入端,开关与单片机的连接如下图。
3.A/D转换芯片与单片机的连接
此设计中选择的是A/D转换芯片的通道0,A/D芯片的数据输入口连接单片机的P1.3口,数据输出口连接单片机的P1.4口,芯片使能端连接单片机的P1.5口,脉冲端连接单片机的P1.6口。
模块连接如图5所示。
图5模块连接图
4.交流输入端与A/D芯片的连接
交流电压不能直接输入A/D芯片,必需通过整流、滤波才能输入A/D转换器[13]。
如下图:
图6芯片连接
交流电压从out1输入,通过以上电路整流滤波,从out2输出较稳定的直流电压。
5.1602液晶与单片机连接
此模块液晶的RS,RW和E端分别连接单片机的P1.2,P1.1和P1.0口;液晶的数据各端口连接单片机的P0口[11]。
具体如以下图所示。
图7液晶连接模块
6.键盘与单片机的连接如下。
此键盘的一端与单片机的P2.0口连接,另一端接地。
原理图如下所示。
图8开关连接
该键盘的功能:
当键盘被按下时,即可计算后5秒的平均电压值。
4.3系统软件的设计
4.3.1汇编语言和C语言的特点与选择
本设计是硬件电路和软件编程相结合的设计方案,选择适宜的编程语言是一个重要的环节。
在单片机的应用系统程序设计时,常用的是汇编语言和C语言。
汇编语言的特点是占用存单元少,执行效率高。
执行速度快。
但它依赖于计算机硬件,程序可读性和可移植性比较差。
而C语言虽然执行效率没有汇编语言高,但语言简洁,使用方便,灵活,运算丰富,表达化类型多样化,数据结构类型丰富,具有结构化的控制语句,程序设计自由度大,有很好的可重用性,可移植性等特点[9]。
由于现在单片机的发展已经达到了很高的水平,部的各种资源相当的丰富,CPU的处理速度非常的快。
用C语言来控制单片机无疑是一个理想的选择。
所以在本设计中采用C语言编写软件程序。
4.3.2主程序设计
主程序设计包括以下方面:
按照硬件电路对单片机位定义。
编写延时模块程序。
编写驱动LED数码管显示模块程序。
编写驱动A/D转换模块程序。
编写键盘扫描模块程序。
主程序的总体流程如以下图:
图9主程序流程图
全部软件程序如下:
#include
#defineucharunsignedchar
#defineuintunsignedint
#definekey_state00//键盘扫描的各个状态
#definekey_state11
#definekey_state22
#definekey_state33
sbitrs=P1^2;//1602液晶写命令/数据标志,0时写命令
sbitrw=P1^1;//1602液晶写入/读出标志,0时写入数据
sbitep=P1^0;
sbitinput=P1^4;
sbitoutput=P1^3;
sbitcs=P1^5;
sbitclk=P1^6;
sbitkey=P2^0;
sbitflag_1=P2^1;//定义电压表档位相关标志
sbitflag_2=P2^2;
sbitflag_3=P2^3;
sbitflag_4=P2^4;
ucharcodetab0[]="V";//显示的单位与有关的字符
ucharcodetab1[]="MV";
ucharcodetab2[]="Power:
";
ucharcodetab3[]="Aver_V:
";//平均电压值标志符
uchart;
voiddelay(intz)//延时函数
{
intx,y;
for(x=z;x>0;x--)
for(y=10;y>0;y--);
}
voidwrite_(uchar)//往1602液晶写命令函数
{
rs=0;
P0=;
delay(5);
ep=1;
delay(5);
ep=0;
}
voidwrite_dat(uchardat)//往1602液晶写数据函数
{
rs=1;
P0=dat;
delay(5);
ep=1;
delay(5);
ep=0;
}
voidinit_1602()//对1602液晶的初始化函数
{
rs=0;
rw=0;
write_(0x38);
delay
(1);
write_(0x0c);
delay
(1);
write_(0x06);
delay
(1);
write_(0x01);
delay
(1);
}
voidinit_timer0()//定时计数器0初值化函数,
{
TMOD=0x01;//方式一
TH0=(65536-50000)/256;//每50ms中断一次
TL0=(65536-50000)%256;
IE=0x82;//打开中断
TR0=0;//定时器首先不可工作
}
voiddisplay(ucharx,uchary,uintdat)//显示电压值的函数,x行y列开始显示
{
uintadd;
uchari,a[5];
switch(x)
{
case0:
add=0x80;break;
case1:
add=0x80+0x40;break;
}
add=add+y;
write_(add);
for(i=0;i<5;i++)
{
a[i]=dat%10;
dat=dat/10;
}
write_dat(a[4]+0x30);
write_dat(a