📄 复件shupidwcandcontrolpid1psd1.m
字号:
%常规pid控制
clear all;
close all;
kp=0.30;
ki=0.0002;
kd=2.2;
error_1=0;
error_2=0;
y_1=0;
y_2=0;
u_1=0;
u_2=0;
ts=0.01024;
for k=1:1:30
time(k)=k*ts;
rin(k)=1;
%Tracing Step Signal
yout(k)=1.8799*y_1-0.8799*y_2+1.0*0.06*u_1+1.0*0.05785*u_2;
error(k)=rin(k)-yout(k);
u(k)=u_1+kp*(error(k)-error_1)+ki*error(k)+kd*(error(k)-2*error_1+error_2);
if u(k)>10
u(k)=10; end
if u(k)<-10
u(k)=-10; end
error_2=error_1;
error_1=error(k);
u_2=u_1;u_1=u(k);
y_2=y_1;y_1=yout(k);
end
%神经元PSD控制
xc=[0,0,0]';
K_1=4;
Tv_1=500;
xiteP=1000.;
xiteI=0.01;
xiteD=8000.00; %Initilizing kp,ki and kd wkp_1=rand; wki_1=rand; wkd_1=rand;
wkp_1=0.11;
wki_1=0.11;
wkd_1=0.11;
error_1=0;
error_2=0;
y_1=0;y_2=0;
u_1=0.00;u_2=0;
ts=0.01024;
wx_1=0;
for k=1:1:30
time(k)=k*ts;
rin(k)=1;
%Tracing Step Signal
youts(k)=1.8799*y_1-0.8799*y_2+1.0*0.06*u_1+1.0*0.05785*u_2;
error(k)=rin(k)-youts(k);
wx=[wkp_1,wkd_1,wki_1];
wx(k)=wx*xc;
b(k)=sign((youts(k)-y_1)/(wx(k)-wx_1+0.00000000000001));
if sign(error(k))~=sign(error_1),K(k)=0.75*K_1;else K(k)=K_1+0.05*K_1/Tv_1;end
wkp(k)=wkp_1+xiteP*K(k)*error(k)*(2*error(k)-error_1)*b(k);
wki(k)=wki_1+xiteI*K(k)*error(k)*(2*error(k)-error_1)*b(k);
wkd(k)=wkd_1+xiteD*K(k)*error(k)*(2*error(k)-error_1)*b(k);
xc(1)=error(k)-error_1; %P
xc(2)=error(k); %I
xc(3)=error(k)-2*error_1+error_2; %D
Tv(k)=Tv_1+0.1*sign(abs(xc(1))-Tv_1*abs(xc(3)));
wadd(k)=abs(wkp(k))+abs(wki(k))+abs(wkd(k));
w11(k)=wkp(k)/wadd(k);
w22(k)=wki(k)/wadd(k);
w33(k)=wkd(k)/wadd(k);
w=[w11(k),w22(k),w33(k)];
u(k)=u_1+K(k)*w*xc;
% Control law
if u(k)>10
u(k)=10; end
if u(k)<-10 u(k)=-10; end
error_2=error_1;
error_1=error(k);
u_2=u_1;u_1=u(k);
wkp_1=wkp(k); wkd_1=wkd(k); wki_1=wki(k); wx_1=wx(k);K_1=K(k);Tv_1=Tv(k);
y_2=y_1;y_1=youts(k); end
hold on
plot(time,rin,'b',time,yout,'r');
plot(time,rin,'b',time,youts,'--g');
hold off
%xlabel('time(s)');ylabel('rin,yout');
%figure(2);
%plot(time,u,'r'); xlabel('time(s)');ylabel('u');
%figure(3);
% subplot(311);
%plot(time,wkp,'r'); xlabel('time(s)');ylabel('wkp');
%subplot(312);
%plot(time,wki,'r'); xlabel('time(s)');ylabel('wki');
%subplot(313);
% plot(time,wkd,'r'); xlabel('time(s)');ylabel('wkd');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -