通俗理解 模糊自适应PID

it2025-02-09  12

模糊自适应PID算法就是在经典的PID的基础上添加模糊控制规则库,建立这个库的目的就是算法能够自己来进行改变PI、D的值。

就拿温度的上升过程控制来说,刚开始的时候,希望温度能够快速的升到终点温度,并且以尽量小的波动将温度稳定在目标温度处(最好不让其超过)。此时如果利用经典的PID控制方式,那么此时的P值就是恒定不变,但是我们希望他刚开始的时候尽量大。加入规则库,就可以实现,可以用语句

if冷 then 加大热

当然也有:

if热 then 加大冷

从而快速的改变温度。

就好比我们在冬天里用冷水洗脚, 冷水 + 冷脚 = 感觉非常的冷,迫不及待想让水快点热,所以我们加入很热的水,而不是加入温水。

 

这应该是最通俗的理解了。

 

扩充PID_C程序参考如下:(还没有验证

 

#include <stdio.h> /*定义PID变量结构体*/ struct _pid { float SetSpeed;//定义设定值 float ActualSpeed;//定义实际值 float err;//定义偏差值 float err_last;//定义上一个偏差 float Kp, Ki, Kd;// float voltage;//定义电压值(控制执行器的变量) float integral;//定义积分值 }; /*初始化变量*/ void PID_init(){ printf("PID_init begin \n"); pid.SetSpeed = 0.0; pid.ActualSpeed = 0.0; pid.err = 0.0; pid.err_last = 0.0; pid.voltage = 0.0; pid.integral = 0.0; pid.Kp = 0.2; pid.Ki = 0.015; pid.Kd = 0.2; printf("PID_init end \n"); } /*编写编写控制算法*/ float PID_realize(float speed){ pid.SetSpeed = speed; pid.err = pid.SetSpeed - pid.ActualSpeed; pid.integral+=pid.err; pid.voltage = pid.Kp*pid.err + pid.Ki*pid.integral + pid.Kd*(pid.err-pid.err_last); pid.err_last = pid.err; pid.ActualSpeed = pid.voltage*1.0; return pid.ActualSpeed; } int main (){ printf("System begin \n"); PID_init(); int count; while (1){ float speed = PID_realize(200.00); printf("%f\n",speed); count++; } return 0; }

 

转载于:https://www.cnblogs.com/doker/p/10959428.html

相关资源:基于Matlab的模糊自适应PID控制器仿真研究
最新回复(0)