本文根据https://blog.csdn.net/AdamShan/article/details/78458325中提到的的动态调节PID参数的方法使用Matlab simulink进行了一次仿真,值得申明的是这个方法不是上述博文作者的原创,有知道原创出处的朋友评论一下,我好感谢。
下面看simulink模型:
整个结构很简单:
这里我随便设置了一个二阶延迟系统
中间部分就是PID
这个function里面就是在不断计算和更新PID的参数
具体如下:
```bash
function [dp,k,flag,p] = fcn(error,error_delay)
error = abs(error);
error_delay = abs(error_delay);
tol = 0.2;
k =0;
condi = 1;
flag =0;
dp = [0.5 ;0.2 ;0.2];
p = [8 ;5 ;5];
while condi ==1
for i = 1:3
p(i)= p(i)+ dp(i);
if error < error_delay
flag = 1;
error_delay = error;
dp(i) = dp(i)*1.1;
else
p(i) = p(i) - 2*dp(i);
if error < error_delay
flag =2;
error_delay = error;
dp(i) = 1.1* dp(i);
else
p(i) = p(i)+dp(i);
flag =3;
dp(i) = dp(i)*0.9;
end
end
end
k = k+1;
if k ==10
% if sum(dp)<=0.1;
condi = 2;
end
end
end
然后仿真运行一下:
可以看得出,选择不同精度要求的动态调节会影响到最后的system performance,我这里直接拿循环次数来作为影响最后参数的因素