简易水温控制系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

简易水温控制系统 TYYGROUP system office room 【TYYUA16H-TYY-TYYYUA8Q8-
一个简易水温控制系统的设计———控制算法设计
摘要
在工农业生产和日常生活中,对温度的检测与控制始终有着非常重要的实际意义和广泛的实际应用。

为了加深计算机控制理论的理解,故设计一个温度控制系统,该系统主
要由温度信号采集与转换模块、主机控制模块、温度控制模块、液晶显示模块四部分组成,控制算法为PID算法。

系统可实现稳态误差小于1℃,最大超调小于1℃,并且调节时间较短,恒定效果好。

温度控制系统的对象存在滞后,它对阶跃信号的响应会推迟一
些时间,对自动控制产生不利的影响,因此对温度准确的测量和有效的控制是此类工业
控制系统中的重要指标。

温度是一个重要的物理量,也是工业生产过程中的主要工艺参
数之一,物体的许多性质和特性都与温度有关,很多重要的过程只有在一定温度范围内
才能有效的进行,因此,对温度的精确测量和可靠控制,在工业生产和科学研究中就具
有很重要的意义。

本文阐述了过程控制系统的概念,介绍了一个基于数字传感器DS18B20和单片机STC89C52的简单温度控制系统,以电热水壶为被控对象,通过实验的方法建立温度控制系统的数学模型,采用了PID算法进行系统的设计,达到了比较好的控制目
的。

该系统可通过液晶显示器LCD1602显示数据或字符,通过按键设定参数;通过
DS18B20测温,实现电热杯水温控制;通过PL2303下载端口,实现单机和上位机的通讯。

实验表明该系统能够实现对温度的控制,具有一定的控制精度。

该系统测温电路简单、连接方便,可用于简单温度控制的场合。

关键词:单片机;温度传感器;液晶显示器;PID算法
Abstract
In industrial and agricultural production and daily life, the testing and control of temperature has always had very important practical significance and extensive practical application. In order to deepen the understanding of the computer control theory, the design of a temperature control system, the system is mainly composed of temperature signal acquisition and conversion module, host control module, temperature control module, liquid crystal display module four parts, the control algorithm for PID algorithm. System can realize the steady state error is less than 1 ℃, the maximum overshoot less than 1 ℃, and the adjustment time is shorter, constant effect is good. Lagged temperature control system of the object, its response to the step signal will delay some time, produce adverse effect to the automatic control, so effective for accurate temperature measurement and control is an important indicator in the industrial control system. Temperature is an important
physical quantities, it is also one of the main process parameters in industrial production process, many properties of objects and features are related to temperature, a lot of important process can only be effective in a certain temperature range, thus, accurate measurement and reliable control of temperature, in the industrial production and scientific research has the very vital significance. This paper expounds the concept of process control system, introduced a digital sensor DS18B20 and single chip microcomputer based STC89C52 simple temperature control system, electric kettle for controlled object, and through the experiment the method to establish the mathematical model of temperature control system, using PID algorithm to the design of the system, to achieve the better control. Through DS18B20, the temperature control of the electric heat cup is achieved. Through the PL2303 download port, the communication between the single machine and the above machine is achieved. The experiment shows that the system can control the temperature, and has certain control accuracy. The system is simple and easy to connect, which can be used for simple temperature control.
Key words: single chip microcomputer;the temperature sensor;Liquid crystal display;PID algorithm
目录
一﹑设计任务与要求
1.基本要求
1L水由1kW的电路加热,要求水温可以在一定范围内由人工设定,并能在环境温度变化时实现自动调整,以保持在设定的温度。

2.主要性能指标
(1).温度设定范围:10℃~100℃,最小分辨率为1℃。

(2).控制精度:温度控制的稳态误差<0.2℃.
(3).能够实时显示当前水温
(4).
具有通信能力,可通过RS-232串口输出当前温度值至上位机。

(5).采用适当的控制方法,当设定温度或环境温度突变时减小系统的 调节时间和超
调量。

二﹑方案论证
由于水温控制系统的控制对象具有热储存能力大,惯性也较大的特点,水在容器内的流动或热量传递都存在一定的阻力,因而可以将被控对象归于具有纯滞后的一阶惯性环节。

该系统可以采用以下几种控制方案: 1.输出开关量控制
对于惯性较大的过程可简单地采用输出开关量控制的方法。

这种方法通过比较给定值与被控参数来控制输出的状态:通过控制加热回路的晶闸管的导通或关断来控制加热时间,控制过程简单易行,但容易引起反馈回路产生振荡。

因此这种控制方案一般在大惯性系统对控制精度和动态特性要求不高的情况下采用。

控制
设计PID 控制算法(常规PID ﹑微分先行PID ﹑中间反馈PID 等),对给定值与被控参数的偏差进行PID 运算,输出控制量来控制加热回路。

三﹑系统设计 1.硬件设计
图3-1 水温控制系统结构图
⑵系统硬件总体设计框图
图3-2 水温控制系统硬件总体设计框图
⑶单元电路设计 ①单片机最小系统
②温度传感器信号调理及A/D 转换电路 ③键盘接口电路
④LCD1602液晶显示电路 ⑤驱动电路
2.(⎥⎦
⎢⎣
D
I P dt T u 0
( (3-1)
由上式可得PID 控制器的传递函数为:
s T K s
T K K s D D P I P P ++
=1
)( (3-2)
其中,Kp 为比例增益,Ti 为积分时间,Td 为微分时间。

(2)控制系统模型分析 建立微分方程:
M*C*dT/dt=W0*k(t)-β*M*C*(T(s)-T0) 将上式经拉普拉斯变换得:
在假设室温为0℃的条件下,将上式经拉普拉斯变换推导出被控对象(即水温)的数学模型为:
G(s)=T(s)/K(s)= W0/MC*s+-β*MC= W0/MC/s/β+1 (3-3) 各项参数为: W0——900(瓦) (kg)
C--------4200(J/kg*C) β
所以,G(s)=1000s+1
PID 控制器的传递函数为:
采用试凑法进行参数整定,控制器的参数按先比例、再积分、后微分的顺序进行,步骤
如下: 令PID 调节器的Ti=∞,Td=0
,使其成为纯比例调节器。

比例度按经验数据设置,整定纯比例控制系统的比例度。

加入积分作用。

在加积分作用之前,应将比例度加大为原来的倍。

将积分时间IT 由大到小调整。

加入微分作用,这时可将比例度调到
原来的数值或者更小一些。

再将微分时间由小到达调整,直到过渡过程曲线达到满意为止。

通过试凑法得到PID 参数为: Kp=20000,Ti=30000,Td=5000. MATLAB 仿真结果
图3-7 PID 控制框图
图3-8仿真结果图
四、实验结果
实验中烧水高度为,设定温度为83度。

PID 参数调节结果是P=70,I=4,D=0,超调量为℃,上升时间为626s,稳态误差2℃,扰动加水 cm ,加水后温度降落℃,恢复时间200S 。

电热水杯温度上升曲线如下图: 五、结论
本系统以AT89C51单片机为控制核心,利用DS18B20采集温度并配合PID 控制算法提高了水温的控制精度,使用PID 控制算法和移相触发可控硅调节方式实施自动控制系统,具有控制参数精度高、反映速度快和稳定性好的特点。

六、心得体会
在拿到一个课题时首先要做的事就是对课题的任务,要求和条件进行仔细的分析和研究,找出关键问题,根据关键问题提出实现的原理和方法,并画出原理框图。

提出原理方案是一个关系到设计全局的问题,应广泛收集与查阅有关资料,广开思路,利用已有的各种理论知识,提出尽可能多的方案,以便做出更合理的选择。

所提出的方案中,对关键部分的可行性,一般应通过实验加以确认。

根据整个课题的技术要求,明确该功能框对单元电路的技术要求,必要时应详细拟定单元电路的性能指标,然后进行单元电路结构形式的选择或设计,但满足功能的单元电路可能不止一个,因此必须进行分析比较,择优选择。

我通过实验课的综合练习,课程设计的实际操作,将课堂理论学习贯穿其中,全面系统的把单片机课程的知识联系在一起,做到融会贯通,使我真正感受到理论应用于实践的乐趣。

这次设计是一次锻炼的好机会,使我在学习和巩固新、老知识的同时,训练了自己综合运用知识的能力、分析解决问题的能力,同时也提高了自己的工程实践能力。

在设计过程中,我与同学们一同学习、一同讨论,大家集思广益,发扬了团队协作精神。

在课程设计过程中,我发现了自己的不足,今后应加强学习,并且加强理论与实践的相结合,把所学的知识应用于实际当中。

)
111()(G +++=s T T s T s T k s i d d i p
附录
#include ""
#include <>
#include <>
void Delay1us(unsigned int y)
{
for(y;y>0;y--)
{
_nop_();
_nop_();
}
}
unsigned char Ds18b20Init()
{
unsigned int i;
DSPORT=0;
Delay1us(600);
DSPORT=1;
i=0;
while(DSPORT)
{
i++;
if(i>5000)
return 0;
}
return 1;
}
void Ds18b20WriteByte(unsigned char dat) {
unsigned int j;
for(j=0;j<8;j++)
{
DSPORT=0;
Delay1us(1);
DSPORT=dat&0x01;
Delay1us(70);
DSPORT=1;
Delay1us(2);
dat>>=1;
}
}
unsigned char Ds18b20ReadByte()
{
unsigned char byte,bi;
unsigned int j;
for(j=8;j>0;j--)
{
DSPORT=0;
Delay1us(1);
DSPORT=1;
Delay1us(6);
bi=DSPORT;
byte=(byte>>1)|(bi<<7);
Delay1us(48);
}
return byte;
}
void Ds18b20ChangTemp()
{
Ds18b20Init();
Delay1ms(1);
Ds18b20WriteByte(0xcc);
Ds18b20WriteByte(0x44);
Delay1ms(100);
void Ds18b20ReadTempCom()
{
Ds18b20Init();
Delay1ms(10);
Ds18b20WriteByte(0xcc);
Ds18b20WriteByte(0xbe); }
int Ds18b20ReadTemp()
{
int temp=0;
unsigned char tmh,tml;
Ds18b20ChangTemp();
Ds18b20ReadTempCom();
tml=Ds18b20ReadByte();
tmh=Ds18b20ReadByte();
temp=tmh;
temp<<=8;
temp|=tml;
return temp;
}
#include ""
#include <>
#include <>
#include <>
void Delay1ms(unsigned int y) {
for(y;y>0;y--)
{
unsigned char i, j;
_nop_();
_nop_();
i = 12;
j = 168;
do
{
while (--j);
} while (--i);
}
}
float Temp_Change(int temp)
{
unsigned char datas[] ={0, 0, 0, 0, 0, 0, 0, 0};
float tp;
if(temp< 0)
{
temp=temp-1;
temp=~temp;
tp=temp;
temp=tp**100+;
}
else
{
tp=temp;
temp=tp**100+;
tp=tp**100+;
}
DisplayWD(2,8,temp);
return tp;
}
void main()
{
LcdInit();
Ds18b20Init();
DisplayChar(0,1,"~");
Delay1ms(1);
DisplayChar(1,1,"zhaoyang");
Delay1ms(1);
DisplayChar(0,5,"JD:");
Delay1ms(1);
DisplayChar(1,5,"WD:");
Delay1ms(1);
while(1)
{
Delay1ms(1);
LCD_dis_data4(1,8,Ds18b20ReadTemp());
Delay1ms(1);
Temp_Change(Ds18b20ReadTemp());
}
}
#include ""
#include <>
#include <>
void LcdWriteCom(uchar CMD,uchar Attribc)
{
if(Attribc)WaitForEnable();
LCD1602_RS=0;LCD1602_RW=0;
_nop_();
LCD1602_DATAPINS=CMD;
_nop_();
LCD1602_E=1;
_nop_();_nop_();
LCD1602_E=0;
}
void LcdWriteData(uchar dataW)
{
WaitForEnable();
LCD1602_RS=1;LCD1602_RW=0;
_nop_();
LCD1602_DATAPINS=dataW;
_nop_();
LCD1602_E=1;
_nop_();_nop_();
LCD1602_E=0;
}
void LcdInit()
{
LcdWriteCom(0x32,1);
LcdWriteCom(0x38,1);
LcdWriteCom(0x08,1);
LcdWriteCom(0x01,1);
Delay1ms(30);
DisplayChar(0,0,"Welcome To SUST");
Delay1ms(1);
Delay1ms(1000);
LcdWriteCom(0x01,1);
Delay1ms(1);
DisplayChar(0,0,"Made In 2A314");
Delay1ms(1);
Delay1ms(2000);
LcdWriteCom(0x01,1);
Delay1ms(300);
}
void WaitForEnable(void)
{
LCD1602_DATAPINS=0xff;
LCD1602_RS=0;LCD1602_RW=1;
_nop_();
LCD1602_E=1;
_nop_();_nop_();
while(LCD1602_DATAPINS&0x80);
LCD1602_E=0;
}
void Delays(uchar i)
{
while(i--);
}
void DisplayChar(uchar Y,uchar X,uchar *s) {
Y&=1;
X&=15;
if(Y) X|=0xC0;
else X|=0x80;
while(*s!='\0')
{
Delays(1);
s++;
}
}
;
;
str[4]=datas/10%10+0x30;
str[5]=datas%10+0x30;
str[6]=0xDF;
str[7]='C';
str[8]='\0';
while(str[i] != '\0')
{
LcdWriteData(str[i++]);
}
}
参考文献
【1】林敏.计算机控制技术及工程应用(第3版).国防工业出版社.2014年9月第三版.
【2】张毅刚王少军付宁.单片机原理及接口技术(第2版).人民邮电出版社.2015年1月第一版.
【3】俞金寿孙自强.过程控制系统(第2版).机械工业出版社.2015年1月.。

相关文档
最新文档