简易直流电压表.docx
《简易直流电压表.docx》由会员分享,可在线阅读,更多相关《简易直流电压表.docx(19页珍藏版)》请在冰豆网上搜索。
简易直流电压表
单片机应用课程设计
简易直流电压表
摘要
数字电压表的基本工作原理是利用A/D转换电路将待测的模拟信号转换成数字信号,通过相应换算后将测试结果以数字形式显示出来的一种电压表。
较之于一般的模拟电压表,数字电压表具有精度高、测量准确、读数直观、使用方便等优点。
A/D转换主要由芯片ADC0809来完成,它负责把采集到的模拟量转换为相应的数字量在传送到数据处理模块。
数据处理则由芯片STC89C51来完成,其负责把ADC0809传送来的数字量经过一定的数据处理,产生相应的显示码送到数码管进行显示;此外它还控制着ADC0809芯片工作。
此数字电压表可以测量0-5V,0—50V的2路模拟直流输入电压值,并通过两个四位一体的7段数码管显示出来。
1、设计任务和要求
1.1、设计任务
设计制作一个简易直流电压表,该直流电压表能测量直流电压。
输入电压
AD转换器
控制器
显示测量值
1.2、设计要求
基本要求
A、能测量电压档0-5V,0—50V两档,输入阻抗>200k。
B、数码显示共3位,其中1位小数(0.00—9.99或000—999V)。
C、要有输入信号超范围的保护电路。
扩展部分
A、能够测量电阻。
1.3方案论证
A、主要设计框图:
电压采集
AD转换器
0809
单片机处理
数码管显示
B、设计方案论述
ADC转换:
本次使用的单片机是带ADC转换的逐次比较型的ADC,ADC换口在P1口(P1.7-P1.0),有8路10位高速转换器。
本次设计使用P1.0口作模拟电压输入,ADC将模拟电压转化为相应的数字量。
数据处理并LCD显示:
ADC转换得到的二制数只是二进制数,还需要进一步处理得到十进数,并且进行精度处理,也就是课题要求的四位有效数据。
对数据的处理按下公式
式中D为ADC的转换的二进数,V为显示的数据。
V设为浮点型数,乘以1000输入电压 ADC转换数据处理并送LCD显示后强制转换为整型。
则得到四位有效数据。
再依次除于1000取商则得个位,取余除于100取商则得十分位,再取余除10则得百分位,取余则得千分位将各位加0x30转化为ASCII码后送LCD显示。
C、硬件设计框图:
D、软件流程图
E、元器件确定
1)AT89C51单片机
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。
主要功能特性:
低功耗空闲和掉电模式,软件设置睡眠和唤醒功能。
兼容MCS51指令系统,8K可反复擦写(>1000次)FlashROM。
3个16位可编程定时/计数器中断,时钟频率0—24MHZ。
32个双向I/O口,256B内部RAM。
2个串行中断,可编程UART串行通道。
2个外部中断源,共6个中断源。
2个读写中断口线,3级加密位。
2)ADC0809模数转换芯片
ADC0809是美国国家半导体公司生产的CMOS工艺8通道,8位逐次逼近式A/D模数转换器。
其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。
ADC0809内部逻辑结构图
主要功能特性:
8路输入通道,8位A/D转换器,即分辨率为8位。
具有转换起停控制端。
转换时间为100μs(时钟为640kHz时),130μs(时钟为500kHz时)。
单个+5V电源供电。
模拟输入电压范围0~+5V,不需零点和满刻度校准。
工作温度范围为-40~+85摄氏度。
低功耗,约15mW。
引脚说明
IN0~IN7:
8路模拟量输入端。
D0~D8:
8位数字量输出端。
D0~D7均为三态缓冲输出形式,可以和单片机的数据线直接相连。
D0为最低位,D7为最高位。
A、B、C:
3位地址输入线,A为低地址,C为高地址,用于选通8路模拟输入中的一路。
具体通道选择如表1所示。
本次设计使用的通道是IN0,故A、B、C均需接地。
ALE:
地址锁存允许信号,输入高电平有效。
对应ALE上跳沿,A、B、C地址状态送入地址锁存器中。
START:
A/D转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)使其启动(脉冲上升沿使0809复位,下降沿启动A/D转换)。
EOC:
A/D转换结束信号输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。
OE:
数据输出允许信号,输入高电平有效。
当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。
CLK:
时钟脉冲输入端,要求时钟频率不高于640KHZ。
ADC0809的内部没有时钟电路,所需时钟信号由外界提供,因此有时钟信号引脚。
VREF(+)、VREF(-):
基准电压。
用来与输入的模拟信号进行比较,作为逐次逼近的基准。
VCC:
电源,单一+5V。
GND:
接地。
通道选择表
A/D转换后得到的数据应及时传送给单片机进行处理。
数据传送的关键问题是如何确认A/D转换的完成,因为只有确认完成后,才能进行传送。
为此可采用下述三种方式:
(1)定时传送方式
对于一种A/D转换其来说,转换时间作为一项技术指标是已知的和固定的。
例如ADC0809转换时间为128μs,相当于6MHz的MCS-51单片机共64个机器周期。
可据此设计一个延时子程序,A/D转换启动后即调用此子程序,延迟时间一到,转换肯定已经完成了,接着就可进行数据传送。
(2)查询方式
A/D转换芯片由表明转换完成的状态信号,例如ADC0809的EOC端。
因此可以用查询方式,测试EOC的状态,即可却只转换是否完成,并接着进行数据传送。
(3)中断方式
把表明转换完成的状态信号(EOC)作为中断请求信号,以中断方式进行数据传送。
不管使用上述那种方式,只要一旦确定转换完成,即可通过指令进行数据传送。
首先送出口地址并以点击浏览下一页信号有效时,OE信号即有效,把转换数据送上数据总线,供单片机接受。
3)四位共阴数码管
4-LED显示器引脚如图所示,是一个共阴极接法的4位LED数码显示管,其中a,b,c,e,f,g为4位LED各段的公共输出端,1、2、3、4分别是每一位的位数选端,dp是小数点引出端,4位一体LED数码显示管的内部结构是由4个单独的LED组成,每个LED的段输出引脚在内部都并联后,引出到器件的外部。
对于这种结构的LED显示器,它的体积和结构都符合设计要求,由于4位LED阴极的各段已经在内部连接在一起,所以必须使用动态扫描方式(将所有数码管的段选线并联在一起,用一个I/O接口控制)显示。
数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。
通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。
在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。
本设计使用的驱动方式是动态驱动,四位共阴数码管的段码输入依次由并行端口P0产生,位码输入用并行端口P2高四位产生。
4)P0口上拉电阻
一般作单键触发使用时,如果IC本身没有内接电阻,为了使单键维持在不被触发的状态或是触发后回到原状态,必须在IC外部另接一电阻。
数字电路有三种状态:
高电平、低电平、和高阻状态,有些应用场合不希望出现高阻状态,可以通过上拉电阻或下拉电阻排阻消除高阻状态。
九排上拉电阻
本次设计中使用的上拉电阻是一个九位排阻(如图所示)。
顾名思义,排阻就是若干个参数完全相同的电阻,它们的一个引脚都连到一起,作为公共引脚,其余引脚正常引出。
所以如果一个排阻是由n个电阻构成的,那么它就有n+1只引脚,一般来说,最左边的那个是公共引脚,它在排阻上一般用一个色点标出来。
由于排阻引脚众多,所以排阻比若干只固定电阻更为方便。
本次设计中九位排阻在依次连接单片机P0口各引脚的同时并依序连接数码管各引脚(上拉电阻VCC端接单片机VCC端)。
上拉电阻既能为单片机提供部分电压能力,同时也能起到预防线路中电流过大的作用。
1.4模拟仿真结果
A、总体电路设计
B、部分电路设计
1)晶振及复位电路
接12M晶振,根据数据手册,并联30pF微调电容构成并联谐振,帮助稳定输出波形。
AT89C51单片机要求至少两个高电平,以便单片机做好准备。
当上电时,由于电容的电压不能突变,会输出高电平,当电容充电到一定程度,就会输出低电平,单片机利用输出高电平的这段时间复位。
选择20uF的电容,10k电阻。
2)模拟输入电路
模拟输入信号则由IN0直接输入。
0—5V0—50V
P3.6接VCC,P3.7接GNDP3.6接GND,P3.7接VCC
2、实际制作和调试
2.1测试方法和测试仪器
仿真平台为Proteus软件。
硬件调试采用小系统板(51+数码管+573+138+排阻)、星研集成环境软件,调试过程用到学生用安全电源(5V)、万用表。
2.2软件调试
Proteus软件是世界上著名的EDA工具,能完成原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件,是目前最好的仿真单片机及外围器件的工具。
程序清单:
#include
unsignedcharcode
dispbitcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//不带小数点的
dispbitcode2[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//带小数点的
unsignedchardispbuf[4];
unsignedinti;
unsignedintj;
unsignedchargetdata;
unsignedinttemp;
unsignedinttemp1;
unsignedcharcount;
unsignedchard;
sbitST=P3^0;
sbitOE=P3^1;
sbitEOC=P3^2;
sbitCLK=P3^3;
sbitP25=P2^5;
sbitP26=P2^6;
sbitP27=P2^7;
sbitP07=P0^7;
sbitP24=P2^4;
voidTimeInitial();
voidDlay(unsignedinti);
voidTimeInitial()
{
TMOD=0x10;
TH1=(65536-200)/256;
TL1=(65536-200)%256;
EA=1;
ET1=1;
TR1=1;
}
voidDelay(unsignedinti)
{
unsignedintj;
for(;i>0;i--)
{
for(j=0;j<125;j++)
{;}
}
}
voidDisplay()
{if(P24==0)//大量程
{P0=dispbitcode[dispbuf[3]];
P25=0;
P26=1;
P27=1;
Delay(10);
P0=0x00;
P0=dispbitcode[dispbuf[2]];
P25=0;
P26=1;
P27=0;
Delay(10);
P0=0x00;
P0=dispbitcode2[dispbuf[1]];
P25=0;
P26=0;
P27=1;
Delay(10);
P0=0x00;
P0=dispbitcode[dispbuf[0]];
P25=0;
P26=0;
P27=0;
Delay(10);
P0=0x00;}
else//小量程
{P0=dispbitcode[dispbuf[3]];
P25=0;
P26=1;
P27=1;
Delay(10);
P0=0x00;
P0=dispbitcode2[dispbuf[2]];
P25=0;
P26=1;
P27=0;
Delay(10);
P0=0x00;
P0=dispbitcode[dispbuf[1]];
P25=0;
P26=0;
P27=1;
Delay(10);
P0=0x00;
P0=dispbitcode[dispbuf[0]];
P25=0;
P26=0;
P27=0;
Delay(10);
P0=0x00;}
}
voidmain()
{
TimeInitial();
while
(1)
{
ST=0;//st正脉冲启动
OE=1;//输出允许
ST=1;
ST=0;
while(EOC==0);//eoc给出1转换完成
OE=1;
getdata=P1;
OE=0;
temp=(getdata*1.0/255)*500;
dispbuf[0]=temp%10;//取0.0x
dispbuf[1]=temp/10%10;//取0.x
dispbuf[2]=temp/100%10;//取个位
dispbuf[3]=temp/1000;//取十位
Display();
}
}
voidt1(void)interrupt3using0
{
TH1=(65536-200)/256;
TL1=(65536-200)%256;
CLK=~CLK;
}
2.3硬件调试
用面包板完成0809外围电路的搭建,用星研配套仿真器装载程序开始调试。
硬件连接图
面包板实物图
0—5V硬件电路测量结果示例
0—50V硬件电路测量结果示例
2.4调试中的问题记录
1)装载程序后,通电运行,发现怎么改变电压都没有变化且显示0
根据星研软件的调试结果发现单片机根本就没有处理数据,拔了仿真器和不拔仿真器一样的结果数码管都会显示一个0,调试过程根据程序运行流程发现,0809没有将采集到的数据在中断的作用下传给单片机,后来改了程序还是没有正确的结果,下载点亮所有数码管的程序到仿真器,发现正常运行,排除了单片机和数码管是坏的的可能性,怀疑0809没有完成数据的转换,经过测量相关管脚的电压也排除了这一可能,后来通过研究电路板发现程序中用P2控制138时所用的引脚与实际电路板上P2和138之间的引脚连接不一致。
数码管显示的数字比较闪
更改程序将延迟的时间增大就解决了这一问题。
2)0—50V量程测量结果误差较大
经过调节电位器,测量结果得到改善。
3、测试结果分析
0—5V量程通过实际电压表测量后,误差基本保持在0.01V,测量结果误差小,0—50V电压源与所制作电压表结果误差保持在0.2V,误差较大,经过电位器调节后,得到改善。
4、课程设计总结
本次课程设计温习了单片机的基本原理,功能以及构造,以及ADC0809的基本原理,学会了使用Protuse和星研集成环境仿真、查错。
利用C语言进行编程实现所需要的功能,同时在Protuse软件上画电路图并进行仿真,通过硬件电路搭建提高了动手能力和分析问题的能力。
软件部分的编程,主要是通过看资料参考范例编写,弄清楚基本的工作原理,实现方案以及所需要注意的地方,其实一切开始了就会发现没有想象中那么那么难。
对于硬件部分,利用Keil烧程序到单片机中,懂得将程序下载到单片机的方法和原理。
对一些基本电路检测问题,做到自己分析再和组员交换意见相互协作共同实验。
仿真结果比较理想,但是由于没有注意到程序和最小系统电路板的匹配,导致各种不出结果,然后各种换器件都没有用,一度怀疑硬件有问题是坏的,但实际发现是程序编写端口与硬件板子端口不对应导致,通过改变程序,现象便出现了。
【参考文献】
1、郭天祥编著,新概念51单片机C语言教程入门、提高、开发、扩展全攻略,电子工业出版社,2009年1月
2、翟朝霞等编著,《单片机原理与应用》实验及课程设计指导书,大连海事大学出版社,2013年3月
3、蔡美琴等编著,MCS—51系列单片机系统及其应用,高等教育出版社,2012年6月