上一次写了模拟量的使用,模拟量传感器想要用的好,还需要有PID算法的加持,有的朋友会疑问,为啥还要PID算法呢,比如想让一个水箱一直保持恒定的水量,那么测距传感器检测到水量低了那么水泵就加水,水量够了就不加水就行了呀!

那么问题来了,你怎么能把水加到正好呢?怎么能让水保持恒定值不变呢?水泵启动一下,有可能水就加多了,这样水泵会频繁地启动停止,当水在恒定值上下波动,那么水泵就会因为启动停止太频繁发生震颤,这样水泵加的水量是不精确的!再比如说需要保持恒定压力的管道,传感器检测到压力值不够,就增加压力,增加多少合适呢,这个是需要一个确定量的,不是说你增加一下压力就可以,PID算法就是一个计算精度的一个公式,可以让水量或者压力或其它值最大可能保持恒定,精度达到最高!

这篇文章就详细讲解PID原理和PID程序功能块的写法,需要用到时候可以直接调用PID功能块实现PID控制!

PID原理图

PID原理,下面这个原理图当成3个部分看,很简单,第一部分就是计算设定值和反馈值的误差;第二部分把这个误差参与PID计算,输出给执行机构(例如水泵);第三部分传感器反馈值;核心就是第二部分,PID计算!

pid控制算法一般用在哪里(PID控制算法重要性你了解吗)(1)

教科书里的原理图

pid控制算法一般用在哪里(PID控制算法重要性你了解吗)(2)

我理解分成三部分

PID计算

PID计算拆分开来就是P(比例控制),I(积分控制),D(微分控制);下面每个原理都讲解下!

P(比例控制)怎么理解呢,如果单独只用P(比例)控制,I(积分控制)和D(微分控制)关闭,那么拿水箱举例,水箱里我想恒定水量为1000ml,传感器检测到水量为999ml,那么设定值和反馈值的误差为1ml,比例控制就是在这1ml前面加个系数,这个系数自己调节,因为正常思路是,少1ml水,我就让水泵加1ml水就行,但是实际是,我让水泵加1ml,实际可能加了2ml(无法精确的让水泵出来1ml水),这个时候我就得调整比例系数,让比例系数为0.5就行!

PID标准公式里的Kp就是比例系数,ev(t)就是设定值减反馈值的偏差值,如下图,如果只有比例控制部分,那么公式很简单,就是u(t)=Kp*ev(t);

pid控制算法一般用在哪里(PID控制算法重要性你了解吗)(3)

PID公式

I(积分控制)怎么理解呢?学过微积分的都知道积分是啥意思,没学过的或忘了的就顾名思义吧,(积)就是积木,累积的意思,拿水箱举例,那就是水泵加很多次水的一个累积总和!

假如水箱里我们设定恒定值是1000ml,水泵每次只能调节到进水9.9ml;

如果水箱没水,那么水泵需要运行100次,一共进水990ml,误差10ml;

理论上水泵如果每次能进水10ml,那么就刚刚好到设定值,实际每次只进水9.9ml,这个0.1ml,靠调整水泵很难达到这个精度,那么我们就取100次进水的总和,再看误差;

100次进水990ml,这个总误差10ml就好补偿了,通过调整I(积分控制)计算部分的系数TI就可以,把TI设为0.99即可!

如下图的PID公式里的积分控制部分!

pid控制算法一般用在哪里(PID控制算法重要性你了解吗)(4)

PID公式

D(微分控制)怎么理解呢?也就是微积分里面的微分部分,顾名思义就是把水泵加水量细分到每一次;

比如水泵加水,每次想加10ml,但是如果水泵功率开到最大,1秒就加了10ml,水泵功率开小点需要10秒;

实际应用中,想1秒加10ml的误差肯定比10秒加10ml的要大,就是说水泵慢慢往水箱加水,实际应用中精度会更高,加水过程更稳定。

通过下图PID公式里的微分控制计算部分的系数TD可以调节!

pid控制算法一般用在哪里(PID控制算法重要性你了解吗)(5)

PID公式

总结一下:

P调节的是误差值和水泵每次进水量成比例关系的调节,就是说水泵每次加水量是一定的,需要加多少次能接近误差值,这个在PID调节中是第一个需要调的参数!

I调节的是P调节后还存在误差的情况下的再次调节,靠调节累积误差增加精度!

D调节的是稳定性,通过控制加水速度,减少滞后量或惯性带来的误差!

PID控制的原理就如上面所述,下面讲一下PLC程序里PID标准功能块是怎么写的,用的ST语言,可以在支持ST的各种型号PLC里使用,有兴趣的可以详细看看,对有精度要求的应用还是很有帮助的,对于之前不是很了解PID控制的朋友,我感觉对于模拟量使用,很多人只无意间用到了P(比例控制)计算部分!

PID计算公式的程序实现

这个程序是上面的PID计算公式的程序实现,有些参数的命名或者公式的格式有变化,但是原理是一样的,有兴趣的仔细研究下,无兴趣的直接使用就行!

调用功能块

pid控制算法一般用在哪里(PID控制算法重要性你了解吗)(6)

调用功能块

PID公式的变形

变成程序可以实现的形式:同样是包含比例系数,积分控制,微分控制三部分,没有初始值设定;

pid控制算法一般用在哪里(PID控制算法重要性你了解吗)(7)

程序里使用的PID公式

输入参数定义:

fSetpointValue:设定值;fActualValue:实际反馈值;bReset: TRUE重置内部变量;fCtrlCycleTime:采样周期[s];fKp:比例系数;fTn:积分作用时间[s];fTv:微分作用时间[s];

fTd:阻尼时间[s];

功能块展现:

pid控制算法一般用在哪里(PID控制算法重要性你了解吗)(8)

声明部分

pid控制算法一般用在哪里(PID控制算法重要性你了解吗)(9)

程序逻辑部分

以上说的是PID应用的基本功能,还有基于这个原理的其它控制方法,有单独使用的,有PI结合使用的,PD结合使用的,有带死区的PID,固定采样频率的PID等等,看实际需要写对应的程序!

PID参数调试经验调节

PID参数调试靠的是经验调节,就是不停的测试,找到一个需要的参数,有口诀如下:

常用口诀:

参数整定找最佳,从小到大顺序查;

先是比例后积分,最后再把微分加;

曲线振荡很频繁,比例(度盘)要放大;

曲线漂浮绕大湾,比例度盘往小扳;

曲线偏离回复慢,积分时间往下降;

曲线波动周期长,积分时间再加长;

以上就是PID控制的大致原理,想要深入应用还是需要各位朋友系统的去学习PID算法,理解这个原理希望对大家的深入学习有所帮助!

感觉有用的朋友关注我,我会给大家持续输出实用工控的经验!

,