1、成都理工大学工程技术学院恒温箱控制系统课程设计报告 系别: 自动化工程系 专业: 自动化 姓名: 杜 亮 学号: 20307202 6月16日摘要温度测量与控制在工业、农业、国防等行业有着广泛应用。随着微电子技术发展,各种高性能半导体集成温度传感器,在温度测控领域得到了极为广泛应用。恒温箱智能控制系统是用半导体温度传感器做测温器,用单片机控制温度平衡,最后达到恒温目。本文对系统所能实现功能做了简朴简介,并简朴简介了系统使用51单片机性能和发展状况;同步对DS18B20做了简介。本文重点简介了系统硬件分析与设计,对硬件各某些电路一一进行了简介。绘制了电路原理图,并进行了电路焊接,完毕了系统硬件调
2、试。依照硬件设计和系统所要实现功能,本设计对软件也进行了设计,并通过重复模仿运营、调试,完毕了系统软件设计,最后形成了一套完整智能温度控制系统。核心词:温度平衡 DS18B20 51单片机目录摘要- 1 -目录- 2 -前言- 3 -1 系统设计分析- 4 -1.1 设计题目规定- 4 -1.2 设计方案选取- 4 -2 硬件电路设计- 5 -2.1 硬件电路设计- 5 -2.1.1 传感器- 5 -2.1.2 温度传感器DS18B20- 6 -2.1.3 LED数码管显示电路- 6 -2.2 硬件总电路图- 7 -3 程序设计- 7 -3.1 程序设计简介- 7 -3.2 程序编写- 7 -
3、4 总结- 14 -前言近年来为了保证产品质量,各个行业行为规范就越来越高,众多机械类、医药类、化工类、建筑类等工业和公司都离不开恒温箱使用;为了保证恒温箱许多重要技术指标可以达到国家技术所规定规定,必要对其进行检测,保证产品质量1。本系统所设计、研发数字恒温箱能非常好地解决这些问题。温度控制系统是自动控制系统较为复杂控制,其控制滞后性是整个系统中最难克服难题,由于温度变化是纯滞后环节,而温度控制也是一种惯性大,应变慢控制对象2。在温度控制系统中普通用到是较为先进控制系统理论和控制算法。本系统中采用了PID算法,其算法应用到了系统软件设计中,对整个加热过程使用模糊PID控制方案,对于加热过程中
4、所产生各种干扰和恒温箱惯性问题都进行了分析3。恒温箱智能控制系统采用半导体集成温度传感器满足温度测量规定,温度传感器将采集温度信号转换成电流信号,然后再由转换电路将电流信号转换为电压信号,通过放大电路和模/数转换芯片将电压信号转换成数字信号,由单片机解决后,将测量得到温度值显示于液晶显示屏上。系统所有输入输出控制集中由单片机统一管理,各关于运营参数设定,可通过键盘输入,设定温度、箱温实时值在液晶显示模块上显示,操作以便。该系统具备实时温度显示和温度设定功能,还具备温度上、下限报警和自动控制功能。当温度高于或低于设定值一定限度时,发出生光报警,消除由于单片机系统意外失控所导致危险,提高了恒温箱工
5、作可靠性和使用安全性。设计任务为:用单片机设计一种控制温度范畴在3080智能温度控制系统。设计规定:完毕该系统软硬件设计,学习掌握单片机采集测控系统设计办法,提高学习新知识、新技能能力,培养独立设计能力。1 系统设计分析1.1 设计题目规定依照计算机控制技术课程知识点,设计一种基于单片机恒温箱控制系统。设计任务书规定设计一种以8088CPU或PC总线为核心,以AI、DI和AO、DO通道为重要接口,外配LED显示、键盘操作以及涉及传感变送器及执行器小型计算机控制系统。在Proteus下仿真进行验证。1.2 设计方案选取 本设计目在于使箱内有一种恒温环境,当温度过高时要使温度可以减少,当温度过低时
6、要使温度可以升高。温度传感器DS18B20是“一线总线”接口,且可以直接读出被测温度,测温范畴大,因而选取DS18B20来采集温度。半导体制冷片是用直流电流使其运转,可以持续工作,且既有加热和制冷两种功能,使用两个继电器变化半导体电流方向以实现加热(制冷)工作。显示方面则选用LCD1602,可以显示英文及数字,质量轻,耗电小,并且显示内容多。整个系统选取由STC89C51最小系统控制,STC89C51系列单片机具备强抗干扰、高速、低功耗功能,且指令代码完全兼容老式8051单片机,12时钟/机器周期和6时钟/机器周期可任意选取。2 硬件电路设计2.1 硬件电路设计 图2.1系统总体框图2.1.1
7、 传感器温度采集器件使用温度传感器,温度传感器涉及热电偶、热敏电阻、RTD和IC温度传感器等几种,本设计中采用DS18B20温度传感器,该温度传感器应用时不需要任何外部器件即可实现测温电路,只通过一条数据线即可实现通信,精度可达到0.0625,测量温度可从-55+125,且内部设有温度上、下限告警功能。设计如图2.2所示:图2.2 DS18B20温度传感器2.1.2 温度传感器DS18B20 温度传感器DS18B20是数字式温度传感器,是一种改进型只能温度传感器,“一线总线”接口,相对于老式温度传感器精度高、稳定性好、电路简朴、控制以便。能直接读出被测温度,并且可依照实际规定通过简朴编程实现9
8、12位数字值读数方式。DS18B20性能特点:可通过数据线供电,电压范畴:3.05.5V;测温范畴:-55+125;不必外部器件,独特单线接口仅需要一种端口引脚进行通信;各种DS18B20可以并联在唯一三线上,实现多点组网功能;零待机功耗;顾客可定义非易失性温度报警设立;报警搜索命令辨认并标志超过程序限定温度(温度报警条件)器件;可编程辨别率为912位,相应可辨别温度分别为0.50.25、0.125和0.0625;负压特性:电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。DS18B20引脚图和内部构造分别如图2.3所示:图2.3 DS18B20封装图2.1.3 LED数码管显示电路显示
9、方式可选取LED数码管,也可选取字符型LCD显示。本设计采用共阳极LED数码管显示,LED数码管价格便宜,电路简朴,质量轻,可以显示简朴英文和数字,可以满足系统规定。设计如图2.4所示:图2.4 LED数码管2.2 硬件总电路图图2.5 系统总电路图3 程序设计3.1 程序设计简介程序编写使用KEIL4软件,使用C语言编写。C语言是一种计算机程序设计语言,它既具备高档语言特点,又具备汇编语言特点。它应用范畴广泛,具备很强数据解决能力,不但仅在软件开发上,并且各类科研都需要用到C语言,适于编写系统软件,二维,三维图形和动画,具备应用例如单片机以及嵌入式系统开发。3.2 程序编写#include
10、reg52.h#includeabsacc.h/*DuLiang 20307202*/*.6.18*/#define uint unsigned int#define ulint unsigned long int#define uchar unsigned charsbit P20=P20; /数码管位选sbit P21=P21;sbit P22=P22;sbit P23=P23;sbit ds=P27; /DS18B20引脚sbit HEAT=P25; /加热引脚sbit COOLING=P26;/降温引脚sbit H_warn=P10; /高温报警引脚sbit L_warn=P11; /
11、低温报警引脚bit time20ms=0;unsigned int wendu_value = 0;float f_temp;uint temp;uint set_temp_H=55,set_temp_L=45; /温度设定uint temp_shi=0,temp_ge=0,temp_xiaoshu=0;uchar temp_wela=0;uchar code table=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,/09不带小数点 0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10;/09
12、带小数点 /共阳极数码管 uchar keyscan_num;/*子程序声明*/void delay(uint delay_x);void display();void dsreset(void);bit tempreadbit(void);uchar tempread(void);void tempwritebyte(uchar dat);void tempchange(void);uint get_temp();uchar keyscan(void);/*定期器0和中断系统初始化*/void init() HEAT=1; TMOD=0x11; TH0=(65536-1000)/256; /
13、1ms时基 TL0=(65536-1000)%256; TH1=(65536-1000)/256; TL1=(65536-1000)%256; ET0=1; ET1=1; EA=1; TR0=1;void main()init();while(1) switch(keyscan_num)case 0:P20=1;P21=1;P22=1;P23=1;P0=0xbf; break;case 1:if(wendu_value(set_temp_H*10)COOLING=0;H_warn=0;elseCOOLING=1;H_warn=1;break; void timer0(void) interru
14、pt 1static uchar timecount=0,timecount1=0,timecount3=0;TR0=0;TH0=(65536-1000)/256;TL0=(65536-1000)%256;timecount+;timecount1+;timecount3+;if(timecount=5)timecount=0; if(keyscan_num=1)display();if(timecount1=200)timecount1=0;tempchange();wendu_value=get_temp();if(timecount3=50)timecount3=0;keyscan_nu
15、m=keyscan();TR0=1;void timer1(void) interrupt 3 static uchar timecount2=0;TR1=0;TH1=(65536-1000)/256; TL1=(65536-1000)%256;timecount2+;if(timecount2=200)timecount2=0;time20ms=!time20ms; TR1=1;/*数码管显示子程序*/void display()temp_shi=wendu_value/100;temp_ge=wendu_value%100/10;temp_xiaoshu=wendu_value%100%1
16、0;P20=0;P21=0;P22=0;P23=0;if(temp_wela=0)P0=tabletemp_shi;P20=1; if(temp_wela=1)P0=tabletemp_ge+10;P21=1;if(temp_wela=2)P0=tabletemp_xiaoshu;P22=1;temp_wela+;if(temp_wela=3)temp_wela=0;/*温度读取子程序*/void delay(uint delay_x)uint x,y;for(x=delay_x;x0;x-)for(y=110;y0;y-);void dsreset(void) /DS18B20复位,初始化函
17、数uint i;ds=0;i=103;while(i0)i-;ds=1;i=4;while(i0)i-;bit tempreadbit(void) /读一位数据函数uint i;bit dat;ds=0;i+;ds=1;i+;i+;dat=ds;i=8;while(i0)i-;return(dat);uchar tempread(void) /读1个字节数据函数uchar i,j,dat;dat=0;for(i=1;i=8;i+)j=tempreadbit();dat=(j1); /读出数据最低位在最前面,这样刚好一种字节在dat里return(dat);void tempwritebyte(
18、uchar dat) /向DS18B20写一种字节数据函数uint i;uchar j;bit testb;for(j=1;j1;if(testb) /写1ds=0;i+;i+;ds=1;i=8;while(i0)i-;elseds=0; /写0i=8;while(i0)i-;ds=1;i+;i+;void tempchange(void) /DS18B20开始获取温度并转换dsreset();delay(1);tempwritebyte(0xcc); /写跳过读ROM指令tempwritebyte(0x44); /写温度转换指令uint get_temp() /读取寄存器中存储温度数据uch
19、ar a,b;dsreset();delay(1);tempwritebyte(0xcc);tempwritebyte(0xbe);a=tempread(); /读低8位b=tempread(); /读高8位temp=b;temp=8;temp=temp|a;f_temp=temp*0.0625;temp=f_temp*10+0.5;f_temp=f_temp+0.05;return temp; /temp是整型/*键盘子程序*/uchar keyscan(void)static uchar k=0;uchar Trg,Cont,ReadData;P3=0xff;ReadData=P30xff;Trg=ReadData&(ReadDataCont);Cont=ReadData;switch(Trg)case 0x01:k=1;break;case 0x02:k=2;break;case 0x04:k=3;break;case 0x08:k=4;break;return(k);4 总结