远程温度检测系统设计文档文档格式.docx
- 文档编号:19163387
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:26
- 大小:782.53KB
远程温度检测系统设计文档文档格式.docx
《远程温度检测系统设计文档文档格式.docx》由会员分享,可在线阅读,更多相关《远程温度检测系统设计文档文档格式.docx(26页珍藏版)》请在冰豆网上搜索。
随着社会的发展、科技的进步以及人们生活水平的逐步提高,各种方便于生产的自动控制系统开始进入了人们的生活,以单片机为核心的温度采集系统就是其中之一。
同时也标志了自动控制领域成为了数字化时代的一员。
它实用性强,功能齐全,技术先进,使人们相信这是科技进步的成果。
温度是工业控制中主要的被控参数之一,特别是在冶金、化工、建材、食品、机械、石油等工业中,具有举足重轻的作用。
随着电子技术和微型计算机的迅速发展,微机测量和控制技术得到了迅速的发展和广泛的应用。
单片机具有处理能强、运行速度快、功耗低等优点,应用在温度测量与控制方面,控制简单方便,测量范围广,精度较高。
测量温度的关键是温度传感器,温度传感器的发展经历了三个发展阶段:
①传统的分立式温度传感器
②模拟集成温度传感器
③智能集成温度传感器。
远程监测的关键是人机界面,软件设计的虚拟器界面也越来越友好,苹果公司的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写命令函数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 远程 温度 检测 系统 设计 文档