大家好,我是st。
今天和大家聊一聊pid算法的控制原理。
在讲解pid算法之前,在此抛出一个问题,如何通过算法控制加热器使水温稳定在50摄氏度?
一、传统的位式控制算法(非pid算法)
(1)算法逻辑:用户设置目标温度sv为50,传感器检测控制对象即水的温度pv
①当pv ②当pv==sv时,表示实际温度等于目标温度,不输出
③当pv>sv时,表示实际温度高于目标温度,输出低电平out=l,让执行元件即加热器不工作,即0功率输出
(2)代码实现:
#define sv 50void func(unsigned int pv){ if(pv
(1)缺点
①控制算法过于简单,单纯对设定值和输出值进行比较,一旦发现低于设定值,就输出高,否则就输出低
②要么处于全功率下,要么处于0功率下工作
③会导致温度总是在设定值上下波动如下图所示,因为控制对象具有一定的惯性,即加热时水的温度不会立即上升,不加热时水的温度不会立即下降
二、pid闭环控制
pid闭环即比例-积分-微分控制,即通过对偏差进行比例-积分-微分控制,使得当前值趋于目标值的过程。一般来说,比例p控制是必须的,所以衍生出很多组合的pid控制,如pd、pi、pid。离散pid公示为:
其中,e(k):为k时刻的偏差,u(k):为输出的控制量(对于加热器来说是pwm)
(1)比例控制(p)
sv为用户设置目标值,pv为控制对象即水的当前温度值
ek为目标温度与当前温度的偏差:ek=sv-pv
①当ek0时,表示当前温度已超标
比例控制算法公式:pwm=kp*ek
kp参数的解释:kp可以理解为一个衰减器或者放大器,主要是用来调整偏差值,调整其增益或者说是放大倍数
比例控制的作用:
调节到达目标值的时间,增大kp会增加相应速度,但可能会造成超调,有静态误差
(2)积分控制(i)
ek为历史上某一时刻的偏差,sk为历史偏差之和:sk=e1+e2+e3+...+en ①当sk0时,表示历史上大部分时间温度超标(现在温度是否超标不知道)
积分控制公式:
pwm=ki*sk ki参数的解释:ki可以理解为一个衰减器或者放大器,主要是用来调整sk,调整其增益或者说是放大倍数
比例控制的作用:
如果我们把加热器放到一个非常冷的地方对水进行加热,加热目标值是50摄氏度在比例控制下,水温度慢慢升高,直到升高到45摄氏度,发现天气太冷,水散热的速度正好等于比例控制下的加热速度。所以水温永远停留在45摄氏度,永远到不了50摄氏度。如果加上积分控制,只要没有达到50摄氏度,就会存在偏差,这时候对偏差不断积分(累加),输出的pwm就会增大,即增大的加热器的功率,使水温能达到50摄氏度。所以比例控制的作用是,减少静态情况下的误差,但容易造成震荡
(3)微分控制(d)
e(k)为当前偏差值,e(k-1)为上一次偏差值 dk为最近两次偏差相减,表示最近两个时间点偏差的变化:dk=e(k)-e(k-1) ①当dk0时,表示偏差有减小的趋势
微分控制公式:
pwm=kd*dk kd参数的解释:kd可以理解为一个衰减器或者放大器,主要是用来调整dk,调整其增益或者说是放大倍数
微分控制的作用:
只要物理量存在变化,微分控制就会起作用,让物理量的变化速度趋于0,增大kd参数能够抑制震荡,尽快稳定,但有可能造成调节周期过长
(4)pid算法控制代码实现
int pid(int sv,int pv){ /* sv:用户设定的目标值 ** pv:传感器检测到的当前值 ** ek:目标值与当前值的偏差值 ** last_ek:上一次的ek值 ** sk:偏差值ek的积分值 ** pwm:输出的pwm值 */ static int ek,last_ek,sk; static float pwm; ek=sv-pv; sk+=ek; /*积分限幅,sk_max和sk_min根据情况自己给定*/ if(sk>sk_max) sk=sk_max; if(skpwm_max) pwm=pwm_max; if(pwm
当ek、ki和kp参数参数调节的比较好时,温度能及时达到目标温度并且很平稳如图所示:
三、pid控制参数整定的方法
pid控制的调节经验可以总结为:先只使用 p 控制,增大 p 系数直到系统振荡,然后加入微分控制增大阻尼,消除振荡之后再根据系统对响应和静差等具体要求,调节 p 和 i 参数。
例子:我们需要调节目标值为 10390,当前值为 10000
①先设置kd和ki的参数值为0,然后把kp参数从0逐渐增大,直到出现震荡
当kp=62,ki=0,kd=0时,响应曲线如下:
②保持kp=62,ki=0不变,kd从0逐渐增大,当kd=188时,响应曲线如下:
当加入微分控制的时候,可以看到,系统的振荡得到了抑制,但是系统的响应变慢了。因为微分控制相当于一个阻尼力,引入微分控制相当于增大系统的阻尼。这个时候需要结合 kp 和 ki 进行进一步的优化。在实际生产中,需要对不同项目进行评估,比如一个系统对快速性要求不高,但对稳定性和准确性的要求很高,那么就需要严格控制超调量和静差。
总结:pid控制算法是经典控制方法中,现实生活中使用非常广泛,掌握其中的原理非常重要。
快商通与华为、百度等企业共同参与声纹技术国家标准制定
LTE-A热潮汹涌 中国LTE-FDD释照有谱
上海电信率先在全国打造了光网+5G双千兆之城
加法器是如何实现的
采用USB控制器ISP1161实现USB主机功能的设计研究
PID控制算法基本原理
5G仅仅是网速变快吗?看看这些企业实例
摩尔线程与爱特云V2.0完成产品兼容互认证
驾驶式电动扫地车维护以及注意事项
PBXact-25:完全弥补了小型企业IPPBX用户的市场需求
发热芯的日常保养_发热芯使用注意事项
无人机产业链逐步完善,无人机市场规模不断扩大
最适合智能家居的无线连接方案是什么
农药残毒检测仪的使用方法介绍
如何使用ZK-SNARK来验证区块的有效性
石墨烯地暖在于专注石墨烯地暖研发工厂
日本成功研发“锂空气电池”:能量密度暴增15倍 未来电动车续航无敌
自恢复保险丝PTC在超声波雾化器和加湿器中的保护作用
自动化技术将以稳定步伐前进
中间继电器的参数有哪些