智能化DVM(数字电压表)的设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

智能化DVM的设计
单片机课程设计
前言
数字电压表(DigitalVoltmeter)简称DVM,它是采用数字化测量技术,把连续的模拟量(直流输入电压)转换成不连续、离散的数字形式并加以显示的仪表。

传统的指针式电压表功能单一、精度低,不能满足数字化时代的需求,采用单片机的数字电压表,由精度高、抗干扰能力强,可扩展性强、集成方便,还可与PC进行实时通信。

目前,由各种单片A/D转换器构成的数字电压表,已被广泛用于电子及电工测量、工业自动化仪表、自动测试系统等智能化测量领域,示出强大的生命力。

与此同时,由DVM扩展而成的各种通用及专用数字仪器仪表,也把电量及非电量测量技术提高到崭新水平。

本文介绍一种基于AT89S52单片机的一种电压测量电路,该电路采用高精度、双积分A/D转换电路,测量范围直流0~500伏,使用LED数码管模块显示,可以与PC机进行串行通信。

正文着重给出了软硬件系统的各部分电路,介绍了89S52的特点,AD0809的功能和应用。

该电路设计新颖、功能强大、可扩展性强。

目录
第一章设计任务书 (4)
1.1设计名称 (4)
1.2设计技术指标与要求 (4)
1.3产品说明 (4)
第二章设计原理及基本框图 (5)
第三章硬件电路的设计 (5)
3.1 输入电路 (5)
3.2 A/D转换电路 (6)
3.2.1 ADC0809的结构及原理 (6)
3.2.2 ADC0809应用说明 (8)
3.2.3 AD0809与单片机连接电路 (8)
3.3 复位电路 (9)
3.4 时钟振荡电路 (9)
3.5 量程切换电路 (10)
3.6 显示电路 (11)
第四章 PCB图与系统原理图 (12)
第五章系统仿真 (14)
5.1系统仿真图 (14)
心得体会 (14)
鸣谢 (15)
参考文献 (15)
附录 (16)
第一章设计任务书
1.1 设计名称
智能化DVM的设计
1.2 设计技术指标与要求
A、测量范围
量程:0~5V;0~50V;0~500V
显示位数:二位半
B、分辨力:0.1V
C、测量速率:2次/秒
D、量程选择方式:手动选择量程
1.3产品说明
数字电压表(Digital Voltmeter)简称DVM,它是采用数字化测量技术,把连续的模拟量(直流输入电压)转换成不连续、离散的数字形式并加以显示的仪表。

传统的指针式电压表功能单一、精度低,不能满足数字化时代的需求,采用单片机的数字电压表,由精度高、抗干扰能力强,可扩展性强、集成方便,还可与PC进行实时通信。

目前,由各种单片A/D 转换器构成的数字电压表,已被广泛用于电子及电工测量、工业自动化仪表、自动测试系统等智能化测量领域,示出强大的生命力。

与此同时,由DVM扩展而成的各种通用及专用数字仪器仪表,也把电量及非电量测量技术提高到崭新水平。

本章重点介绍单片A/D 转换器以及由它们构成的基于单片机的数字电压表的工作原理。

数字电压表简称DVM(DIGlTAL VOLTMETER)。

DVM的问世,以其功能齐全、精度高、灵敏度高、显示直观等突出优点深受用户欢迎。

特别是以A/D变换器为代表的集成电路为支柱,使DVM向着多功能、小型化、智能化方向发展。

本产品主要是手动选择量程式的数字电压表,通过按不同的按键,将DVM 所能够测得的量程进行变换,本次产品设置了四个按键,一个按键是复位按键,另外三个则是进行量程切换的用的,通过按键的选择,将量程自动切换到0~5V;0~50V;0~500V三个不同的档位,最后再将所测得的电压值通过四位数码管显示出来。

第二章系统原理及基本框图
DVM是将模拟电压变换为数字显示的测量仪
器,这就要求将模拟量变成数字量。

这实质上是个量
化过程,即连续的无穷多个模拟量用有限个数字表示
的过程,完成这种变换的核心部件是A/D变换器。

如图2.1所示,当模拟电压经过档位切换到不
同的分压电路衰减后,经隔离干扰送到A/D转换器进
行A/D转换,然后送到单片机中进行数据处理,处理
后的数据送到LED中显示。

具体电路原理图见附录。

图2.1系统基本方框图
第三章硬件电路的设计
3.1 输入电路
由于AD0809在电压测量值方面有一定的局限性,所以需要在输入接口介入一个分压电路,将超出量程范围的电压转化为AD0809所能够转换的量程之内。

在第一个档位即0~5V时,由于在AD0809所能测得的范围之内故股不需要进行分压设置。

其他两个档位分压电路如图3.1所示。

图3.1 分压电路
如上图所示,IN1、IN2接口是用来输出分压之后的电压,根据具分压公式可得IN1、IN2输出约为0-4.5V。

3.2 A/D转换电路
3.2.1 ADC0809的结构及原理
ADC0809采用逐次逼近法驱动电路,并自带了
寄存器,可以不附加取样保持电路,因为比较器和
寄存器这两部分兼有取样保持功能。

其引脚如图 3.2所示,其主要的技术指标如
下:
电源电压 5V
分辨率 8位图3-2 AD0809引脚图
时钟频率 640kHz
转换时间100μs
未经调整误差 1/2LSB和1LSB
模拟量输入电压范围 0-5V
功耗 15mW
图3.3 AD0809内部原理框图
图3.3为ADC0809内部原理框图,由上图可知,ADC0809由一个8路模拟开关、一个地址锁存与译码器、一个A/D转换器和一个三态输出锁存器组成。

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

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

ADC0809 A/D转换芯片主要管脚功能如表3-1所示。

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

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

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

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

通道选择表如下表3-2所示。

表3-2 通道选择表
ST 为转换启动信号。

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

EOC 为转换结束信号。

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

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

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

D7-D0为数字量输出线。

CLK 为时钟输入信号线。

因ADC0809的内部没有时钟电路,所需时钟信号必须由外界提供,通常使用频率为500KHZ 。

3.2.2 ADC0809应用说明
(1) ADC0809内部带有输出锁存器,可以与AT89S51单片机直接相连。

(2) 初始化时,使
ST 和OE 信号全为低电平。

(3) 送要转换的哪一通道的地址到A ,B ,C 端口上。

(4) 在ST 端给出一个至少有100ns 宽的正脉冲信号。

(5) 是否转换完毕,我们根据EOC 信号来判断。

(6) 当EOC 变为高电平时,这时给OE 为高电平,转换的数据就输出给单片机了。

3.2.3 AD0809与单片机连接电路
如图3.4为AD0809与单片机连接电路图。

形成反馈电路,就过够成了一个稳定的
自激振荡器。

单片机的时钟信号通常有两种方式产生:一是内部振荡方式;二是外部时钟方式。

在此设计过程中我采用了内部振荡方式,如图3.6所示:
C1
30pF
C2
30pF
Y1
6MHz
XTAL2
XTAL1图3.6 时钟振荡电路
初使用晶体振荡器外,如对时钟频率要求高,还可以用电感或陶瓷振荡器代替。

电路中的电容值无严格要求,但电容取值对振荡频率输出的稳定性、大小、振荡电路起振速度有少许影响,C1和C2的取值一般为30pF左右,而晶体振荡频率范围通常是1.2-12MHz,振荡频率高,则系统的时钟频率也高,单片机运行速度也就快,同时也对印制电路板的工艺要求也高了。

3.5 量程切换电路
由于本课题采用的是手动切换测量电压的量程,因而需要用到键盘来手动控制量程的切换。

键盘、显示是单片机应用系统不可缺少的输入和输出设备,是实现人机对话的纽带。

键盘/显示器接口的设计,它应满足(1)功能技术要求;(2)可靠性高。

但系统不同要求就不同,接口设计也就不同。

对一个键盘/显示器接口设计应从整个系统出发,综合考虑软、硬件特点。

在应用系统设计中,一般都是把键盘和显示器放在一起考虑。

由于本次设计选用的是独立式键盘,故此主要介绍独立式键盘。

独立式按键:直接用I/O线构成的单个按键电路,每个独立式按键单独占用一根I/O口线,每根I/O口线上的按键工作状态,独立式按键电路配置灵活,软件结构简单,但每个按键必须占用一根I/O口线。

在按键数量较多时,I/O口线浪费较大。

故在按键较小时,采用此电路如图3.7示
图3.6 独立式键盘
图3.7 独立式键盘
3.6 显示电路
本课题选用数码管作为其输出显示设备,以下主要介绍数码管的主要原理。

常用的七段显示器件:半导体数码管将十进制数码分成七个字段,每段为一发光二极管。

半导体数码管(或称LED 数码管)的基本单元是PN 结,目前较多采用磷砷化镓做成的PN 结,当外加正向电压时,就能发出清晰的光线。

单个PN 结可以封装成发光二极管,多个PN 结可以按分段式封装成半导体数码管,其管脚排列如下图3.8所示,其显示如图3.9所示。

图3.8半导体显示器
(左)管脚排列图; (中)共阴极接线图; (右)共阳级接线图
图3.9 数码管显示器发光段组合图
e
f
h 9
87
6
2
3
45d
c
(·)h
a
b c d e f g (·)h
a b c d e f g
(·)h
·
a e
f b c
a e
a
f
a f a
e f a a e
f a f
第四章 PCB图与系统原理图系统原理图
PCB图
第五章系统仿真
5.1系统仿真图
Proteus仿真图
心得体会
从讨论方案到硬件电路设计,从原理图制作,到PCB制板。

小组成员一定要勤于动手相互学习,而这正是我们能完成如此艰巨任务的原音。

成员间分工合理,劳逸结合,互相学习,互相交流,大家都有了前所未有的积极性和默契,加深了组员之间的交流和配合。

从中我们也体会到仿真软件的使用大大简化了我们的工作量同时也提高了工作的质量,整个过程中我们加深了对各种设计辅助软件的熟悉和操作,也加深了数电模电单片机方面的知识。

元件的安装,必须注意元件脚的极性,实物的焊接则需要细致及熟练度。

由于前期我们充分仿真并实验了各个电路模块,调试过程没有出现多大问题。

整个作品的设计制作我们耗费了五天,团队的每个成员都献计献策,全力以赴。

其中的团结与默契,让大家明白了:只要大家同心协力,是可以把很多的impossible变成 possible的。

鸣谢
这次课程设计,令我收获不小,让我真正体会到了什么是“理论与实际的结合”,也让我学会了自己动手的重要性。

非常感谢同组的各位同学的支持;非常感谢桂友超老师的悉心教导,是她将理论知识教给了我;非常感谢电气与信息工程系给予我这次课程设计的机会,能让我将理论更好的运用到实际中去;也非常感谢湖南工学院在硬件和软件上的给予我的帮助。

参考文献
[1] 何小艇编著,电子系统设计[M],杭州:浙江大学出版社,2000.10;
[2] 谢自美主编,电子电路设计[M],武汉:华中理工大学出版社,2000;
[3] 徐爱钧编著,智能化测量控制仪表原理与设计[M],北京:北京航空航天大学出版社,2004.9;
[4] 何立民编著,MCS-51 系列单片机应用系统设计系统配置与接口技术[M],北京:北京航空航天大学出版社,1990.1;
[5] 刘守义主编,单片机应用技术[M],西安:西安电子科技大学出版社,2003.1
[6] 马忠梅,单片机的C语言Windows环境编程宝典[M], 北京:北京航空航天大学出版社,2003.6;
[7] 李光飞,单片机C程序设计指导[M],北京:北京航空航天大学出版社,2003.01 ;
[8] 赵茂泰主编,智能仪器原理及应用[M],北京:电子工业出版社,2004.7;
附录:
程序清单
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit OE=P2^6;
sbit ST=P2^7;
sbit k1=P3^0;
sbit k2=P3^1;
sbit k3=P3^2;
sbit a=P3^3;
sbit b=P3^4;
sbit c=P3^5;
sbit CLK=P3^6;
sbit EOC=P3^7;
uchar tt;
uchar aa;
uchar mm;
float dy;
float getdata;
uchar disbuf[]={0,0,0,0};
uchar code wema[]={0x08,0x04,0x02,0x01};
uchar code duanma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xc1,0x7f}; uchar keyscan();
void delay(uint m)
{
while(--m);
}
void display1(void)
{
uchar i;
int j;
disbuf[0]=dy/10.0;
disbuf[1]=11;
j=dy;
disbuf[2]=j%10;
dy=dy*10;
j=dy;
disbuf[3]=j%10;
for(i=0;i<4;i++)
{
P2=wema[i];
P1=duanma[disbuf[3-i]];
delay(100);
}
}
void display2(void)
{
uchar i;
uint j;
dy=dy*10.1;
j=dy;
disbuf[0]=j/100;
disbuf[1]=j%100/10;
disbuf[2]=j%10;
disbuf[3]=10;
for(i=0;i<4;i++)
{
P2=wema[i];
P1=duanma[disbuf[3-i]]; delay(100);
}
}
void display3(void)
{
uchar i;
uint j;
j=dy*11;
disbuf[0]=j/100;
disbuf[1]=(j%100)/10;
disbuf[2]=11;
disbuf[3]=j%10;
for(i=0;i<4;i++)
{
P2=wema[i];
P1=duanma[disbuf[3-i]]; delay(100);
}
}
float AD0809(void)
{
ST=1;
//delay(1);
ST=0;
while(EOC!=1);
OE=1;
getdata=P0;
OE=0;
return(getdata*50/255.0); }
uchar keyscan(void)
{
if(k1==0)
delay(10);
if(k1==0){while(!k1);tt=1;} }
if(k2==0)
{
delay(10);
if(k2==0){while(!k2);tt=2;} }
if(k3==0)
{
delay(10);
if(k3==0){while(!k2);tt=3;} }
return tt;
}
//
void init(void)
{
TMOD=0x02;
TH0=255;
TL0=255;
ET0=1;
TR0=1;
EA=1;
}
void t0(void) interrupt 1 using 1 {
CLK=~CLK;
}
void main(void)
{
init();
while(1)
{dy=AD0809();
aa=keyscan();
//display();
switch(aa)
{
case 1:a=0;b=0;c=1;mm=1;display1();break; case 2:a=0;b=1;c=0;mm=0;display3();break; default:a=1;b=0;c=0;mm=2;display2();break; }
}
}。

相关文档
最新文档