数字电压表.docx
- 文档编号:10560233
- 上传时间:2023-02-21
- 格式:DOCX
- 页数:33
- 大小:439.94KB
数字电压表.docx
《数字电压表.docx》由会员分享,可在线阅读,更多相关《数字电压表.docx(33页珍藏版)》请在冰豆网上搜索。
数字电压表
摘要:
在电路设计中我们时常会用到电压表,过去大部分电压表还是模拟的,虽然精度较高但模拟电压表采用用指针式,里面是磁电或电磁式结构,所以响应较慢。
为适应许多高速信号领域目前已广泛使用数字电压表。
本设计是基于Atmel51单片机开发平台和自动控制原理的基础上实现的一种数字电压表系统。
该系统采用STC89C52单片机作为控制核心,以ADC0809为数据采样系统,实现被测电压的数据采样;并同时使用LED1602同时显示2路电压值。
关键词:
单片机、电压检测、模数转换、
Abstract:
Incircuitdesign,weoftenusevoltagemeter,Overthepastmostofthevoltagemeterorasimulation,Althoughhighprecisionanalogvoltageusedinthetable,butwiththepointer,whichisamagneticorelectromagneticstructure,sotheslowresponse.Tomeetthemanyareasofhigh-speedsignalhasbeenwidelyuseddigitalvoltmeter.ThedesignisbasedonAtmel51microcontrollerdevelopmentplatformandautomaticcontrolbasedontheprincipleofadigitalvoltagemetersystem.ThesystemusesAtmel89C52microcontrollerasthecontrolcore,ADC0809forthesampleddatasystem,datasamplingtoachievethemeasuredvoltage;AndatthesametimeuseLED1602showsatthesametime2"voltage.
Keywords:
SingleChipMicyoco、Voltagedetection、AnalogDigitalConversion
第一章引言
数字电压表主要用于测量各种高、低频信号电压,它是电子测量中使用最广泛的仪器之一。
根据测量结果的显示方式及测量原理不同,电压测量仪器可分为两大类:
模拟式电压表(AVM)和数字式电压表(DVM)。
模拟式电压表是指针式的,多用磁电式电流表作为指示器,并在表盘上刻以电压刻度。
数字式电压表首先将模拟量经模数(A/D)转换器变成数字量,然后用电子计数器计数,并以十进制数字显示被测电压值。
众所周知,模拟电压表精度较高,曾经有很广阔的市场,现在依然有不少工程师依然在使用模拟电压表。
的确模拟电压表在显示测量值方面精度校准,然而却也存在问题。
模拟电压表采用用指针式,里面是磁电或电磁式结构,所以其响应速度较慢。
然而在高速发展的当今社会,高速信号处理的需求越来越多,由于模拟电压表响应速度较慢已经不适用与高速信号领域,取而代之的将是数字电压表。
但数字电压表由于存在采样误差,精度不是很高。
不过目前可以通过技术手段来缩小误差。
使其精度达到与模拟电压表一样精确甚至更高。
可见将来数字电压表必将取代模拟电压表。
现在有越来越多的数字测量仪器的出现但原理皆与数字电压表殊途同归,因此研究数字电压表有着很大现实意义。
第二章开发平台Keil
KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。
在开发大型软件时更能体现高级语言的优势。
2.1系统概述
Keil软件是目前最流行开发MCS-51系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持Keil即可看出。
Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。
运行Keil软件需要Pentium或以上的CPU,16MB或更多RAM、20M以上空闲的硬盘空间、WIN98、NT、WIN2000、WINXP等操作系统。
掌握这一软件的使用对于使用51系列单片机的爱好者来说是十分必要的,如果你使用C语言编程,那么Keil几乎就是你的不二之选(目前在国内你只能买到该软件、而你买的仿真机也很可能只支持该软件),即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。
2.2整体架构
C51工具包的整体结构较为丰富,其中uVision与Ishell分别是C51forWindows和forDos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。
开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。
然后分别由C51及C51编译器编译生成目标文件(.OBJ)。
目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。
ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。
使用独立的Keil仿真器时,注意事项
1)仿真器标配11.0592MHz的晶振,但用户可以在仿真器上的晶振插孔中换插其他频率的晶振。
2)仿真器上的复位按钮只复位仿真芯片,不复位目标系统。
3)仿真芯片的31脚(/EA)已接至高电平,所以仿真时只能使用片内ROM,不能使用片外ROM;但仿真器外引插针中的31脚并不与仿真芯片的31脚相连,故该仿真器仍可插入到扩展有外部ROM(其CPU的/EA引脚接至低电平)的目标系统中使用。
第三章硬件设计思想和原理图
3.1系统总体设计框图
本系统采样STC89C52单片机作为控制核心,以ADC0809为数据采样系统,实现被测电压的数据采样;使用系列比较器检测输入电压的范围,用LED1602液晶屏显示结果。
本实验为了同时使用LED1602显示所测得的电压值,只做了2路电压的测量并同时显示在LED1602上。
复位电路
IN0.IN1
3.2单片机系统
单片机最小系统包括复位电路,晶振电路,电源电路,仿真时需搭建复位电路和晶振电路。
晶振电路:
单片机最小系统如下所示,其中P1口用于LED1602液晶屏,P0口用于接收ADC0809转换的数据。
P2、P3口用于控制ADC0809。
单片机最小系统:
3.3AD转换电路
利用ADC0809作为AD数据采样器件,ADC0809是CMOS单片型逐次逼近式A/D转换器它由8路模拟开关、地址锁存与译码器、比较器、8位开关树型D/A转换器、逐次逼近。
ADC0809的工作过程是:
首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。
此地址经译码选通8路模拟输入之一到比较器。
START上升沿将逐次逼近寄存器复位。
下降沿启动A/D转换,之后EOC输出信号变低,指示转换正在进行。
直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。
当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。
ADC0809各个管教功能:
IN0~IN7:
8路模拟量输入端。
2-1~2-8:
8位数字量输出端。
ADDA、ADDB、ADDC:
3位地址输入线,用于选通8路模拟输入中的一路
ADDA为低位,ADDC为高位。
CBA选择的通道
000IN0
001IN1
010IN2
011IN3
100IN4
101IN5
110IN6
111IN7
ALE:
地址锁存允许信号,输入,高电平有效。
START:
A/D转换启动信号,输入,高电平有效。
EOC:
A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。
OE:
数据输出允许信号,输入,高电平有效。
当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。
CLK:
时钟脉冲输入端。
要求时钟频率不高于640KHZ。
REF(+)、REF(-):
基准电压。
Vcc:
电源,单一+5V。
GND:
地。
ADC0809内部结构:
ADC0809与单片机的连接。
3.4报警和电路整形指示模块
(1)、报警电路采用2个不同颜色的发光二极管来指示那一路电压大于设计要求,同时使用1个蜂鸣器来提示2路电压是否大于设计值。
报警电路图:
(2)、电路整形主要采用2个电容,这是为了电路的简化和实验要求设定的;电路的指示是采用一个发光二极管来指示电路是否导通。
电路图:
3.5LED1602显示电路
1.LCD1602显示电路
2.LCD1602简介
字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。
下面以长沙太阳人电子有限公司的1602字符型液晶显示器为例,介绍其用法。
一般1602字符型液晶显示器实物如图3-3:
图3-31602字符型液晶显示器实物图
3.1602LCD主要技术参数
显示容量:
16×2个字符
芯片工作电压:
4.5—5.5V
工作电流:
2.0mA(5.0V)
模块最佳工作电压:
5.0V
字符尺寸:
2.95×4.35(W×H)mm
4.引脚功能说明
1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如下表1所示:
编号
符号
引脚说明
编号
符号
引脚说明
1
VSS
电源地
9
D2
数据
2
VDD
电源正极
10
D3
数据
3
VL
液晶显示偏压
11
D4
数据
4
RS
数据/命令选择
12
D5
数据
5
R/W
读/写选择
13
D6
数据
6
E
使能信号
14
D7
数据
7
D0
数据
15
BLA
背光源正极
8
D1
数据
16
BLK
背光源负极
表1:
引脚接口说明表
第1脚:
VSS为地电源。
第2脚:
VDD接5V正电源。
第3脚:
VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。
第4脚:
RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:
R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。
当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。
第6脚:
E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:
D0~D7为8位双向数据线。
第15脚:
背光源正极。
第16脚:
背光源负极。
第四章软件设计与流程
4.1程序流图
软件部分采用模块化程序设计的方法,由单片机控制主程序、A/D转换子程序、电压检测及继电器控制程序、液晶显示组成。
系统软件设计是在KeilC编译环境下进行的,由于C语言程序可移植性好,所以提高了编程的效率。
软件程序流程图:
主流程图:
开始
系统初始化
启动AD转换
显示
开始
AD转换流程图:
初始化
启动IN0通道转换
While(EOC==0)读取数值
并把数值存入一个数组
启动IN1通
道转换
While(EOC==0)读取数值
并把数值存入另一个数组
结束
LED1602显示流程图:
开始
初始化
将数组数值写到1602
显示
开始
报警流程图:
初始化
读取数值
N
Y
结束
4.2功能介绍
单片机复位以后,ADD_A=0,ADD_B=0,ADD_C=0,这样就可以通过单片机来控制ADC0809的转换通道,当单片机给ST一个高电平时这时ADC0809就开始转换,当转换完毕时ADC0809的EOC会输出一个高电平,这时单片机检测到EOC=1时就开始读取P0的数值并同时进行数字处理,把处理后的数据存放到数组A中;这时给ADD_A=1,这样就可以选择IN1通道,当单片机给ST一个高电平时这时ADC0809就开始转换,当转换完毕时ADC0809的EOC会输出一个高电平,这时单片机检测到EOC=1时就开始读取P0的数值并同时进行数字处理,把处理后的数据存放到数组B中;下面单片机就将数组信息写到LED1602里面。
同时使用循环不断来检测IN0\IN1数值。
第五章软件仿真及测试数据
5.1仿真结果
将写好的程序下载到仿真软件中的51单片机中,点击运行,观察LED1602数值与图中输入电压进行比较。
理解其误差有多大。
由于仿真软件缺少相应器材,故而未能进行彻底仿真,仿真只能给我们在硬件和软件设置上提供逻辑上的帮助并不能彻底解决问题,很多问题需要在硬件上调试才可以解决。
仿真电路图:
原理图:
测试数据:
通过在查资料把方案确定下来后,在仿真软件仿真,在论证方案可行后,使用DXP2009画图得出PCB图,再制造电路板。
在电路板方案有很多注意事项,这些都是保证设计是否成功的主要,布线时应注意信号的干扰问题以及保证信号线不要过长。
制做成电路板后应保证线全部导通。
完成电路板后,就进行程序的调试。
从而保证实际电路能实现设计功能。
调试的时候遇到了许多问题,经过更改程序来满足要求。
有待改进的地方:
(1)由于手头的设备有限,所以在精度方面没有保障达到正负0.01V。
(2)由于电源是采用USB电源在电源稳定性方面没有保障造成电路基准电压不稳,影响精度。
(3)由于只能实现2路电压同时显示,改进方案是扩大到8路电压同时将显示电路换成12864,这样可以保障汉字的提示和8路电压显示要求。
(4)ADC0809支持的最大电压是5V,这样就有很大的局限性,可以通过改进通道入口和数字处理方式来达到扩大打压的要求。
(5)没有量程的选择。
可以在测试电路前加进判断电路来判断被测电压的正负和电路大概大小从而使用继电器来控制入口量程。
第六章结束语
经过这个单片机电子设计,我们真正体会到了学有所用,同时也让我们更加深刻的了解单片机。
真正体会到一种共同学习﹑共同进步的学习气氛,一种集体讨论的氛围。
这次设计对我来说感触最深的是,要做好一项设计,首先要了解每一部分所涉及的知识点,掌握它的原理;同时要根本组成员紧密联系﹑加强合作,体验到合作的重要性。
整个设计及制作的全过程我都参与其中,从开始的方案分析,到仿真图的形成及运行成功,再将原理图在Altiumdesigner软件上画出并且生成出PCB图,最后印在铜板上腐蚀,这一过程相当繁杂,但是从头到尾我都能坚持下来继续完成设计,从中学到了很多东西,令我的分析设计以及动手能力有了很大的提高,培养了我思考问题的全面性;在画图的过程中碰到很多细节的问题,曾经有过放弃的想法,但是还是坚持了下来,最后经过耐心的检查,终于找到了错误,解除了问题。
这一过程让我明白了,做学问要有一丝不苟的态度,遇到困难要有勇往直前的精神,做事情要有耐心和毅力,工作中要学会与人合作,认真听取他人意见,这样做事情才会顺手、顺心,举得事倍功半的效果。
程序A/D转换部分参考了文献【2】,剩下的大部分都是我们编写的。
调试程序时,我们遇到很多问题,例如:
参考文献不同造成的误导,测试环境的错误使用,硬件改装。
程序本身不完善引起的错误等。
经历了,写程序、调试、仿真,如果成功写进硬件,不成功就改进;写进硬件后出现问题,再回头对每个元件和线路进行测试改进。
经过漫长的测试和改进终于成功。
参考文献:
【1】李朝青.《单片机原理及接口技术》.北京航空航天出版社,2004年
【2】李光飞.《51系列单片机设计实例》.北京航空航天出版社,2004年
【3】康华光.《电子技术基础》.高等教育出版社,2000年
【4】高峰.《单片微型计算机与接口技术》.科学出版社,2003年
【5】吴金成.《8051单片机实践与应用》.清华大学出版社,2002年
附录:
(1)C语言程序:
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
#defineOUP1
uchargetdata;
sbitRS=P3^7;
sbitRW=P3^6;
sbiten=P3^5;
sbitST=P3^2;
sbitOE=P3^4;
sbitEOC=P3^3;
sbitCLK=P3^1;
sbitADD_A=P2^5;
sbitADD_B=P2^6;
sbitADD_C=P2^7;
sbitLED1=P3^0;
sbitLED2=P2^4;
sbitMK=P2^3;
unsignedintu1=0;
unsignedintu0=0;
unsignedcharu0_bai=0,u0_shi=0,u0_ge=0,u1_bai=0,u1_shi=0,u1_ge=0;
chardispbuf2[]="0123456789";
voidInit(void);
voidDisplay(void);
voidwarning(void);
voidConver_y(void);
voidConver_U(void);
voidDisplay_Y(void);
voiddelay1ms(uintx)
{uinti,j;
for(i=0;i for(j=1;j<=60;j++);//延迟0.5ms } /****************写命令**************/ voidwrite_inst(charinst) {delay1ms(40); en=0; RW=0; RS=0; _nop_(); en=1; OU=inst; en=0; } /******************写数据*************/ voidwrite_char(charcharacter) {delay1ms(40); en=0; RW=0; RS=1; _nop_(); en=1; OU=character; en=0; RS=0; } /***********初始化液晶屏*************/ voidinit_LCM(void) {delay1ms(80); write_inst(0x38);//displaymode write_inst(0x38);//displaymode write_inst(0x38);//displaymode write_inst(0x06);//显示光标移动位置 write_inst(0x0c);//显示开及光标设置 write_inst(0x01);//显示清屏 } voidConver_U(void)/*IN0转换程序*/ { ADD_A=0; ADD_B=0; ADD_C=0; ST=1; ST=0; ST=1; ST=0; while(EOC==0); OE=1; getdata=P0; OE=0; //delay1ms(5); u0=getdata*2; u0_bai=(u0%1000)/100; u0_shi=(u0%100)/10; u0_ge=u0%10; } voidConver_y(void)/*IN1转换程序*/ { ADD_A=1; ADD_B=0; ADD_C=0; ST=1; ST=0; ST=1; ST=0; while(EOC==0); OE=1; getdata=P0; OE=0; delay1ms(5); u1=getdata*2; u1_bai=(u1%1000)/100; u1_shi=(u1%100)/10; u1_ge=u1%10; } voidmain() { Init(); Display_Y(); while (1) { Conver_U(); Display(); //delay1ms(20); Conver_y(); //EA=0; //Display(); //EA=1; warning(); } } /*系统初始化*/ voidInit(void) { LED1=1; LED2=1; MK=1; ST=0; OE=0; EA=1;//开总中断 ET0=1;//开定时器0中断 ADD_A=0; ADD_B=0; ADD_C=0; TMOD=0x02;//工作方式 TH0=216; TL0=216; delay1ms(3); init_LCM(); write_inst(0x00); TR0=1; //ST=1; //ST=0; } /*写到LED1602,电压信息,放在循环内不断变换*/ voidDisplay(void) { //uchari,j; write_inst(0x8B); //for(i=0;i<11;i++) //write_char(line1[i]); write_char(dispbuf2[u0_bai]); write_char('.'); write_char(dispbuf2[u0_shi]); write_char(dispbuf2[u0_ge]); //write_char('v'); write_inst(0xCB); //for(j=0;j<11;j++) //write_char(line2[j]); write_char(dispbuf2[u1_bai]); write_char('.'); write_char(dispbuf2[u1_shi]); write_char(dispbuf2[u1_ge]); //write_char('v'); } voidDisplay_Y(void)/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字 电压表