?? chap5_4f.m
字號:
function [kx,BsJ]=pid_fm_gaf(kx,BsJ)
global rin yout timef F
a=50;b=400;
ts=0.001;
sys=tf(b,[1,a,0]);
dsys=c2d(sys,ts,'z');
[num,den]=tfdata(dsys,'v');
u_1=0;u_2=0;
y_1=0;y_2=0;
e_1=0;
B=0;
G=400;
for k=1:1:G
timef(k)=k*ts;
S=2;
if S==1
fre=5;
AA=0.5;
rin(k)=AA*sin(2*pi*fre*k*ts);
end
if S==2
rin(k)=1;
end
yout(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2;
error(k)=rin(k)-yout(k);
derror(k)=(error(k)-e_1)/ts;
u(k)=50*error(k)+0.50*derror(k);
speed(k)=(yout(k)-y_1)/ts;
if F==1 % Disturbance Signal: Coulomb Friction
Ff(k)=0.8*sign(speed(k));
end
if F==2 % Disturbance Signal: Coulomb & Viscous Friction
Ff(k)=sign(speed(k))*(0.30*abs(speed(k))+1.50);
end
%kx=[0,0]; %No GA Identification
%kx=[0.3,1.5]; %Idea Identification
u(k)=u(k)-Ff(k);
if F==1
Ffc(k)=kx*sign(speed(k)); %Friction Estimation
end
if F==2
Ffc(k)=sign(speed(k))*(kx(1)*abs(speed(k))+kx(2)); %Friction Estimation
end
u(k)=u(k)+Ffc(k);
if u(k)>110
u(k)=110;
end
if u(k)<-110
u(k)=-110;
end
u_2=u_1;u_1=u(k);
y_2=y_1;y_1=yout(k);
e_1=error(k);
end
for i=1:1:G
Ji(i)=0.999*abs(error(i))+0.01*u(i)^2*0.1;
B=B+Ji(i);
if error(i)<0 %Punishment
B=B+10*abs(error(i));
end
end
BsJ=B;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -