远程温度检测系统设计文档文档格式.docx

上传人:b****6 文档编号:19163387 上传时间:2023-01-04 格式:DOCX 页数:26 大小:782.53KB
下载 相关 举报
远程温度检测系统设计文档文档格式.docx_第1页
第1页 / 共26页
远程温度检测系统设计文档文档格式.docx_第2页
第2页 / 共26页
远程温度检测系统设计文档文档格式.docx_第3页
第3页 / 共26页
远程温度检测系统设计文档文档格式.docx_第4页
第4页 / 共26页
远程温度检测系统设计文档文档格式.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

远程温度检测系统设计文档文档格式.docx

《远程温度检测系统设计文档文档格式.docx》由会员分享,可在线阅读,更多相关《远程温度检测系统设计文档文档格式.docx(26页珍藏版)》请在冰豆网上搜索。

远程温度检测系统设计文档文档格式.docx

随着社会的发展、科技的进步以及人们生活水平的逐步提高,各种方便于生产的自动控制系统开始进入了人们的生活,以单片机为核心的温度采集系统就是其中之一。

同时也标志了自动控制领域成为了数字化时代的一员。

它实用性强,功能齐全,技术先进,使人们相信这是科技进步的成果。

温度是工业控制中主要的被控参数之一,特别是在冶金、化工、建材、食品、机械、石油等工业中,具有举足重轻的作用。

随着电子技术和微型计算机的迅速发展,微机测量和控制技术得到了迅速的发展和广泛的应用。

单片机具有处理能强、运行速度快、功耗低等优点,应用在温度测量与控制方面,控制简单方便,测量范围广,精度较高。

测量温度的关键是温度传感器,温度传感器的发展经历了三个发展阶段:

①传统的分立式温度传感器 

②模拟集成温度传感器 

③智能集成温度传感器。

远程监测的关键是人机界面,软件设计的虚拟器界面也越来越友好,苹果公司的Macintosh开发了G语言,这些为功能强大的专业虚拟仪器软件的出现提供了必要基础。

不久,NI为基于计算机的测量和自动化开发出了LABVIEW软件包。

LABVIEW的功能不断丰富和强大。

LABVIEW用来进来数据采集和控制、数据分析和数据表达,使工程师和科学家能充分利用PC的功能,快速简便地完成自己的工作。

经过多年的不断充实,LABVIEW成为丰富、强大的实用工具软件包,内部配有GPIB、VXI、串口和插入式DAQ板的库函数以及全球几百家厂商的仪器驱动程序。

围绕这些核心软件还陆续开发出多种附件。

二、硬件设计

远程温度监控系统是由上位机和温度测量单元组成。

上位机即计算机,实现对温度测量单元控制,通过串口程序发送命令、接收测量数据,对测量数据处理显示。

温度测量单元,接收上位机命令,按照命令进行温度测量和数据传输等操作。

三、系统设计

3.1系统设计方案

本设计以两个独立通道进行设计,从传感器来的模拟输入信号,经过信号调理后,输入到DS18B20数据采集卡,然后经过串口总线送入PC机,由软件进行数据处理,包括采样波形的实时显示,并进行历史数据保存,边采集边保存,还有实时报警并记录处理等功能。

实现单点温度测量,采用如图3-1所示测控系统。

上位机和温度测量单元采用RS232串行通信标准。

图中上位机发送的信息可以被温度测量单元所接收,温度测量单元发送的信息也可以被上位机接收。

图3-1

3.2下位机组成

该部分主要包括数据采集技术概述,传感器,输入信号的分析、调理以及测量系统的选择。

采用数字温度传感器DS18B20,利用DS18B20不需要A/D转换,课直接进行温度采集显示,报警的数字温度计设计。

包括传感器数据采集电路,温度显示电路,上下限报警调整电路,单片机主板电路等组成。

系统框图主要由主控制器、单片机复位、报警按键设置、时钟振荡、LED显示、温度传感器组成。

系统框图如图3-2所示:

图3-2系统基本方框图

1.主控制器

单片机AT89C51具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。

图3-2-1最小系统图

2.显示电路

显示电路采用LED液晶显示数码管,显示电路是使用的串口显示,这种显示最大的优点就是使用口资源比较少,只用p0口的发送和接收,四只数码管采用74LS164右移寄存器驱动,显示比较清晰。

图3-2-2

3.温度传感器

温度传感器采用美国DALLAS半导体公司生产的DS18B20温度传感器。

DS18B20输出信号全数字化。

便于单片机处理及控制,在0—100摄氏度时,最大线形偏差小于1摄氏度,采用单总线的数据传输,可直接与计算机连接。

用AT89S51芯片控制温度传感器DS18B20进行实时温度检测并显示,能够实现快速测量环境温度,并可以根据需要设定上下限报警温度。

获得的数据可以通过MAX232芯片与计算机的RS232接口进行串口通信,方便的采集和整理时间温度数据。

图3-2-3DS18B20和单片机的接口连接

四、上位机labview设计

4.1结构框图

结构主要四个部分,为数据采集、波形显示、数据显示和警报

系统框图如图4-1所示:

图4-1

4.2系统工作原理

本次设计是简易的温度采集,思路是“采集-显示-统计-报警”,由一个随机选作为温度的产生,由波形图示显示温度的变化,设定限定值,用比较器件比较,超出设定值时报警。

4.2.1单元设计模块

1)串口通信

温度的采集由串口传输所得,需要进行串口通信。

图4-2

2)温度显示

温度显示有三个器件:

波形显示、温度计、温度显示。

图4-2-1

3)限定温度报警

由比较器来比较实时温度,大于限定温度时报警。

图4-2-2

4.2.2单元模块的链接

图4-2-3

4.3上位机界面

五、下位机程序设计

DSl8B20的主要数据元件有:

64位激光LaseredROM,温度灵敏元件和非易失性温度告警触发器TH和TL。

DSBl820可以从单总线获取电源,当信号线为高电平时,将能量贮存在内部电容器中;

当单信号线为低电平时,将该电源断开,直到信号线变为高电平重新接上寄生(电容)电源为止。

此外,还可外接5V电源,给DSl8820供电。

DSl8820的供电方式灵活,利用外接电源还可增加系统的稳定性和可靠性。

图9为读取数据流程图。

图6-1读取数据的流程图

读出温度数据后,LOW的低四位为温度的小数部分,可以精确到0.0625℃,LOW的高四位和HIGH的低四位为温度的整数部分,HIGH的高四位全部为1表示负数,全为0表示正数。

所以先将数据提取出来,分为三个部分:

小数部分、整数部分和符号部分。

小数部分进行四舍五入处理:

大于0.5℃的话,向个位进1;

小于0.5℃的时候,舍去不要。

当数据是个负数的时候,显示之前要进行数据转换,将其整数部分取反加一。

还因为DS18B20最低温度只能为-55℃,所以可以将整数部分的最高位换成一个“-”,表示为负数。

图10为温度数据处理程序的流程图。

图6-1-1温度数据处理流程图

六、系统调试

6.1上位机界面测试

6.2系统运行以及分析

整个系统能正常运行,能显示实时温度、计算平均值,当温度超过温度上限时,上限报警器会显示红色报警。

截图实时温度是33.2°

6.3下位机仿真运行

参考文献

【1】张桐、陈国顺、王正林,精通LabVIEW程序设计—北京:

电子工业出版社,2008.12.

【2】张毅刚、彭喜元,单片机原理与应用设计—北京:

电子工业出版社,2008..4.

【3】唐国民、沈尔云,C语言程序设计:

中国铁道出版社,2006.9.

附录D:

全部程序清单

#include<

reg51.h>

#include"

ds1302.h"

ds18b20.h"

#defineGPIO_DIGP0

//---重定义关键词---//

#defineucharunsignedchar

#defineuintunsignedint

sbitLSA=P2^0;

sbitLSB=P2^1;

sbitLSC=P2^2;

sbitkey1=P3^2;

sbitP27=P2^7;

uchardatatemp_data[2]={0x00,0x00};

//读出温度暂放

//uchardatadisplay[3]={0x01,0x02,0x00};

//显示单元数据,共4个数据,一个运算暂存用

unsignedchart;

unsignedchardis;

unsignedcharmode=0;

unsignedcharwendu=50;

unsignedcharPuZh[2]="

中"

;

#ifndef__DS18B20_H_

#define__DS18B20_H_

ucharcodeREAD_RTC_ADDR[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};

ucharcodeWRITE_RTC_ADDR[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};

//---DS1302时钟初始化2013年1月1日星期二12点00分00秒。

---//

//---存储顺序是秒分时日月周年,存储格式是用BCD码---//

ucharTIME[7]={0,0,0x12,0x01,0x01,0x02,0x13};

//---定义ds1302使用的IO口---//

sbitDQ=P3^7;

externuchardatatemp_data[2];

//加入全局变量

//unsignedchars;

//--定义全局变量--//

unsignedcharcodeDIG_CODE[17]={

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码

unsignedcharDisplayData[6];

//用来存放要显示的8位数的值

//--声明全局变量--//

voidDigDisplay();

voidwork_temp();

voidUsartConfiguration();

/*******************************************************************************

*函数名:

main

*函数功能:

主函数

*输入:

*输出:

*******************************************************************************/

voidmain()

{unsignedcharreceiveData,cont=0;

TMOD=0x01;

ET0=1;

IT0=0;

EX0=1;

EA=1;

TR0=1;

UsartConfiguration();

//串口通信初始化

ow_reset();

//开机先转化一次

write_byte(0xCC);

//发出SkipROM命令

write_byte(0x44);

//发转换命令

Ds1302Init();

SBUF=PuZh[0];

while

(1)

{read_temp();

//读出DS18B20的温度数据

work_temp();

//处理温度数据

Ds1302ReadTime();

DisplayData[0]=DIG_CODE[TIME[2]/16];

//时

DisplayData[1]=DIG_CODE[TIME[2]&

0x0f];

DisplayData[2]=DIG_CODE[TIME[1]/16];

//分

DisplayData[3]=DIG_CODE[TIME[1]&

//DisplayData[4]=DIG_CODE[dis%10000/1000];

//DisplayData[5]=DIG_CODE[dis%1000/100]|0x80;

//DisplayData[4]=DIG_CODE[TIME[0]/16];

//秒

//DisplayData[5]=DIG_CODE[TIME[0]&

DigDisplay();

/*for(s=0;

s<

2;

s++)

{

SBUF=PuZh[s];

//将要发送的数据放入到发送寄存器

while(!

TI);

//等待发送数据完成

TI=0;

//清除发送完成标志位

}*/

if(RI==1)//查看是否接收到数据

{cont++;

if(cont<

3)

receiveData=SBUF;

//读取数据

RI=0;

//清除标志位

TIME[cont]=receiveData;

}

else

{cont=0;

wendu=receiveData;

}

}

}

}

DigDisplay

使用数码管显示

voidDigDisplay()

{

unsignedchari;

unsignedintj;

for(i=0;

i<

6;

i++)

{

switch(i)//位选,选择点亮的数码管,

case(0):

LSA=0;

LSB=0;

LSC=0;

break;

//显示第0位

case

(1):

LSA=1;

//显示第1位

case

(2):

LSB=1;

//显示第2位

case(3):

//显示第3位

case(4):

LSC=1;

//显示第4位

case(5):

//显示第5位

//case(6):

//LSA=0;

//显示第6位

//case(7):

//LSA=1;

//显示第7位

GPIO_DIG=DisplayData[i];

//发送段码

j=1000;

//扫描间隔时间设定

while(j--);

GPIO_DIG=0x00;

//消隐

voidwork_temp()

floattp;

dis=temp_data[1];

dis<

<

=8;

dis=dis|temp_data[0];

//tt=dis*0.0625;

//dis=tt*100+0.5;

if(dis<

0)//当温度值为负数

//DisplayData[0]=0x40;

//因为读取的温度是实际温度的补码,所以减1,再取反求出原码

dis=dis-1;

dis=~dis;

tp=dis;

dis=tp*0.0625*10+0.5;

else

{

//DisplayData[0]=0x00;

//因为数据处理有小数点所以将温度赋给一个浮点型变量

//如果温度是正的那么,那么正数的原码就是补码它本身

DisplayData[4]=DIG_CODE[dis/100];

DisplayData[5]=DIG_CODE[dis%100/10]|0x80;

t=(dis/100)*10+(dis%100/10);

PuZh[0]=dis/100;

PuZh[1]=dis%100/10;

if(t>

wendu)

P27=0;

elseP27=1;

/*DisplayData[1]=DIG_CODE[temp/10000];

DisplayData[2]=DIG_CODE[temp%10000/1000];

DisplayData[3]=DIG_CODE[temp%1000/100]|0x80;

DisplayData[4]=DIG_CODE[temp%100/10];

DisplayData[5]=DIG_CODE[temp%10];

*///扫描显示

voidUsartConfiguration()

{

SCON=0X50;

//设置为工作方式1

TMOD=0X20;

//设置计数器工作方式2

PCON=0X80;

//波特率加倍

TH1=0XF3;

//计数器初始值设置,注意波特率是4800的

TL1=0XF3;

//ES=1;

//打开接收中断

//EA=1;

//打开总中断

TR1=1;

//打开计数器

voidti(void)interrupt0using0

{EX0=0;

EX0=0;

if(mode<

mode=mode+1;

elsemode=0;

if(mode==1)

{TIME[2]=P1;

while(key1==0);

if(mode==2)

{TIME[1]=P1;

if(mode==3)

wendu=P1;

voidtimer(void)interrupt1

if(TI==1)

{SBUF=PuZh[0];

TI=0;

/*voidtigdd(void)interrupt4

{if(TI==1)

if(RI==1)//查看是否接收到数据

RI=0;

//////////11us延时函数

voiddelay(uintt)

for(;

t>

0;

t--);

/////////////DS18B20复位函数

voidow_reset(void)

charpresence=1;

while(presence)

DQ=1;

_nop_();

DQ=0;

delay(50);

//550us

delay(6);

//66us

presence=DQ;

delay(45);

//延时500us

presence=~DQ;

///////////DS18B20写命令函数

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

当前位置:首页 > 求职职场 > 职业规划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1