数据采集报告.docx

上传人:b****4 文档编号:6561796 上传时间:2023-05-10 格式:DOCX 页数:18 大小:226.21KB
下载 相关 举报
数据采集报告.docx_第1页
第1页 / 共18页
数据采集报告.docx_第2页
第2页 / 共18页
数据采集报告.docx_第3页
第3页 / 共18页
数据采集报告.docx_第4页
第4页 / 共18页
数据采集报告.docx_第5页
第5页 / 共18页
数据采集报告.docx_第6页
第6页 / 共18页
数据采集报告.docx_第7页
第7页 / 共18页
数据采集报告.docx_第8页
第8页 / 共18页
数据采集报告.docx_第9页
第9页 / 共18页
数据采集报告.docx_第10页
第10页 / 共18页
数据采集报告.docx_第11页
第11页 / 共18页
数据采集报告.docx_第12页
第12页 / 共18页
数据采集报告.docx_第13页
第13页 / 共18页
数据采集报告.docx_第14页
第14页 / 共18页
数据采集报告.docx_第15页
第15页 / 共18页
数据采集报告.docx_第16页
第16页 / 共18页
数据采集报告.docx_第17页
第17页 / 共18页
数据采集报告.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

数据采集报告.docx

《数据采集报告.docx》由会员分享,可在线阅读,更多相关《数据采集报告.docx(18页珍藏版)》请在冰点文库上搜索。

数据采集报告.docx

数据采集报告

对温度、光强数据采集系统的实现

 

摘要:

本数据采集系统是以AT89C52单片机为核心,通过ADC0809模数转换器模块对外围数据温度、光强两个参数同时进行采集,然后通过LCD1602液晶显示实时显示采集到的数据。

在基于Proteus的单片机的多路数据采集系统的仿真设计的准确无误的基础上,进行电路的焊接、调试,最终实现该数据采集系统的设计。

数字温度、光强显示计主要由温度检测电路、光强检测电路、ADC0809模数转换器、AT89C52单片机、LCD1602液晶等几部分组成。

温度检测电路主要由LM35与一个同相比例运算放大电路串联,光强检测电路由一个光敏电阻与一个电阻串联组成。

温度、光强两个模拟信号经过AD转换器转换为数字信号后送入单片机,处理后用LCD1602显示采集到的数据。

关键词:

AT89C52单片机AD0809模数转换器LM35LCD1602

一、引言

Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。

本文基于Proteus的单片机多通道数据显示系统的设计,由单片机对外界多路模拟量进行采集,由各路传感器提供数值,再通过AD转换进行模数转换,然后由液晶显示。

在Proteus准确的仿真设计下,进行电路的焊接、调试,最终实现该数据采集系统的实现。

二、设计方案

2.1、电路系统框图

确定该数据采集系统由温度检测模块、光强检测模块、主控模块、显示模块组成。

电路系统框图如图

(1)所示。

 

(1)

2.2、显示方案选择

方案1:

用LED显示。

这种方法尽管电路简单,成本低廉,但是显示的字符数据很有限,比如有些单位字符无法显示。

方案2:

用LCD显示。

这种方法显示更加直观,而且显示的字符更加广泛。

与较方案1比较,我们选择方案2.

2.3、测温元件方案的选择

方案1:

由于本电路是一个测温电路,可以使用热敏电阻之类的器件利用其感温效应,再将随着被测温度变化的电压和电流采集过来,进行A/D转换之后,通过单片机进行处理,再进过LCD显示出来。

这种方案设计上较为复杂。

方案2:

LM35系列精密摄氏温度传感器是美国NS公司产品,LM35系列是精密集成电路温度传感器,其输出的电压特性线性地与摄氏温度成正比。

因此,LM35比按绝对温标校准的线性温度传感器优越得多。

LM35系列传感器生产制作时已经过校准,输出电压与摄氏温度一一对应,使用极为方便。

灵敏度为10.0mv/℃,精度在0.4℃至0.8℃(-55℃至+150℃温度范围内),重复性好,低输出阻抗,线性输出和内部精密度校准使其与读出或控制电路接口简单和方便,可单独电源和正负电源工作。

相比之下,我们选择LM35作为我们的温度检测。

2.4、光强检测方案

光敏电阻器是一种对光敏感的元件,它的电阻值能随着外界光照强弱(明暗)变化而变化。

将它与一个电阻相串联,利用分压作用可以测出它两端的电压作为模拟信号输入。

2.5、温度检测电路模块设计

温度传感器用LM35,将LM35输出电压信号经过同相比例放大器放大。

因为为了减小误差,又考虑到ADC0809的电压范围是0V~+5V,将温度传感器的微弱的模拟信号放大到与A/D转换器满量程电压相应的电平值,以便充分利用A/D转换器的满量程分辨率。

因此把LM35与一个同相比例放大器相连。

2.6、显示电路模块设计

显示电路采用液晶LCD1602,它是一种字符型液晶模块,是一种采用5×7点阵图形来显示字符的16×2点阵液晶显示器。

其特点是:

亮度高、工作电压低、功耗小、易于集成、驱动简单、寿命长、耐冲击且性能稳定。

LCD1602与单片机接口采用串行方式控制。

2.7、分频电路设计

考虑到数据采集系统采样频率为0.5HZ,又因为AT89C52单片机的的ALE引脚的输出频率是内部时钟频率的1/6,因此用两个D触发器将ALE端的时钟频率四分频,作为AD0809的时钟信号。

三、硬件电路设计

3.1、理论计算

(1)同相比例运算放大电路的输出电压Vo的计算

由于由LM35采集回来的模拟信号电压很微弱,为了充分发挥A/D转换器的满量程分辨率,需要利用放大电路将微弱的输入信号进行放大,在设计当中我们将微弱信号放大了3.5倍。

计算公式如下:

Vo=

3.2、模块电路及元件参数

(1)、电源指示灯

(2)

(2)、温度检测电路(温度传感器LM35和同相比例放大器)

图(3)

(3)、光强检测电路

图(4)

(4)、分频电路

图(5)

(5)、液晶显示电路

图(6)

3.3、ADC0809与AT89C52接口设计

(1)、ADC0809的各个引脚及功能

 

 

图(7)

1~5、26~28,IN0~IN7:

8路模拟量输入端。

14~15、8、17~21,D0~D7:

8位数字量输出端。

23~25,ADDA、ADDB、ADDC:

3位地址输入线,用于选通8路模拟输入中的一路

22,ALE:

地址锁存允许信号,输入,高电平有效,对应ALE上跳沿,A、B、C地址状态送入地址锁存器中。

6,START:

A/D转换启动信号,输入高电平有效,START上升沿时,复位ADC0809;START下降沿时启动芯片,开始进行A/D转换;在A/D转换期间,START应保持低电平。

本信号有时简写为ST.

7,EOC:

A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。

9,OE:

数据输出允许信号,输入,高电平有效。

当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量,用于控制三态输出锁存器向单片机输出转换得到的数据。

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

10,CLK:

时钟脉冲输入端。

要求时钟频率不高于640KHZ,EOC=0,正在进行转换;EOC=1,转换结束。

使用中该状态信号即可作为查询的状态标志,又可作为中断请求信号使用。

12、16,REF(+)、REF(-):

基准电压。

11,Vcc:

电源,单一+5V。

13,GND:

(2)、ADC0809的工作原理

当通道选择地址有效时,ALE高电平信号一出现,地址便马上被锁存,这时转换启动信号START紧随ALE之后(或与ALE同时)出现。

START的上升沿将逐次逼近寄存器SAR复位,ADC0809下降沿时启动芯片,开始AD转换,转换期间START始终为低电平。

ADC上升沿出现后的2μs8个时钟周期内(不定),EOC信号将变低电平,以指示转换操作正在进行中,直到转换完成后EOC再变高电平。

微处理器收到变为高电平的EOC信号后,便立即送出高电平OE信号,打开三态门,读取转换结果。

根据方案的选择,该数据采集系统由单片机AT89C51及其外围的晶振电路和电源指示电路、温度检测电路、光强检测电路、ADC0809、同相比例运算放大电路、LCD1602液晶显示模块几部分组成,其电路的总图见附录。

(3)、ADC0809与AT89C52接口设计图

图(8)

四、软件设计

4.1系统主程序流程图

图(9)

程序流程图说明:

程序开始首先进行1602液晶屏幕清屏操作、1602液晶显示初始设置(1.显示模式设置为16*22.指针自加一3.初始化指针位置在第一行第一列)、书写格式说明,然后进入中断函数初始化设置。

程序进入while循环,打开中断,选择ADC0809的模拟信号输入通道,当ADD_A=0,ADD_B=0,ADD_C=0时,选择通道IN0,进行温度数据采集,当ADD_A=1,ADD_B=0,ADD_C=0,选择通道IN1,进行光照数据采集,最终通过ADC0809将模拟信号转换数字信号,通过数据转换,让数据通过LCD1602显示。

4.2、系统C语言程序(见附录)

五、系统调试与测试

将电路焊接结束,用万用表检测芯片的引脚及线与线之间是否有无误。

再检测各个模块电路是否能正常工作。

在检测无误的情况下,下载所编写的程序,看显示所测得的数据是否满足所达到的要求。

看采样频率是否到达0.5HZ,温度的测量精度是否为1摄氏度,光强的精度是否达到0.5%。

如果显示数据结果不对,再不断调试所编写的程序,直到达到设计要求。

 

5.1、测试条件

单一电源+5V、同相放大电路电压

5.2、测试仪器

数字万用表、双踪示波器、双路稳压电源

5.3、测试数据

测试数据见下表:

表中温度电压是万用表测得的LM35随温度变化的电压经同相比例放大器放大后的电压,光强电压是光敏电阻随光照强度变化的电压。

(1)温度测试数据:

电压/V

0.17

0.68

1.19

1.7

2.21

2.72

3.23

3.57

温度/C

5

20

35

50

65

80

95

105

(2)光强测试数据:

电压/V

0.26

0.63

1.05

1.26

1.89

2.31

2.73

3.15

光强/%

5.0

15.5

25.0

35.0

45.5

55.5

65.0

75.5

由以上测得数据看出,测得的温度精度为1摄氏度,光照精度0.5%。

满足设计要求。

六、结束语

通过基于51单片机的对外围电路的温度、光照的数据采集,学到了许多新的知识,为后面学习打下了良好的基础。

附录:

1、系统主程序

#include

#include

sbitADD_A=P3^5;

sbitADD_B=P3^6;

sbitADD_C=P3^7;

sbitSTART=P3^1;

sbitOE=P3^0;

#defineADP1

#defineDP0

unsignedchari=5;

unsignedcharAD_result,display,cnt=0;

voidSLE_channel(unsignedcharchannel);

voiddelayms(unsignedcharxms);

voidtimer1_init(void);

unsignedcharADC_get_data(void);

voidLight(unsignedcharL_data);

unsignedcharsi_she_wu_ru(unsignedcharpre_data);

voidmain(void)

{

LCD_CLR_screen();//液晶清屏操作

lcd_1602_init();//初始化液晶,2x165x7

LCD_1602_printf(1,1,"L(%)T(C)%d");//辅助提示符

timer1_init();//定时器0的初始化

while

(1)//loop

{

}

}

//------------delay

voiddelayms(unsignedcharxms)//延时函数

{

unsignedintx,y;

for(x=xms;x>0;x--)

for(y=110;y>0;y--);

}

//------------温度转换函数

unsignedcharsi_she_wu_ru(unsignedcharpre_data)

{

unsignedcharchar_temp,temp;

floatfloat_temp;

char_temp=pre_data*0.55;

float_temp=pre_data*0.55;//温度函数

if((float_temp-char_temp)>=0.5)//四舍五入处理

{

temp=char_temp+1;

}

else

{

temp=char_temp;

}

returntemp;

}

//------------光强转换函数

voidLight(unsignedcharL_data)

{

unsignedinttemp=5;

unsignedchartemp_yu,temp_mo;

temp=102-(unsignedchar)(L_data/2.15);//光强函数

temp=temp*10;

temp_mo=(temp/10);//取光强的整数部分

temp_yu=(temp%10);//取光强的小数部分

if((temp_yu>=0)&&(temp_yu<5))//精度处理部分1:

(0-5)改为02:

(6-9)改为5

{

temp_yu=0;

}

else

{

temp_yu=5;

}

LCD_1602_print_number(2,1,2,(unsignedint)temp_mo);//显示整数部分数字

LCD_1602_print_char(2,3,'.');//显示小数点

LCD_1602_print_number(2,4,1,(unsignedint)temp_yu);//显示小数部分数字

}

//------------ADC通道选择函数

voidSLE_channel(unsignedcharchannel)

{

switch(channel)

{

case5:

//通道5为温度通道

{

ADD_A=1;

ADD_B=0;

ADD_C=1;

break;

}

case6:

//通道6为光强通道

{

ADD_A=0;

ADD_B=1;

ADD_C=1;

break;

}

default:

//非法通道时,选择温度通道

{

ADD_A=1;

ADD_B=0;

ADD_C=1;

break;

}

}

}

//------------ADC0809开启转换函数

voidADC_start(void)

{

START=0;

START=1;//开启转换

delayms

(1);

START=0;

}

//-----------读取AD转换的结果

unsignedcharADC_get_data(void)

{

unsignedcharAD_data;

delayms

(1);//转换时间

OE=1;//输出使能

AD_data=AD;//获取ADC的转换结果

OE=0;//输出禁止

returnAD_data;//返回转换结果

}

 

//-------------定时器初始化函数

voidtimer1_init(void)

{

TMOD=0x01;//16位工作模式

TH0=(65536-50000)>>8;//定时时间为50ms

TL0=(65536-50000);

EA=1;//开总中断

ET0=1;//开定时器中断

TR0=1;//启动定时器

}

//--------------定时中断函数

voidtimer0()interrupt1

{//进中断先关闭总中断

EA=0;

TH0=(65536-50000)>>8;//重装初值

TL0=(65536-50000);

//-----------中断处理函数在此书写

cnt++;//统计进入中断的次数

if(cnt>=40)

{

cnt=0;//2秒后,清进中断的次数

if(i>=7)//往返取通道5,6

i=5;

SLE_channel(i);//选择模拟量的输入通道

ADC_start();//开启AD转换

AD_result=ADC_get_data();//获取结果

display=si_she_wu_ru(AD_result);//温度精度处理

switch(i)//选择显示通道

{

case5:

{

LCD_1602_print_number(2,8,3,(unsignedint)display);

break;

}

case6:

{

Light(AD_result);

break;

}

}

i++;

}

//-----------禁止在此书写

EA=1;

}

2、电路图:

.

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2