远程温度检测系统设计文档.docx
- 文档编号:6161563
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:26
- 大小:782.53KB
远程温度检测系统设计文档.docx
《远程温度检测系统设计文档.docx》由会员分享,可在线阅读,更多相关《远程温度检测系统设计文档.docx(26页珍藏版)》请在冰豆网上搜索。
远程温度检测系统设计文档
(此文档为word格式,下载后您可任意编辑修改!
)
应用科技学院
《单片机课程设计报告》
设计题目:
远程温度监控系统设计
专业班级:
11级电子科学与技术2班
组 名:
酱油队
组员:
汤飞刘嘉麟
摘要
随着时代的进步和发展,数据采集系统是将现场采集到的数据进行处理、传输显示、储存等操作。
数据采集系统主要功能是把模拟信号变成数字信号,并进行分析、处理、存储和显示。
温度数据采集系统广泛的应用于人们的日常生活中。
本文基于89S51单片机的测温系统,详细描述了利用数字温度传感器DS18B20开发测温系统的过程,重点对传感器在单片机下的硬件连接,软件编程以及各模块系统流程进行了详尽分析,对各部分的电路也一一进行了介绍,该系统可以方便的实现实现温度采集和显示,并可根据需要任意设定上下限报警温度,它使用起来相当方便,具有精度高、量程宽、灵敏度高、体积小、功耗低等优点,适合于我们日常生活和工、农业生产中的温度测量,也可以当作温度处理模块嵌入其它系统中,作为其他主系统的辅助扩展。
DS18B20与AT89C51结合实现最简温度检测系统,该系统结构简单,抗干扰能力强,适合于恶劣环境下进行现场温度测量,有广泛的应用前景。
本文主要介绍了利用labview实现温度采集系统的设计过程,系统结构时利用了labview的虚拟仪器技术,由labview虚拟系统自生成温度信号,通过温度的采集实现对温度数据的采集,预处理,分析,储存和显示。
系统采用DS18B20数字温度传感器和STC公司的AT89S51单片机设计成智能温度采集模块,由采集模块组成单点温度测量系统采集环境,测得数据经串口传送给计算机。
创新之处采用虚拟仪器技术,利用LabVIEW软件编写相应软件,控制各采集模块进行温度
关键词:
单片机;温度检测;AT89S51;DS18B20,labview,串口;
一、引言4
二、硬件设计5
三、系统设计5
四、上位机labview设计10
五、下位机程序设计13
六、系统调试15
附录D:
全部程序清单18
一、引言
随着科技的不断发展,现代社会对各种信息参数的准确度和精确度的要求都有了几何级的增长,而如何准确而又迅速的获得这些参数就需要受制于现代信息基础的发展水平。
在三大信息信息采集(即传感器技术)、信息传输(通信技术)和信息处理(计算机技术)中,传感器属于信息技术的前沿尖端产品,尤其是温度传感器技术,在我国各领域已经引用的非常广泛,可以说是渗透到社会的每一个领域,人民的生活与环境的温度息息相关,在工业生产过程中需要实时测量温度,在农业生产中也离不开温度的测量,因此研究温度的测量方法和装置具有重要的意义。
由单片机集成电路构成的温度传感器的种类越来越多,测量的精度越来越高,响应时间越来越短,因其使用方便、无需变换电路等特点已经得到了广泛的应用。
随着社会的发展、科技的进步以及人们生活水平的逐步提高,各种方便于生产的自动控制系统开始进入了人们的生活,以单片机为核心的温度采集系统就是其中之一。
同时也标志了自动控制领域成为了数字化时代的一员。
它实用性强,功能齐全,技术先进,使人们相信这是科技进步的成果。
温度是工业控制中主要的被控参数之一,特别是在冶金、化工、建材、食品、机械、石油等工业中,具有举足重轻的作用。
随着电子技术和微型计算机的迅速发展,微机测量和控制技术得到了迅速的发展和广泛的应用。
单片机具有处理能强、运行速度快、功耗低等优点,应用在温度测量与控制方面,控制简单方便,测量范围广,精度较高。
测量温度的关键是温度传感器,温度传感器的发展经历了三个发展阶段:
①传统的分立式温度传感器 ②模拟集成温度传感器 ③智能集成温度传感器。
远程监测的关键是人机界面,软件设计的虚拟器界面也越来越友好,苹果公司的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
#include"ds1302.h"
#include"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]&0x0f];
//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]&0x0f];
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;
Ds1302Init();
}
else
{cont=0;
receiveData=SBUF;//读取数据
RI=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;LSB=0;LSC=0;break;//显示第1位
case
(2):
LSA=0;LSB=1;LSC=0;break;//显示第2位
case(3):
LSA=1;LSB=1;LSC=0;break;//显示第3位
case(4):
LSA=0;LSB=0;LSC=1;break;//显示第4位
case(5):
LSA=1;LSB=0;LSC=1;break;//显示第5位
//case(6):
//LSA=0;LSB=1;LSC=1;break;//显示第6位
//case(7):
//LSA=1;LSB=1;LSC=1;break;//显示第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;
tp=dis;//因为数据处理有小数点所以将温度赋给一个浮点型变量
//如果温度是正的那么,那么正数的原码就是补码它本身
dis=tp*0.0625*10+0.5;
}
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];
DigDisplay();*///扫描显示
}
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<3)
mode=mode+1;
elsemode=0;
if(mode==1)
{TIME[2]=P1;
Ds1302Init();
while(key1==0);
}
if(mode==2)
{TIME[1]=P1;
Ds1302Init();
while(key1==0);
}
if(mode==3)
{
wendu=P1;
while(key1==0);
}
EX0=1;
}
voidtimer(void)interrupt1
if(TI==1)
{SBUF=PuZh[0];//将要发送的数据放入到发送寄存器
TI=0;//清除发送完成标志位
}
}
/*voidtigdd(void)interrupt4
{if(TI==1)
{SBUF=PuZh[0];//将要发送的数据放入到发送寄存器
TI=0;//清除发送完成标志位
}
if(RI==1)//查看是否接收到数据
{cont++;
if(cont<3)
{
receiveData=SBUF;//读取数据
RI=0;//清除标志位
TIME[cont]=receiveData;
Ds1302Init();
}
else
{cont=0;
receiveData=SBUF;//读取数据
RI=0;//清除标志位
wendu=receiveData;
}
RI=0;
}
}
//////////11us延时函数
voiddelay(uintt)
{
for(;t>0;t--);
}
/////////////DS18B20复位函数
voidow_reset(void)
{
charpresence=1;
while(presence)
{
while(presence)
{
DQ=1;
_nop_();
_nop_();
DQ=0;
delay(50);//550us
DQ=1;
delay(6);//66us
presence=DQ;
}
delay(45);//延时500us
presence=~DQ;
}
DQ=1;
}
///////////DS18B20写命令函数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 远程 温度 检测 系统 设计 文档