智能化水温控制系统_第1页
智能化水温控制系统_第2页
智能化水温控制系统_第3页
智能化水温控制系统_第4页
智能化水温控制系统_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

智能化水温控制系统

水温控制系统

摘要

现如今,人们的生活越来越强调智能化以及低碳化,无论是智能化还是低碳化,生活在人们都希望自己的电器越来越智能,即能按照人们的意愿,低功耗的实现功能。水温控制作为人们生活以及工业的重要组成局部,能否实现智能化以及低功耗化十分重要。水温控制系统以STC89C51作为核心的温度控制系统,将DS18B20作为温度感应器,可直接反应数字量的温度信息并可以调节精度;以继电器以及螺旋加热管作为加热模块;以发光二级管以及蜂鸣器作为声光告警装置;以数码管作为温度显示模块。程序上利用PID调节算法,屡次调节其中参数,使得温度控制更加精确。该系统具有简单、本钱低、质量平安可靠的特点。相信无论是在生活还是生产中都会有不错的应用前景。

关键词智能化温度控制STC89C51DS18B20PID调节算法

一.任务以及要求

设计并制作一个水温自动控制系统,水温可以在一定范围内由人工设定,可以实现自动报警功能。

1.根本内容如下:

〔1〕温度设定范围为:40~90℃,最小辨别度为1℃,标定温度≤1℃。

〔2〕环境温度降低时温度控制的静态误差≤1℃。

〔3〕用10进制数码管显示水的实际温度。

2.发挥要求:

〔1〕温度控制范围扩大,最小辨别度减小。

〔2〕温度控制的静态误差≤0.2℃。

〔3〕特色与创新。

二.计划设计及其论证

水温的控制,必须先精确地获取温度,所以温度传感器的选择就非常重要。通常,温度所测量的是模拟量,模拟量的转换波及到A/D的转换。温度传感器把温度传送给处理器核心,处理器核心经过分析,判断是否满足处理的条件,进行相关的处理。可实现的动作包括下列几项:到达设定温度,进行声光报警;温度低,进行加热处理。其中温度的设定就要利用到键盘。声光报警就需要用到发光二级管以及蜂鸣器。经以上分析,可以将温度控制系统分为下列几个模块:

1.温度传感器

温度传感器应具有精度足够高、处理速度足够快、体积小等特点。采用DS18B20温度传感器。DS18B20是DALLAS公司生产的一线式数字温度传感器,具有3引脚TO-92小体积封装形式;温度测量范围为-55℃~+125℃,可编程为9位~12位A/D转换精度,测温分辨率可达0.0625℃,被测温度用符号扩展的16位数字量方式串行输出远端引入。此器件具有体积小、质量轻、线形度好、性能稳定等优点其各方面特性都满足此系统的设计要求。更重要的是采用该温度传感器后不用采用A/D转换。节省了大量的工作量。

2.键盘显示

按键主要波及到温度的调节以及模式的转换。显示局部主要波及到水温的实时显示,以及功能模式的显示。按任务功能需求采用独立键盘,并且利用MCU对键盘进行扫描。这种计划既能很好的控制键盘及显示,又为MCU大大的减少了程序的复杂性,而且具有体积小,简单易做的特点。显示局部按照任务要求采用4位数码管设计,来显示水温以及工作模式等。也具有简单、可靠的特点。

核心

CPU主要控制水温以及其他模块的协调工作。是该水温控制系统的核心。根据对计划的分析,采用简单易用的STC89C52单片机,其内部有4KB单元的程序存储器,不需外部扩展程序存储器,而且它的I/O口也足够本次设计的要求。具有简单方便、本钱低以及可靠的特点。

经以上分析,只要合理设计电路以及正确编写程序,以上几个模块在MCU以及程序的调节下能协调工作,共同完成水温的控制,从而到达任务要求。

三.理论分析与计算

各个模块要在MCU的调节下合理有序的工作,则系统必须采用合理高效的控制系统。这就要波及到过程控制,过程控制指对生产过程的某一或某些物理参数进行的自动控制。过程控制可分为:模拟控制系统、微机过程控制系统以及数字控制系统DDC。模拟控制系统中被控量的值由传感器或变送器来检测,这个值与给定值进行比拟,得到偏差,模拟调节器依一定控制规律使操作变量变化,以使偏差趋近于零,其输出通过执行器作用于过程。微机过程控制系统以微型计算机作为控制器。控制规律的实现,是通过软件来完成的。改变控制规律,只要改变相应的程序即可。

现如今在生产以及实践中运用最多的是DDC(DirectDigitalCongtrol)系统:

图3-1DDC系统构成框图

DDC(DirectDigitalCongtrol)系统是计算机用于过程控制的最典型的一种系统。微型计算机通过过程输入通道对一个或多个物理量进行检测,并根据确定的控制规律(算法)进行计算,通过输出通道直接去控制执行机构,使各被控量到达预定的要求。由于计算机的决策直接作用于过程,故称为直接数字控制。

其中控制规律即为PID调节,本系统中为软件实现。波及到的理论计算如下:

1.模拟PID控制规律的离散化

表一.模拟PID控制规律的数字化公式

模拟形式

离散化形式

2.数字PID控制器的差分方程

式中为比例项

为积分项

为微分项

四.系统设计计划

1.工作模式

本着智能化以及按照题目要求,将系统设计有下列两个个工作模式:A.测定水温以及显示水温;B.设定水温并保温;其中A为默认工作状态,即开机工作状态,工作内容为实时测量水温并在数码管上显示。B为设定温度并保温。由用户设定一定的温度,系统自开工作,加热到设定温度后声光报警,声光报警装置可独立开关,如果不切断电源或切换模式,系统将自动竟然保温模式。其中温度的设定有键盘控制。不论在那种工作模式,一旦复位键按下,将回到默认工作模式。在B工作模式下并且显示实际水温时,按下加键可以显示用户设定温度。根据以上的分析总结如下:

2.电路设计

根据以上的分析,可以将整个系统分为下列几个局部:单片机最小系统,测温电路,功率电路,交流过零检测电路,显示电路,系统框图如下:

〔1〕89C52最小系统

最小系统采用将C52MCU以及独立键盘、数码管集成在一块板上的工作方式。其中P0口接数码管。其他包括复位电路、独立键盘、晶振电路。其电路如图所示5-1所示:

图5-1最小系统

〔2〕18B20测温电路

测温电路是使用DS18b20数字式温度传感器,它无需其他的外加电路,直接输出数字量,可直接与单片机通信,读取测温数据,电路十分简单。它能够到达0.5℃的固有分辨率,使用读取温度的暂存存放器的办法还能到达0.2℃以上的精度。DS18B20温度传感器只有三根外引线:单线数据传输总线端口DQ,外供电源线VDD,共用地线GND。外部供电方式(VDD接+5V,且数据传输总线接4.7k的上拉电阻,其接口电路如图5-2所示:

图5-2控制电路

〔3〕功率电路

功率电路主要是继电器模块,包括三极管以及电阻组成控制局部,与MCU进行通信。PNP管的导通控制着继电器的常闭触点的接通与否。继电器常闭触点连接着外部加热电路。其中继电器的电感局部连接着二极管,起着引流爱护PNP管的作用。其电路如图所示6-1:

图6-1功率电路

〔4〕声光报警电路

声光报警电路采用蜂鸣器以及二极管串联的形式,通过PNP三极管控制电路通断。利用P3.7来与MCU通信。如图所示6-2:

图6-2声光报警电路

〔5〕红外接收装置

该局部为创新局部,采用红外接收装置来接受红外遥控器的信号,这样就可以通过无线方式进行信息的传递。通过遥控器可以设定温度,切换工作模式等。工作原理为红外遥控器产生红外信号,红外接收头接收到红外信号后,其内部电路把信号送到放大器和限幅器,限幅器把脉冲幅度控制在一定的水平,而不管红外发射器和接收器的距离远近。交流信号进入带通滤波器,带通滤波器可以通过30khz到60khz的负载波,通过解调电路和积分电路进入比拟器,比拟器输出上下电平,复原出发射端的信号波形。最终将数字信号传输到MCU,MCU做出相应的反馈。其电路如图所示7-1:

图7-1红外接收装置

五.软件设计表明

〔1〕总流程

本系统是采用查询方式来显示和控制温度的。其中参加了红外以及键盘等的其他控制器件语句。总流程图如图所示7-2:

图7-2总流程图

〔2〕工作时序

工作时序由初始化模块、测温、显示等模块组成。具体工作时序如图所示8-1:

图8-1工作时序

〔3〕主要程序

1.主函数如下:

#include

#include

unsignedcharchoice;

unsignedcharkey_down;

#include"DS18B20.H"

#include"PID.H"

#include"XIANSHI.H"

#include"KEYSCAN.H"

#include"INFRARED.H"

voidmain()

{

unsignedinttmp;

unsignedcharcounter=0;

P2|=0x07;//初始化按键

PIDBEGIN();//初始化PID

init_infrared();//初始化红外

ReadTemperature();//预读一次温度

hello();//显示HELLO,屏蔽85°C

while(1)//检测红外线

{

if(IrOK==1&&Im[0]==0x00)

proc_infrared();

if(counter--==0)

{

tmp=ReadTemperature();

counter=20;

}

key_scan();//扫描键盘

proc_key();//刷新显示缓存

if(choice==0)

update_disbuf(tmp);

else

update_disbuf(set_tmpbuf);

if(pid_on)

compare_temper();

else

{

high_time=0;

low_time=100;

}

}

}

2.PID算法温度控制程序

#ifndef_PID_H__

#define_PID_H__

#include

#include

#include

structPID{

unsignedintSetPoint;//设定目标DesiredValue

unsignedintProportion;//比例常数ProportionalConst

unsignedintIntegral;//积分常数IntegralConst

unsignedintDerivative;//微分常数DerivativeConst

unsignedintLastError;//Error[-1]

unsignedintPrevError;//Error[-2]

unsignedintSumError;//SumsofErrors

}

structPIDspid;//PIDControlStructure

unsignedintrout;//PIDResponse(Output)

unsignedintrin;//PIDFeedback(Input)

sbitoutput=P3^4;

unsignedcharhigh_time,low_time,count=0;//占空比调节参数

unsignedcharset_temper=33;

voidPIDInit(structPID*pp)

{

memset(pp,0,sizeof(structPID));

}

unsignedintPIDCalc(structPID*pp,unsignedintNextPoint)

{

unsignedintdError,Error;

Error=pp->SetPoint-NextPoint;//偏差

pp->SumError+=Error;//积分

dError=pp->LastError-pp->PrevError;//当前微分

pp->PrevError=pp->LastError;

pp->LastError=Error;

return(pp->Proportion*Error//比例

+pp->Integral*pp->SumError//积分项

+pp->Derivative*dError);//微分项

}

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

温度比拟处理子程序

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

compare_temper()

{

unsignedchari;//EA=0;

if(set_temper>temper)

{

if(set_temper-temper>2)

{

high_time=100;

low_time=0;

}

else

{

for(i=0;i

{get_temper();

rin=s;//ReadInput

rout=PIDCalc(&spid,rin);//PerformPIDInteration}

if(high_time

high_time=(unsignedchar)(rout/1600);

else

high_time=100;

low_time=(100-high_time);

}}

elseif(set_temper

{

if(temper-set_temper>0)

{

high_time=0;

low_time=100;

}

else

{

for(i=0;i

{get_temper();

rin=s;//ReadInput

rout=PIDCalc(&spid,rin);//PerformPIDInteration}

if(high_time

high_time=(unsignedchar)(rout/20000);

else

high_time=0;

low_time=(100-high_time);

//EA=1;

}}}

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

T0中断效劳子程序,用于控制电平的翻转,40us*100=4ms周期

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

voidserve_T0()interrupt1using1

{

if(++count

output=1;

elseif(count

{

output=0;

}

else

count=0;

TH0=0x2f;

TL0=0xe0;

}

voidPIDBEGIN()

{

TMOD=0x01;

TH0=0x2f;

TL0=0x40;

EA=1;

ET0=1;

TR0=1;

high_time=50;

low_time=50;

PIDInit(&spid);//InitializeStructure

ortion=10;//SetPIDCoefficients

gral=8;

vative=6;

oint=100;//SetPIDSetpoint

}

#endif

18B20子程序

#ifndef__DS18B20_H__

#define__DS18B20_H__

sbitDQ=P3^5;//定义通信端口

unsignedints;

unsignedchartemper;

//晶振22MHz

voiddelay_18B20(unsignedinti)

{

while(i--);

}

//初始化函数

Init_DS18B20(void)

{

unsignedcharx=0;

DQ=1;//DQ复位

delay_18B20(4);//稍做延时

DQ=0;//单片机将DQ拉低

delay_18B20(100);//精确延时大于480us

DQ=1;//拉高总线

delay_18B20(40);

}

//读一个字节

ReadOneChar(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);

}

WriteOneChar(unsignedchardat)//写一个字节

{

unsignedchari=0;

for(i=8;i>0;i--)

{

DQ=0;

DQ=dat&0x01;

delay_18B20(10);

DQ=1;

dat>>=1;

}

}

ReadTemperature(void)//读取温度

{

unsignedchara=0;

unsignedcharb=0;

unsignedintt=0;

//EA=0;

Init_DS18B20();

WriteOneChar(0xCC);//跳过读序号列号的操作

WriteOneChar(0xBE);//读取温度存放器等〔共可读9个存放器〕前两个就是温度

a=ReadOneChar();

b=ReadOneChar();

Init_DS18B20();//启动下一次温度转换

WriteOneChar(0xCC);//跳过读序号列号的操作

WriteOneChar(0x44);//启动温度转换

t=(b*256+a)*25;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论