数字电压表课程设计.docx

上传人:b****7 文档编号:11325089 上传时间:2023-02-26 格式:DOCX 页数:15 大小:168.42KB
下载 相关 举报
数字电压表课程设计.docx_第1页
第1页 / 共15页
数字电压表课程设计.docx_第2页
第2页 / 共15页
数字电压表课程设计.docx_第3页
第3页 / 共15页
数字电压表课程设计.docx_第4页
第4页 / 共15页
数字电压表课程设计.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

数字电压表课程设计.docx

《数字电压表课程设计.docx》由会员分享,可在线阅读,更多相关《数字电压表课程设计.docx(15页珍藏版)》请在冰豆网上搜索。

数字电压表课程设计.docx

数字电压表课程设计

 

湖南科技大学

单片机课程设计

 

题目数字电压表

姓名刘峥嵘

学院机电工程学院

专业测控技术与仪器

学号**********

指导教师戴巨川

成绩

 

二〇一二年六月二日制

摘要

本课题实验主要采用AT89S52芯片和ADC0809芯片来完成一个简易的数字电压表,完成对输入0~5V的模拟直流电压的测量,并通过一个4位一体的8段LED数码管进行显示,测量误差约为0.02V。

由AT89S52和ADC0809组成的数字电压表具有结构简单,易于操作,灵敏度高的特点。

该电压表的测量电路方案由三个模块组成:

A/D转换模块、数据处理模块及显示控制模块。

A/D转换主要由芯片ADC0809来完成,它负责把采集到的模拟量转换为相应的数字量再传送到数据处理模块。

数据处理则由芯片AT89S52来完成,其负责把ADC0809传送来的数字量经一定的数据处理,产生相应的显示码送到显示模块进行显示;另外它还控制着ADC0809芯片的工作。

显示模块主要由7段数码管组成,显示测量到的电压值。

以上方法能较准确的对电压的测量。

从而实现电压表的功能。

 

第一章数字电压表的功能要求说明及设计方案介绍

1.1课题设计实验任务···········································1

1.2功能要求说明···············································1

1.3数字电压表设计方案·········································1

1.4数字电压表工作原理·········································2

第二章硬件电路的设计

2.1数字电压表各模块功能简要介绍·······························3

2.2电路原理图·················································5

2.3元器件清单·················································6

第三章系统程序的设计·

3.1初始化程序·················································7

3.2主程序·····················································7

3.3C程序清单··················································8

第四章调试及性能分析

4.1电压表仿真结果及误差分析···································10

4.2电压表设计结论·············································10

4.3设计体会···················································11

参考文献

第一章数字电压表的功能及设计方案介绍

1.1课题设计实验任务

利用单片机AT89S52和ADC0809设计一个数字电压表,能够测量0-5V之间的直流电压值,四位数码管显示,要求使用的元器件数目尽量少。

1.2功能要求

电路通电或按复位键时,通过改变电位器的阻值改变模拟输入电压,不断的将模拟电压转换成数字量,通过LED显示出所测得的模拟电压。

在测试中测试的电压值必须和实际的电压值不超过0.05V的电压。

在改变电压时,能够准确的侧量出电压的变化值。

1.3数字电压表设计方案

要实现电压的测试有多种方案,其中两种比较简单的且精确度比较高的可以分别采用并行ADC0809芯片和TLC549芯片,其中各芯片都有可取之处。

方案一:

用TLC549串行芯片作模数采样芯片,占用的单片机的I/O口线少,且占用电路面积小,只是编程复杂点。

方案二:

用ADC0809并行芯片作模数采样芯片,需要占用一个I/O口,不过可以循环采样8路模拟通道,占用板子的面积大,编程相对来说简单点。

本程序采用方案二,采用常用的51单片机作为控制芯片,ADC0809芯片的CLK时钟信号脚接单片机的ALE脚;ADC0809的参考电压接VCC,IN0接输入电压,ADC0809通过采样进来的数据信号送给单片机,再通过

计算可以得到电压值,再通过显示电路,将所求得的电压值显示出来。

通过调节连接IN0引脚的电位器及可以调节电压是电压在0~5V左右变化。

其硬件流程图如下所示:

图1.1硬件流程图

1.4数字电压表工作原理

数字电压原理:

这里主要是利用ADC0809模数串口芯片,ADC0809芯片的基准电压脚外接电压为5V,则最大可以测得的电压为5V,ADC0809芯片的模拟输入脚通过电位器接5V电压,进行模拟采样,通过调整电位器的值改变模拟量。

输入的模拟量经过ADC0809芯片的内部8位开关电容逐次逼近A/D转换器,转换成8为二进制数,其最小的分辨率为0.0196(VREF=0.0196V),D为转化的数字量,再通过

可以求得模拟电压,最后通过LED就可将所测得电压显示出来。

 

第二章系统硬件电路的设计

2.1数字电压表各模块功能简要介绍

2.1.1时钟电路

ADC0809的时钟取自AT89S52的ALE的信号,接在ADC0809的CLK端。

2.1.2复位电路

按键复位具有上电复位功能,若要复位,只要按图中的RESET键,电源VCC经电阻R1、R2分压,在RESET端产生一个复位高电平。

上电复位电路要求接通电源后,通过外部电容充电来实现单片机自动复位操作。

上电瞬间RESET引脚获得高电平,随着电容的充电,RERST引脚的高电平将逐渐下降。

RERST引脚的高电平只要能保持足够的时间(2个机器周期),单片机就可以进行复位操作。

2.1.3单片机系统电路

单片机系统电路采用AT89S52芯片,40引脚的双列直插封装方式,允许RAM、定时器/计数器、串口、中断继续工作;作为输出口,每位能驱动8个TTL逻辑电平,能进行定时器/计数器、串口、中断等系列实验。

2.1.4LED显示电路

它的连接方式为8位LED显示器的段控口a,b,c,d,e,f,g,dp分别接单片机的P1口;位控口1,2,3,4分别接单片机的P2口。

2.1.5AD转换电路

把“单片机系统”区域中的P3.6与“模数转换模块”区域中的ST和ALE端用导线相连接;把“单片机系统”区域中的P3.7与“模数转换模块”区域中的OE端用导线相连接;把“单片机系统”区域中的P3.3与“模数转换模块”区域中的EOC端用导线相连接;把“单片机系统”区域中的ALE与“模数转换模块”区域中的CLK端用导线相连接;把“模数转换模块”区域中的A2A1A0端子连接到“电源模块”区域中的GND端;把“模数转换模块”区域中的IN0端子连接到“三路可调电压模块”区域中的VR1端;把“单片机系统”区域中的P0.0-P0.7用8芯排线连接到与“模数转换模块”区域中的D0D1D2D3D4D5D6D7端子。

2.1.6ADC0809的简介

ADC0809是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件。

它是逐次逼近式A/D转换器,可以和单片机直接接口。

(1)ADC0809的内部逻辑结构

图2.1ADC0809结构图

由上图可知,ADC0809由一个8路模拟开关、一个地址锁存与译码器、一个A/D转换器和一个三态输出锁存器组成。

多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。

三态输出锁器用于锁存A/D转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。

(2)引脚结构

IN0-IN7:

8条模拟量输入通道

ADC0809对输入模拟量要求:

信号单极性,电压范围是0-5V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。

地址输入和控制线:

4条

ALE为地址锁存允许输入线,高电平有效。

当ALE线为高电平时,地址锁存与译码器将A,B,C三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行转换。

A,B和C为地址输入线,用于选通IN0-IN7上的一路模拟量输入。

通道选择表如下表所示。

图2.2ADC0809引脚图

 

C

B

A

选择的通道

0

0

0

IN0

0

0

1

IN1

0

1

0

IN2

0

1

1

IN3

1

0

0

IN4

1

0

1

IN5

1

1

0

IN6

1

1

1

IN7

表2.1

数字量输出及控制线:

11条。

ST为转换启动信号。

当ST上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D转换;在转换期间,ST应保持低电平。

EOC为转换结束信号。

当EOC为高电平时,表明转换结束;否则,表明正在进行A/D转换。

OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。

OE=1,输出转换得到的数据;OE=0,输出数据线呈高阻状态。

D7-D0为数字量输出线。

CLK为时钟输入信号线。

因ADC0809的内部没有时钟电路,所需时钟信号必须由外界提供,通常使用频率为500KHZ,VREF(+),VREF(-)为参考电压输入。

2.2电路原理图

2.3元器件清单

名称

规格

数量

备注

电阻

470

16个

4.7K

4个

10K

1个

1K

2个

电容

30pF

2个

10μF

1个

极性电容

发光二极管

1个

按键

1个

晶振

12MHz

1个

排阻

102

若干

单排针

若干

电位器

W503

1个

芯片

AT89S52

1块

ADC0809

1块

LED数码管

4位

1块

脚座

40

1个

8

1个

表2.2元器件清单

 

第三章系统程序的设计

3.1初始化程序

系统上电时,将A/D转换芯片初始化,并将A,B,C三条地址线的地址信号进行锁存。

3.2主程序

图3.1主程序流程图

当进行一次测量后,将显示出每一通道的A/D转换值。

每一个位的数据延时时间在40us左右。

其流程图如上所示:

而输出数据采用动态扫描法实现4位数码管的数值显示。

测量所得的A/D转换数据传送到P0口,测量数据在显示时需经内部转换为十进制电压值由P1口输出中,其中P2口控制段选。

3.3C程序清单

#include

unsignedcharcodedispbitcode[]={0xfb,0xfd,0xe,0xf7,0xef,0xdf,0xbf,0x7f};

unsignedcharcodedispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,

0x92,0x82,0xf8,0x80,0x90,0x00};

unsignedchardispbuf[8]={10,10,10,10,10,0,0,0};

unsignedchari;

sbitST=P3^6;

sbitOE=P3^7;

sbitEOC=P3^2;

unsignedcharchannel=0x8c;//IN0

unsignedchargetdata;

voidmain(void)

{

TMOD=0x01;

TH0=(65536-4000/12)/256;

TL0=(65536-4000/12)%256;

TR0=1;

ET0=1;

EA=1;

P3=channel;

while

(1)

{

ST=0;ST=1;

ST=0;

while(EOC==0);

OE=1;

getdata=P0;

OE=0;

getdata=getdata*500/256;

dispbuf[2]=getdata/100;

getdata=getdata%100;

dispbuf[1]=getdata/10;

dispbuf[0]=getdata%10;

}

}

voidt0(void)interrupt1using0

{

TH0=(65536-4000/12)/256;

TL0=(65536-4000/12)%256;

P1=dispcode[dispbuf[i]];

if(i<=3)

{

P2=dispbitcode[i];

}

i++;

if(i==8)

{

i=0;

}

}

 

第四章调试及性能分析

4.1电压表仿真结果及误差分析

次数

1

2

3

4

5

6

7

8

9

理论值/V

0.50

1.00

1.35

1.85

2.00

3.50

4.12

4.50

5.00

实际测量值/V

0.48

0.98

1.33

1.83

1.97

3.47

4.09

4.47

5.00

仿真值

0.50

1.00

1.35

1.85

2.00

3.50

4.11

4.49

5.00

表4.1电压表测试结果

仿真图如下图。

仿真结论,通过多次的反复测试,发现当电压比较小时电压的实际测量值和ADC0809芯片的测量显示值误差几乎为零,当电压不断增大时两者的电压值相差慢慢增大,但误差不大,大约在0.01~0.06V左右,实际电压值比测得的电压值小。

在实物中通过改变电位器的输入电压可以,ADC0809转换芯片测得的电压值和万用表测得的电压值相差0.02V,而ADC0809芯片的精确度为0.019左右,误差大小为2%。

在制作的数字电压表中,所测得的数字电压值和实际电压值相差0.02V,这个误差可能由于单片机能够精确的小数为小数点后的6位,及小数点后的7位之后的全部去掉,会引起一定误差。

在本次设计中重要的是如何将ADC0809芯片所采集的数据送给单片机,同时在将数据送给单片机后如何将ADC0809芯片读得的数据进行计算,然后进行显示。

在按键时如何控制进入电压测试,如何停止电压测试,在电压测试时必须可以不断的调节电压可以测量出电压值的大小。

4.2电压表设计结论

通过本次设计课程设计,我更加的熟悉了单片机汇编的程序编写,在这次当中遇到了一些问题,当时定义数据时,将整型数据定义成了无符号字符型,去测电压电压值不变,最后通过调试发现是变量类型定义错了,在使用串行芯片ADC0809时要注意A/D转化芯片的时序,只有在正确的时序时才能读得准确的数据,在写程序时先将显示程序写好,将显示程序调好后,在去写其他程序,当要用到显示程序时在去调用它,这样显示程序不用管,在调试程序中采用分步调试可以减少程序的复杂性。

4.3设计体会

本次设计中采用串行芯片做数字电压表,其中串行芯片可节省单片机的I/O口,单片机总共有32个I/O口其中LDE显示就占用了P1和P2口,P3口作为ADC0809芯片的三根控制线,虽然采用串行芯片在编程方面变得有点复杂,但它占用的地方比较小。

在串行芯片使用时,我们必须重点了解串行芯片的时序图,懂得串行芯片的数据传送方式。

当时我认为该芯片也就只有三个编程脚,其中分别为CS、DATAOUT、CLK三个脚编程并不是那么简单,串行芯片需要采集的数据需要按照时序,一个一个得发送到单片机,经过计算在在LED上显示出来,当时我采用的时序和芯片的时序不同,调试了好久都没调试出来,后来参照芯片资料,后改过来单还是发现问题,虽然采集到数据但是LED显示的数字和实际的测量值很大区别,我通过调试程序后发现我将变量的类型定义错了,导致了数据发生错误,我将无符号整型变量定义为无符号字符型变量,而变量的实际值远远超过了那个值

使得单片机计算错误,调整电压的大小LED总是显示同一个数,在定义变量时要考虑变量的范围否则程序会出错。

总之通过这次的课程设计,我们自己可以通过编程更加了解到了单片机的内部资源,懂得了如何使用单片机的编程。

通过本次课程设计,我发现自己的动手能力和编程能力都还是有所欠缺。

我认为我们因该多做些实物,增强我们动手能力的同时也提升了我们对相关知识的了解。

以及布置相关的编程题,例如:

温度计编程,液晶的显示等等,增强了编程能力的同时也丰富了相关的知识。

图4.1仿真图

 

参考文献

[1]何立民.单片机高级教程——应用与设计[M].北京:

北京航空航天大学出版社,2000.

[2]李朝青.单片机原理及借口技术[M].北京:

北京航空航天大学出版社,2005.

[3]赖麒文.8051单片机C语言彻底应用[M]北京.科学出版社,2002.

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

当前位置:首页 > 高等教育 > 历史学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1