多数数据采集Word格式.docx
- 文档编号:18723906
- 上传时间:2022-12-31
- 格式:DOCX
- 页数:17
- 大小:234.09KB
多数数据采集Word格式.docx
《多数数据采集Word格式.docx》由会员分享,可在线阅读,更多相关《多数数据采集Word格式.docx(17页珍藏版)》请在冰豆网上搜索。
以STC系列单片机完成简易的实验开发系统,完成程序在线下载功能,实现按键控制ADC0809转换显示等功能。
包括:
(1)包括9V电源变换为5V直流供电电路;
(2)单片机最小系统;
(3)按键4*3,4位数码管LED显示;
(4)串口RS232下载电路设计;
(5)ADC0809转换电路;
图1.1系统框图
本课程设计中我们做多路通道,该通道采集电压,对采集的电压值进行采集、处理并显示,我们还可以通过改变A/D芯片的参考电压来改变其量程,达到对电压值的多样化显示。
A/D芯片将输入的模拟电压值转换为一个8位的二进制数字,再输送到单片机控制单元,经过处理显示出相应电压值。
2.方案设计
2.1主控芯片设计
方案一:
选用专用电压转换芯片INC7107实现电压的测量和现实。
缺点是精度比较低,且内部电压转换和控制部分不可控制,优点是价格低廉。
方案二:
选用单片机STC89C51和A/D转换芯片ADC0809实现电压的转换和控制,用四位数码管显示出最后的转换电压结果。
缺点是价格稍贵,优点是转换精度高,且转换的过程和控制、显示部分可以控制。
终上所述:
方案二所需元件少、成本低且易于实现,可选此方案。
系统方案图如下:
图2.1系统框图
3.硬件设计
3.1数模转换芯片
A/D转换器的种类很多,就位数来说,可以分为8位、10位、12位和16位等。
位数越高其分辨率就越高,价格也就越贵。
A/D转换器型号很多,而其转换时间和转换误差也各不相同。
(1)逐渐逼近式A/D转换器:
它是一种速度快、精度较高、成本较低的直接式转换器,其转换时间在几微秒到几百微秒之间。
(2)双积分A/D转换器:
它是一种间接式的A/D转换器,优点是抗干扰能力强,精度比较高,缺点是数度很慢,适用于对转换数度要求不高的系统。
(3)并行式A/D转换器:
它又被称为flash(快速)型,它的转换数度很高,但她采用了很多个比较器,而n位的转换就需要2n-1个比较器,因此电路规模也极大,价格也很贵,只适用于视频A/D转换器等数度特别高的领域。
鉴于上面三种方案,在价格、转换速度等多种标准考量下,在本设计选用的是逐渐逼近式A/D转换器——ADC0809.
3.2单片机的选择
STC89C51单片机是一种面向大规模的集成电路芯片,是微型计算机中的一个重要的分支。
此系统是由CPU、随即存取数据存储器、只读程序存储器、输入输出电路(I/O口),还有可能包括定时/计数器、串行通信口、显示驱动电路(LCD和LED驱动电路)、脉宽调制电路、模拟多路转换器及A/D转换器等电路集成到一个单块芯片上,构成了一个最小但完善的计算机任务。
单片机要使用特定的组译和编译软件编译程序,在用keiluvision2把程序下载到单片机内。
3.3按键
键盘是一种常见的输入设备,用户可以向计算机输入数据或命令。
根据案件的识别方法分类,有编码键盘和非编码键盘两种。
通过硬件识别的键盘称编码键盘;
通过软件识别的键盘成为非编码键盘。
非编码键盘有两种接口方法:
一种是独立按键接口;
另一种是矩阵式按键接口。
(1)独立按键接口
在单片机中,如果所需的按键较少,可采用独立式键盘。
每只按键接单片机的一条I/O线,通过对线的查询,即可识别各按键的状态。
如图2.2所示。
4只按键分别宇单片机的P1.0~P1.3I/O线上。
无按键按下时,P1.0~P1.3线上均输入高电平。
当某按键按下时,与其相连的I/O线将得到低电平输入。
图3.1独立按键接口图
(2)矩阵式按键接口
在单片机中需要的按键较多时,通常把键排成矩阵形式,这样可以节省硬件资源。
如对于20只按键接口,如采用按键独立方式,需要20个I/O口。
如采用矩阵式按键方式,则只需要7个I/O口。
如图2.3所示。
单片机系统中的非编码式键盘程序主要由判别是否有键按下子程序、键的识别子程序、找到闭合键后,读入相应的键值,再转到相应的键处理程序几个部分组成。
图3.2矩阵式按键接口图
在该系统中所用到的按键有12个,所以采取矩阵式按键接口方式。
3.4模数转换器ADC0809
在我们所测控的信号中军事连续变化的物理量,而要对这些信号进行处理,则需要将其转换为数字量,A/D转换器就是为了将连续变化的模拟量转换成计算机能接受的数字量。
按模拟量转换成数字量的原理可以分为3种:
双积分式、逐次逼近式及并行式A/D转换器。
而该系统选用的是ADC0809,下面就具体的介绍一下ADC0809的工作原理。
ADCC0809的介绍
ADC0809是八通道的八位逐次逼近式A/D转换器。
由单一的5V电源供电,片内带有锁存功能的8选1的模拟开关。
由C、B、A的编码来决定所选的模拟通道。
转换时间为100us。
转换误差为1/2LSB。
IN7~IN0:
八个通道的模拟输入量。
ADDA、ADDB、ADDC:
模拟通道地址线。
当CBA=000时,IN0输入,当CBA=111时,IN7输入。
ALE:
地址锁存信号。
START:
转换启动信号,高电平有效。
D7~D0:
数据输出线。
三态输出,D7是最高位,D0是最低位。
OE:
输出允许信号,高电平有效。
CLK:
时钟信号,最高频率为640KHZ。
EOC:
转换结束状态信号。
上升沿后高电平有效。
Vcc:
+5V电源。
Vref:
参考电压。
图3.3ADC0809的时序图
其工作过程是:
ALE的上升沿将A、B、C端选择的通道地址锁存到8位A/D转换器的输入端。
START的下降验启动8位A/D转换器进行转换。
A/D转换开始使EOC端输出低电平。
A/D转换结束,EOC输出高电平。
该信号通常可作为中断申请信号。
OE为读出数据允许信号。
OE端为高电平时,可以读出转换的数字量。
硬件电路设计时,需根据时序关系及软件进行设计。
由于ADC0809具有输出3态锁存器,其八位数据输出引脚可直接与数据总线相连。
地址译码引脚A、B、C分别与地址总线低三位A0、A1、A2相连,以选通IN0~IN7中的一个通道。
在启动A/D转换时,由单片机的P3.4控制A/D转换器的地址锁存和转换启动,由于ALE和START连在一起,因此AD0809在锁存通道的同时,也启动了A/D转换器。
在读取转换结果时,用低电平的读信号RD,产生的正脉冲作为OE信号,用以打开三态输出锁存器。
将转换结果输出。
而低电平的写信号WR则表示转换结束状态信号。
4.软件设计
4.1A/D转换程序流程图
A/D转换程序的功能是采集数据,在整个系统设计中占有很高的地位。
本设计中采用中断的方式来读取转换完成的数据,这样能节省CPU的资源,当系统设置好后,一旦数据转换完成,当便会进入外部中断0,然后在中断中读取转换的数值,处理数据并送数码管显示输出。
图4.1数模转换过程图
4.2系统工作流程
程序开始运行时,我们先将它进行初始化,当数据输入后对4个通道的模拟量进行巡回采样,再将采集的数据进行工程量转换,在数码管管上显示出来,通过外部的中断实现信号的切换。
图4.2系统流程图
5.系统调试
在Proteus仿真软件平台上搭建硬件电路,在keiluv4上编写软件并经编译连接生产可执行的.hex文件,把该文件添加到在Proteus平台上搭建好的电路的单片机里。
运行进行仿真调试。
仿真时,数码管有示数,与标准电压表的示数差不多,说明各模块均在正常工作。
例如,在5V量程下,标准电压表的显示值2.50V,而数码管显示2.406;
标准电压表显示4.44V,数码管示值为4.420。
数码管显示结果有误差是由于ADC0809输出的二进制码数转换为BCD码数的换算方法有一定误差导致。
如图5.1所示Proteus仿真结果图。
6.设计总结
说起课程设计,我认为最重要的就是做好设计的预习,认真的研究老师给的题目,选一个自己有兴趣的题目。
其次,老师对实验的讲解要一丝不苟的去听去想,因为只有都明白了,做起设计就会事半功倍如果没弄明白,就迷迷糊糊的去选题目做设计,到头来一点收获也没有。
最后,要重视程序的模块化,修改的方便,也要注重程序的调试,
掌握其方法。
在这次难得的课程设计过程中我锻炼了自己的思考能力和动手能力。
通过题目选择和设计电路的过程中,加强了我思考问题的完整性和实际生活联系的可行性。
在方案设计选择和芯片的选择上,培养了我们综合应用单片机的能力对单片机的各个管脚的功能也有了进一步的认识。
还锻炼我们个人的查阅技术资料的能力,动手能力,发现问题,解决问题的能力。
并且我们熟练掌握了有关器件的性能及测试方法。
图5.1Proteus仿真结果图
7.参考文献
[1]严洁.单片机原理及其接口技术.机械工业出版社,2010,65-105
[2]范红刚.51单片机自学笔记.北京航空航天大学出版社,2009
[3]高云.基于MSP430的温室多路数据采集系统.农机化研究,2009,No.8
[4]常铁原,王欣,陈文军.多路数据采集系统的设计.电子技术应用,2008,No.11
[5]叶红海,李丽敏.基于单片机的多路数据采集系统的设计与实现.2008,No.4
[6]彭伟.单片机C语言程序设计实训100例.电子工业出版社,2009,46-48,104-110
[7]杨居义,杨晓琴,王益斌等.单片机课程设计指导.清华大学出版社,2009,135-141
[8]刘刚,秦永左,朱杰斌.单片机原理及应用.北京大学出版社,2006,76-98,134-155
[9]林祝亮,武林,杨金华.基于双单片机的多路数据采集系统设计.仪器仪表学报,2006,No.6
[10]元增民,张文希.单片机原理与应用基础.国防科技大学出版社,2006,205-266
[11]王琳,商周,王学伟.数据采集的发展及应用.电测与仪表,2004,No.464
[12]V.Schmidt,Control,dataacquisition,andremoteparticipationforfusionresearch,FusionEng.Des.81(2006)1702–1712.
[13]A.Neto,H.Fernandes,A.Duarte,Firesignal-Dataacquisitionandcontrolsystemsoftware.FusionEngineeringandDesign82(2007)1359-1364.
源程序
#include<
reg51.h>
#defineuintunsignedint
#defineucharunsignedchar
ucharcodeseg7[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};
//共阴极数码管显示编码
ucharcodech[]={0x00,0x01,0x02,0x03,0x04,
0x05,0x06,0x07};
ucharADC_data;
uinttemp;
uchart1,flag;
ucharkey;
ucharbai,shi,ge;
sbitSTART=P3^4;
sbitOE=P3^1;
sbitEOC=P3^3;
sbitCLK=P3^0;
sbitA0=P2^0;
sbitA1=P2^1;
sbitA2=P2^2;
sbitle=P3^2;
sbitNOA=P3^5;
sbitNOB=P3^6;
sbitNOC=P3^7;
voiddisplay(ucharbai,ucharshi,ucharge,uchart);
//数码管显示函数
/*****************对T1初始化函数********************/
voidT1_Inital(void)
{TMOD=0x01;
TH1=(65536-184)/256;
//求T1高八位数
TL1=(65536-184)%256;
EA=1;
//开中断
ET1=1;
//允许T1中断
TR1=1;
//启动T1
}
/*****************定时器1中断处理函数********************/
voidT1_interrupt(void)interrupt3using0
{TH1=(65536-184)/256;
//转换时间为200us(时钟频率为640Hz)
CLK=~CLK;
//产生同步时钟信号
/*****************ADC0808转换数据函数********************/
voidADC_trans()
{
START=0;
OE=0;
START=1;
START=0;
//START从1->
0下降沿开始转换数据
do{}while(!
EOC);
//当ADC0808转换数据时,EOC=0;
转换结束时,EOC=1;
OE=1;
//允许A/D数据输出,单片机读取数据
ADC_data=P0;
//将输出数据P0端采集,将采集数据放到ADC_data中
OE=0;
//关闭A/D数据输出
temp=ADC_data*1.0/255*500;
//转化为十进制数字量
ge=temp%10;
shi=temp%100/10;
bai=temp/100;
/*****************延时函数********************/
voiddelay(uintx)//微秒级延时子程序
{
uinti,j;
for(i=x;
i>
0;
i--)
for(j=110;
j>
j--);
voiddisplay(ucharbai,ucharshi,ucharge,uchart)//数码管显示函数
{le=1;
NOA=0;
NOB=1;
NOC=0;
P1=(seg7[bai]|0x80);
//段选数据,和0x80相与表示显示小数点
le=0;
delay(12);
le=1;
NOA=1;
NOB=0;
P1=seg7[shi];
NOB=0;
NOC=0;
P1=seg7[ge];
NOA=1;
NOB=1;
P1=seg7[t];
le=0;
}
voidkeyscan(void)
{
t1=0;
P2=0xF0;
//高四位输入行为高电平列为低电平
delay
(2);
t1=P2;
//读P1口
t1=t1&
0xF0;
//屏蔽低四位
t1=~((t1>
>
4)|0xF0);
if(t1==1)//p2.4被拉低
key=0;
elseif(t1==2)//p2.5被拉低
key=1;
elseif(t1==4)//p2.6被拉低
key=2;
elseif(t1==8)//p2.7被拉低
key=3;
else
key=16;
P2=0x0F;
//低四位输入列为高电平行为低电平
0x0F;
t1=~(t1|0xF0);
if(t1==2)//p2.1被拉低
key=key+0;
elseif(t1==4)//p2.2被拉低
key=key+4;
elseif(t1==8)//p2.3被拉低
key=key+8;
}
/*************************************************************/
/**/
/*判断键是否按下*/
voidkeydown(void)
{
if(P2!
=0xF0)//判断按键是否按下如果按钮按下会拉低一个端口
{
keyscan();
//调用按键扫描程序
flag=1;
else
{display(0,0,0,0);
flag=0;
/*****************主函数********************/
voidmain()
{ucharchannel;
T1_Inital();
//定时器T1初始化
while
(1)
{keydown();
P2=0x00;
channel=key;
if(channel==8)channel=0;
if(channel==9)channel=1;
if(channel==10)channel=2;
if(channel==11)channel=3;
if(key==0)
{A2=0;
A1=0;
A0=0;
elseif(key==1)
A0=1;
elseif(key==2)
A1=1;
elseif(key==3)
elseif(key==4)
{A2=1;
elseif(key==5)
elseif(key==6)
elseif(key==7)
elseif(key==8)
elseif(key==9)
elseif(key==10)
elseif(key==11)
if(flag==1)
{ADC_trans();
display(bai,shi,ge,channel);
P1=0x00;
P2=0x00;
9.附录B;
电路原理总图、作品实物图片
图9.1作品实物图
图9.2电路原理总图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 多数 数据 采集