课程设计电加热水温控制系统文档格式.docx

上传人:b****6 文档编号:17220332 上传时间:2022-11-29 格式:DOCX 页数:26 大小:847.83KB
下载 相关 举报
课程设计电加热水温控制系统文档格式.docx_第1页
第1页 / 共26页
课程设计电加热水温控制系统文档格式.docx_第2页
第2页 / 共26页
课程设计电加热水温控制系统文档格式.docx_第3页
第3页 / 共26页
课程设计电加热水温控制系统文档格式.docx_第4页
第4页 / 共26页
课程设计电加热水温控制系统文档格式.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

课程设计电加热水温控制系统文档格式.docx

《课程设计电加热水温控制系统文档格式.docx》由会员分享,可在线阅读,更多相关《课程设计电加热水温控制系统文档格式.docx(26页珍藏版)》请在冰豆网上搜索。

课程设计电加热水温控制系统文档格式.docx

1、原理图………………………………..………………………………….……..18

2、源程序……………………………….……………………………….…….…..19

摘要:

在现代工业生产中,温度是常用的测量被控因素。

本设计是基于51单片机控制,将DS18b20温度传感器实时温度转化,并通过1602液晶对温度实行实时显示,并通过加热片(PWM波,改变其占空比)加热与步进电机降温逐次逼近的方式,将温度保持在设定温度,通过按键调节温度报警区域,实现对温度在0℃-99℃控制的自动化。

实验结果表明此结构完全可行,温度偏差可达0.1℃以内。

关键字:

单片机;

传感器;

温控;

DS18b20

Abstract:

Inmodernindustrialproduction,thetemperatureiscommonlymeasuredcontrolledfactors.Thedesignisbasedonthe51SCMcontrol,theDS18b20temperaturesensorrealtimetemperaturetransformation,andthroughthe1602LCDonthetemperatureofthereal-timedisplay,andbyheatingthesheet(PWMwave,changingitsdutycycle)heatingandsteppermotorcoolingsuccessiveapproximationapproach,keepingthetemperatureatthesettemperature,throughthebuttonsadjusttemperaturealarmarea,thetemperatureat0℃-99℃controlautomation.Theexperimentalresultsshowthatthisstructureiscompletelyfeasible,thedeviationoftemperaturecanreach0.1DEGC.

Keyword:

monolithicintegratedcircuit;

Sensors;

Temperaturecontrol;

DS18b20

第一章系统设计

1.1项目概要

温度控制系统无论是工业生产过程,还是日常生活都起着非常重要的作用,过低或过高的温度环境不仅是一种资源的浪费,同时也会对机器和工作人员的寿命产生严重影响,极有可能造成严重的经济财产损失,给生活生产带来许多利的因素,基于AT89S52的单片机温度控制系统与传统的温度控制相比具有操作方便、价价格便宜、精确度高和开展容易等优点,因此市场前景好。

1.2设计任务和要求:

1、采用DS18B20作为温度传感器进行温度检测。

2、对采集温度进行显示(显示温度分辨率0.1℃);

3、采集温度数值应采用数字滤波措施,保证显示数据稳定。

4、设计相应的温度控制电路,根据测得的温度情况对加热器进行控制,将温度保持在设定温度。

5、通过按键设置温度上下限,超限通过LED、蜂鸣器报警。

第二章硬件设计

2.1硬件设计概要

根据需求,我们将系统分为五个模块,信息处理模块,温度采集模块、控制调节模块、报警电路模块,显示模块。

2.2信息处理模块

AT89C52是ATMEL公司的以8031核构成的8位Flash单片机系列。

这个系列单片机的最大特点就是在片内含有Flash存储器,AT89S52单片机是一种低功耗高性能的CMOS8位微控制器,内置8KB可在线编程闪存。

该器件采用Atmel公司的高密度非易失性存储技术生产,其指令与工业标准的80C51指令集兼容。

片内程序存储器允许重复在线编程,允许程序存储器在系统内通过SPI串行口改写或用同用的非易失性存储器改写。

通过把通用的8位CPU与可在线下载的Flash集成在一个芯片上,AT89S52便成为一个高效的微型计算机。

它的应用范围广,可用于解决复杂的控制问题,且成本较低。

单片机模块如图

(1)所示。

(1)单片机模块

2.3温度采集模块

2.3.1传感器DS18b20简介

DALLAS最新单线数字温度传感器DS18b20简介新的“一线器件”,体积更小、适用电压更宽、更经济。

Dallas半导体公司的数字化温度传感器DS18b20是世界上第一片支持“一线总线”接口温度传感器。

一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新的概念。

DS18b20、DS1822“一线总线”数字化温度传感器同DS1820一样,DS18b20也支持“一线总线”接口,测量温度范围为-55℃~+125℃,在-10℃~+85℃范围内,精度为

0.5℃。

DS18b20的精度较差为

2℃。

现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。

适合于恶劣环境的现场温度测量,如:

环境控制、设备或过程控制、测量类消费电子产品等。

与前一代产品不同,新的产品支持3V~5V的电压范围,使系统设计更灵活、方便。

而且新一代产品更便宜,体积更小。

DS18b20内部结构主要由四部分组成:

64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。

DS18b20的实验板原理接线图如图

(2):

(2)DS18b20的实验板接线图

其中:

DQ为数字信号输入/输出端;

GND为电源地;

VDD为外接供电电源输入端(在寄生电源接线方式时接地)

2.3.2实验模拟电路图

温度检测控制模拟电路图ds18b20原件及其连线如图(3)温度此传感器上显示的温度同步显示到LED显示器上,并有加温,减温按钮。

图(3)温度检测控制模拟电路图

2.3.3程序流程图

图(4)主程序流程图

图(5)初始化子程序流程图

图(6)读按键的程序流程图

2.4控制调节模块

2.4.1升温调节系统

通过继电器的开合来控制加热片电路的通断,来达到设温效果,我们预设温度为25度,当温度低于25度时,单片机P3.6引脚输出高电平,继电器导通,对温度传感器加热,加热模块如图(7)所示。

图(7)加温控制电路

2.4.2温度上下限调节系统

通过按键控制键选着调节对象,通过上升下降调节值大小,模拟电路图如图(78主控电路:

我们设定温度为0--30度,为表示方便,这里让,控制开关,升温开关,降温开关分别为,k1,k2,k3,开始显示的是当前温度,K1主控开关,用来控制进入的是当前温度,温度上限,下限的调节界面。

按k1,一次进入三个界面。

按K2为加1开关,按一下,加1,k3减1开关,按一下,减1.

例如:

开始时显示的是当前温度界面,按下k1进入高温设定界面,显示器上显示当前温度和温度上限,按k2,上限加1,按k3,上限减1,再按k1进入显现设定界面,显示器显示当前温度,和温度下限,按k2,下限加1,按k3,下限减1,再按k1,进入显示当前温度界面。

如图(8)

2.4.3报警电路系统

通过led灯的闪烁以及蜂鸣器的鸣叫实现报警,如果温度超过上限灯D4亮,蜂鸣器鸣叫,低于下限灯D2亮,蜂鸣器鸣叫。

常温D1亮如图(9)(10)。

图(8)温度设定开关

图(9)报警模块

图(10)P3.7接蜂鸣器

2.5显示模块

通过采集ds18b20的温度,同步显示到LED显示器上,精确到小数点后第一位。

如下图

图(11)显示电路

第三章仿真显示成果

3.1运用proteus仿真

图(12)开始启动时,显示学号

图(13)显示当前温度

图(14)温度低于低温下限,低温报警灯亮,蜂鸣器鸣叫

图(15)温度高于温度上限,高温报警灯亮,蜂鸣器鸣叫

实习总结

刚开始接触到题目,一头雾水,第一周,我从网上下载了,《基于8051+PROTEUS仿真100实例》这个文档,从最简单的点亮一个流水灯,让数码管显示数字开始,第一周就做了这些简单的例子,100例做了20多个。

刚开始很慢,仿真模型里的原器件都不会找,编的程序编译时总出现报警、错误。

一遇到错误我们就慌了神了,所以起步很难。

后来在老师和同学的帮助下,慢慢积累,知道了常见的报警和错误的解决方法,编完调试成功20个例子后,算是对单片机有了一定的基础。

但这时一周已经过去了,别的小组已经仿真通过,开始实际运行了,而我们这组才开始。

第二周开始了,第一天我们没做设计,把各个小组的程序,电路图都拿来看,不懂得就请他们帮忙讲解。

由于前面有了知识,一些模块都看得懂,学得很快了。

发现主要是把各个模块融合到一起,头文件写到最前面,通过函数的调用!

给单片机接口高低电平,来实现功能。

这正好是我们的强项,一星期20个例子的功劳。

第二天我们开始自己编程,但是融合的过程中总出现错误,要嘛是变量没定义,要嘛是头文件重复!

还有一个,报警电路的数码管总是不亮,但单片机对应的接口有高低电平的变化,实际电路板上也成功,这个问题困扰了我们很久,怎么办都不亮,当时有想砸电脑的冲动,后来还是解决了,原来,是标号标错了位置,一点小问题,困扰了我们2天。

当解决这个问题时,那心灵的喜悦是这辈子都忘不了的!

通过两周的实习,我们从一个小白成长为一个对单片机入了门,并能实现简单的编程,还能解决实际问题的小人物了!

虽然过程很苦,每天对着电脑,就吃饭和上洗手间离开板凳!

一直盯着屏幕看!

不过2周熬过来了,收获蛮大的!

例如后来我又在我们的程序中加入了降温程序!

温度高,调动电动机吹风降温!

感觉无论做什么事都要吃得了苦受得了罪,天下没有什么事是难的,只有懒惰的人,只要用心去做,什么事都能成功!

致谢

两周的实习中,我遇到了许许多多的困难,但我能走过来,这和我组成员共同研究,共同讨论问题的辛勤是分不开的,灰心时我们相互鼓励,相互打气,。

感谢同组成员。

开始接触单片机,我是一个小白级人物,谢谢把我领入门的同班同学们,当我有问题请教时,他们会放下手头的工作,倾心为我解答,程序编译错误时,他们会帮我一起看提示,该错误!

谢谢同班同学们!

当然,我们实习时,老师一直陪伴着我们,尽管我没有问过老师问题,老师也没有帮我调试程序,但还是要谢谢刘老师,吕老师,你和我们在一起,无形中给了我们莫大的动力!

同时也起到了监督我们的作用,使我们不能够偷懒,不会出现有一组同学完成了,那么全班都完成了的情况!

正由于你们的严格的要求,我们这次实习才能圆满的完成,同学们都做出了想要的结果。

参考文献

[1]郭天祥.新概念51单片机C语音教程——入门提高开发拓展攻略[M].北京:

北京:

电子工业出版社,2009.

[2]韩广兴.电子元器件与实用电路基础[M].北京:

电子工业出版社,2005.

[3]方大千,朱丽.电子控制系统装置制作入门[M].北京:

国防出版社,2006.

[4]刘向举,刘丽娜.基于单片机的智能温度测控系统的设计[J].齐齐哈尔大学学报(自然科学版).2012(03)

[5]黄文力,邓小磊.DS18B20数字温度传感器接口程序的时序[J].仪器仪表用户.2011(06)

[6]黄晓林.一种实用型智能恒温控制系统设计[J].自动化技术与应用.

2011(11)

[7]王文,王直.基于ARM和DS18B20的温度监测系统[J].电子设计工程.2011(20)

[8]陈锡华,贾磊磊.温度传感器DS18B20序列号批量搜索算法[J].单片机与嵌入式系统应用.2011(09)

附录:

Proteus系统原理图:

图(16)系统原理图

源程序:

#include<

reg52.h>

#include<

intrins.h>

#defineucharunsignedchar

#defineuintunsignedint

sbitDQ=P3^3;

//ds18b20与单片机连接口

sbitRS=P2^0;

sbitRW=P2^1;

sbitEN=P2^2;

sbitkeyadd=P1^4;

sbitkeydel=P1^5;

sbitkeyok=P1^6;

sbitled_green=P2^3;

sbitled_yellow=P2^4;

sbitled_red=P2^5;

sbitshengwen=P3^6;

sbitjiangwen=P3^5;

sbitBEEP=P3^7;

ucharcodestr1[]={"

Temperatureis"

};

ucharcodestr2[]={"

"

ucharcodestr3[]={"

set_hightemp:

"

ucharcodestr4[]={"

set_lowtemp:

ucharcodestr5[]={"

studentN0:

ucharcodestr6[]={"

32209104"

uchardatadisdata[5];

ucharset_hightemp=33,set_lowtemp=0;

ucharp=0;

ucharaa[2];

uinttvalue;

//温度值

uchartflag;

//温度正负标志

//*************************lcd1602程序**************************/

voiddelay1ms(uintms)//延时1毫秒

{

uinti,j;

for(i=0;

i<

ms;

i++)

for(j=0;

j<

114;

j++);

}

voiddelay1s(uints)

uinti;

s;

delay1ms(1000);

//////////////////////111111*********1111111111111111111111报警程序

voidbaojing(void)

unsignedintj;

for(j=49;

j>

0;

j--)//响30ms

{

BEEP=~BEEP;

//输出频率800HzP0=0x7E;

//点亮D00和D07

delay1ms(10);

//延时310us

}

/////////////////////1111111111111111111111111111111111111报警程序

voidwr_com(ucharcom)//写指令//

{

delay1ms

(1);

RS=0;

RW=0;

EN=0;

P0=com;

//

EN=1;

voidwr_dat(uchardat)//写数据//

RS=1;

P0=dat;

voidlcd_init()//初始化设置//

delay1ms(15);

wr_com(0x38);

delay1ms(5);

wr_com(0x08);

wr_com(0x01);

wr_com(0x06);

wr_com(0x0c);

voiddisplay(uchar*p)//显示//

while(*p!

='

\0'

wr_dat(*p);

p++;

delay1ms

(1);

}

voidinit_play()//初始化显示

lcd_init();

wr_com(0x80);

display(str5);

wr_com(0xc0);

display(str6);

delay1s(3);

display(str1);

display(str2);

/***************************ds18b20程序****************************/

voiddelay_18B20(uinti)//延时1微秒

while(i--);

voidds1820rst()/*ds1820复位*/

ucharx=0;

DQ=1;

//DQ复位

delay_18B20(4);

//延时

DQ=0;

//DQ拉低

delay_18B20(100);

//精确延时大于480us

//拉高

delay_18B20(40);

uchards1820rd()/*读数据*/

uchari=0;

uchardat=0;

for(i=8;

i>

0;

i--)

{

DQ=0;

//给脉冲信号

dat>

>

=1;

if(DQ)

dat|=0x80;

delay_18B20(10);

return(dat);

voidds1820wr(ucharwdata)/*写数据*/

i>

i--)

DQ=wdata&

0x01;

delay_18B20(10);

DQ=1;

wdata>

read_temp()/*读取温度值并转换*/

uchara,b;

ds1820rst();

ds1820wr(0xcc);

//*跳过读序列号*/

ds1820wr(0x44);

//*启动温度转换*/

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位小数

return(tvalue);

/*******************************************************************/

voidds1820disp()//温度值显示

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;

//正温度不显示符号

flagdat=0x2d;

//负温度显示负号:

-

if(disdata[0]==0x30)

disdata[0]=0x20;

//如果百位为0,不显示

if(disdata[1]==0x30)

{

disdata[1]=0x20;

//如果百位为0,十位为0也不显示

}

wr_com(0xc0+4);

wr_dat(flagdat);

//显示符号位

wr_com(0xc1+4);

wr_dat(disdata[0]);

//显示百位

wr_com(0xc2+4);

wr_dat(disdata[1]);

//显示十位

wr_com(0xc3+4);

wr_dat(disdata[2]);

//显示个位

wr_com(0xc4+4);

wr_dat(0x2e);

//显示小数点

wr_com(0xc5+4);

wr_dat(disdata[3]);

//显示小数位

voidkey_count(uintok)

if(ok==1)display(str3);

elsedisplay(str4);

wr_com(0x8d);

wr_dat(aa[0]);

wr_com(0x8

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 视频讲堂

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1