温度监测系统设计.docx
- 文档编号:10724032
- 上传时间:2023-02-22
- 格式:DOCX
- 页数:28
- 大小:149.79KB
温度监测系统设计.docx
《温度监测系统设计.docx》由会员分享,可在线阅读,更多相关《温度监测系统设计.docx(28页珍藏版)》请在冰豆网上搜索。
温度监测系统设计
温度监测系统设计
河北科技师范学院
单片机原理及应用课程设计
温度监测系统设计
学院名称:
机电工程学院
专业名称:
电气工程及其自动化
学生姓名:
学生学号:
指导教师:
2015年09月18日
千万不要删除行尾的分节符,此行不会被打印。
在目录上点右键“更新域”,然后“更新整个目录”。
打印前,不要忘记把上面“Abstract”这一行后加一空行
1、前言
1.1课题背景及研究意义
随着新技术的不断开发与应用,近年来单片机发展十分迅速,一个以微机应用为主的新技术革命浪潮正在蓬勃兴起,单片机的应用已经渗透到电力、冶金、化工、建材、机械、食品、石油等各个行业。
传统的温度采集方法不仅费时费力,而且精度差,单片机的出现使得温度的采集和数据处理问题能够得到很好的解决。
温度是工业对象中的一个重要的被控参数。
然而所采用的测温元件和测量方法也不相同;产品的工艺不同,控制温度的精度也不相同。
因此对数据采集的精度和采用的控制方法也不相同。
传统的控制方式以不能满足高精度,高速度的控制要求,如温度控制表温度接触器,其主要缺点是温度波动范围大,由于他主要通过控制接触器的通断时间比例来达到改变加热功率的目的,受仪表本身误差和交流接触器的寿命限制,通断频率很低。
近几年来快速发展了多种先进的温度控制方式,如:
PID控制,模糊控制,神经网络及遗传算法控制等。
这些控制技术大大的提高了控制精度,不但使控制变得简便,而且使产品的质量更好,降低了产品的成本,提高了生产效率。
本设计使用单片机作为核心进行控制。
单片机具有集成度高,通用性好,功能强,特别是体积小,重量轻,耗能低,可靠性高,抗干扰能力强和使用方便等独特优点,在数字、智能化方面有广泛的用途。
1.2课题的设计目的
1.巩固、加深和扩大单片机应用的知识面,提高综合及灵活运用所学知识解决工业控制的能力。
2.培养针对课题需要,选择和查阅有关手册、图表及文献资料的自学能力,提高组成系统、编程、调试的动手能力。
3.通过对课题设计方案的分析、选择、比较、熟悉单片机用系统开发、研制的过程,软硬件设计的方法、内容及步骤。
1.3课题的主要工作
本课题的研究重点是设计一种基于单片机的数字温度计控制系统。
利用数字温度传感器DS18B20,此传感器可读取被测量温度值,进行转换。
主要工作如下:
1.温度测试基本范围0℃—100℃。
2.精度误差小于1℃。
3.LCD液晶显示。
4.可以设定温度的上下限报警功能。
5.实现报警提示。
2、设计方案
2.1设计方案
采用数字温度芯片DS18B20测量温度,输出信号全数字化。
便于单片机处理及控制,省去传统的测温方法的很多外围电路。
且该芯片的物理化学性很稳定,它能用做工业测温元件,此元件线形较好。
在0—100摄氏度时,最大线形偏差小于1摄氏度。
DS18B20的最大特点之一采用了单总线的数据传输,由数字温度传感器DS18B20和微控制器AT80C51构成的温度测量装置,它直接输出温度的数字信号,可直接与计算机连接。
这样,测温系统的结构就比较简单,体积也不大。
采用51单片机控制,软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制,而且体积小,硬件实现简单,安装方便。
既可以单独对多DS18B20控制工作,还可以与PC机通信上传数据,另外AT89S51在工业控制上也有着广泛的应用,编程技术及外围功能电路的配合使用都很成熟。
该系统利用AT80C51芯片控制温度传感器DS18B20进行实时温度检测并显示,能够实现快速测量环境温度,并可以根据需要设定上下限报警温度,达到监测环境温度的额目的。
2.2系统设计原理
利用温度传感器DS18B20可以直接读取被测温度值,进行转换的特性,模拟温度值经过DS18B20处理后转换为数字值,然后送到单片机中进行数据处理,并与设置的温度报警限比较,超过限度后通过扬声器报警。
2.3系统组成
本课题以是80C51单片机为核心设计的一种数字温度控制系统,系统整体硬件电路包括,传感器数据采集电路,温度显示电路,上下限报警调整电路,单片机主板电路等组成。
系统框图主要由主控制器、单片机复位、报警按键设置、时钟振荡、LCD液晶显示、温度传感器组成。
系统框图如图2-2所示。
图2-2系统基本方框图
主控制器
单片机AT80C51具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。
显示电路
本设计显示电路采用1602液晶显示模块芯片,该芯片可现实16x2个字符,比以前的七段数码管LED显示器在显示字符的数量上要多得多。
另外,由于1602芯片编程比较简单,界面直观,因此更加易于使用者的操作和观测。
温度传感器
采用美国DALLAS半导体公司生产的DS18B20温度传感器。
DS18B20输出信号全数字化。
便于单片机处理及控制,在0—100摄氏度时,最大线形偏差小于1摄氏度,采用单总线的数据传输,可直接与计算机连接。
用AT80C51芯片控制温度传感器DS18B20进行实时温度检测并显示,能够实现快速测量环境温度,并可以根据需要设定上下限报警温度。
2.4DS18B20温度传感器与单片机的接口电路
DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。
图3-3DS18B20与单片机的接口电路
3、系统硬件设计
3.1液晶模块简介
LCD1602的结构及功能:
LCD1602液晶模块采用HD44780控制器,hd44780具有简单而功能较强的指令集,可以实现字符移动,闪烁等功能,LCD1602与单片机MCU通讯可采用8位或4位并行传输两种方式,hd44780控制器由两个8位寄存器,指令寄存器(IR)和数据寄存器(DR)忙标志(BF),显示数RAM(DDRAM),字符发生器ROMA(CGOROM)字符发生器RAM(CGRAM),地址计数器RAM(AC)。
IR用于寄存指令码,只能写入不能读出,DR用于寄存数据,数据由内部操作自动写入DDRAM和CGRAM,或者暂存从DDRAM和CGRAM读出的数据,BF为1时,液晶模块处于内部模式,不响应外部操作指令和接受数据,DDTAM用来存储显示的字符,能存储80个字符码,CGROM由8位字符码生成5*7点阵字符160中和5*10点阵字符32种.8位字符编码和字符的对应关系,可以查看参考文献(30)中的表4.CGRAM是为用户编写特殊字符留用的,它的容量仅64字节,可以自定义8个5*7点阵字符或者4个5*10点阵字符,AC可以存储DDRAM和CGRAM的地址,如果地址码随指令写入IR,则IR自动把地址码装入AC,同时选择DDRAM或CGRAM。
LCD1602液晶模块的引脚图如图4-3所示。
图4-31601引脚图
LCD1602引脚介绍:
Vss(1脚):
一般接地。
Vdd(2脚):
接电源。
Vee(3脚):
液晶显示器对比度调整端,接电源时对比度最弱,接地时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。
RS(4脚):
RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。
R/W(5脚):
R/W为读写信号线,高电平
(1)时进行读操作,低电平(0)时进行写操作。
E(6脚):
E(或EN)端为使能(enable)端,下降沿使能。
DB0(7脚):
底4位三态、双向数据总线0位(最低位)。
DB1(8脚):
底4位三态、双向数据总线1位。
DB2(9脚):
底4位三态、双向数据总线2位。
DB3(10脚):
底4位三态、双向数据总线3位。
DB4(11脚):
高4位三态、双向数据总线4位。
DB5(12脚):
高4位三态、双向数据总线5位。
DB6(13脚):
高4位三态、双向数据总线6位。
DB7(14脚):
高4位三态、双向数据总线7位(最高位)(也是busyflang)。
寄存器选择控制如表4-1。
RS
R/W
操作说明
0
0
写入指令寄存器(清除屏等)
0
1
读busyflag(DB7),以及读取位址计数器(DB0~DB6)值
1
0
写入数据寄存器(显示各字型等)
1
1
从数据寄存器读取数据
表4-1寄存器选择控制
3.2液晶显示部分与89C51的接口
如图4-4所示。
用89C51的P2口作为数据线,用P3.2、P3.1、P3.0分别作为LCD的E、R/W、RS。
其中E是下降沿触发的片选信号,R/W是读写信号,RS是寄存器选择信号本模块设计要点如下:
显示模块初始化:
首先清屏,再设置接口数据位为8位,显示行数为1行,字型为5×7点阵,然后设置为整体显示,取消光标和字体闪烁,最后设置为正向增量方式且不移位。
向LCD的显示缓冲区中送字符,程序中采用2个字符数组,一个显示字符,另一个显示电压数据,要显示的字符或数据被送到相应的数组中,完成后再统一显示.首先取一个要显示的字符或数据送到LCD的显示缓冲区,程序延时2.5ms,判断是否够显示的个数,不够则地址加一取下一个要显示的字符或数据。
图4-4液晶与89C51的接口
3.3DS18B20介绍
DS18B20引脚如图4-6所示。
图4-6DS18B20引脚图
DALLAS最新单线数字温度传感器DS18B20是一种新型的“一线器件”,其体积更小、更适用于多种场合、且适用电压更宽、更经济。
DALLAS半导体公司的数字化温度传感器DS18B20是世界上第一片支持“一线总线”接口的温度传感器。
温度测量范围为-55~+125摄氏度,可编程为9位~12位转换精度,测温分辨率可达0.0625摄氏度,分辨率设定参数以及用户设定的报警温度存储在EEPROM中,掉电后依然保存。
被测温度用符号扩展的16位数字量方式串行输出;其工作电源既可以在远端引入,也可以采用寄生电源方式产生;多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。
因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度传感器,十分方便。
3.4温度传感器工作原理
DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s减为750ms。
DS18B20测温原理:
低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。
高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。
计数器1和温度寄存器被预置在-55℃所对应的一个基数值。
计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。
DS18B20功能特点:
1.采用单总线技术,与单片机通信只需要一根I/O线,在一根线上可以挂接多个DS18B20。
2.每只DS18B20具有一个独有的,不可修改的64位序列号,根据序列号访问地应的器件。
3.低压供电,电源范围从3~5V,可以本地供电,也可以直接从数据线上窃取电源(寄生电源方式)。
4.测温范围为-55℃~+125℃,在-10℃~85℃范围内误差为±0.5℃。
5.可编辑数据为9~12位,转换12位温度时间为750ms(最大)。
6.用户可自设定报警上下限温度。
7.报警搜索命令可识别和寻址哪个器件的温度超出预定值。
8.DS18B20的分辩率由用户通过EEPROM设置为9~12位。
9.DS18B20可将检测到温度值直接转化为数字量,并通过串行通信的方式与主控制器进行数据通信。
DS18B20有4个主要的数据部件:
1.光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。
64位光刻ROM的排列是:
开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。
光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。
2.DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:
用16位符号扩展的二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S为符号位。
3.DS18B20温度传感器的存储器DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的EEPRAM,后者存放高温度和低温度触发器TH、TL和结构寄存器。
4.配置寄存器。
DS18B20内部结构及功能:
DS18B20的内部结构如图4-7所示。
主要包括:
寄生电源,温度传感器,64位ROM和单总线接口,存放中间数据的高速暂存器RAM,用于存储用户设定温度上下限值的TH和TL触发器,存储与控制逻辑,8位循环冗余校验码(CRC)发生器等7部分
图4-7DS18B20内部结构
4、系统软件设计
4.1主程序设计
整个系统的功能是由硬件电路配合软件来实现的,当硬件基本定型后,软件的功能也就基本定下来了。
从软件的功能不同可分为两大类:
一是监控软件(主程序),它是整个控制系统的核心,专门用来协调各执行模块和操作者的关系。
二是执行软件(子程序),它是用来完成各种实质性的功能如测量、计算、显示、通讯等。
每一个执行软件也就是一个小的功能执行模块。
这里将各执行模块一一列出,并为每一个执行模块进行功能定义和接口定义。
各执行模块规划好后,就可以规划监控程序了。
首先要根据系统的总体功能选择一种最合适的监控程序结构,然后根据实时性的要求,合理地安排监控软件和各执行模块之间地调度关系。
主程序流程见图5-1。
图5-1主程序流程图
4.2温度显示子程序
18B20温度显示子程序流程图5-2。
图5-2DS18B20子程序流程图
4.3硬件原理图
4.4程序编码
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
sbitDQ=P2^2;//ds18b20与单片机连接口
sbitRS=P1^0;
sbitRW=P1^1;
sbitEN=P2^5;
sbiten573=P2^6;
sbiten1573=P2^7;
uchardatadisdata[5];
uinttvalue,CurrentT=0;//温度值
uchartflag;//温度正负标志
#defineLCD_BUSP0
sbitSetKey=P3^4;
sbitUpKey=P3^5;
sbitDnKey=P3^6;
sbitBEEP=P2^3;
unsignedcharAlarmTempLow=10,AlarmTempTop=40,Set=0,NG=0;
voiddelayms(uintms)//延时xx毫秒
{
uchari;
while(ms--)
{
for(i=0;i<120;i++);
}
}
voidcommand(uintcom)//LCD写指令
{
RS=0;//RS为0
LCD_BUS=com;//装载指令
delayms(5);//延时5ms
EN=1;//LCD使能
delayms(5);//延时5ms
EN=0;//LCD不使能
}
voidwrite_dat(uchardat)//LCD写数据
{
RS=1;//RS为1
LCD_BUS=dat;//装载数据
delayms(5);//延时5ms
EN=1;//LCD使能
delayms(5);//延时5ms
EN=0;//LCD不使能
}
voidwritestring(ucharx,uchary,uchar*s)//LCD写字符串
{
if(y==0)command(0x80+x);//表示第一行
elsecommand(0xC0+x);//表示第二行
while(*s)//判断是否字符串的结尾
{
write_dat(*s);//显示当前字符
s++;//字符串地址加1
}
}
voidwriteChar(ucharx,uchary,uchars)//LCD写字符串
{
if(y==0)command(0x80+x);//表示第一行
elsecommand(0xC0+x);//表示第二行
{
write_dat(s);//显示当前字符
}
}
voidLCD_Initial()//LCD初始化
{
EN=0;//LCD不使能
RW=0;//RW为0
command(0x38);//发送初始化指令
command(0x0c);//发送初始化指令
command(0x06);//发送初始化指令
command(0x01);//发送初始化指令
command(0x80+0x02);//发送LCD初始位置
}
/*************************DS1820程序****************************/
voiddelay_18B20(unsignedinti)//延时1微秒
{
while(i--);
}
voidds1820rst(void)/*ds1820复位*/
{
unsignedcharx=0;
DQ=1;//DQ复位
delay_18B20(4);//延时
DQ=0;//DQ拉低
delay_18B20(100);//精确延时大于480us
DQ=1;//拉高
delay_18B20(40);
}
uchards1820rd(void)/*读数据*/
{
unsignedchari=0;
unsignedchardat=0;
for(i=8;i>0;i--)
{
DQ=0;//给脉冲信号
dat>>=1;
DQ=1;//给脉冲信号
if(DQ)
dat|=0x80;
delay_18B20(10);
}
return(dat);
}
voidds1820wr(ucharwdata)/*写数据*/
{
unsignedchari=0;
for(i=8;i>0;i--)
{
DQ=0;
DQ=wdata&0x01;
delay_18B20(10);
DQ=1;
wdata>>=1;
}
}
unsignedintRead_Temperature(void)/*读取温度值并转换*/
{
uchara,b;
ds1820rst();
ds1820wr(0xcc);//*跳过读序列号*/
ds1820wr(0x44);//*启动温度转换*/
ds1820rst();
ds1820wr(0xcc);//*跳过读序列号*/
ds1820wr(0xbe);//*读取温度*/
a=ds1820rd();
b=ds1820rd();
tvalue=b;
tvalue<<=8;
tvalue=tvalue|a;
if(tvalue<0x0fff)tflag=0;
else{tvalue=~tvalue+1;tflag=1;}
tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数
CurrentT=tvalue;
return(tvalue);
}
voidDisplay_Temperature()//显示温度
{
ucharflagdat;
disdata[0]=tvalue/1000+0x30;//百位数
disdata[1]=tvalue%1000/100+0x30;//十位数
disdata[2]=tvalue%100/10+0x30;//个位数
disdata[3]=tvalue%10+0x30;//小数位
if(tflag==0)flagdat=0x20;//正温度不显示符号
elseflagdat=0x2d;//负温度显示负号:
-
//if(disdata[0]==0x30)
//{
//disdata[0]=0x20;//如果百位为0,不显示
//if(disdata[1]==0x30)disdata[1]=0x20;//如果百位为0,十位为0也不显示
//}
if(tflag==1)
{
writeChar(10,0,flagdat);//wr_com(0x8a);wr_dat(flagdat);//显示符号位
writeChar(11,0,disdata[0]);//wr_com(0x8b);wr_dat(disdata[0]);//显示百位
writeChar(12,0,disdata[1]);//wr_com(0x8c);wr_dat(disdata[1]);//显示十位
writeChar(13,0,disdata[2]);//wr_com(0x8d);wr_dat(disdata[2]);//显示个位
writeChar(14,0,0X2E);//wr_com(0x8e);wr_dat(0x2e);//显示小数点
writeChar(15,0,disdata[3]);//wr_com(0x8f);wr_dat(disdata[3]);//显示小数位
}
else
{
writeChar(10,0,disdata[0]);//wr_com(0x8a);wr_dat(disdata[0]);//显示百位
writeChar(11,0,disdata[1]);//wr_com(0x8b);wr_dat(disdata[1]);//显示十位
writeChar(12,0,disdata[2]);//wr_com(0x8c);wr_dat(disdata[2]);//显示个位
writeChar(13,0,0X2e);//wr_com(0x8d);wr_dat(0x2e);//显示小数点
writeChar(14,0,disdata[3]);//wr_com(0x8e);wr_dat(disdata[3]);//显示小数位
}
}
void
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 温度 监测 系统 设计