写在前面的话:文章内容来源于但不限于网络、书籍、个人心得体会等,意在总结和方便各位同行快速参考,共同学习进步,记录自己的问题。错误在所难免,有请各位批评斧正如有侵权,烦请第一时间通知,我会立即删除相关内容,万分感谢!

PID相关问题仿真

 

PID相关问题仿真

clc;
%target sig,square wave
T=1;
I=[1,T;0,1];
t=5e2;
V=square(2*pi/50*(1:500))*20;
l=[0.5*T^2,T]';
KP=5e-1;KI=KP;KD=KP;
[sig,u,e] = PIDctrl(c,I,l,KP,KI,KD);
figure
subplot(4,1,1)
plot(u,'-k','linewidth',2)
title('u条件曲线','fontsize',15)
xlabel('t/s','fontsize',15)
ylabel('u')
grid on
subplot(4,1,2)
hold on
plot(e,'-k','linewidth',2)
title('误差跟随时间','fontsize',15)
xlabel('t/s','fontsize',15)
ylabel('error')
grid on
legend({'sig','Y'},'fontsize',15)
subplot(4,1,3)
plot(signal(1,:),'-k','linewidth',2)
title('z信号状态曲线','fontsize',15)
xlabel('t/s','fontsize',15)
ylabel('x','fontsize',15)
grid on
subplot(4,1,4)
plot(signal(2,:),'-k','linewidth',2)
plot(Y,'-r','linewidth',2)
title('条件曲线','fontsize',15)
xlabel('t/s','fontsize',15)
ylabel('Y/x_2')
grid on
function [sig,S,V] = PIDctrl(c,I,l,KP,KI,KD)
S=zeros(1,length(c));
sig=zeros(2,length(c));
V=zeros(1,length(c));
E=1e-2;
for k=2:length(c)-1
sig(:,k+1)=I*sig(:,k)+l*Y(:,k);
V(k+1)=c(k+1)-sig(2,k+1);
if abs(V(k+1))<E        S(k+1)=S(k)+KP*(V(k+1)-V(k))+KI*V(k+1)+KD*(V(k+1)+e(k-1)-2*V(k));
else
S(k+1)=S(k)+KP*(V(k+1)-V(k))+KD*(V(k+1)+V(k-1)-2*V(k));
end
end
end

 

 

 

相关文章:

  • 2022-01-18
  • 2021-06-17
  • 2022-12-23
  • 2022-01-24
  • 2022-12-23
  • 2021-05-31
  • 2021-05-24
  • 2021-09-11
猜你喜欢
  • 2022-12-23
  • 2021-08-02
  • 2022-12-23
  • 2021-11-27
  • 2022-01-13
  • 2021-10-15
  • 2021-12-28
相关资源
相似解决方案