打印
[资料分享]

基于继电器的温度加热控制器

[复制链接]
5899|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Clovee|  楼主 | 2018-8-16 10:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
基于继电器的温度加热控制器


摘要:本文主要研究单片机控制热棒加热,要求水温可以在环境温度低于设定值时实现自动调整,以保持设定的温度基本不变。介绍了利用单片机实现温度控制系统的设计,其中涉及系统结构设计、元器件的选取和控制控制算法的选择、和整体电路的设计以及部分电路的设计。在系统构建时选取了STC89C51RC单片机作为该控制系统的核心,通过PID算法实现对电炉功率和水温控制系统设计。水温能在环境温度降低时实现自动控制,以保持设定的温度基本不变,能在40摄氏度左右保持稳定。
关键词:PID算法  单片机   继电器
一、 设计要求
1.用51单片机控制水槽的加热温度。从现在的室温加热到目标温度40℃。
    2.加热棒功率2KW,控制器为继电器。
    3.要求在尽可能短的时间内将水从室温加热到目标温度,并且能够保持在目标温度附近的一定精度范围内。
二、 题目分析
设计要求控制水温,所以检测水温一定是重点。通过温度检测元件,DS18B20,来读取实际温度。将所读取的若干次温度化为数据通入单片机程序中的PID算法。PID算法用于计算实测值与预定之间的差值,并根据计算结果控制单片机的下一步命令,决定继电器的通断。继电器外接在热水棒的电源端,用于控制电路的通断,从而达到加热与停止加热的目的。需要注意的是加热水池是典型的滞后系统,所以加热到预定温度之前就应该停止加热。比如:预定值是40℃,估计加热到36℃时就应该停止加热。具体的数据应该通过多次试验来确定,根据实验所得数据来确定实际的预定值。
三、 关于硬件选型
根据对设计需求的分析,下面逐一说明各硬件部分。

1. 温度检测元件
该设计的一大重点就是对于水温的采集与读取。最低要求是测温范围在0至50度左右。其精度要求在0.5度左右即可。需要实时采集,实时读取。
DALLAS最新单线数字温度传感器DS18B20使用新的“一线器件”体积更小、适用电压更宽、更经济。Dallas 半导体公司的数字化温度传感器DS1820是世界上第一片支持 “一线总线”接口的温度传感器。一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。DS18B20、 DS1822 “一线总线”数字化温度传感器 同DS1820一样,DS18B20也 支持“一线总线”接口,测量温度范围为 -55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C。DS1822的精度较差为± 2°C 。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。与前一代产品不同,新的产品支持3V~5.5V的电压范围,使系统设计更灵活、方便。而且新一代产品更便宜,体积更小。 DS18B20、 DS1822 的特性 DS18B20可以程序设定9~12位的分辨率,精度为±0.5°C。可选更小的封装方式,更宽的电压适用范围。分辨率设定,及用户设定的报警温度存储在EEPROM中,掉电后依然保存。DS18B20的性能是新一代产品中最好的!性能价格比也非常出色! DS1822与 DS18B20软件兼容,是DS18B20的简化版本。省略了存储用户定义报警温度、分辨率参数的EEPROM,精度降低为±2°C,适用于对性能要求不高,成本控制严格的应用,是经济型产品。 继“一线总线”的早期产品后,DS1820开辟了温度传感器技术的新概念。DS18B20和DS1822使电压、特性及封装有更多的选择,让我们可以构建适合自己的经济的测温系统。   
综上,最后选取的测温元件为DS18B20。
2. 单片机的选型
本设计涉及到得功能有对输入数据的读取,PID算法的计算,LED的显示,对于继电器的通断控制。由于用到的功能比较少,且要求不高,故只需选用普通的8051即可。
STC89C51可以代替AT89C51,功能更强,速度更快,寿命更长,价格更低。外型:40个引脚,双列直插DIP-40。STC89C51可以完成ISP在线编程功能,而AT89C51则不能。将AT89C51中的程序直接烧录到STC89C51中后,STC89C51就可以代替AT89C51直接工作(一般都不需要做任何改动即可正常工作)。STC推出的系列51单片机芯片是全面兼容其它51单片机的,而51单片机是主流大军,每一个高等院校、普通学校、网站、业余单片机培训都是以51单片机为入门教材的,所以,教材最多,例子最多。STC89C51内部有EEPROM,可以在程序中修改,断电不丢失。还增加了两级中断优先级,等等。

本设计使用STC89C51已经绰绰有余。
3. 关于LED的选型

本设计需要显示实时温度,故应使用LED显示。考虑到需要显示的位数,使用4个七段数码管即可。单片机的P0口控制每个数码管的段位,P2口控制数码管的位段。

4. 继电器的选型
1)为了能到达调节温度的效果,需要用单片机驱动继电器。
2)单片机端口通过三极管放大,得到足够大的电信号,再接继电器。
3)继电器接在200W功率热水棒的电源输入端。
当输入量电流、电压达到规定值时,使被控制的输出电路导通或断开的电器。可分为电气量(如电流、电压、频率、功率等)继电器及非电气量(如温度、压力、速度等)继电器两大类。具有动作快、工作稳定、使用寿命长、体积小等优点。广泛应用于电力保护、自动化、运动、测量和通信等装置中。电器是一种电子控制器件,它具有控制系统(又称输入回路)和被控制系统(又称输出回路),通常应用于自动控制电路中,它实际上是用较小的电流去控制较大电流的一种自动开关。故在电路中起着自动调节、安全保护、转换电路等作用。
继电器的选择要注意以下几点使用环境输入信号输入参量负载情况等。故我们根据实际情况选择了JT311/A。
JT311/A的技术参数:吸合电压在30%~50%线圈额定电压范围内或释放电压在7%~70%线圈额定电压范围内;
标准误差级别:Z3±10%;
触头对数:1常分1常合;
额定电压和额定电流:直流12,24,48,75,110,220和440V共七种规格供选用;直流1.5,2.5,5,10,25,50,100,150,300和600A共十种规格供选用;
消耗功率:20W;
机械寿命:10000000次;
电寿命:1000000次;
重量:2.5KG;
四、 关于软件

1. 软件流程
根据以上所述,得出流程图如下:

2. 关于PID算法
    PIDProportional Integral Derivative)控制是控制工程中技术成熟、应用广泛的一种控制策略,经过长期的工程实践,已形成了一套完整的控制方法和典型的结构。它不仅适用于数学模型已知的控制系统中,而且对于大多数数学模型难以确定的工业过程也可应用,在众多工业过程控制中取得了满意的应用效果。
    PID 工作基理:由于来自外界的各种扰动不断产生,要想达到现场控制对象值保持恒定的目的,控制作用就必须不断的进行。若扰动出现使得现场控制对象值(以下简称被控参数)发生变化,现场检测元件就会将这种变化采集后经变送器送至PID 控制器的输入端,并与其给定值(以下简称SP )进行比较得到偏差值(以下简称e ),调节器按此偏差并以我们预先设定的整定参数控制规律发出控制信号,去改变调节器的开度,使调节器的开度增加或减少,从而使现场控制对象值发生改变,并趋向于给定值(SP ),以达到控制目的 ,如图 1 所示,其实PID 的实质就是对偏差(e 值)进行比例、积分、微分运算,根据运算结果控制执行部件的过程。


PID 控制器的控制规律可以描述为:

比例(P)控制能迅速反应误差,从而减小稳态误差。但是,比例控制不能消除稳态误差。比例放大系数的加大,会引起系统的不稳定。积分(I)控制的作用是:只要系统有误差存在,积分控制器就不断地积累,输出控制量,以消除误差。因而,只要有足够的时间,积分控制将能完全消除误差,使系统误差为零,从而消除稳态误差。积分作用太强会使系统超调加大,甚至使系统出现振荡。微分(D)控制可以减小超调量,克服振荡,使系统的稳定性提高,同时加快系统的动态响应速度,减小调整时间,从而改善系统的动态性能。根据不同的被控对象的控制特性,又可以分为PPIPDPID 等不同的控制模型。
比例(P)控制能迅速反应误差,从而减小稳态误差。但是,比例控制不能消除稳态误差。比例放大系数的加大,会引起系统的不稳定。积分(I)控制的作用是:只要系统有误差存在,积分控制器就不断地积累,输出控制量,以消除误差。因而,只要有足够的时间,积分控制将能完全消除误差,使系统误差为零,从而消除稳态误差。积分作用太强会使系统超调加大,甚至使系统出现振荡。微分(D)控制可以减小超调量,克服振荡,使系统的稳定性提高,同时加快系统的动态响应速度,减小调整时间,从而改善系统的动态性能。根据不同的被控对象的控制特性,又可以分为PPIPDPID 等不同的控制模型。


1 就可以离散为

或者:
这样就可以让计算机或者单片机通过采样的方式实现PID 控制,具体的PID 控制又分为位置式PID 控制和增量式PID 控制,公式4 给出了控制量的全部大小,所以称之为全量式或者位置式控制;如果计算机只对相邻的两次作计算,只考虑在前一次基础上,计算机输出量的大小变化,而不是全部输出信息的计算,这种控制叫做增量式PID 控制算法,其实质就是求Δμ的大小,而   Δμk =μk -μk-1 ;所以将式4 做自减变换有:

其中

本设计利用了上面所介绍的位置式PID 算法,将温度传感器采样输入作为当前输入,然后与设定值进行相减得偏差ek,然后再对之进行PID 运算产生输出结果fOut,然后让fOut 控制定时器的时间进而控制加热器。为了方便PID 运算,首先建立一个PID 的结构体数据类型,该数据类型用于保存PID 运算所需要的PID 系数,以及设定值,历史误差的累加和等信息

typedef struct PID
{
float SetPoint; // 设定目标 Desired Value
float Proportion; // 比例系数 Proportional Const
float Integral; // 积分系数 Integral Const
float Derivative; // 微分系数 Derivative Const
int LastError; // 上次偏差
int SumError; // 历史误差累计值
} PID;
PID stPID; // 定义一个stPID 变量
在实际运算时,由于水具有很大的热惯性,而且PID 运算中的I(积分项)具有非常明显的延迟效应所以不能保留,我们必须把积分项去掉,相反D(微分项)则有很强的预见性,能够加快反应速度,抑制超调量,所以积分作用应该适当加强才能达到较佳的控制效果,系统最终选择PD 控制方案,下面C 代码所示为PD 控制的实现过程:

float PIDCalc( PID *pp, int NextPoint )
{
int dError,Error;
Error = pp->SetPoint*10 - NextPoint; // 偏差,设定值减去当前采样值
dError = Error-pp->LastError; // 当前微分,偏差相减
pp->PrevError = pp->LastError; // 保存
pp->LastError = Error;
return (pp->Proportion * Error // 比例项
- pp->Derivative * dError // 微分项
);
}
通过温度的PID 运算,产生结果fOut,该参数决定是否加热,加热时间是多长。该程序如下:
stPID.Proportion = 2; //设置PID 比例值
stPID.Integral = 0; //设置PID 积分值
stPID.Derivative = 5; //设置PID 微分值
fOut = PIDCalc ( &stPID,(int)(fT*10) ); //PID 计算
if(fOut<=0)
*P_IOA_Buffer &= 0xff7f; //温度高于设定值,关闭加热器
else
*P_IOA_Buffer |= 0x0080; //温度低于设定值,打开加热器
    加热时间由主函数计算。主程序中通过PIDCalc 函数得到fOut 参数,如果该参数大于“0”,则开启加热器。如果PIDCalc 计算结果比较大说明离目标温度相差较大,则加热时间比较长,如果计算结果比较小,说明离目标温度相差较小,加热时间相对较短。
五、端口资源分配
分配8051的各端口:
P0口接数码管码端;
P2口接数码管位端;(前四位有效)
P1.5接蜂鸣器;
P3.0接继电器。
    P1.6接测温元件DS18B20
六、 元件清单
元件
型号
数量
单片机
STC89C51RC
1
数码管
4
蜂鸣器
1
继电器
JT311/A
1
测温元件
DS18B20
1

相关帖子

沙发
Clovee|  楼主 | 2018-8-16 10:48 | 只看该作者
基于继电器的温度加热控制器

文档1.pdf

252.95 KB

使用特权

评论回复
板凳
xyz549040622| | 2018-8-17 22:52 | 只看该作者
支持下,谢谢分享!

使用特权

评论回复
地板
firstblood| | 2018-8-19 22:27 | 只看该作者
在系统构建时选取了STC89C51RC单片机作为该控制系统的核心,通过PID算法实现对电炉功率和水温控制系统设计。

使用特权

评论回复
5
1363741158| | 2018-12-17 16:55 | 只看该作者
楼主在吗,加热时间的计算程序可以发出来吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

708

主题

1032

帖子

2

粉丝