基于单片机的数字电压表设计.docx
- 文档编号:5447868
- 上传时间:2022-12-16
- 格式:DOCX
- 页数:13
- 大小:428.34KB
基于单片机的数字电压表设计.docx
《基于单片机的数字电压表设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的数字电压表设计.docx(13页珍藏版)》请在冰豆网上搜索。
基于单片机的数字电压表设计
科研训练
设计题目:
基于单片机的数字电压表设计
专业班级:
科技0701
姓名:
王增
班内序号:
13
指导教师:
梁猛
地点:
三号实验楼236
时间:
2010.9.14~2010.11.22
电子科学与技术教研室
摘要:
在电路设计中我们时常会用到电压表,过去大部分电压表还是模拟的,虽然精度较高但模拟电压表采用用指针式,里面是磁电或电磁式结构,所以响应较慢。
为适应许多高速信号领域目前已广泛使用数字电压表。
本设计是基于Atmel51单片机开发平台和自动控制原理的基础上实现的一种数字电压表系统。
该系统采用Atmel89C52单片机作为控制核心,以ADC0809为数据采样系统,实现被测电压的数据采样;使用系列比较器检测输入电压的范围,并通过继电器阵列实现了输入量程的自动转换;使用共阴极数码管显示被测电压。
关键词:
单片机、电压检测、模数转换、
Abstract:
Incircuitdesign,weoftenusevoltagemeter,Overthepastmostofthevoltagemeterorasimulation,Althoughhighprecisionanalogvoltageusedinthetable,butwiththepointer,whichisamagneticorelectromagneticstructure,sotheslowresponse.Tomeetthemanyareasofhigh-speedsignalhasbeenwidelyuseddigitalvoltmeter.ThedesignisbasedonAtmel51microcontrollerdevelopmentplatformandautomaticcontrolbasedontheprincipleofadigitalvoltagemetersystem.ThesystemusesAtmel89C52microcontrollerasthecontrolcore,ADC0809forthesampleddatasystem,datasamplingtoachievethemeasuredvoltage;Seriescomparedwiththerangeofdetectedvoltage,andrelayarraytoachievethroughtheautomaticconversionoftheinputrange;usingcommoncathodeLEDdisplaythemeasuredvoltage.
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引脚接至低电平)的目标系统中使用。
第三章硬件设计思想和原理图
本系统采样Atmel89C52单片机作为控制核心,以ADC0809为数据采样系统,实现被测电压的数据采样;使用系列比较器检测输入电压的范围,用共阴极数码管显示结果。
图3.1
单片机最小系统包括复位电路,晶振电路,电源电路,仿真时需搭建复位电路和晶振电路。
晶振电路:
图3.2
单片机最小系统如下所示,其中P1口用于驱动数码管,P0口用于接收ADC0809转换的数据。
P2口用于控制ADC0809。
单片机最小系统:
图3.3
利用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路模拟输入中的一路
ALE:
地址锁存允许信号,输入,高电平有效。
START:
A/D转换启动信号,输入,高电平有效。
EOC:
A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。
OE:
数据输出允许信号,输入,高电平有效。
当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。
CLK:
时钟脉冲输入端。
要求时钟频率不高于640KHZ。
REF(+)、REF(-):
基准电压。
Vcc:
电源,单一+5V。
GND:
地。
ADC0809与单片机的连接。
图3.4
该部分主要实现的功能是自动量程切换和电压变换,模块主要由电压极性检测电路、电压范围粗测电路、电压变换电路三部分组成。
电压极性检测电路
电压极性检测电路采用过零比较器检测负电压的方式实现的,运算放大器LM324的反向端接地,同向端通过100K电阻接输入信号。
图3.5
电压范围粗测电路
为了粗略地得到被测量的电压范围我们采用多组比较器的方式,通过阶梯式比较的方法确定输入电压的范围。
图3.6
量程切换电路
电路由衰减电阻、切换继电器和运算放大器组成,对应的是衰减1/2、1/3、1/4和无零漂放大50倍,切换电路如图所示。
电压变换到0-5V标准信号后,再由A/D转换进行采样,最后由单片机算法还原。
第四章软件设计与流程
4.1程序流图
软件部分采用模块化程序设计的方法,由单片机控制主程序、A/D转换子程序、电压检测及继电器控制程序、液晶显示组成。
系统软件设计是在KeilC编译环境下进行的,由于C语言程序可移植性好,所以提高了编程的效率。
软件程序流程图:
图4.1
4.2功能介绍
P0首先接收数据,据此控制PC6,PC7实现电压转换,保证正电压输出。
PB0,PB1,PB2,PB3,PA6的输入值通过PA1,PA2,PA3,PA4,PA5控制继电器1,2,3,4,5实现电压增减并输入A/D转换器MAX187进行测量。
最后输入PB4,PB6,PB7并由P1输入数码管显示。
第五章软件仿真及测试数据
5.1仿真结果
将写好的程序下载到仿真软件中的51单片机中,点击运行,观察数码管显示数值与图中输入电压进行比较。
理解其误差有多大。
由于仿真软件缺少相应器材,故而未能进行彻底仿真。
总体电路图:
图5.1
参考文献:
[1] 马潮詹卫前耿德根编《Atmel51原理及应用手册》清华大学出版社
[2] 谭浩强编《C语言程序设计(第二版)》清华大学出版社
[3] 马潮编 《AVR单片机嵌入式系统原理与应用实践》北京航空航天大学出版社
附录
主程序:
#include
Unsigned char codedispbitcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsignedchardispbuf[4];
unsignedinti;
unsignedintj;
unsignedchargetdata;
unsignedinttemp;
unsignedinttemp1;
unsignedcharcount;
unsignedchard;
sbitST=P3^0;
sbitOE=P3^1;
sbitEOC=P3^2;
sbitCLK=P3^3;
sbitP20=P2^0;
sbitP21=P2^1;
sbitP22=P2^2;
sbitP23=P2^3;
sbitP17=P1^7;
voidTimeInitial();
voidDelay(unsignedinti);
voidTimeInitial()
{TMOD=0x10;
TH1=(65536-200)/256;
TL1=(65536-200)%256;
EA=1;
ET1=1;
TR1=1;
}
voidDelay(unsignedinti)
{
unsignedintj;
for(;i>0;i--)
{
for(j=0;j<125;j++)
{;}
}
}
voidDisplay()
{
P1=dispbitcode[dispbuf[3]];
P20=0;
P21=1;
P22=1;
P23=1;
Delay(10);
P1=0x00;
P1=dispbitcode[dispbuf[2]];
P17=1;
P20=1;
P21=0;
P22=1;
P23=1;
Delay(10);
P1=0x00;
P1=dispbitcode[dispbuf[1]];
P20=1;
P21=1;
P22=0;
P23=1;
Delay(10);
P1=0x00;
P1=dispbitcode[dispbuf[0]];
P20=1;
P21=1;
P22=1;
P23=0;
Delay(10);
P1=0x00;
}
voidmain()
{
TimeInitial();
while
(1)
{
ST=0;
OE=0;
ST=1;
ST=0;
while(EOC==0);//查询转换结束
OE=1;
getdata=P0;
OE=0;
temp=getdata*1.0/255*500;
dispbuf[0]=temp%10;
dispbuf[1]=temp/10%10;
dispbuf[2]=temp/100%10;
dispbuf[3]=temp/1000;
Display();
}
}
voidt1(void)interrupt3using0
{
TH1=(65536-200)/256;
TL1=(65536-200)%256;
CLK=~CLK;
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 数字 电压表 设计