当前位置:文档之家› 智能恒温控制系统

智能恒温控制系统

长沙民政职业技术学院2010届毕业实践报告系别:电子信息工程系专业:应用电子技术班级:电子1033班2013年5月6日目录1、恒温系统的设计思路 (1)1、1恒温系统的设计目的 (1)1、2恒温系统的设计功能 (2)2、恒温系统设计方案 (2)2、1恒温系统的基本要求 (2)2、2恒温系统的基本原理 (3)3、硬件设计 (3)3、1单片机STC89C52简介 (3)3、2温度传感器DS18B20简介 (4)3、2、1 DS18B20的主要特性 (4)4、电路仿真 (5)5、绪论 (5)附:程序清单智能恒温控制系统陈张宇,刘婷婷,胡亮1019013338,1019013347,1019013316指导老师:马勇赞【摘要】温度是反应物体冷热程度的物理量,是衡量物体分子运动平均动能的标志。

对温度本身的探究没有意义。

但是,温度的控制在当今各个领域都得以深入应用,且具有积极的意义。

比如,一些行业中的大型电加热设备,实验室的恒温室、恒温箱,农业发展中所使用的大型恒温蔬菜棚,以及用于医学上的恒温育儿箱等。

对温度的收集与控制从而达到恒温的方法甚多,采用单片机微机控制是其中较有效的方法之一。

它以实用性、可靠性、灵活性再加上它的方便、简单、轻巧赢得了多数人及市场的青睐。

本恒温控制系统采用了市场广泛应用的STC98C52单片机作为数据处理器,温度数据收集采用DS18B20温度传感器,通过按键设置温度的上下限,单片机将传感器收集的温度与设置的上下限温度对比判断,控制加热、制冷开关,使温度保持在设置的上下限温度之间,从而达到恒温目的。

【关键词】单片机;恒温;控制系统;传感器(DS18B20)1、恒温系统的设计思路1、1恒温系统的设计目的随着社会的发展,科技的进步,传感器技术的日趋成熟,越来越多的测温控制系统趋向于智能化发展,智能化已成为现代测温控制系统发展的主流方向。

与传统的水银、热力学温度计相比,数字温度传感器具有响应快、更精确的明显优势,而在控制方面,智能化测温控制系统的“即测即控”功能也要比传统的测与控相对分离也要略差一筹。

这就是智能化在现代特别是近年来在各领域高速发展的原因。

温度的控制在日常生活当中及工业方面应用的比较广泛,比如家居或环境温度的检测与控制,工业制酒过程的发酵池的温度控制等,无论是起居生活还是工业生产过程,这些环节对温度数据采集以及对其进行做出的反应都需要精而快,更重要的是采集信息与控制执行这两个环节更要及时,不留空隙。

虽然对温度的监测设施要求不太高,普通的测温设备就能准确而方便的达到人们的要求。

但从温度的获取到温度的控制这一环节,人们稍一疏忽就有可能带来不可弥补的损失。

比如人们可以掌握大棚里的温度,从而改变光照对大棚温度进行调节,但是棚内温度的变化就需要人们不时的测量才知道,这样的繁琐势必会给人们造成疏忽,以致调控不及时。

针对这一问题,本设计的目的是实现一种可连续准确、方便及时的温度控制系统。

它应用广泛,功能强大,可实现对空调的控制、保温设施的控制等等。

1、2恒温系统的设计功能本设计主要是对温度的实时监测与控制,基本能够实现温度的实时化监测并可视化显示,以及按用户设定的要求实现温度的精确性控制并可靠性执行。

具体如下:1)按键输入恒温控制温度的最高报警温度和最低报警温度,所设置的最高报警温度和最低报警温度在数码管上显示;2)数码管显示当前温度;3)当温度处于用户所设温度之间时,绿灯亮,不执行操作;当温度低于用户设定的最低报警温度时,黄灯闪烁,同时启动“升温装置”使温度上升;当温度高于用户设定的最高报警温度时,红灯闪烁,同时启动“降温装置”使温度下降;(本设计用蓝色LED灯代替升温、降温装置仿真)原理如图所示:2、恒温系统设计方案2、1恒温系统的基本要求本方案设计要求能够实现对温度的监测与控制。

微处理器:STC89C52温度传感器:DS18B20测温范围:-55℃~+125℃温度控制:室温—100℃温度显示:8*LED数码管工作电源: 3-5V/DC控制误差:小于+-0.5℃2、2恒温系统的基本原理本方案设计原理是温度传感器(DS18B20)将所采集的温度信息传入微处理器,单片机(STC89C82)对温度信息进行数据处理并显示在数码管上,同时单片机还将当前所采集的温度信息和原先所设定的最高温度信息、最低温度信息作比较,当温度处于原先所设温度之间时,绿灯亮,不执行操作;当温度低于原先设定的最低报警温度时,黄灯闪烁,同时启动“升温装置”使温度上升;当温度高于原先设定的最高报警温度时,红灯闪烁,同时启动“降温装置”使温度下降。

原理框架图如下:图1 原理框图3、硬件设计3、1单片机STC89C52简介STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash存储器。

STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。

在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

具有以下标准功能:8k字节Flash,512字节RAM,32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,3个16 位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。

另外STC89X52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。

空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。

掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

最高运作频率35MHz,6T/12T可选。

3、2温度传感器DS18B20简介3、2、1 DS18B20的主要特性1) 适应电压范围更宽,电压范围:3.0~5.5V,在寄生电源方式下可由数据线供电2) 独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯3) DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温4) DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内5) 温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃6) 可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温7) 在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快8) 测量结果直接输出数字温度信号,以"一线总线"串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力9)负压特性:电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。

DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。

图2 DS18B20引脚图1、GND为电源地2、DQ为数字信号输入/输出端3、VDD为外接供电电源输入端(在寄生电源接线方式时接地)。

4、电路仿真5、绪论附:程序清单#include<reg52.h>#include<math.h>#include <stdio.h>#include<INTRINS.H>#define uchar unsigned char#define uint unsigned int;uint shangxian=35,xiaxian=30;uchar k1=0;uint TempH,TempL;sbit RED_LED=P3^6;sbit GREEN_LED=P3^5;sbit SPEAK=P3^7;sbit chaidan=P1^2;sbit jia=P3^1;sbit jian=P3^2;sbit DQ=P1^0;//ds18b20 端口sfr dataled=0x80;//显示数据端口uint temp;uchar flag_get,count,num,minute,second;uchar code tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; uchar str[6];void delay1(uchar MS);unsigned int ReadTemperature(void);void Init_DS18B20(void);unsigned char ReadOneChar(void);void WriteOneChar(unsigned char dat);void delay(unsigned int i);void process_alarm();void presskey();void chengxux();void chengxus();unsigned long LedOut[5],LedNumVal;void UARTinit(void){SCON = 0x50;TMOD |= 0x20;TH1 = 0xFD;TR1 = 1;TI = 1;}zhuchengxu(){TMOD|=0x01;//定时器设置TH0=0xef;TL0=0xf0;IE=0x82;TR0=1;UARTinit();P2=0x00; //赋初值count=0;while(1){str[5]=0xc6; //显示C符号str[2]=tab[(TempH%100)/10]; //十位温度str[3]=tab[(TempH%100)%10]&0x7f; //个位温度,带小数点str[4]=tab[TempL];process_alarm();if(flag_get==1) //定时读取当前温度{temp=ReadTemperature();TempH=temp>>4;TempL=temp&0x0F;TempL=TempL*6/10;//小数近似处理printf("%d.%d\n",TempH,TempL);flag_get=0;}}}void tim(void) interrupt 1 using 1//中断,用于数码管扫描和温度检测间隔{TH0=0xef;//定时器重装值TL0=0xf0;num++;if (num==200){num=0;flag_get=1;//标志位有效second++;if(second>=60){second=0;minute++;}}count++;if(count==3){ P2=0x01;dataled=str[2];}if(count==4){ P2=0x02;dataled=str[3];}if(count==5){ P2=0x04;dataled=str[4];}if(count==6){ P2=0x08;dataled=str[5];count=0;}}void presskey(){if(chaidan==0){delay(110);if(chaidan==0){k1++;while(!chaidan);}}}void delay(unsigned int i)//延时函数{while(i--);}void Init_DS18B20(void){unsigned char x=0;DQ = 1; //DQ复位delay(8); //稍做延时DQ = 0; //单片机将DQ拉低delay(80); //精确延时大于480usDQ = 1; //拉高总线delay(10);x=DQ; //稍做延时后如果x=0则初始化成功x=1则初始化失败delay(5);}unsigned char ReadOneChar(void){unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i--){DQ = 0; // 给脉冲信号dat>>=1;DQ = 1; // 给脉冲信号if(DQ)dat|=0x80;delay(5);}return(dat);}void WriteOneChar(unsigned char dat){unsigned char i=0;for (i=8; i>0; i--){DQ = 0;DQ = dat&0x01;delay(5);DQ = 1;dat>>=1;}delay(5);}unsigned int ReadTemperature(void){unsigned char a=0;unsigned int b=0;unsigned int t=0;Init_DS18B20();WriteOneChar(0xCC); // 跳过读序号列号的操作WriteOneChar(0x44); // 启动温度转换delay(200);Init_DS18B20();WriteOneChar(0xCC); //跳过读序号列号的操作WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器)前两个就是温度a=ReadOneChar(); //低位b=ReadOneChar(); //高位b<<=8;t=a+b;return(t);}void process_alarm(){if(TempH<xiaxian&&TempH>=5){RED_LED=0;SPEAK=0;delay(11000);RED_LED=1;SPEAK=1;delay(11000);}else if(TempH>=shangxian&&TempH<85){GREEN_LED=0;SPEAK=0;delay(5500);GREEN_LED=1;SPEAK=1;delay(5500);}else{RED_LED=1;SPEAK=0;GREEN_LED=1;}}void chengxux(){unsigned int t,shi,ge,xiaoshu1,xiaoshu2;t=xiaxian;while(1){if(jia==0){delay(1100);if(jia==0){t++;while(jia);}}if(xiaxian>=40){xiaxian=0;}elseif(jian==0){delay(1100);if(jian==0){xiaxian--;while(jian);}}if(xiaxian<=0){xiaxian=40;}shi=t/1000;ge=t%1000/100;xiaoshu1=t%100/10;xiaoshu2=t%10;P2=0x01;dataled=tab[shi];delay(250);P2=0x02;dataled=tab[ge];delay(250);P2=0x04;dataled=tab[xiaoshu1];delay(250);P2=0x08;dataled=tab[xiaoshu2];delay(250);}}void chengxus(){xiaxian=shangxian;chengxux();}void main(){while(1){presskey();switch(k1){case 0:zhuchengxu();break;case 1:chengxux();break;case 2:chengxus();break;case 3:zhuchengxu();break;default:break;}}}。

相关主题