单片机课程设计数字电压表文档格式.docx
- 文档编号:21623822
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:17
- 大小:158.25KB
单片机课程设计数字电压表文档格式.docx
《单片机课程设计数字电压表文档格式.docx》由会员分享,可在线阅读,更多相关《单片机课程设计数字电压表文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
4.2逐次逼近式A/D转换模块设计..................................7
4.2.1 ADC0808简介.......................................7
4.2.2ADC0808内部结构图.................................8
4.2.3 A/D转换电路设计...................................9
4.38255端口扩展模块...........................................9
4.4LED显示模块...............................................10
4.5 Protues仿真电路设计
4.5.1 电路仿真图........................................10
4.5.2 电路工作原理......................................11
第5章 系统软件设计
5.1 系统主程序设计...........................................12
5.2系统源程序说明...........................................13
第6章调试与测试结果分析.........................................15
第7章结论.......................................................16
附录1源程序代码..................................................17
附录2设计原理图..................................................18
第1章绪论
数字电压表的基本工作原理是利用A/D转换电路将待测的模拟信号转换成数字信号,通过相应换算后将测试结果以数字形式显示出来的一种电压表。
较之于一般的模拟电压表,数字电压表具有精度高、测量准确、读数直观、使用方便等优点。
电压表的数字化测量,关键在于如何把随时连续变化的模拟量转化成数字量,完成这种转换的电路叫模数转换器(A/D)。
数字电压表的核心部件就是A/D转换器,由于各种不同的A/D转换原理构成了各种不同类型的数字电压表。
一般说来,A/D转换的方式可分为两类:
积分式和逐次逼近式。
积分式A/D转换器是先用积分器将输入的模拟电压转换成时间或频率,再将其数字化。
根据转化的中间量不同,它又分为U-T(电压-时间)式和U-F(电压-频率)式两种。
逐次逼近式A/D转换器分为比较式和斜坡电压式,根据不同的工作原理,比较式又分为逐次比较式及零平衡式等。
斜坡电压式又分为线性斜坡式和阶梯斜坡式两种。
在高精度数字电压表中,常采用由积分式和比较式相结合起来的复合式A/D转换器。
本设计以AT89C52单片机为核心,以逐次比较型A/D转换器ADC0809、数码管显示器为主体,构造了一款简易的数字电压表,能够测量1路0~5V直流电压,最小分辨率0.019V。
2.1 设计任务
利用ADC0809,AT89C52单片机及显示电路,设计一个数字电压表,能够测量0—5V之间的直流电压值,能够实时检测显示。
2.2 设计要求
测量最小分辨率为0.019V,能够实时检测显示。
3.1方法设计
设计方法主要采用ADC0809+AT89C52+8255+液晶显示实现电路,通过程序设计,将被测信号由ADC0809模拟输入1端口输入,经过转换将数据采集到单片机,经过数据转换,将转换数据经8255扩展口PA,PB口送出,其中PA口输出位选码,PB口输出相应的字形码,在5个共阳数码管扫描显示。
3.2方案设计
①经过以上方法设计,采用如图3-1所示方案逻辑图。
模拟量
图3-1方案逻辑图
图3-2设计方案原理框图
②设计模块说明:
本设计方案主要有四大模块:
1、AT89C52单片机控制模块
2、ADC0808数模转换模块
3、8255端口扩展模块
4、LED显示模块
第4章 硬件设计
由上可知数字电压表主要分为四个模块:
AT89C52单片机控制模块,ADC0808数模转换模块、8255端口扩展模块、LED显示模块
4.1 单片机控制模块设计
单片机控制模块的作用是为控制各单元电路的运行并完成数据的换算或处理,主要由单片机、时钟电路组成。
4.1.1时钟电路
单片机工作的时间基准是由时钟电路提供的,在单片机的XTAL1和XYAL2两个管脚接一只晶振及两只电容就构成了单片机的时钟电路,电路中电容器和对振荡频率有微调作用,通常取(30±
10)pF石英晶体选择6MHz或12MHz都可以。
时钟电路如所示。
图4-1时钟晶振
4.1.2单片机控制模块电路图
图4-2单片机控制电路
4.2逐次逼近式A/D转换模块设计
4.2.1 ADC0808简介
1.ADC0808引脚功能
图4-2.1ADC0808引脚图
IN0~IN7:
8路模拟量输入。
A、B、C:
3位地址输入,2个地址输入端的不同组合选择八路模拟量输入。
ALE:
地址锁存启动信号,在ALE的上升沿,将A、B、C上的通道地址锁存到内部的地址锁存器。
D0~D7:
八位数据输出线,A/D转换结果由这8根线传送给单片机。
OE:
允许输出信号。
当OE=1时,即为高电平,允许输出锁存器输出数据。
START:
启动信号输入端,START为正脉冲,其上升沿清除ADC0808的内部的各寄存器,其下降沿启动A/D开始转换。
EOC:
转换完成信号,当EOC上升为高电平时,表明内部A/D转换已完成。
4.2.2ADC0808内部结构图
图4.2.2ADC0808内部结构
逐次逼近型A/D转换器ADC0808由八路模拟开关、地址锁存与译码器、比较器、D/A转换器、寄存器、控制电路和三态输出锁存器等组成。
4.2.3 A/D转换电路设计
图4.2.3ADC0808转换电路设计
4.38255端口扩展模块
8255芯片主要用于I/O端口的扩展,在此主要将PA、PB口用做输出端口,接数码管的位选和段选。
电路设计图如下:
图4.3.18255扩展端口电路
4.4LED显示模块
主要用于显示数据,为共阴数码管,与8255的接线图如下:
图4.3.1显示电路
4.5.1 电路仿真图
图4.5Protues仿真电路原理图
4.5.2 电路工作原理
Dj-52EH
A/D转换由集成电路0808完成,0808具有8路模拟输入端口,地址线(23~25脚)可决定对哪一路模拟输入作A/D转换。
22脚为地址锁存控制,当输入为高电平时,对地址信号进行锁存。
6脚为测试控制,当输入一个2μS宽高电平脉冲时,就开始A/D转换。
7脚为A/D转换结束标志,当A/D转换结束时,7脚输出高电平。
9脚为A/D转换数据输出允许控制,当OE脚为高电平时,A/D转换数据从端口输出,10脚为0808的时钟输入端,利用393分频芯片将8MHZ脉冲进行分频得到1MHz时钟。
8255的PA、PB端口作为五位LED数码管显示控制。
5.1 系统主程序设计
①初始化程序
初始化程序,主要为对8255写控制字,启动A/D转换芯片。
②主程序
初始化之后,系统等待A/D转换结束,结束之后,将一通道的A/D转换值送入单片机,之后进行相应的数据处理,调用显示子程序在数码管上显示,主程序在调用显示子程序和测试子程序之间循环,程序流程图见图5-1
图5-1程序流程图
③显示子程序
显示子程序采用动态扫描法实现五位数码管的数值显示(四位有效值,一位小数点)。
测量所得的A/D转换数据赋值给data1变量,经过相应的运算处理,分离出个位十分位,百分位,千分位的有效值,通过查询显示表,显示相应的值,通过调节频率,实现动态扫描。
④模/数转换测量子程序
模/数转换测量子程序,主要为控制通道1来采集电压值,启动转换,并将对应的数值送入单片机。
5.2系统源程序编写
a.程序的相关头文件及变量定义
#include<
reg52.h>
math.h>
#defineucharunsignedchar
#defineuintunsignedint
ucharge,shifen,baifen,qianfen;
doublesum;
//定义相关变量
ucharzhengshu;
uintxiaoshu;
ucharxdatawei_at_0xff20;
//Paporton8255//定义8255端口指针
ucharxdataduan_at_0xff21;
//Pbporton8255
ucharxdatactrl_at_0xff23;
//controlporton8255
ucharxdataabc_at_0xff80;
//定义A/D端口指针
unsignedchardata1;
ucharcodetable[]={
0xc0,/*0*/
0xf9,/*1*/
0xa4,/*2*/
0xb0,/*3*/
0x99,/*4*/
0x92,/*5*/
0x82,/*6*/
0xf8,/*7*/
0x80,/*8*/
0x90,/*9*/
0x7f,/*小数点*/
};
//定义数码管显示数值
b.延时子程序
voiddelayms(unsignedcharms)
{
uchari;
while(--ms!
=0)
for(i=0;
i<
50;
i++);
}
c.显示子程序
voidchangs()
sum=data1*(5.00/256);
//将二进制数转换为电压值
zhengshu=(unsignedint)sum;
//分离整数变量
xiaoshu=(sum-zhengshu)*1000;
//提取小数部分的3位有效值
ge=zhengshu;
shifen=xiaoshu/100;
//分离十分位的小数值
baifen=xiaoshu/10%10;
//分离百分位的小数值
qianfen=xiaoshu%10;
//千分位
wei=0xdf;
//打开位选,选第一位数码管
duan=table[ge];
//打开段选,显示整数部分的电压值
delayms(10);
wei=0xef;
duan=table[10];
wei=0xf7;
//11111101
duan=table[shifen];
wei=0xfb;
//11111011
duan=table[baifen];
delayms(10);
wei=0xfd;
duan=table[qianfen];
}
d初始化子程序
voidsys()
abc=0;
ctrl=0x80;
delayms(3);
e.数据采集子程序
voidgetdata()
data1=abc;
f.主函数
voidmain()
{
sys();
while
(1)
{getdata();
changs();
}
第6章调试与测试结果分析
(1)实验系统连线图
8MHz激励源经393分频器接到ADC0809的CLOCK端;
ADC0809的0通道IN0接到模拟信号输出端;
I/O接口FF80H通过或非门单元74LS02控制ADC0809的启动。
(2)程序调试
采用程序编译软件KEILVESION2和DJ-52EH单片机综合开发实验仪联机在线调试。
(3)实验结果与分析
实验结果:
试验仪上的5个数码管显示当前电压值,并能实现动态显示;
分析:
第一个数码管显示电压值的整数部分;
第二个数码管显示小数点;
第三到五数码管显示电压值得小数部分。
仿真测试表明,系统性能良好。
实际调试时,测量读数稳定易读、更新速度合理,随着调节电位器数字电压表能随时显示测量电压。
直流电压测量范围为0~4.980V,最小分辨率为0.0196V(5/255),满足任务书指标要求。
但是,该系统也存在一定程度的不足,相关分析如下:
(1)输入电压易发生干扰不稳定,且驱动能力可能存在不足,需在被测信号的输入端加上一部分驱动电路,比如将量程转换电路改成带放大能力的自动量程转换电路,将幅值较小的信号经适当放大后再测量,可显著提高精度;
(2)输出量可用平均值算法来改善,使测量准确度更高。
(3)若能将测量的电压值实时保存,使用时将更方便。
(4)ADC0809可实现对8个通道的输入信号轮流转换,本设计仅仅使用了其中一个通道,造成了较大的资源浪费。
若能对电路稍加改进,实现对多路信号的轮流测量并自动保存相应结果,其应用价值将会更大。
(5)由于ADC0809为8位处理器,当输入电压为5.00V时,输出数据值为255(FFH),因此单片机最大的数值分辨率为0.0196V(5/255)。
这就决定了该电压表的最大分辨率(精度)只能达到0.0196V。
测试时电压数值的变化一般以0.02的电压幅度变化,如要获得更高的精度要求,应采用12位、13位的A/D转换器。
(6)简易电压表测得的值基本上均比标准值偏大0.01~0.02V。
这可以通过校正0809的基准电压来解决,因为该电压表设计时直接用7805的供电电源作为基准电压,电压可能有偏差。
另外可以用软件编程来校正测量值。
第7章结论
附录1
源程序程序:
附录2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计 数字 电压表