基于51单片机的数字电压表设计.docx

上传人:b****4 文档编号:5481178 上传时间:2023-05-08 格式:DOCX 页数:21 大小:293.39KB
下载 相关 举报
基于51单片机的数字电压表设计.docx_第1页
第1页 / 共21页
基于51单片机的数字电压表设计.docx_第2页
第2页 / 共21页
基于51单片机的数字电压表设计.docx_第3页
第3页 / 共21页
基于51单片机的数字电压表设计.docx_第4页
第4页 / 共21页
基于51单片机的数字电压表设计.docx_第5页
第5页 / 共21页
基于51单片机的数字电压表设计.docx_第6页
第6页 / 共21页
基于51单片机的数字电压表设计.docx_第7页
第7页 / 共21页
基于51单片机的数字电压表设计.docx_第8页
第8页 / 共21页
基于51单片机的数字电压表设计.docx_第9页
第9页 / 共21页
基于51单片机的数字电压表设计.docx_第10页
第10页 / 共21页
基于51单片机的数字电压表设计.docx_第11页
第11页 / 共21页
基于51单片机的数字电压表设计.docx_第12页
第12页 / 共21页
基于51单片机的数字电压表设计.docx_第13页
第13页 / 共21页
基于51单片机的数字电压表设计.docx_第14页
第14页 / 共21页
基于51单片机的数字电压表设计.docx_第15页
第15页 / 共21页
基于51单片机的数字电压表设计.docx_第16页
第16页 / 共21页
基于51单片机的数字电压表设计.docx_第17页
第17页 / 共21页
基于51单片机的数字电压表设计.docx_第18页
第18页 / 共21页
基于51单片机的数字电压表设计.docx_第19页
第19页 / 共21页
基于51单片机的数字电压表设计.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于51单片机的数字电压表设计.docx

《基于51单片机的数字电压表设计.docx》由会员分享,可在线阅读,更多相关《基于51单片机的数字电压表设计.docx(21页珍藏版)》请在冰点文库上搜索。

基于51单片机的数字电压表设计.docx

基于51单片机的数字电压表设计

目录

摘要I

1绪论1

1.1数字电压表介绍1

1.2仿真软件介绍1

1.3本次设计要求2

2单片机和AD相关知识3

2.151单片机相关知识3

2.2AD转换器相关知识4

3数字电压表系统设计5

3.1系统设计框图5

3.2单片机电路5

3.3ADC采样电路6

3.4显示电路6

3.5供电电路和参考电压7

3.6数字电压表系统电路原理图7

4软件设计8

4.1系统总流程图8

4.2程序代码8

5数字电压表电路仿真15

5.1仿真总图15

5.2仿真结果显示15

6系统优缺点分析16

7心得体会17

参考文献18

1绪论

1.1数字电压表介绍

数字电压表简称DVM,数字电压表基本原理是将输入的模拟电压信号转化为数字信号,再进行输出显示。

而A/D转换器的作用是将连续变化的模拟信号量转化为离散的数字信号,器基本结构是由采样保持,量化,编码等几部分组成。

因此A/D转换是此次设计的核心元件。

输入的模拟量经过A/D转换器转换,再由驱动器驱动显示器输出,便得到测量的数字电压。

本次自己的设计作品从各个角度分析了A/D转换器组成的数字电压表的设计过程及各部分电路的组成及原理,并且分析了数模转换进而使系统运行起来的原理及方法。

通过自己的实践提高了动手能力,也只有亲历亲为才能收获掌握到液晶学过的知识。

其实也为建立节约成本的意识有些帮助。

本次设计同时也牵涉到了几个问题:

精度、位数、速度、还有功耗等不足之处,这些都是要慎重考虑的,这些也是在本次设计中的收获。

1.2仿真软件介绍

ProteusISIS是英国Labcenter公司开发的电路分析与实物仿真软件。

它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:

(1)实现了单片机仿真和SPICE电路仿真相结合。

具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。

(2)支持主流单片机系统的仿真。

目前支持的单片机类型有:

68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。

(3)提供软件调试功能。

在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如KeilC51uVision2等软件。

(4)具有强大的原理图绘制功能。

可以仿真51系列、AVR、PIC、ARM、等常用主流单片机。

还可以直接在基于原理图的虚拟原型上编程,再配合显示及输出,能看到运行后输入输出的效果。

配合系统配置的虚拟逻辑分析仪、示波器等,Proteus建立了完备的电子设计开发环境。

在PROTEUS绘制好原理图后,调入已编译好的目标代码文件:

*.HEX,可以在PROTEUS的原理图中看到模拟的实物运行状态和过程。

PROTEUS是单片机课堂教学的先进助手。

PROTEUS不仅可将许多单片机实例功能形象化,也可将许多单片机实例运行过程形象化。

前者可在相当程度上得到实物演示实验的效果,后者则是实物演示实验难以达到的效果。

它的元器件、连接线路等却和传统的单片机实验硬件高度对应。

这在相当程度上替代了传统的单片机实验教学的功能,例:

元器件选择、电路连接、电路检测、电路修改、软件调试、运行结果等。

课程设计、毕业设计是学生走向就业的重要实践环节。

由于PROTEUS提供了实验室无法相比的大量的元器件库,提供了修改电路设计的灵活性、提供了实验室在数量、质量上难以相比的虚拟仪器、仪表,因而也提供了培养学生实践精神、创造精神的平台。

1.3本次设计要求

本次设计的作品要求制作数字电压表的量程为0到10v,由于用到的模数转换芯片是ADC0809,设计系统给的供电电压为+5v,所以能够测量的电压范围为-0.25v到5.25v之间,但是一般测量的直流电压范围都在这之上,所以采用电阻分压网络,设计的电压测量范围是0到25v之间,满足设计要求的最大量程5v的要求。

同时设计的精度为小数点后三位,满足要求的两位小数的精度,在不考虑AD芯片的量化误差的前提下,此次设计的精度能够满足一般测量的要求。

 

2单片机和AD相关知识

2.151单片机相关知识

51单片机是对目前所有兼容intel8031指令系统的单片机的统称。

该系列单片机的始祖是intel的8031单片机,后来随着技术的发展,成为目前广泛应用的8为单片机之一。

单片机是在一块芯片内集成了CPU、RAM、ROM、定时器/计数器和多功能I/O口等计算机所需要的基本功能部件的大规模集成电路,又称为MCU。

51系列单片机内包含以下几个部件:

一个8位CPU;一个片内振荡器及时钟电路;

4KB的ROM程序存储器;

一个128B的RAM数据存储器;

寻址64KB外部数据存储器和64KB外部程序存储空间的控制电路;

32条可编程的I/O口线;

两个16位定时/计数器;

一个可编程全双工串行口;

5个中断源、两个优先级嵌套中断结构。

51系列单片机如下图:

图151单片机引脚图

2.2A/D转换器相关知识

ADC0809是美国国家半导体公司生产的CMOS工艺8通道,8位逐次逼近式A/D转换器。

其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。

(1)主要特性:

  1)8路输入通道,8位A/D转换器,即分辨率为8位。

  2)具有转换起停控制端。

  3)转换时间为100μs(时钟为640kHz时),130μs(时钟为500kHz时) 

  4)单个+5V电源供电

  5)模拟输入电压范围0~+5V,不需零点和满刻度校准。

  6)工作温度范围为-40~+85摄氏度

  7)低功耗,约15mW。

(2)内部结构

ADC0809是CMOS单片型逐次逼近式A/D转换器,内部结构如图13.22所示,它由8路模拟开关、地址锁存与译码器、比较器、8位开关树型A/D转换器、逐次逼近寄存器、逻辑控制和定时电路组成。

图2ADC0909引脚

3数字电压表系统设计

3.1系统设计框图

此次设计的是数字电压表,要求的电压范围是0~5v,而设计扩展的量程为0~25v。

系统设计主要包括四个部分:

分别是电源模块、AD模数转换部分、51单片机最小系统部分、1602液晶显示部分。

首先由单片机初始化ADC0809模数转换芯片和1602液晶显示,当外接被测电压后,ADC0809将模拟电压信号转换为数字信号输入到单片机的I/O口,通过单片机处理后将电压的大小显示在1602液晶上面。

如下是本次设计作品的框图:

图3系统框图

3.2单片机电路

单片机最小系统如下图所示,各个引脚都已经标出,而且四个I/O口都已经用排阵引出,方便外接I/O扩展用。

图4单片机最小系统

3.3ADC采样电路

由于ADC0809是带地址锁存的模数转换器件,ADDA、ADDB、ADDC为模拟通道选择,编码为000~111分别选中IN0~IN7。

ALE为地址锁存信号,其上升沿锁存ADDA、ADDB、ADDC的信号,译码后控制模拟开关,接通八路模拟输入中相应的一路。

CLK为输入时钟,为AD转换器提供转换的时钟信号,典型工作频率为640KHz。

START为AD转换启动信号,正脉冲启动ADDA~ADDC选中的一路模拟信号开始转换。

OE为输出允许信号,高电平时候打开三态输出缓存器,是转换后的数字量从D0~D7输出。

EOC为转换结束信号,启动转换后EOC变为低电平,转换完成后EOC编程高电平。

图5ADC模数转换

3.4显示电路

以下是1602液晶引脚的接线图,中间没有接线的为数据控制端口。

1602字符型通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样:

图61602引脚图

3.5供电电路和参考电压

由于此次系统的芯片工作电压为+5v,所以用常用的三端稳压器LM317和LM337构成的电源系统供电,其中ADC0809要提供一个准确的参考电源才能正常的工作,而LM317正好能够达到要求。

图7系统供电部分

3.6数字电压表系统电路原理图

如下是此次数字电压表系统的总原理图,其中的连线用网络标号表示出来,省去了连线的麻烦,而且是总图的可读性增强。

图8数字电压表总原理图

4软件设计

4.1系统总流程图

此次设计的数字电压表系统比较简单,就设置了一个量程为0~25v,所以没有用到按键控制,也没有其他的功能,因此程序比较简单,在输入模拟信号时采用电阻分压,最终的采样输入电压只有实际输入电压的十分之一,所以在编写程序中要编写一段数据调整程序,如下为系统总流程图:

图9系统流程图

4.2程序代码

/********电压表********/

#include

#include//库函数头文件,代码中引用了_nop_()函数

/*ADC初始定义*/

sbitstart=P3^0;//转换开始控制

sbitoe=P3^2;//输出允许控制

sbiteoc=P3^1;//转换结束信号

sbitclock=P3^3;//转换时钟

sbitP0_2=P0^2;//蜂鸣器

sbitP0_5=P0^5;

sbitP0_6=P0^6;

sbitP0_7=P0^7;

/*1602液晶初始定义*/

sbitRS=P0^0;//读控制

sbitRW=P0^3;//写控制

sbitE=P0^1;//使能端

unsignedcharda0,da1,da2,da3,da4;

unsignedinttemp;

unsignedintd1,d2,d3;

unsignedchardat;//数字电压量

unsignedcharlcdd[]="0123456789";

voidlcd_w_cmd(unsignedcharcom);//写命令函数

voidlcd_w_dat(unsignedchardat);//写数据函数

voiddisplay(unsignedchardat);//显示函数

unsignedcharlcd_r_start();//读状态函数

voidint1();//LCD初始化函数

voiddelay(unsignedchart);//可控延时函数

voiddelay1();//软件实现延时函数,5个机器周期

/*显示函数部分*/

voiddisplay(unsignedchardat)

{

temp=5*dat;//量程扩大五倍

da0=temp/51/10;//十位

da1=temp/51%10;//个位

d1=temp%51;

d1=d1*10;

da2=d1/51;//十分位

d2=d1%51;

d2=d2*10;

da3=d2/51;//百分位

d3=d2%51;

d3=d3*10;

da4=d3/51;//千分位

lcd_w_cmd(0x0c);//设置光标不显示、不闪烁

delay(20);

lcd_w_cmd(0xc0);//第二行起始显示地址0x80

delay(20);

delay

(2);

lcd_w_dat('V');//显示字符串‘volatageis’

lcd_w_dat('o');

lcd_w_dat('l');

lcd_w_dat('a');

lcd_w_dat('t');

lcd_w_dat('a');

lcd_w_dat('g');

lcd_w_dat('e');

lcd_w_dat('');

//显示电压的大小

lcd_w_dat(lcdd[da0]);//十位

lcd_w_dat(lcdd[da1]);//个位

lcd_w_dat('.');//小数点

lcd_w_dat(lcdd[da2]);//十分位

lcd_w_dat(lcdd[da3]);//百分位

lcd_w_dat(lcdd[da4]);//千分位

lcd_w_dat('V');//单位

}

/*主函数*/

voidmain()

{

P0_2=1;//关蜂鸣器

P0_5=P0_6=P0_7=0;//选择000第一通道

int1();//LCD初始化

while

(1)

{

start=0;

start=1;//获得上升沿复位

start=0;//获得下降沿启动转换,同时ALE开锁存

do

{

clock=~clock;//时钟信号

}

while(eoc==0);//等待转换结束,eoc=1结束

oe=1;//三态锁存缓冲器打开

dat=P1;//数字电压信号输出

oe=0;//三态锁存缓冲器关闭

display(dat);

}

}

/*延时函数*/

voiddelay(unsignedchart)

{

unsignedcharj,i;

for(i=0;i

for(j=0;j<20;j++);

}

/*延时函数1*/

voiddelay1()

{

_nop_();

_nop_();

_nop_();

}

/*LCD初始化函数*/

voidint1()

{

lcd_w_cmd(0x3c);//设置工作方式

lcd_w_cmd(0x0c);//设置光标

lcd_w_cmd(0x01);//清屏

lcd_w_cmd(0x06);//设置输入方式

lcd_w_cmd(0x80);//设置初始显示位置

}

/*LCD读状态函数*/

//返回值:

返回状态字,最高位D7=0,LCD控制器空闲;D7=1,LCD控制器忙

unsignedcharlcd_r_start()

{

unsignedchars;

RW=1;//RW=1,RS=0,读LCD状态

delay1();

RS=0;

delay1();

E=1;//E端时序

delay1();

s=P2;//从LCD的数据口读状态

delay1();

E=0;

delay1();

RW=0;

delay1();

return(s);//返回读取的LCD状态字

}

/*LCD写命令函数*/

voidlcd_w_cmd(unsignedcharcom)

{

unsignedchari;

do

{//查LCD忙操作

i=lcd_r_start();//调用读状态字函数

i=i&0x80;//与操作屏蔽掉低7位

delay

(2);

}

while(i!

=0);//LCD忙,继续查询,否则退出循环

RW=0;

delay1();

RS=0;//RW=0,RS=0,写LCD命令字

delay1();

E=1;//E端时序

delay1();

P2=com;//将com中的命令字写入LCD数据口

delay1();

E=0;

delay1();

RW=1;

delay(255);;

}

/*LCD写数据函数*/

voidlcd_w_dat(unsignedchardat)

{

unsignedchari;

do

{//查忙操作

i=lcd_r_start();//调用读状态字函数

i=i&0x80;//与操作屏蔽掉低7位

delay

(2);

}

while(i!

=0);//LCD忙,继续查询,否则退出循环

RW=0;

delay1();

RS=1;//RW=1,RS=0,写LCD数据

delay1();

E=1;//E端时序

delay1();

P2=dat;//将dat中的显示数据写入LCD数据口

delay1();

E=0;

delay1();

RW=1;

delay(255);

}

5数字电压表电路仿真

5.1仿真总图

为了验证此次设计原理图的正确性,在制作实物之前用专业软件做了仿真,在Proteus软件中设置AT89C51单片机的晶振频率为12MHz。

本电路EA接高电平,没有扩展片外ROM。

如下图是此次系统仿真的总原理图部分:

图8仿真总图

通过用protues软件的仿真发现此次设计的系统原理图能够实现电压的正确测量,而且电压的误差较小,1602液晶屏能够正确显示出测量出来的结果。

5.2仿真结果显示

如下图为此次仿真的测量电压的结果的截图:

图9仿真结果显示

6系统性能分析

通过理论分析和电路仿真,现在对此次课程设计的数字电压表系统设计结果进行总结。

通过仿真我们可以看到仿真结果和理论分析是相符合的,也即此次设计的系统能够在一定的条件下达到课程设计目的,实现对外接电压的测量,电路结构简单,但是可以看出在系统的稳定性及可靠性方面做得不够。

具体体现在以下几个方面:

(1)数字电压表系统中对于外界被测电压的变化反应不够灵敏,变化比较慢,主要是因为ADC模数转换芯片的转换速率不够;

(2)数字电压表系统测量的外界电压不够准确,跟用示波器或者高精度的电压表测量的结果有偏差,主要是因为ADC芯片的位数不够;

(3)而且ADC的参考电压不准确也会造成测量结果的不准确;

(4)另外很重要的影响因素是因为AD芯片的测量输入电压最大为5v,而设计的是25v,量程扩大了五倍,运用的是电阻分压网络,如果用精密电阻可以做到很高的精度,而设计中用的是5%误差的碳膜电阻,温度系数高,而且不稳定,这是很重要的一个影响因素。

针对上述问题,理论上可以用一下方法进行改进:

(1)在换用高精度的ADC芯片能够改善测量精度的问题,一般用12位AD既能满足要求;

(2)制作高精度电压参考源,通过提高ADC模数转换芯片的参考电压的精度来提高测量的电压精度;

(3)运用高精度的金属膜电阻构成分压网络,能够最大限度提高精度;

(4)通过查阅书籍可以找到ADC0809的误差系数和碳膜电阻的温度系数,然后在编程的时候进行软件的补偿和参数校正,能够最优化的用软件来补偿硬件的误差问题,这个在编程思想中是很重要的。

虽然时间紧迫,最终按照仿真成功的原理图焊接实物,并调试,调试成功!

而且在老师的指点下,使系统得到了最大优化的提高。

 

7心得体会

通过与同学的讨论与认真计算设计分析所完成的,课程设计的任务是设计、组装并调试一个数字电压表测量系统。

需要我们综合运用单片机等课程的知识,通过查阅资料、方案论证与选定;设计和选取电路和元器件;分析指标及讨论,完成设计任务。

在这次课程设计中,我学会了怎样去根据课题的要求去设计电路和调试电路。

动手能力得到很大的提高。

从中我发现自己并不能很好的熟练去使用我所学到的高频电路知识。

在以后学习中我要加强对使用电路的设计和选用能力。

但由于电路比较简单、定型,而不是真实的生产、科研任务,所以我们基本上能有章可循,完成起来并不困难。

把过去熟悉的定型分析、定量计算逐步,元器件选择等手段结合起来,掌握工程设计的步骤和方法,了解科学实验的程序和实施方法。

这对今后从事技术工作无疑是个很好的训练。

通过这种综合训练,我们可以掌握电路设计的基本方法,提高动手组织实验的基本技能,培养分析解决电路问题的实际本领,为以后毕业设计和从事电子实验实际工作打下基础。

同时也让我充分认识到自己的空想与实践的差别,认识莫眼高手低,莫闭门造车,知识都在不断更新和流动之中,而扎实的基础是一切创造的源泉,只有从本质上理解了原理,才能更好的于疑途寻求柳暗花明,实现在科学界的美好畅游和寻得创造的快乐。

还有就是每次在组团做试验都会感觉特别的充实,我们可以按照自己设计的电路去完成,老师也不是死板的要求我们怎么怎么,而是给了我们尽可能大的自己决定的余地,这次的元器件都是按照我们设计出来的电路参数给定的,而且每位老师都很耐心的为我们解决试验中所出现的问题,最后真心的感谢老师对我们课程设计的建议和帮助,我们才得以圆满的完成这次课程设计!

 

参考文献

[1]李群芳,张士军,黄建.单片微型计算机与接口技术.北京:

电子工业出版社,2008

[2]李群芳.单片机原理接口与应用.北京:

清华大学出版社,2005

[3]张迎新.单片微型计算机原理、应用及接口技术.北京:

国防工业出版社,1999

[4]高峰.单片微机应用系统设计及使用技术.北京:

机械工业出版社,2007

[5]彭伟.单片机c语音程序设计实例基于protues仿真.北京:

电子工业出版社,2007

 

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2