应用场景,过程控制,如温度控制 压力控制 流量控制 平衡车 机器人等
1.什么是PID控制?
一种闭环定量控制算法 。
控制方式一般是 PWM(脉宽控制)AO(数模控制)通讯。
下来用温度控制举例
2.控制框架 :采用闭环控制系统。
闭环系统:闭环系统就是带反馈的控制,如我让小明帮忙做事,小明会把做事的进度会及时告诉我。
拓展开环系统:就是不带反馈的系统。如我让小明帮忙做事,我只负责吩咐下去,不问进度,也没主动告诉我进度。
3.接下来 ,我用泡茶说明
我现在要泡枸杞茶 假设要恒定75摄氏度
我们约定一下: 差值=设定值-当前值
按常理来说 我们接上电源直接烧水到达75摄氏度时 ,断开电源即可。我们来分析这个案例 用的就是差值>0就输出的方式来控制。这就相当于 差值>0就输出。我们一般用这个方式,先进入稳态。(进入目标值偏差值范围)
好的 我们用控制器实现以下
首先我们要知道 ,控制器必须要知道当前的温度 ,就像我们眼睛看到仪表的温度值 ,然后告诉大脑 以决定是否断开电源。其实就是模拟人的一个思维。
我们知道温度是一个连续变化的值,专业术语叫做模拟量。
4.接下来我们讲讲纯P比例控制,有的地方比例也叫增益。
输出=比例系数*差值
差值=设定值-当前值
比如说我们现在设置比例系数为100
比例系数100
我们看下上面的简易表 差值1输出100% 差值2输出差值200% 差值3输出300% 这样一看200%和300%是什么鬼 ?实际没有任何意义所以我们的Kp设置很大有温差就很大的PWM值输出温度过冲严重
比如说我们现在设置比例系数为0.1
比例系数0.1
我们看下上面的简易表 ,差值1输出0.1%,差值2输出0.2% ,差值3输出0.3% ,这样一看0.1% 0.2% 0.3%输出PWM值太小。不足以加热 ,实际没有任何意义所以我们的Kp比例设置很小,虽然有温差但是PWM百分比值很小,温度加不起来。
为何举极限的例子 只是用来说明比例系数就是一个放大系数 设太大或太小都不行。所以实际根据实际控制环境来填合适的放大系数 我相信当你知道原理后就知道怎么调试了吧。
P值很大,响应很快,加温能力强。 P值很小,响应慢,加温能力弱 。水温控制经验2%-10%左右根据实际现象及加热功率决定值。
但是,在水加热的时候刚开始升温斜率还可以,但是快接近目标值时越来越慢。
为什么呢 假如现在温差50度 P值等于10就意味着100%输出,但是现在温度73度温差值是2度那么P值等于10时意味着20%的能力加热不足以很快到达75度,现在栋哥很着急啊,喝不到枸杞茶怎么办呢?
我们采用 先最大值加热快接近目标值的时候,再开始进行P值运算。 这时候P值我们相对可以相对设大一点实现控温。
5.接下来发现 我想让它稳定在75度很难。为什么?因为当温差等于0时,你P值再大乘以0输出还是0 。所以我们这时候要给个补偿值 用来抵消环境带来的降温。即使我现在输出是0但是我补偿个20%输出 结果保持温度效果好多了。
这个算法就是 ,先进入稳态后 输出=比例系数*差值 补偿值
但是用补偿值很难试出来能不能根据历史加温情况自动补偿?
我们引入I积分概念来实现 PI模型
积分计算进入稳态后开始计算,偏差之和再除以采样积分时间,再乘以积分系数 ,实现根据历史偏差情况输出补偿值。
这个算法就是 ,先进入稳态后 ,输出=比例系数*差值 补偿值 积分系数*(∑(偏差之和)/积分时间)
这样控制就很稳了,就在我准备接热水泡枸杞茶时。
6.这时隔壁老王给我的热水泼了一些冷水,突然狂降温,外界引起失控。
为了不让老王得逞 我们加入微分计算。也就是用偏差之差来计算。
比如我现在系统稳定了因为PI在起作用,但是发现差值突然越来越大, 也就是最近一个偏差大于上一个偏差意味着失控。然后微分环节起作用
那么算法就是,先进入稳态后,输出=比例系数*差值 补偿值 积分系数*(∑(偏差之和)/积分时间) 微分系数*(最近偏差-上一次偏差)
注意:当微分为负值时起到一个抑制作用,当为正值时起面对突发情况。不要提前抑制功能可以自己逻辑判断大于0起作用,就可只处理突发状况,网上有PID公式原理类似。
不同控制PID算法不一样,请实际灵活应用。就在微分起作用后水快速烧到75度后。
栋哥以为枸杞茶终于可以喝到嘴了。这时隔壁老王使出了绝招 ,给我断电....
8.积分作用在控温环节 ,加温或者目标值改变就不是控温环节。
相信大家知道原理后知道怎么调节了吧,不论是PLC单片机C#上位机等都可以自己手写PID,注意有的PLC开放的积分I是积分时间,做分母,作用是相反的,这个时候你要想积分环节作用弱,把I积分时间调到最大。
加温环节和控温环节的比例和积分可以不一样。