ADC0809数字电压表的设计.docx
《ADC0809数字电压表的设计.docx》由会员分享,可在线阅读,更多相关《ADC0809数字电压表的设计.docx(25页珍藏版)》请在冰豆网上搜索。
ADC0809数字电压表的设计
单片机原理及应用
课程设计报告书
题目:
简易数字电压表的设计
姓名:
学号:
专业:
电气工程及其自动化
指导老师:
设计时间:
2012年11月
目录
1.引言……………………...………………………………………………
1.1.设计意义…………………………………………………………
1.2.系统功能要求……………………………………………………
1.3.本组成员所做的工作……………………………………………
2.方案论证及方框图………………………………………………….......
3.单元电路设计细则……………………………………………………...
3.1.控制电路的设计……………………………………………….....
3.2.输入采样及转换电路………………………………………….....
3.3.数码管显示电路…………………………………………….......
3.4.单路/循环及通道选择电路…………………………………......
3.5.系统程序的设计…………………………………...............
4.调试及性能分析………………………………………………………...
4.1.调试步骤…………………………………………………...........
4.2.结果测试…………………………………………………...........
4.3.性能分析…………………………………………………...........
5.系统的电路原理图……………………………………………………..
6.电子元器件清单………………………………………………………...
7.附录A:
源程序清单……………………………………………………
8.附录B:
实物照片………………………………………………………
8.参考资料………………………………………………………………...
9.收获……………………………………………………………………...
1.引言
1.1.设计意义
数字电压表(DigitalVoltmeter)简称DVM,它是采用数字化测量技术,把连续的模拟量(直流输入电压)转换成不连续、离散的数字形式并加以显示的仪表。
传统的指针式电压表功能单一、精度低,不能满足数字化时代的需求,采用单片机的数字电压表,由精度高、抗干扰能力强,可扩展性强、集成方便,还可与PC进行实时通信。
目前,由各种单片A/D转换器构成的数字电压表,已被广泛用于电子及电工测量、工业自动化仪表、自动测试系统等智能化测量领域,示出强大的生命力。
与此同时,由DVM扩展而成的各种通用及专用数字仪器仪表,也把电量及非电量测量技术提高到崭新水平。
另外,本设计控制电路、采样电路、显示电路分别采用51系列单片机8位、A/D转换芯片0809以及四位一体共阳数码管,不仅在元器件耗材上节省了开支,同时也能达到理想中的效果。
1.2.系统功能要求
由于本设计采用的是8位的A/D转换芯片,且接入的最大测量电压为5V,故该简易数字电压表8路输入电压值的测量范围为0—5V,并且能在数码管上轮流显示或单路选择显示。
另外其测量最小分辨率为0.02V。
1.3.本组成员所做的工作
本组组员都很积极,各个成员分工查询资料,比如各芯片的引脚图、接线方法等。
但电路图的整体布局、程序、硬件电路的连接是大家团结一致共同完成的。
2.方案论证及方框图
在电量的测量中,电压、电流和频率是最基本的三个被测量,其中电压量的测量最为经常。
而且随着电子技术的发展,更是经常需要测量高精度的电压,所以数字电压表就成为一种必不可少的测量仪器。
本设计按系统功能要求,决定控制系统采用AT89C52单片机,A/D转换采用ADC0809。
系统除能确保实现要求的功能外,还可以方便的进行8路其他A/D转换量的测量和远程测量结果传送等扩展功能。
数字电压表系统设计方案框图如下所示。
系统方框图
3.单元电路设计细则
3.1控制电路的设计
本系统采用AT89C52芯片,P0口从A/D转换后读取数字信号,P1口将读取数据处理后送到显示电路显示,P2口控制输入采样电路中ADC0809芯片的工作与不工作以及是否工作完毕,P3口控制独立按键实现单路/循环以及通道选择。
另外,/EA/VP端接5V电源,X1,X2接晶振电路,RESET端接复位电路。
并且,由于P0口的驱动能力较弱,故可将用于从输入采样电路中读取数据,不做驱动使用,故每个引脚无需接上拉电阻,使电路设计更加节省、合理。
89C52单片机引脚图
3.1.1单片机复位电路
89C52单片机的复位是由外部的复位电路来实现的。
最简单的上电自动复位电路,是通过外部复位电路的电容充电来实现的。
只要Vcc的上升时间不超过1ms,就可以实现自动上电复位。
复位电路
3.1.2单片机晶振电路
晶振是晶体振荡器的简称,在电气上它可以等效成一个电容和一个电阻并联再串联一个电容的二端网络,电工学上这个网络有两个谐振点,以频率的高低分其中较低的频率是串联谐振,较高的频率是并联谐振。
3.5.2石英晶体振荡器与石英晶体谐振器都是提供稳定电路频率的一种电子器件。
石英晶体振荡器是利用石英晶体的压电效应来起振,而石英晶体谐振器是利用石英晶体和内置IC来共同作用来工作的。
振荡器直接应用于电路中,谐振器工作时一般需要提供3.3V电压来维持工作。
振荡器比谐振器多了一个重要技术参数为:
谐振电阻(RR),谐振器没有电阻要求。
RR的大小直接影响电路的性能,也是各商家竞争的一个重要参数。
本设计采用12MHz晶振,并联两个30pF电容构成晶振电路。
晶振电路
3.2输入采样及转换电路
A/D转换由集成芯片ADC0809电路完成。
ADC0809具有8路模拟输入端口,地址线(第23—25脚)可决定对哪一路模拟输入作A/D转换。
第22引脚为地址锁存控制,当输入为高电平时,对地址信号进行锁存。
第6引脚为测试控制,当输入一个2us宽电平脉冲时,就开始A/D转换。
第7引脚为A/D转换结束标志,当A/D转换结束时,第7引脚输出高电平。
第9引脚为A/D转换数据输出允许控制,当OE脚为高电平时,A/D转换数据从端口输出。
第10引脚为ADC0809的时钟输入端,利用单片机第30引脚的六分频晶振频率,再通过14024二分频的得到1MHz的时钟。
另外,为了当未接入输入电压时,避免8通道的悬空对显示产生不稳定的波动,故通过8个10K的电阻接地将8通道拉低,即显示为0输入;而当有输入电压时,则电阻将其短路,不流入地,从而使其更稳定、精确。
输入采样及转换电路
3.3数码管显示电路
3.3.1数码管是一种半导体发光器件,其基本单元是发光二极管。
数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、4位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。
共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。
共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。
共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。
当某一字段的阳极为低电平时,相应字段就不亮。
数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态式两类。
3.3.2静态显示驱动:
静态驱动也称直流驱动。
静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。
静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5×8=40根I/O端口来驱动,要知道一个89S51单片机可用的I/O端口才32个:
),实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。
3.3.3本设计采用的就是数码管动态扫描的方法,通过锁存器74LS244驱动数码管8个段选,4个PNP三极管做开关作用控制其4个位选,并且由单片机实现实时控制,达到实验理论效果。
数码管显示电路
3.4单路/循环及通道选择电路
通过独立按键控制单片机I/O口电平的高低,并且结合软件的判断及编程,从而实现单路/循环的切换以及通道的选择。
单路循环及通道选择电路
3.5系统程序的设计
3.5.1主程序流程图
主程序流程图
系统刚上电时,初始化程序主要执行70H~77H内存单元清0和P2口置0等准备工作。
在刚上电时,系统默认为循环显示8个通道的电压值状态。
当进行一次测量后,将显示每一通道的A/D转换值,每个通道的数据显示时间在1S左右。
主程序在调用显示子程序与测试子程序之间循环。
3.5.2A/D转换测试子程序流程图
A/D转换测试子程序流程图
A/D转换测量子程序用来控制对ADC0809的8路模拟输入电压的A/D转换,并将对应的数值移入70H~77H内存单元。
3.5.3设计思想
1.首先写好各子程序,如:
初始化程序、显示子程序、操作ADC0809子程序独立按键控制子程序等;
2.通过单片机内部定时器T0精确定时2S(不能使用T1定时器,因为P3.5口已做控制口使用),并当定时到时,设置一个标志位自加一次,当自加到为8时清零,该标志位即为通道;
3.最后在主程序中判断该标志位即通道,当为“0”通道时,开通ADC0809的“0”输入,当为“1”通道时,开通ADC0809的“1”输入,依次类推。
4.调试及性能分析
4.1调试步骤
1.在全组的努力下做好硬件的连接,待确认无误后,即可编写程序进行调试;
2.部分调试
首先可将其硬件电路分成几个模块进行调试:
(1)控制电路的调试,即单片机最小的系统的调试。
如果在示波器的条件下,可待电路通电后,直接测其30引脚ALE是否有方波产生,且其频率是否为2MHZ(因为该电路所用晶振频率为12MHZ);若在无示波器的条件下,我们可写一个非常简单的程序,比如将P1口全置为低电平,带通电后用万用表检测是否与理论中一致。
(2)显示电路的调试。
首先应准确判断好数码管的位选、段选,可借助于上网搜查的方法,也可采用提供电压自己检测,然后,借助于软件看是否能使数码管达到完全控制。
(3)A/D转换电路的调试。
在硬件电路确认完全无误的情况下,借助于软件编程实现对A/D芯片的控制,可先定义一个通道,看是否能精确地读取电压。
(4)单路/循环以及通道选择电路的调试。
可先写一个简单的程序看独立按键电路是否能实现完全控制。
2.整机联调
待各部分硬件电路以及软件电路都能实现独立工作时,可进行整机联调。
4.2结果测试
带整机联调确认硬件电路和程序都无误后,可进行端口电压的对比测试。
测试对比表如下所示。
简易数字万用表与“标准”数字电压表对比测试表
标准电压值/V
0.00
0.10
0.30
1.60
2.40
3.70
4.10
4.80
电压表测得值/V
0.00
0.00
0.31
1.67
2.43
3.67
4.03
4.72
绝对误差/V
0.00
-0.10
-0.01
+0.07
+0.03
-0.03
-0.07
-0.08
4.3性能分析
由于采用供电电源的精度只能达到0.1V,故使用该数字电压表测得的数据只能精确到0.1V,并不能达到理论上的0.02V。
而通过上述对比测试表可看出,所有的误差都在允许的范围内,因此,该数字电压表在理论上以及一般的应用场合可完全满足要求,综上,设计成功。
5.系统的电路原理图
6.电子元器件清单
数字电压表电子元器件清单
序号
器件名称
型号、规格
单位
数量
单价
1
单片机
AT89S52
片
1
13
2
IC座
40脚
片
2
0.4
3
芯片
ADC0809
片
1
8
4
IC座
28脚
片
1
0.3
5
芯片
74LS244
片
1
2
6
IC座
20脚
片
1
0.2
7
芯片
14024
片
1
2.5
8
IC座
14脚
片
1
0.2
9
4联体数码管
共阳
个
1
4
10
晶振
12M
个
1
1
11
电容
30pf
个
2
0.1
12
电解电容
10uf
个
1
0.2
13
按键
个
2
0.2
14
电阻
10K
个
2
0.05
15
电阻
510
个
8
0.05
16
电阻
8.2K
个
1
0.05
17
电阻
4,.7K
个
4
0.05
18
三极管
9012
个
4
0.1
19
插针
个
10
0.05
20
导线
Φ0.4
米
6
0.5
21
焊锡
米
5
0.8
22
标签纸
片
1
0.01
23
帽钉
个
4
0.1
24
万能印刷电路板
中号
快
1
20
7.附录A:
源程序清单
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
sbitwei1=P3^3;
sbitwei2=P3^2;
sbitwei3=P3^1;
sbitwei4=P3^0;
sbits1=P3^5;
sbits2=P3^6;
sbiteoc=P3^7;
sbitoe=P2^5;
sbitstart=P2^4;
sbitale=P2^3;
sbitcc=P2^2;
sbitbb=P2^1;
sbitaa=P2^0;
uintcount=0,num,ch,flag,bai,shi,ge,t;
uchartemp;
ucharcodetable[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
ucharcodetable_d[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
voiddisplay();
voiddelay(uintdel)
{
uintx,y;
for(x=0;xfor(y=0;y<50;y++);
}
voiddelay1(uintm)
{
uinti;
for(i=0;i<=m;i++)
{
display();
}
}
voidinit()
{
TMOD=0x01;
TH0=0x4c;
TL0=0x00;
EA=1;
ET0=1;
TR0=1;
P3=0xff;
P0=0xff;
P2=0x00;
}
voidtime0()interrupt1
{
TH0=0x4c;
TL0=0x00;
count++;
if(count==40)
{
count=0;
ch++;
if(ch==8)
ch=0;
}
}
voidad0809()
{
ale=1;
_nop_();_nop_();
ale=0;
start=1;
_nop_();_nop_();
start=0;
_nop_();_nop_();_nop_();_nop_();
while(eoc==0);
oe=1;
temp=P0;
}
voiddisplay()
{
num=temp;
bai=num/51;
t=num%51;
t=t*10;
shi=t/51;
t=shi%51;
t=t*10;
ge=t/51;
P1=0xff;
wei4=1;
wei1=0;
P1=table[ch%10];
delay
(1);
P1=0xff;
wei1=1;
wei2=0;
P1=table_d[bai];
delay
(1);
P1=0xff;
wei2=1;
wei3=0;
P1=table[shi];
delay
(1);
P1=0xff;
wei3=1;
wei4=0;
P1=table[ge];
delay
(1);
}
voidkeyscan()
{
if((s1==0)||(s2==0))
{
delay1(5);
if((flag==0)||(flag==2))
{
if(s1==0)
{
flag++;
while(!
s1)
{
display();
}
}
}
if(flag==2)
{
if(s2==0)
{
ch++;
if(ch==8)
ch=0;
while(!
s2)
{
display();
}
}
}
}
}
voidmain()
{
init();
while
(1)
{
keyscan();
switch(ch)
{
case0:
cc=0;bb=0;aa=0;break;
case1:
cc=0;bb=0;aa=1;break;
case2:
cc=0;bb=1;aa=0;break;
case3:
cc=0;bb=1;aa=1;break;
case4:
cc=4;bb=0;aa=0;break;
case5:
cc=1;bb=0;aa=1;break;
case6:
cc=1;bb=1;aa=0;break;
case7:
cc=1;bb=1;aa=1;break;
}
ad0809();
display();
if(flag==3)
{
TH0=0x4c;
TL0=0x00;
count=0;
TR0=1;
flag=0;
ch=0;
}
if(flag==1)
{
TR0=0;
ch=0;
flag=2;
}
}
}
8.附录B:
实物照片
9.参考资料
[1] 新编MCS-51单片机应用设计 张毅刚编著 哈尔滨 哈尔滨工业大学出版社 2008.3
[2] 电子技术基础模拟部分 康华光主编 北京 高等教育出版社 2006.1
[3] 电子技术基础数字部分康华光主编北京高等教育出版社2006.1
[4] PROTELDXP电路设计与实例精解 黎文模,段晓峰编著 北京 人民邮电出版社 2006
[5]李科杰新编传感器技术手册[M]北京国防工业出版社,1995
[6]PROTELDXP电子电路设计精彩范例 林庭双等编著 北京 机械工业出版社 2005.6
[7]微型计算机原理及应用郑学坚,周斌编著北京清华大学出版社2001
[8]电路邱关源编著北京高等教育出版社1999
10.收获
光阴似箭,日月如梭,通过指导老师的辛勤指导以及我们组全体成员的努力,我们终于完成了单片机课程设计,即对简易数字电压表的制作。
由于刚开始,我们已对指导资料进行分析、讨论后,故对该设计已有了一个初步的了解,所以当我们组开始分工制作时,并没有较大的难度,但是,也遇到了不少的问题,通过我们全体成员的调试后,也一一解决了,从而感觉收获甚大,主要有以下几点:
1.硬件电路的连接与调试时要细心,应遵从先部分调试,后整机联调的原则。
比如,首先我们只连接了该设计电路中的显示部分和控制部分,然后给其上电压,并借助于简单的程序进行调试,刚开始并未出现理想中的效果,待再分部分调试,最后判断是其控制电路未工作,在我们组全体成员的努力下,终于找到了问题的所在,是由于单片机晶振电路连接错误。
因此,只有细心调试才能发现问题,只有通过理论判断,才能找准问题所在,最终才能解决问题。
2.程序的编写与调试时一定要先弄清楚设计的功能要求,并且,应先写好主程序,待主程序工作无误后,可分别写出其子程序,使其能完成独立工作,再联合在一起。
比如,在该设计中通过对显示电路、采样转换电路、通道选择电路程序的编写使我对单片机的应用又有了更深的理解,另外,通过对ADC0809芯片的操作,使首次接触采用单片机控制A/D、D/A芯片的我增长了见识,拓宽了视野,很有收获。
3.待一个设计完成后一定要检验其稳定性,测量其精确性。
比如,为了当未接入输入电压时,避免8通道的悬空对显示产生不稳定的波动,我们通过不断调试验证后使用8个10K的电阻接地将8通道拉低,即当无电压输入时,显示为0输入,而当有输入电压时,则电阻将其短路,不流入地,使该设计更稳定、精确,从而为我们以后的设计奠下了坚实的理论基础。
4.团结就是力量,理论源自于实践。
通过我们组全体成员的努力,我们终于圆满完成了此次设计,并且深深地感受到了实践的重要性。
最后,感谢上级领导对我们的辛勤培育,为我们提供了良好的学习环境,以及指导老师的辛勤指导和全体组员的努力。