水温控制系统.docx

上传人:b****5 文档编号:6243642 上传时间:2023-01-04 格式:DOCX 页数:26 大小:25.59KB
下载 相关 举报
水温控制系统.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.设计原理

水温控制系统以STC89C52单片机作为控制核心,采

用开关控制和PID控制算法相结合,通过控制单位时间内加热

时间所占的比例(即控制波形占空比)来控制水的加热速度,实

现对1L水的全量程(10℃――70℃)内的升温、降温功能

的自动控制。

根据设计要求系统可划分为控制模块、温度测量模

块、水温调节模块、键盘输入模块、显示电路模块等。

系统原理

图如图所示

STC89C52首先写命令给DS18B20开始转换数

据,将转换后的温度数据送入89C52进行处理,处理后在液

晶屏上实时显示。

并将实际测量温度值与键盘设定值进行比较,

根据比较结果进行温度调节,当温差比较大时采用开关量调节,

既全速加热和制冷,当温差小时采用PID算法进行调节,最终

达到温度的稳定控制。

其中,加热采用内置(水中)电加热器实

现,热量直接与水传递,加热效果好,控温方便;降温采用半导

体制冷片实现。

其体积小,安装简单,易于控制,价格便宜,可

短时间内反复启动,但其制冷速率不高,所以设计中配套散热风

扇以达到快速降温的目的。

2.温度控制算法

实际温度控制系统,常采用开关控制或数字PID控制方式。

开关控制的特点是可以使系统以最快的素的向平衡点靠近,但在

实际应用却很容易造成系统在平衡点附近震荡,精度不高;而数

字PID控制具有稳态误差小特点,实用性广泛的特点,但误差

较大时,系统容易出现积分饱和,从而份致系统出现很大的超调

量,甚至出现失控现象。

因此,本设计将开关控制,放积分饱和、

防参数突变积分饱和等方法溶入PID控制算法组成复式数字P

ID控制方法,集各种控制策略的优点,既改善了常规控制的动

态过程又保持了常规控制的稳态特性。

2.1控制算法的确定

温度控制过程为:

当水温温差大时,采用开关控制方式迅速减

小温差,以缩短调节时间;当温差小于某一值后采用PID控制方

式,以使系统快速稳定并保持系统无静态误差。

在这种控制方法

中,PID控制在较小温差时开始进入,这样可有效避免数字积分

器的饱和。

PID参数和被控制对象关系密切,要精确得到被控对象

模型比较困难,为此,采用离线模糊整定的方法来确定PID参数,

即给出一组PID参数的初值,测得相应的数据,按使这个量减小

的方向调节PID参数,用整定后的参数控制该系统,并根据输出

的调节时间、超调量及稳态误差,调节PID参数,如此反复,求

得一组使系统性能最优的PID参数。

复合PID控制系统方框图如

图所示。

2.2PID控制算法

根据设计要求,系统对1L净水进行加热或降温处理,根据水

的对象特性,会出现惯性温度误差问题,原因如下:

温度控制器采用发热丝对水进行加热。

发热丝通电加热时,

内部温度很高。

当容器内水温升高至设定温度时,温度控制器发

出信号停止加热。

但这时发热丝的温度会高于设定温度,发热丝

还将继续对对水进行加热,导致水的温度还会继续上升几度,然

后才开始下降。

当水温下降到设定温度的下限时,温度控制器又

发出加热信号,开始加热,但发热丝要把温度传递到被加热器件

需要一定的时间,导致水温会继续下降几度。

所以,为了对水温

实现精确控制,使温度测量误差在±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

10K

R63

10K

R65

10K

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

+5V

C1R1

10K10uF

S19D9

4001

2.2温度采集电路

本系统采用DS18B20单总线可编程温度传感器来实现温度的

采集和转换,温度以9~12位数字量读出,可以直接与单片机进

行连接,无需外部器件和电源,大大简化了电路的复杂度。

DS18B20

应用广泛,测温范围为-55~+125oC,温度数字量转换快,性能可

以满足题目的设计要求。

DS18B20的测温电路如图所示。

U2

1

GND

2P35DQ

3

GND

R57

2.3KDS18B20

+5V

3.2温度控制电路

温度控制电路采用加热器和制冷片对1L水实现加热和降温,

具体电路如图12-5所示。

当实测温度高于设定温度时,单片机P0.2

脚输出低电平,光耦管导通输出高电平,进入LM393管脚比较整

形,滤除高次谐波,输出高电平,进入Q3和Q4组成的推挽电路,

Q3导通Q4截止,输出低电平,晶闸管导通,驱动制冷片降温。

实测温度低于设定温度时,P0.3脚输出低电平,驱动加热器对水

温进行加热,工作原理与降温驱动相同。

CON2

+5V+5V+12V21

R2

1K

R4

1K

R5

10K

R10

K

D

N

G

S

+12V150W

Q4

MPS8550

U38

U1A

P023

2

R11

1

20K

M2

RF470

LM393

R6

10K

4D1

Q3

MPS8050

D2

P03

U4

R7

1K

8

Q2

MPS8550

U2A3

R121

2

20K

M1

RF470

R3

1K

4

LM393

R8

10K

R9

10K

R13

K

Q1

MPS8050

电热丝

500W

1

+5V

D3

42

220V/50Hz+12V

BRIDGE1

3

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

读按键值并更新各参数

显示当前温度值

温控判断方式

测量值与设定

Y

值差2°以上

N

温差N

2oC以下

加热/制冷子程序

Y

调用PID子程序

附录:

PID控制程序

PID控制就是按设定值与测量值之间偏差的比例、偏差的

积累和偏差变化的趋势进行控制。

它根据采样时刻的偏差值计

算输出控制量的增量,调节控制信号的导通时间来控制加热电

路和冷却电路的工作。

当采样周期相当短时,可以用求和代替

积分,用差商代替微分。

PID控制子程序如下:

/******************************PID算法

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

unsignedintPIDCalc(structPID*pp,unsignedint

NextPoint)

{

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);//微分项

}

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

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

按键子程序

本系统采用四个按键,完成

温度的设定。

当选择键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:

write_com(0x0f);write_com(0x94);//液晶显示位置,十位

break;

case2:

write_com(0x95);//液晶显示位置,个位

break;

case3:

write_com(0x96);//液晶显示位置,小数位

break;

case4:

k1num=0;write_com(0x0c);//清零

break;

}

}

if(k1num!

=0)//返回

{

//温度值加处理:

if(k2==0)//按键K2按

{

delay1(10);

if(k2==0)

{

while(!

k2);

switch(k1num)

{

case1:

shi++;if(shi==10)shi=0;a=shi;//十位加1,到10清零

write_com(0x94);write_d

ate(table[shi]);write_com(0x94);

break;

case2:

ge++;if(ge==10)ge=0;b=ge;//个位加1,到10清零

write_com(0x95);;write_date(table[ge]);write_com(0x95

);

break;

case3:

xs++;if(xs==10)xs=0;c=xs;//小数位加1,到10清零

write_com(0x96);write_d

ate('.');write_date(table[xs]);write_com(0x96);//在液

晶对应位置画点

break;

}

}

}

//温度值减处理:

if(k3==0)

{

delay1(10);

if(k3==0)

{

while(!

k3);

switch(k1num)

{

case1:

shi--;if(shi==-1)shi=9;a=shi;

write_com(0x94);write_date(table[shi]);write_com(0x94

);

break;

case2:

ge--;if(ge==-1)ge=9;b=ge;

write_com(0x95);

write_date(table[ge]);write_com(0x95);

break;

case3:

xs--;if(xs==-1)xs=9;c=xs;

write_com(0x96);write_date('.');write_date(table[xs])

;write_com(0x96);

break;

}

}

}

}

}

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

*****************************************************

/

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;//寄存器右

DS18B20=1;

if(DS18B20)

date|=0x80;

delay(4);

}

return(date);

}

voidwrite_onechar(uchar

date)//写一个字节

{

uchari=0;

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

{

DS18B20=0;

DS18B20=date&0x01;

delay(5);

DS18B20=1;

date>>=1;

}

}

uintread_temp()//读取温

{uchara=0;

ucharb=0;

uintt=0;

floattt=0;

init_DS18B20();

write_onechar(0xcc);//

跳过读序号列号的操作

write_onechar(0x44);//

启动温度转换

init_DS18B20();

write_onechar(0xcc);//

跳过读序号列号的操作

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;

delay(5);

ge=num%100/10;

delay(5);

xs=num%10;

delay(5);

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度范围,则开始降温

{

if(set_temper-temper>0.

8

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

当前位置:首页 > 农林牧渔 > 农学

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

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