水温控制系统Word格式文档下载.docx
《水温控制系统Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《水温控制系统Word格式文档下载.docx(26页珍藏版)》请在冰豆网上搜索。
出信号停止加热。
但这时发热丝的温度会高于设定温度,发热丝
还将继续对对水进行加热,导致水的温度还会继续上升几度,然
后才开始下降。
当水温下降到设定温度的下限时,温度控制器又
发出加热信号,开始加热,但发热丝要把温度传递到被加热器件
需要一定的时间,导致水温会继续下降几度。
所以,为了对水温
实现精确控制,使温度测量误差在±
0.5℃内,必须采用PID模
糊控制算法,通过Pvar、Ivar、Dvar(比例、积分、微分)三方面
的结合形成一个模糊控制来解决惯性温度误差问题。
利用数值逼近方法,在采样时刻t=iT(T为采样周期,i为正
整数)时,PID调节规律可通过下式近似计算。
则增量式PID算法的输出量为:
式中,ei、ei-1、ei-2分别为第n次、n-1次和n-2次的偏
差值,Kp、Ti、Td分别为比例系数、积分系数和微分系数,T为
采样周期。
单片机每隔固定时间T将现场温度与用户设定目标温度的差
值带入增量式PID算法公式,由公式输出量决定PWM方波的占空
比,后续加热电路根据此PWM方波的占空比决定加热功率。
现场
温度与目标温度的偏差大则占空比大,加热电路加热功率增大,
使温度的实测值与设定值的偏差迅速减少;
反之,二者的偏差小
则占空比减小,加热电路加热功率减少,直至目标值与实测值相
等,达到自动控制的目的。
2.3PID参数的确定
PID参数的选择是设计成败的关键,它决定了温度控制的准确
度。
由于温度系统是一个具有较大滞后性的系统,所以本系统的
采样周期定为10秒,加热周期定为1秒钟,根据一些文献提供的
经验值,初步确定Kp=2,Ti=2,Td=0.5,根据公式Ki=Kp*T/TI;
Kd=Kp*TD/T;
计算得出Ki=1,Kd=1;
然后,由按键对系统设定
一个温度值,在线应用工程整定法中的经验法对P,I,D各参数进
行调整,经验法是一种凑试法,它通过模拟或闭环运行,观察调
节过程的响应曲线,如果曲线不够理想,则按某种程序将参数反
复凑试,直到调节质量满意为止。
凑试程序通常是先比例后积分,
最后加入微分。
凑试法整定PID参数的步骤是:
1)首先进行P整定。
将参数Kp由小而大慢慢变化,直至得
到反应快,超调小的响应曲线。
若无静差或静差在允许范围内且
响应曲线满意,整定结束,否则继续下步。
2)进行PI整定。
略小于Kp值,将Ti由大而小缓慢变化,
在保持系统动态性能良好的前提下,消除静差或是静差允许范围
内。
反复改变Kp,Ti值以求得较好效果,若效果满意,则整定结
束,否则继续下去。
3)进行PID整定。
略改变Kp,Ti的值,使Td由小而大缓慢
变化,以求得较好的响应曲线和较小的静差。
逐步反复的试凑,
直至获得满意效果为止。
对于一定的系统,合理的参数组并不唯一,根据一
些文献的实践经验,在具体实施PID参数整定时,以下几个结论
比较实用:
1)比例系数Kp是PID调节中最关键的一个参数,Kp增大,
系统稳定性增加,但调节灵敏度减弱,一般曲线振荡频繁时,要
增大Kp,而曲线飘浮绕大弯时,要减小Kp.
2)积分时间常数Ti主要起消除静差的作用,减小Ti,消除
静差快,但稳定性减小,一般曲线偏离恢复慢时,减小Ti,而曲线
波动周期长时,再增大Ki。
3)微分时间常数Td是加速过程的有力调节,在加速过渡过
程,应增加Td,Td不宜过小,也不宜太大,Td一般选Ti的四分之
一为最佳。
根据以上调节的步骤及调节的方法及经验,经过反复的试验
做后得到最终的P,I,D的参数为Kp=30,Ki=5,Kd=0.
3.硬件电路设计
水温控制系统的硬件电路主要包括:
主控电路、温度采集电
路、温控电路和显示电路等,下面依次对各部分进行设计。
3.1主控电路
主控电路采用STC89C52单片机作为系统控制器,结合数字PID
算法完成对温度测量信号的接收、处理,控制加热器和制冷片,
使水温控制达到设计要求。
主控电路包括STC89C52最小系统和键
盘电路两部分,STC89C52最小系统在上一章中已介绍,这里不再
赘述。
本设计键盘采用RF-X1开发板上的6个独立按键中的4个,
各按键经上拉电阻分别接到单片机的P3.2、P3.3、P3.4、P3.5口
上,起到确认、选择、上调和下调的作用,每按上调或下调键一
次,设定温度值加1或减1。
电路图如图所示。
+5V
R61
10K
62
R63
R65
S1U1
S2
S3
S4
P32
P33
P34
1
2
3
4
5
6
7
8
P10
P11
P12
P13
P14
P15
P16
P17
P00
P01
P02
P03
P04
P05
P06
P07
39
38
37
36
35
34
33
32
C2
22pF
C3
P36
Y1
12MHZ
13
12
15
14
31
19
18
INT1
INT0
T1
T0
EA/VP
X1
X2
P20
P21
P22
P23
P24
P25
P26
P27
21
22
23
24
25
26
27
28
22Pf
9
17
16
RESET
RD
WR
RXD
TXD
ALE/P
PSEN
10
11
30
29
STC89C52
C1R1
10K10uF
S19D9
4001
2.2温度采集电路
本系统采用DS18B20单总线可编程温度传感器来实现温度的
采集和转换,温度以9~12位数字量读出,可以直接与单片机进
行连接,无需外部器件和电源,大大简化了电路的复杂度。
DS18B20
应用广泛,测温范围为-55~+125oC,温度数字量转换快,性能可
以满足题目的设计要求。
DS18B20的测温电路如图所示。
U2
GND
2P35DQ
R57
2.3KDS18B20
3.2温度控制电路
温度控制电路采用加热器和制冷片对1L水实现加热和降温,
具体电路如图12-5所示。
当实测温度高于设定温度时,单片机P0.2
脚输出低电平,光耦管导通输出高电平,进入LM393管脚比较整
形,滤除高次谐波,输出高电平,进入Q3和Q4组成的推挽电路,
Q3导通Q4截止,输出低电平,晶闸管导通,驱动制冷片降温。
当
实测温度低于设定温度时,P0.3脚输出低电平,驱动加热器对水
温进行加热,工作原理与降温驱动相同。
CON2
+5V+5V+12V21
R2
1K
R4
R5
R10
K
D
N
G
S
+12V150W
Q4
MPS8550
U38
U1A
P023
2
R11
20K
M2
RF470
LM393
R6
4D1
Q3
MPS8050
D2
U4
R7
Q2
U2A3
R121
M1
R3
R8
R9
R13
Q1
电热丝
500W
D3
42
220V/50Hz+12V
BRIDGE1
3.4显示电路
显示电路采用LCD12864液晶模块显示系统的设定温度和实测
温度。
LCD12864液晶共有20个引脚,管脚名称及功能如表12-1
所示。
本系统选用单片机P1口作为数据输出端与LCD12864的数
据端(DB0~DB7)相连,进行水温数据传输;
P20接串并行模式方
式位RS;
P21接并行的读写方式位R/W;
P22接并行使能端口E;
P23接并/串行接口选择位PSB;
P24接复位端口RST。
具体电路图
如图所示。
2.4软件设计
系统的软件设计应用C语言,采用模块化对单片机进行编程
实现各项功能。
主要包括:
PID控制程序、按键子程序、温度采集
子程序、温度比较子程序和液晶显示程序。
3.3主程序设计
系统上电初始化后,首先进行按键扫描,若有按键按下,则
读取按键值,更新设定温度。
将实测温度与设定温度进行比较,
若实测温度与设定温度差值大于2oC,则对水进行全速加热或降
温;
若实测温度与设定温度差值小于2oC,则调用PID子程序,
对水温进行微调,达到设计要求。
系统主程序流程图如图所示.
开始
初始化
键盘扫描
是否有N
新参数键入
Y
读按键值并更新各参数
显示当前温度值
温控判断方式
测量值与设定
值差2°
以上
温差N
2oC以下
加热/制冷子程序
调用PID子程序
附录:
PID控制程序
PID控制就是按设定值与测量值之间偏差的比例、偏差的
积累和偏差变化的趋势进行控制。
它根据采样时刻的偏差值计
算输出控制量的增量,调节控制信号的导通时间来控制加热电
路和冷却电路的工作。
当采样周期相当短时,可以用求和代替
积分,用差商代替微分。
PID控制子程序如下:
/******************************PID算法
**********************************/
unsignedintPIDCalc(structPID*pp,unsignedint
NextPoint)
{
unsignedintdError,Error;
Error=pp->
SetPoint-NextPoint;
//偏差
pp->
SumError+=Error;
//积分
dError=pp->
LastError-pp->
PrevError;
//当前
微分
PrevError=pp->
LastError;
LastError=Error;
return(pp->
Proportion*Error//比例
+pp->
Integral*pp->
SumError//积分项
Derivative*dError);
//微分项
}
/************************************************
************************/
按键子程序
本系统采用四个按键,完成
温度的设定。
当选择键K1每按下一次,K1num加1,根据K1num
值选择对温度值的百位(预留)、十位、个位进行数值调节。
每按一次按键K2,对应位数值加1,每按一次按键K1,对应位
数值减1,并将设定温度值写到液晶显示器的相应位置。
按键子程序如下:
/**********************
***按键子程序***********************************/
voidsheding()
if(k1==0)
delay1(10);
if(k1==0)//按键K1按
下
while(!
k1);
//按键K1
抬起
write_com(0x0f);
write_com(0x94);
k1num++;
switch(k1num)
case1:
//液晶显示位置,十位
break;
case2:
write_com(0x95);
//液晶显示位置,个位
case3:
write_com(0x96);
//液晶显示位置,小数位
case4:
k1num=0;
write_com(0x0c);
//清零
if(k1num!
=0)//返回
//温度值加处理:
if(k2==0)//按键K2按
if(k2==0)
k2);
shi++;
if(shi==10)shi=0;
a=shi;
//十位加1,到10清零
write_d
ate(table[shi]);
ge++;
if(ge==10)ge=0;
b=ge;
//个位加1,到10清零
;
write_date(table[ge]);
write_com(0x95
);
xs++;
if(xs==10)xs=0;
c=xs;
//小数位加1,到10清零
ate('
.'
write_date(table[xs]);
//在液
晶对应位置画点
//温度值减处理:
if(k3==0)
k3);
shi--;
if(shi==-1)shi=9;
write_date(table[shi]);
write_com(0x94
ge--;
if(ge==-1)ge=9;
xs--;
if(xs==-1)xs=9;
write_date('
write_date(table[xs])
*****************************************************
/
DS18B20温度采集子程序
系统采用DS18B20对1L水
的温度进行采集。
首先根据DS18B20的工作时序对其进行初始
化,并对DS18B20内部寄存器读写操作进行定义。
系统工作时,
单片机读取DS18B20内部寄存器的二进制数值,将其转化为十
进制的真实温度值。
DS18B20温度采集子程序如
下:
/*******************
DS18B20温度采集子程序************************/
voidinit_DS18B20()//初
始化
ucharx=0;
DS18B20=1;
//DQ复
位
delay(8);
//稍做延时
DS18B20=0;
//单片机
将DQ拉低
delay(80);
//精确延时
大于480us
DS18B20=1;
//拉高总
线
delay(14);
x=DS18B20;
//稍做
延时后如果x=0则初始化成功x=1则初始化失败
delay(20);
ucharread_onechar()//读
一个字节
uchari=0;
uchardate=0;
for(i=8;
i>
0;
i--)
DS18B20=0;
date>
>
=1;
//寄存器右
移
if(DS18B20)
date|=0x80;
delay(4);
return(date);
voidwrite_onechar(uchar
date)//写一个字节
i>
i--)
DS18B20=date&
0x01;
delay(5);
uintread_temp()//读取温
度
{uchara=0;
ucharb=0;
uintt=0;
floattt=0;
init_DS18B20();
write_onechar(0xcc);
//
跳过读序号列号的操作
write_onechar(0x44);
启动温度转换
write_onechar(0xbe);
读取温度寄存器
a=read_onechar();
连续读两个字节数据//读低8位
b=read_onechar();
//读高8位
t=b;
t<
<
=8;
t=t|a;
//两字节合成一个
整型变量。
tt=t*0.0625;
//得到真
实十进制温度值,因为DS18B20可以精确到0.0625度,所以
读回数据的最低位代表的是0.0625度
//temper12=tt*10;
t=tt*10+0.5;
//放大10
倍,这样做的目的将小数点后第一位也转换为可显示数字,同
时进行一个四舍五入操作。
return(t);
voidmanage_DS18B20()
uintnum;
num=read_temp();
shi=num/100;
ge=num%100/10;
xs=num%10;
temper=shi*10+ge+0.1*xs
****************************************************/
温度比较子程序
系统将DS18B20采集到的实
际测量温度值与键盘设定值进行比较,根据比较结果对水温进
行调节。
若设置温度大于实际温度,并且温差在2度以上,则
驱动加热器对水温进行全速加热;
当温差在0.8到2度之间时,
则停止加热,开始降温;
当温差小于0.8度时,则启用PID计
算,控制温差逐渐趋近设定值,最终达到稳态。
若设置温度小
于实际温度,系统驱动制冷片开始全速降温。
当实际温度下降
到低于设定温度时,则马上开启PID计算,控制温差逐渐趋近
设定值,最终达到稳态。
**温度比较处理子程序****************************/
voidcompare_temper()
unsignedchari;
if(set_temper>
temper)
//是否设置的温度大于实际温度
if(set_temper-temper>
2)//设置的温度比实际的温度是否
是大于2度
high_time=100;
如果是,则全速加热
low_time=0;
else//如果是在0.8到
2度范围,则开始降温
0.