资源描述
目 录
第一部分 设计任务与调研…………………………………………………………3
1.设计任务………………………………………………………………………………………3
2.调研……………………………………………………………………………………………3
3.作品相关………………………………………………………………………………………3
4.总结……………………………………………………………………………………………9
第二部分 设计说明……………………………………………………………………11
1.设计目标 ……………………………………………………………………………………11
2.设计思路 ……………………………………………………………………………………11
第三部分 设计成果……………………………………………………………………15
1.作品实物 ……………………………………………………………………………………15
2.电路图 ………………………………………………………………………………………16
3.程序……………………………………………………………………………………16
第四部分 结束语………………………………………………………………………20
第五部分 致谢……………………………………………………………………………21
第六部分 参考文献……………………………………………………………………22
第一部分 设计任务与调研
1.设计任务
设计一个能正确测量模拟电压0-5v,误差<1%,利用ADC 0809采样输入的模拟量,转换后的电压值显示在4位数码管上。
2.调研
在现代检测技术中,常用的高精度数字电压表进行检测,将检测到的数据送入微型计算机系统,完成计算、存储、控制等功能。数字电压表相对于指针表而言读书直观准确,电压表的数字化是将连续的模拟量转换成不连续的离散的数字形式并加以显示。这有别于传统的以指针与刻度表进行读数的方法,避免了读数的视差和视觉疲劳。本文中数字电压表的的控制系统采用AT89C51单片机。A/D转换器采用ADC0809为主要硬件,实现数字电压表的硬件电路与软件设计。该系统的数字电压表电路简单,采用的元件较少,成本低,调节工作可实现自动化,还可以方便进行8路A/D转换的测量,远程测量结果传送等功能。数字电压表可以测量0~5V的8路输入电压值,并在四位LED数码管上轮流显示或单路显示。设计结果能实现相应的功能。
3.作品相关
A/D转换器是将模拟量转换成数字量的器件,模拟量可以是电压、电流等信号,也可以是声、光、压力、温度、湿度等随时间连续变化的非电的物理量。非电量的模拟量可通过适当的传感器(如光电传感器、压力传感器、温度传感器)转换成电信号。
3.1A/D转换器工作原理
A/D是把模拟量(通常是模拟电压)信号转换为n位二进制数字量信号的电路。这种转换通常分4步进行:采样→保持→量化→编码。前两步在采样保持电路中完成,后两步在A/D转换过程中同时实现。
(1)采样。所谓采样是将一个时间上连续变化的模拟量转换为时间上断续变化的(离散的)模拟量。或者说,采样是把一个时间上连续变化的模拟量转换为一个串脉冲,脉冲的幅度取决于输入模拟量,时间上通常采用等时间间隔采样。采样过程的示意图如图1-1所示。
图1-1 采样过程的示意图
采样器相当于一个受控的理想开关,s(t)=1时,开关闭合,fs(t)=f(t);s(t)=0时,开关断开,fs(t)=0。如用数字逻辑式表示,即为fs(t)=f(t)·s(t),s(t)=1或s(t)=0,也可用波形图表示,如图1-2(a)、图1-2(b)、图1-2(c)所示。
从波形图可见,在s(t)=1期间,输出跟踪输入变化,相当于输出把输入的“样品”采集下来,所以也可把采样电路称为跟踪电路。
图1-2 采样器的波形图
(2)保持。所谓保持,就是将采样得到的模拟量值保持下来,s(t)=0期间使输出不等于0,而等于采样控制脉冲存在的最后瞬间的采样值,如图1-1(d)所示。保持发生在s(t)=0期间。最基本的采样—保持电路如图1-3所示。它由MOS管采样开关T、保持电容Cb和由运算放大器做成的跟随器三部分组成。s(t)=1时,T导通,vi向Cb充电,vc和vo跟踪vi变化,即对vi采样。s(t)=0时,T截止,vo将保持前一瞬间采样的数值不变。只要Cb的漏电电阻、跟随器的输入电阻和MOS管T的截止电阻都足够大,大到可忽略Cb的放电电流的程度,vo就能保持到下次采样脉冲到来之前基本不变。实际中,进行A/D转换时所用的输入电压,就是这种保持下来的采样电压,也就是每次采样结束时的输入电压。
图1-3 最基本的采样—保持电路
(3)量化和编码。所谓量化,就是用基本的量化电平q的个数来表示采样—保持电路得到的模拟电压值。这一过程实质上是把时间上离散而数字上连续的模拟量以一定的准确度变为时间上、数字上都离散的、量级化的等效数字值。量级化的方法通常有两种:只舍不入法和有舍有入法(四舍五入法)。这两种量化法的示意图分别如图1-4(a)和图1-4(b)所示。图1-4(c)给出了一个用只舍不入法量化的实例。从图中可以看出,量化过程也就是把采样保持下来的模拟值舍入成整数的过程。
对于连续变化的模拟量,只有当数值正好等于量化电平的整数倍时,量化后才是准确值,如图1-4(c)中T1,T2,T4,T6,T8,T11,T12时刻所示。不然,量化的结果都只能是输入模拟量的近似值。这种由于量化而产生的误差,称为量化误差,它直接影响了转换器的转换精度。量化误差是由于量化电平的有限性造成的,所以它是原理性误差,只能减小,而无法消除。
为减小量化误差,根本的办法是取小的量化电平。另外,在量化电平一定的情况下,一般采用四舍五入法带来的量化误差只是只舍不入法引起的量化误差的一半。
编码就是把已经量化的模拟数值(它一定是量化电平的整数倍)用二进制数码、BCD码或其他码来表示。比如,用二进制对图1-4(c)的量化结果进行编码,则可得到图中所示的编码输出。
至此,即完成了A/D转换的全过程,将各采样点的模拟电压转换成了与之一一对应的二进制数码。
图1-4 量化和编码
(a)只舍不入法;(b)有舍有入法;(c)实例(采用只舍不入法量化)
(4)逐次逼近法A/D转换器。逐次逼近法A/D转换是一个具有反馈回路的闭路系统。A/D转换器可划分成3大部分:比较环节、控制环节、比较标准(D/A转换器)。
图1-5所示就是逐次逼近法A/D转换器的原理电路。其主要原理为:将一个待转换的模拟输入信号VIN与一个“推测”信号V1相比较,根据推测信号是大于还是小于输入信号来决定减小还是增大该推测信号,以便向模拟输入信号逼近。推测信号由D/A变换器的输出获得,当推测信号与模拟输入信号“相等”时,向D/A转换器输入的数字即为对应的模拟输入的数字。
图1-5 逐次逼近法A/D转换器的原理电路
3.2 ADC 0809 A/D转换器
(1)ADC 0809的结构。ADC 0809是National半导体公司生产CMOS材料的A/D转换器。它是具有8个通道的模拟量输入线,可在程序控制下对任意通道进行A/D转换,得到8位二进制数字量。其主要技术指标如下:
① 8路输入通道,8位A/D转换器,即分辨率为8位。
② 具有转换起停控制端。
③ 转换时间为100 μs(时钟为640 kHz时),130 μs(时钟为500 kHz时)。
④ 单个+5 V电源供电。
⑤ 模拟输入电压范围0~+5 V,不需零点和满刻度校准。
⑥ 工作温度范围为-40 ℃~+85 ℃。
⑦ 低功耗,约15 mW。
图1-6 ADC 0809引脚
其引脚如图1-6所示,内部结构图如图1-7所示。引脚功能如下:
① IN0~IN7:8路模拟输入,通过3根地址译码线ADDA、ADDB、ADDC选通一路。
② D7~D0:A/D转换后的数据输出端,为三态可控输出,故可直接和微处理器数据线连接。8位排列顺序是D7为最高位,D0为最低位。
③ ADDA、ADDB、ADDC:模拟通道选择地址信号,ADDA为低位,ADDC为高位。地址信号与选中通道对应关系见表3-1。
④ VR(+)、VR(-):正、负参考电压输入端,用于提供片内D/A电阻网络的基准电压。在单极性输入时,VR(+)=5 V,VR(-)=0 V;双极性输入时,VR(+)、VR(-)分别接正、负极性的参考电压。
⑤ ALE:地址锁存允许信号,高电平有效。当此信号有效时,A、B、C三位地址信号被锁存,译码选通对应模拟通道。在使用时,该信号常和START信号连在一起,以便同时锁存通道地址和启动A/D转换。
⑥ START:A/D转换启动信号,正脉冲有效。加于该端的脉冲的上升沿使逐次逼近寄存器清0,下降沿开始A/D转换。如正在进行转换时又接到新的启动脉冲,则原来的转换进程被中止,重新从头开始转换。
⑦ EOC:转换结束信号,高电平有效。该信号在A/D转换过程中为低电平,其余时间为高电平。该信号可作为被CPU查询的状态信号,也可作为对CPU的中断请求信号。在需要对某个模拟量不断采样、转换的情况下,EOC也可作为启动信号反馈接到START端,但在刚加电时需由外电路第一次启动。
⑧ OE:输出允许信号,高电平有效。当微处理器送出该信号时,ADC 0808/0809的输出三态门被打开,使转换结果通过数据总线被读走。在中断工作方式下,该信号往往是CPU发出的中断请求响应信号。
表1-1地址信号与选中通道的对应关系
地址
选中通道
ADDC
ADDB
ADDA
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
图1-7 内部结构图
(2) 工作时序与使用说明。ADC 0808/0809的工作时序如图1-8所示。当通道选择地址有效时,ALE信号一出现,地址便马上被锁存,这时转换启动信号紧随ALE之后(或与ALE同时)出现。START的上升沿将逐次逼近寄存器SAR复位,在该上升沿之后的2 μs加8个时钟周期内(不定),EOC信号将变低电平,以指示转换操作正在进行中,直到转换完成后EOC再变高电平。微处理器收到变为高电平的EOC信号后,便立即送出OE信号,打开三态门,读取转换结果。
图1-8 ADC 0808/0809的工作时序
4.总结
数字电压表之所以倍受青睐是有如下几个特点
(1)显示清晰直观
(2)准确度高
(3)分辨率高
(4)扩展能力强
(5)测量速率快
(6)输入阻抗高
(7)抗干扰能力强
(8)集成度高,微功耗。
第二部分 设计说明
1.设计目标
设计一个能正确测量模拟电压0-5v,误差<1%,利用ADC 0809采样输入的模拟量,转换后的电压值显示在4位数码管上。
2.设计思路
2.1系统软件程序的设计
多路数字电压表的系统软件程序由主程序、A/D转换子程序和显示子程序组成。
2.2 主程序
主程序包含初始化部分、调用A/D转换子程序和调用显示程序,如图2—1所示。初始化部分包含存放通道数据缓冲区初始化和显示缓冲区初始化。另外,对于单路显示和循环显示,系统设置了一个标志位00H控制。初始化时00H位设置为0,默认为循环显示,当它为1时改变为单路显示。00H位通过单路/循环按键控制。
开始
初始化
调用AD转换子程序
调用显示子程序
图2-1 主程序
2.3 A/D转换子程序
A/D转换子程序用于对ADC0809的8路输入模拟电压进行A/D转换,并将转换的数值存入8个相应的存储单元中,如图2—2所示。A/D转换子程序每隔一定时间调用一次,即隔一段时间对输入电压采样一次。
否
开始
启动一次转换
取数据(OE=0)
A/D转换结束eoc=1?
0809通道地址加1
否
地址数小于8
开始
图2-2 AD转换子程序
2.4 显示子程序
如图2-3:
LED数码管采用软件译码动态扫描方式。在显示子程序中包含多路循环显示和单路显示程序。多路循环显示把8个存储单元的数值依次取出送到4位数码管上显示,每一路显示1秒。单路显示程序只对当前选中的一路数据进行显示。每路数据显示需经过转换变成十进制BCD码,放于4个数码管的显示缓冲区中。单路显示或多路循环显示通过标志位00H控制。在显示控制程序中加入了对单路或多路循环按键和通道选择按键的判断。
否
开始
初始数码管显示都为0
判断是否有键按下
读出键值,并判断为几
如果键值为1,将1写入缓存区
如果键值为8,将8写入缓存区
调用显示程序显示缓存区的值
显示完毕继续判断是否有键按下
图2-3 显示子程序
2.5 ADC0809的工作过程
(1) 首先确定ADDA、ADDB、ADDC三位地址,决定选择哪一路模拟信号;
(2) 使ALE端接受一正脉冲信号,使该路模拟信号经选择开关到达比较器的输入端;
(3) 使START接受一正脉冲信号,START的上升沿将逐次逼近寄存器复位,下降沿启动A/D转换;
(4) EOC输出信号变低,指示转换正在进行。
(5) A/D转换结束,EOC变为高电平,指示A/D转换结束。此时,数据已保存到8位三态输出锁存器中。此时CPU就可以通过使OE信号为高电平,打开ADC0809三态输出,由ADC0809输出的数字量传送到CPU。
2.6 ADC0809应用说明
(1)ADC0809内部带有输出锁存器,可以与AT89S51单片机直接相连。
(2) 初始化时,使ST和OE信号全为低电平。
(3) 送要转换的哪一通道的地址到A,B,C端口上。
(4)是否转换完毕,根据EOC信号来判断。
(5) 当EOC变为高电平时,这时给OE为高电平,转换的数据就输出给单片机了。
第三部分 设计成果
1.作品实物
2.电路图
图3-1 制作简易数字电压表电路图
3.程序:
/* 名称:ADC 0809数模转换与显示
说明:ADC 0809采样通道3输入的模拟量,转换后的结果显示在数码管上。
*/
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
//各数字的数码管段码(共阴)
uchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
sbit CLK=P1^3; //时钟信号
sbit ST=P1^2; //启动信号
sbit EOC=P1^1; //转换结束信号
sbit OE=P1^0; //输出使能
//延时
void DelayMS(uint ms)
{
uchar i;
while(ms--) for(i=0;i<120;i++);
}
//显示转换结果
void Display_Result(uchar d)
{
P2=0xf7; //第4个数码管显示个位数
P0=DSY_CODE[d%10];
DelayMS(5);
P2=0xfb; //第3个数码管显示十位数
P0=DSY_CODE[d%100/10];
DelayMS(5);
P2=0xfd; //第2个数码管显示百位数
P0=DSY_CODE[d/100];
DelayMS(5);
}
//主程序
void main()
{
TMOD=0x02; //T1工作模式2
TH0=0x14;
TL0=0x00;
IE=0x82;
TR0=1;
P1=0x3f; //选择ADC0809的通道3(0111)(P1.4~P1.6)
while(1)
{
ST=0;ST=1;ST=0; //启动A/D转换
while(EOC==0); //等待转换完成
OE=1;
Display_Result(P3);
OE=0;
}
}
//T0定时器中断给ADC0808提供时钟信号
void Timer0_INT() interrupt 1
{
CLK=~CLK;
}
(3)线性变换后的程序:
#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
uchar code dsycode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
sbit CLK =P1^3;
sbit ST = P1^2;
sbit EOC=P1^1;
sbit OE =P1^0;
void delay (uint ms)
{
uchar i;
while(ms--)for(i=0;i<120;i++);
}
void diplay (unsigned int d)
{
P2=0xf7;
P0=dsycode[(d/100)%10];
delay(5);
P2=0xfb;
P0=dsycode[(d/100)/10%10];
delay(5);
P2=0xfd;
P0=dsycode[d/100/100]|0x80;/*显示小数点*/
delay(5);
}
void main()
{
unsigned int a;
TMOD=0x02;
TH0=0x14;
TL0=0x00;
IE=0x82;
TR0=1;
P1=0x3f;
while(1)
{
ST=0;ST=1;ST=0;
while(EOC==0);
OE=1;
a=P3*196;
diplay(a);
OE=0;
}
}
void Timer0_INT() interrupt 1
{
CLK=~CLK;
}
第四部分 结束语
1.数字电压表系统中对于外界被测电压的反应不够灵敏,变化比较慢,主要是因为ADC模数转换芯片的转换速率不够;
2.数字电压表系统测量外界电压不够准确,跟用示波器或者高精度的电压表测量结果有偏差,主要是因为ADC芯片位数不够;
3.ADC的参考电压不准确也会造成测量结果的不准确。
第五部分 致谢
经过本次设计制作,我学会了很多东西,更加坚定了认真严谨的工作态度。虽然我遇到各种各样的困难,但我没有放弃,我查阅网上和图书馆资料,请教老师相关问题,最终凭着严谨认真的科研态度,创新求实的科学精神,克服了这种种困难。同时,多得各位老师和同学的耐心分析和指导,尤其是老师给予了我很大的帮助!为此,我向我的指导老师表示由衷的感谢,在他的耐心帮助下,我终于顺利地完成我们的这次设计制作!
第六部分 参考文献
[1] 胡辉主编.单片机原理及应用设计.北京:中国水利水电出版社,2005 1—284页.
[2] 谭浩强著.C语言程序设计(第三版).北京:清华大学出版社,2005.7,37—152页.
[3] 张桂红主编.单片机原理与应用.福州:福建科学技术出版社,2007.2,306—315页.
[4] 韩志军等编著.单片机应用系统设计:入门向导与设计实例.北京:机械工业出版社,2005.1,132—147页.
展开阅读全文