简易数字电压表.docx
- 文档编号:24454287
- 上传时间:2023-05-27
- 格式:DOCX
- 页数:24
- 大小:226.98KB
简易数字电压表.docx
《简易数字电压表.docx》由会员分享,可在线阅读,更多相关《简易数字电压表.docx(24页珍藏版)》请在冰豆网上搜索。
简易数字电压表
课程设计报告
课程名称:
单片机原理及应用课程设计
设计题目:
简易数字电压表
系别:
通信与控制工程系
专业:
电信工程
班级:
二班
学生姓名:
学号:
起止日期:
指导教师:
教研室主任:
指导教师评语:
指导教师签名:
年月日
成绩评定
项目
权重
成绩
1、设计过程中出勤、学习态度等方面
0.2
2、课程设计质量与答辩
0.5
3、设计报告书写及图纸规范程度
0.3
总成绩
教研室审核意见:
教研室主任签字:
年月日
教学系审核意见:
主任签字:
年月日
摘要
本设计数字电压表是利用A/D转换原理,将被测模拟量转换成数字量,并用数字方式显示测量结果的电子测量仪表。
通常数字电压表都采用大规模的A/D转换集成电路,测量精度高,读数方便,在体积、重量、耗电、稳定性及可靠性等方面性能指标均明显优于指针式万用表。
其中,A/D转换器将输入的模拟量转换成数字量,逻辑控制电路产生控制信号,按规定的时序将A/D转换器中各组模拟开关接通或断开,保证A/D转换正常进行。
A/D转换结果通过计数译码电路变换成笔段码,最后驱动显示器显示相应的数值。
本系统以单片机AT89C52为系统的控制核心,结合A/D转换芯片ADC0809设计一个数字电压表,能够测量0-2.5V之间的直流电压值,通过四位数码显示。
具有读数据准确,测量方便的特点。
关键词:
STC89C52;电压表;A/D转换;ADC0809
前言
在电量的测量中,电压、电流和频率是最基本的三个被测量,其中电压量的测量最为经常。
而且随着电子技术的发展,更是经常需要测量高精度的电压,所以数字电压表就成为一种必不可少的测量仪器。
数字电压表(DigitalVoltmeter)简称DVM,它是采用数字化测量技术,把连续的模拟量(直流或交流输入电压)转换成不连续、离散的数字形式并加以显示的仪表。
由于数字式仪器具有读数准确方便、精度高、误差小、灵敏度高和分辨率高、测量速度快等特点而倍受青睐。
本设计从各个角度分析了由单片机组成的数字电压表的设计过程及各部分电路的组成及其原理,并且分析了程序如何驱动单片机进而使系统运行起来的原理及方法。
本设计主要分为两部分:
硬件电路及软件程序。
而硬件电路又大体可分为单片机小系统电路、A/D转换电路、LED显示电路,各部分电路的设计及原理将会在硬件电路设计部分详细介绍;程序的设计使用汇编语言编程,利用Keil软件对其编译,详细的设计算法将会在程序设计部分详细介绍。
目录
设计要求1
1方案论证与对比1
1.1方案一1
1.2方案二1
1.3方案对比与选择2
2系统硬件电路的设计2
2.1A/D转换电路的设计及原理3
2.2数据处理电路的设计及原理4
2.3显示控制电路的设计及原理6
3系统程序的设计9
3.1初始化程序9
3.2主程序9
3.3显示子程序9
3.4A/D转换测量子程序10
4调试及性能分析11
4.1调试与测试11
4.2性能分析11
5详细仪器清单12
6总结13
参考文献14
附录一:
A/D转换与控制PCB电路图16
附录二:
程序17
数字电压表
设计要求
主要利用单片机STC89C52芯片,A/D转换采用ADC0809实现数字电压表,数字万用表可以测量0~2.5V范围内的2路输入电压值,并在6位LED数码管上轮流显示,要求程序控制测量的切换。
其测量最小分辨率为0.05V.
1方案论证与对比
1.1方案一
系统采用STC89C52单片机,A/D转换采用ADC0809.系统除能确保实现要求的功能外,还可以很方便地进行8路其他A/D转换的测量和远程测量结果传送等扩展功能。
原理框图如图1所示:
图1方案一系统方框图
1.2方案二
系统采用STC89C52单片机,A/D转换采用MC14433双积分A/D转换器能够实现转换精度高、抗强干扰的数模转换,而且价格便宜,应用于速度要求不高的工程实际中。
原理框图如图2所示:
图2方案二系统方框图
1.3方案对比与选择
以上方案中方案一中ADC0809属于逐次逼近式A/D转换器,N次逐次逼近A/D转换器最多只需N次D/A转换、比较判断,就可以完成A/D转换。
因此,逐次逼近型A/D转换速度很快,而且带有锁存控制逻辑的8通道多路转换开关,便于选择8路中的任一路进行转换。
而方案二中采用了速度大受限制的MC14433双积分A/D转换器。
通过以上综合分析可以看出,显然方案一要明显优于方案二,因此数字电压表采用方案一设计。
2系统硬件电路的设计
采集2个通道的模拟量在数码管显示出来。
模拟量值的测量范围是0-255,第三至六个数码管用于显示采集的模拟量的值,每秒钟显示切换一下通道。
简易数字电压表测量电路由A/D转换、数据处理及显示控制等组成。
2.1A/D转换电路的设计及原理
ADC0809是采用逐次逼近式原理的A/D转换器。
1.主要性能
分辨率为8位二进制数。
模拟输入电压范围0V~5V,对应A/D转换值为00H~FFH。
每路A/D转换完成时间为100µs。
允许输入8路模拟电压,通过具有锁存功能的8路模拟开关,可以分时进行8路A/D转换。
工作频率为500kHz,输出与TTL电平兼容。
2.ADC0809芯片的组成原理
根据设计要求如图3所示:
图3 A/D转换电路原路图
由图可见,它是由地址锁存器、8路模拟开关、8位逐次A/D转换器和三态锁存输出缓冲器构成。
由3位地址输入线ADDRA、ADDRB、ADDRC决定8路模拟输入中的1路进8位A/D转换器,A/D转换值进入三态锁存输出缓冲器暂存,在CPU发来输出允许控制信号OE后,三态门打开,经DB7~DB0进入CPU总线,完成一次A/D转换全过程。
3.ADC0809引脚功能
ADC0809采用28引脚的封装,双列直插式。
A/D转换由集成电路0809完成。
0809具有8路模拟输入端口,地址线(23~-25脚——即C,B,A,)可决定对哪一路模拟输入作A/D转换。
22脚为地址锁存控制(ALE),当输入为高电平时,对地址信号进行锁存。
6脚为测试控制(START),当输入一个2uS宽高电平脉冲时,就开始A/D转换。
7脚为A/D转换结束标志(EOC),当A/D转换结束时,7脚输出高电平。
9脚为A/D转换数据输出允许控制(OE),当OE脚为高电平时,A/D转换数据从该端口输出。
10脚为0809的时钟输入端(CLOCK),利用单片机30脚的六分频晶振频率再通过14024二分频得到1MHz时钟。
单片机的P1、P3.0~P3.3端口作为六位LED数码管显示控制。
2.2数据处理电路的设计及原理
STC89C52是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的STC89C52单片机可为您提供许多较复杂系统控制应用场合。
STC89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,STC89C52可以按照常规方法进行编程,也可以在线编程。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
STC89C52有PDIP、PQFP/TQFP及PLCC等三种封装形式,以适应不同产品的需求。
主要功能特性:
·兼容MCS51指令系统
·8k可反复擦写(>1000次)FlashROM
·32个双向I/O口·256x8bit内部RAM
·3个16位可编程定时/计数器中断
·时钟频率0-24MHz
·2个串行中断
·可编程UART串行通道
·2个外部中断源
·共6个中断源
·2个读写中断口线
·3级加密位
·低功耗空闲和掉电模式
·软件设置睡眠和唤醒功能
P0口:
P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口。
P1口:
P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
·P2口:
P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
P3口:
P3口是一组带有内部上拉电阻的8位双向I/O口。
P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
RST:
复位输入。
ALE/PROG:
当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。
PSEN:
程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当STC89C52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲。
EA/VPP:
外部访问允许。
XTAL1:
振荡器反相放大器的及内部时钟发生器的输入端。
XTAL2:
振荡器反相放大器的输出端。
2.3显示控制电路的设计及原理
显示子程序采用动态扫描法实现4位数码管的数值显示。
测量所得的A/D转换数据放70H~77H内存单元中,测量数据在显示时须经过转换成为十进制BCD码放在78H~7BH单元中,其中7B存放通道标志数。
寄存器R3用作8路循环控制,R0用作显示数据地址指针。
本系统显示部分采用6位数码管动态扫描显示。
动态扫描显示接口是单片机中应用最为广泛的一种显示方式之一。
其接口电路是把所有显示器的8个笔划段a-h同名端连在一起,而每一个显示器的公共极COM是各自独立地受I/O线控制。
CPU向字段输出口送出字形码时,所有显示器接收到相同的字形码,但究竟是那个显示器亮,则取决于COM端,而这一端是由I/O控制的,所以我们就可以自行决定何时显示哪一位了。
而所谓动态扫描就是指我们采用分时的方法,轮流控制各个显示器的COM端,使各个数码管轮流点亮。
本系统采用6位共阳极数码管,COM端接接P20~P23端,8个笔划段a-h分别按顺序接P07~P00,轮流给P20~P23口高电平,使各个数码管轮流点亮。
在轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约1ms),但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。
电路如图4示:
图4显示控制电路
8255芯片与I/O口相连,用于扩展键盘按键,由按键来控制通道的选通。
8255芯片的PC0~PC3用于控制,PC4~PC7用于控制具体哪个通道选通。
8255芯片的结构图如图5下:
图58255芯片图
8255引脚功能说明:
RESET:
复位输入线,当该输入端外于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。
PA0~PA7:
端口A输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入锁存器。
PB0~PB7:
端口B输入输出线,一个8位的I/O锁存器,一个8位的输入输出缓冲器。
PC0~PC7:
端口C输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入缓冲器。
端口C可以通过工作方式设定而分成2个4位的端口,每个4位的端口包含一个4位的锁存器,分别与端口A和端口B配合使用,可作为控制信号输出或状态信号输入端口。
CS:
片选信号线,当这个输入引脚为低电平时,表示芯片被选中,允许8255与CPU进行通讯。
RD:
读信号线,当这个输入引脚为低电平时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。
WR:
写入信号,当这个输入引脚为低电平时,允许CPU将数据或控制字写8255。
。
3系统程序的设计
3.1初始化程序
系统初始化时,初始化程序主要用来执行70H~77H内存单元清0和P2口置0等准备工作。
3.2主程序
在刚上电时,系统默认为循环显示8个通道的电压值状态。
当进行一次测量后,将显示每一通道的A/D转换值,每个通道的数据显示时间在1S左右。
主程序在调用显示子程序与测量子程序之间循环。
主程序流程图如图6所示。
图6主程序流程图
3.3显示子程序
显示子程序采用动态扫描法实现四位数码管的数值显示。
测量所得的A/D转换数据放在70H~77H内存单元中,测量数据在显示时须经过转换成为十进制BCD码放在78H~77H单元中,其中7BH存放通道标志数。
寄存器R3用作2路循环控制,R0用作显示数据地址指针。
3.4A/D转换测量子程序
A/D转换测量子程序用来控制对ADC0809的2路模拟输入电压的A/D转换,并将对应的数值移入70H~77H内存单元。
A/D转换测量子程序程序流程图如图7所示。
图7A/D转换测量子程序流程图
4调试及性能分析
4.1调试与测试
采用KeilC51编译器进行源程序编译及仿真调试,同时进行硬件电路板的设计制作,烧录好程序后进行软硬件联调,最后进行端口电压的对比测试。
测试对比表如表1所列。
表中标准电压值采用UT56数字万用表测得。
表1简易数字电压表与“标准”数字电压表对比测试表
标准电压值/V
0.00
0.15
1.00
1.45
2.25
2.72
简易电压表测得值/V
0.00
0.16
1.02
1.47
2.26
2.73
绝对误差/V
0.00
+0.01
+0.02
+0.02
+0.01
0.01
标准电压值/V
3.00
3.45
4.00
4.50
4.75
4.90
简易电压表测得值/V
3.01
3.47
4.01
4.52
4.76
4.92
绝对误差/V
+0.01
+0.02
+0.01
0.02
0.01
0.02
从表中可以看出,简易数字电压表与“标准”数字电压表测得的绝对误差均在0.02V以内,这采用8位A/D转换器所能达到的理论误差精度相一致,在一般的应用场合可满足要求。
4.2性能分析
(1)由于单片机为8位处理器,当输入电压为5.00V,ADC0809输出数据值为255(FFH),因此单片机最高的数据分辨率为0.0196V(5/255)。
这就决定了该电压表的最高分精度要求,则应采用12位、13位的A/D转换器。
(2)从表格1中可以看出,简易电压表测得的值基本上均比标准电压值偏大0.01~0.02V.这可以通过校正ADC0809的基准电压来解决。
因为该电压表设计时直接用5V的供电电源作为基准电压,所以电压可能有偏差。
另外,还可以用软件编程来校正测量值。
(3)ADC0809的直流输入阻抗为1MΩ,能满足常用的电压测试需要。
另外,经测试ADC0809可直接在2MHZ的时钟频率下工作,这样可省去二进制分频器14024集成块。
(4)当要测量大于5V的电压时,可在输入口使用分压电阻,而程序中只要将计算程序的除数进行调整就可以了。
但是量程越大,测量精度会越低。
5详细仪器清单
表2仪器清单
序号
仪器名称
数量
1
PCB板
1
2
STC89C52
1
3
ADC0809CCN芯片
1
41
8255芯片
1
5
4.7千欧电阻
4
6
8.2千欧电阻
1
7
510欧电阻
8
8
10欧电阻
2
9
30pF电容
2
10
10uF电容
1
11
按钮
4
12
LED数码管
6
13
11.597MHz晶振
1
6总结
通过这学期的单片机的学习,知道了单片机在实际应用中占据很重要的作用,也了解单片机本身的功能,用编程控制;也了解了单片机的一些扩展功能。
通过这次设计,我更深入地了解到单片机的使用原理和功能。
为期两周的设计中,我看到很多同学都很努力,很认真,我也不敢懈怠。
虽说两周的时间有点仓促,但老师和同学们夜以继日在解决问题,我做简易数字电表的设计中也遇到些许问题,但通过他人的指点,并查阅很多有价值的书籍,我从中认识了不少。
也增强了自己发现问题解决问题的能力。
还有在编程的时候要仔细,要实现一个完整的功能就要考虑全面,在测试程序的时候要善于发现错误,而且可能是一些小问题,比如说把立即数和地址混用,这是很常见的。
虽然这次只是实现电压表的简易设计,我相信通过这次学习,会确定我向更高更远的方向漫步,比如电压测量通过扩展接口电路可实现电容、温度、湿度、压力等测量,广泛应用于工业领域。
本电路设计别具一格,是一种可调度高、低功耗、宽量程的电压表。
可扩展键盘、EEPROM、报警电路,实现电压异常记录、报警等。
参考文献
[1]张鑫.单片微机原理与应用.北京.电子工业出版社.2008
[2]楼然苗.李光飞.单片机课程设计指导.北京.航空航天大学出版社.2007
[3]长洪润.刘秀英.单片机应用设计200例(上、下).北京.航空航天大学出版社.2006
[4]张毅刚.新编MCS-51单片机应用设计(第3版)哈尔滨工业大学出版社.2008
[5]马静.单片机原理与应用.实践教学指导书中国计量出版社.2003
附录一:
A/D转换与控制PCB电路图
附录二:
程序
#include
#include
#include
#definea8255_PAXBYTE[0xD1FF]//PA口地址
#definea8255_PBXBYTE[0xD2FF]//PB口地址
#definea8255_PCXBYTE[0xD5FF]//PC口地址
#definea8255_CONXBYTE[0xD7FF]//控制字地址
#defineucharunsignedchar
#defineuintunsignedint
intDAT;//存转换结果
uintda;
chara0,a1,a2,a3;
sbitEOC=P3^4;
sbitOE=P2^3;
sbitSTART=P2^7;
sbitCLOCK=P2^0;
sbitADDA=P1^3;/*把ADC0809的ADDA引脚与单片机的P1.3引脚用导线连接起来,
再把那W4,W5都接上跳线帽(即ADDB、ADDC都接地),则此两个引脚电平为0,
ADDA可以通过P1.3置0或置1,即可以控制两路输入了*/
ucharcodetable[10]={0xA0,0xBB,0x62,0x2A,0x39,0x2C,0x24,0xBA,0x20,0x28};//数码管不显示小数点的段码
ucharcodetable1[10]={0X80,0X9B,0X42,0X0A,0X19,0X0C,0X04,0X9A,0X00,0X08};//数码管显示小数点的段码
/*上叙数组10个16进制数元数分别对应十进制数0至9*/
/******************************/
/*子函数声明*/
voidadc0809();
voiddelays(void);
voiddelay(void);
ucharinkey();
voiddisplay();
voidInitTimer0(void);
voidint_0();
/***********************************************/
voiddelays(void)//数码管每位显示间隔的时间
{
ucharmm=10;
while(mm--);
}
/********************************************/
voiddelay(void)//按键时的延时消抖子程序
{
uchari;
for(i=250;i>0;i--);
}
/*********************************************************/
ucharinkey()//按键扫描子程序,返回键值类型为uchar型
{
uchari,j=0x10,k;
ucharkeytab[16]={0x18,0x28,0x48,0x88,0x14,0x24,
0x44,0x84,0x12,0x22,0x42,0x82,0x11,0x21,0x41,0x81};//按键编码
a8255_CON=0x81;//设置控制字,PA,PB设为输出,PC口高四位设置为输出,低四位设置为输入
a8255_PC=0x00;
a8255_PA=0xff;
a8255_PB=0xff;
for(i=0;i<4;i++)
{
a8255_PC=j;
a8255_PA=0xff;
k=a8255_PC;//读键盘状态
k=k&0x0f;
if(k!
=0)
{
delay();//延时消除抖动
k=a8255_PC;//重新读PC口状态
k=k&0x0f;//屏蔽高四位,存低四位状态
if(k!
=0)//k不为0,有键按下则跳出循环
break;
}
j=j<<1;//将下一列(PC5、PC6或PC7)置1,低四位为0
delay();
}
k=k+j;//将按键状态赋给k
for(i=0;i<16;i++)
{
if(keytab[i]==k)break;
}
returni;//返回按键编号值
}
/**********************************************************/
voiddisplay()//数码管显示测量值,0V<=a0.a1a2a3<=2.5V
{
da=(uint)((DAT*2.5/256)*1000);//数转模拟
a0=(char)(da/1000);
a1=(char)(da%1000/100);
a2=(char)(da%100/10);
a3=(char)(da%10);
a8255_PB=table1[a0];//使最高位显示带小数点
a8255_PA=0xfb;
delays();
a8255_PA=0xff;
a8255_PB=table[a1];
a8255_PA=0xf7;
delays();
a8255_PA=0xff;
a8255_PB=table[a2];
a8255_PA=0xef;
delays();
a8255_PA=0xff;
a8255_PB=table[a3];
a8255_PA=0xdf;
delays();
a8255_PA=0xff;
}
/******
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简易 数字 电压表
![提示](https://static.bdocx.com/images/bang_tan.gif)