📄 pid_ta_tune.m
字号:
function [Kp,Ti,Td,key,lb]=pid_ta_tune(lambda,G,key1,key2,vars)
key=0; Kp=[]; Ti=[]; Td=[]; lb=[];
K=vars(1); L=vars(2); T=vars(3); id=vars(4);
switch key1
case 1
switch key2
case 4
[Gm,Pm,Wcg,Wcp]=margin(G);
Ku=1/abs(Gm);
Tu=2*3.1416/Wcg;
if L/T<0.5
b=0.8;
else
b=0.5;
end
[m,p,w]=bode(G);
i=find(p<-lambda);
i(1);
w=w(i(1));
Ti=1/(b*w*tan(-atan(b)*T*w-b*L*w-lambda));
Kp=b*Ti*w*(1+(b*T*w)^2)^0.5/(Gm*(1+(b*Ti*w)^2)^0.5);
key=1;
end
case 2
switch key2
case 6
[Gm,Pm,Wcg,Wcp]=margin(G);
Ku=1/abs(Gm);
Tu=2*3.1416/Wcg;
switch id
case 1
Kp=Ku*1.414/4;
Td=Tu*(1+(4/lambda+1)^0.5)*0.25/3.1416;
Ti=lambda*Td;
key=1;
case 2
Gf=tf(K,[T,1],'iodelay',L);
[m,p,w]=bode(Gf);
m=m(:); p=p(:);
[mm,i]=sort(abs(p+lambda));
w=w(i(1));
[Gm1,Pm1,Wcg1,Wcp1]=margin(Gf);
Kf=1/abs(Gm1);
r=0.1+0.9*Ku/Kf;
Kp=Ku/2;
Ti=r*Kf*(Wcg^2-w^2)/(w*Wcg^2*(Ku^2-r^2*Kf^2)^0.5);
Td=1/(w^2*Ti);
key=1;
end
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -