⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pid2df.m

📁 内模控制器(IMC)工具箱。包括参数整定、PID控制器参数转换等
💻 M
📖 第 1 页 / 共 2 页
字号:
disp(' The PI controller is:          ');
disp('                                ');
disp('                    1           ');
disp(' PI(s) = K*( 1 +  ------ )      ');
disp('                  TauI*s        ');
disp('							');
disp([' K         (controller gain)          = ', num2str(K)]);                        
disp([' TauI      (integral time constant)   = ', num2str(TauI)]);
disp(' ');
end
pid_text=strvcat(pid_text, ' The PI controller is: ');
pid_text=strvcat(pid_text, '                            1   ');
pid_text=strvcat(pid_text, ' PI(s) = K*( 1 +  ------------- ) ');
pid_text=strvcat(pid_text, '                          TauI*s   ');
pid_text=strvcat(pid_text, ' where ');
pid_text0='';
pid_text0=[' K           (controller gain)               = ', num2str(K)];
pid_text=strvcat(pid_text, pid_text0 );
pid_text0='';
pid_text0=[' TauI      (integral time constant)   = ', num2str(TauI)];
pid_text=strvcat(pid_text,pid_text0);
pid_text=strvcat(pid_text, ' ********************************************************************************** ');
pid_text=strvcat(pid_text, '');


else %if TauI>0 & TauD>0


% realizable PID controler (TauI, TauD positive)
%----------------------------------------------------------

numPIDa1=keps*[(TauI*TauD+TauI*.05*TauD) (TauI+.05*TauD) 1];
denPIDa1=[.05*TauD 1 0];
temp1=conv(denPs,denPIDa1);
temp2=conv(numPs,numPIDa1);
PID_realden=polyadd(conv(temp1,denT),conv(temp2,numT));
PID_realden=conv(PID_realden,qdn);
temp1=roots(PID_realden);
if any(real(temp1) > 0)
disp(' ');
disp(' The realizable PID controller is unstable.');
disp(' ');
else
disp(' ');
disp(' The realizable PID controller is:		');
disp('                             			');
disp('                    1           TauD*s            ');
disp(' PIDA1(s) = K*(1 + ------ +  --------------- )    ');
disp('                   TauI*s    0.05*TauD*s+1        ');
disp('							');
disp([' K     (controller gain)          = ', num2str(K)]);                        
disp([' TauI  (integral time constant)   = ', num2str(TauI)]);
disp([' TauD  (derivative time constant) = ', num2str(TauD)]);
disp(' ');
end
pid_text=strvcat(pid_text, ' The realizable PID controller (red) is: ');
pid_text=strvcat(pid_text, '                               1            TauD*s  ');
pid_text=strvcat(pid_text, ' PIDA1(s) = K*(1 + --------- +  ------------------------- ) ');
pid_text=strvcat(pid_text, '                               TauI*s    0.05*TauD*s+1  ');
pid_text=strvcat(pid_text, ' where ');
pid_text0='';
pid_text0=[' K         (controller gain)              = ', num2str(K)];
pid_text=strvcat(pid_text, pid_text0 );
pid_text0='';
pid_text0=[' TauI    (integral time constant)    = ', num2str(TauI)];
pid_text=strvcat(pid_text,pid_text0);
pid_text0='';
pid_text0=[' TauD  (derivative time constant) = ', num2str(TauD)];
pid_text=strvcat(pid_text, pid_text0);
pid_text=strvcat(pid_text, ' ********************************************************************************** ');


% lag PID controller ( TauI negative, a2<b2)
%----------------------------------------------------------

numPIDL=keps*[a2 a1 1];
denPIDL=conv([1 0],[b2 b1 1]);
temp1=conv(denPs,denPIDL);
temp2=conv(numPs,numPIDL);
PID2lagden=polyadd(conv(temp1,denT),conv(temp2,numT));
PID2lagden=conv(PID2lagden,qdn);
temp1=roots(PID2lagden);
if any(real(temp1) > 0)
disp(' ');
disp(' The 2nd order lag PID controller is unstable.');
disp(' ');
else
disp(' ');
disp(' The 2nd order lag PID controller is:			');
disp('                             			');
disp('            k   (a2*s^2+a1*s+1)			');
disp(' PIDL(s) = --- -----------------          	');
disp('            s   (b2*s^2+b1*s+1)			');
disp('							');
disp([' where k                             = ', num2str(keps)]);                        
disp(['       a2                            = ', num2str(a2)]);
disp(['       a1                            = ', num2str(a1)]);
disp(['       b2                            = ', num2str(b2)]);
disp(['       b1                            = ', num2str(b1)]);
disp(' ');
end
pid_text=strvcat(pid_text, ' The lag PID controller (green) is: ');
pid_text=strvcat(pid_text, '                     k   a2*s^2+a1*s+1 ');
pid_text=strvcat(pid_text, ' PIDL(s) =  --- -------------------------------  ');
pid_text=strvcat(pid_text, '                     s   b2*s^2+b1*s+1) ');
pid_text=strvcat(pid_text, ' where ');
pid_text0='';
pid_text0=['k                               = ', num2str(keps)];
pid_text=strvcat(pid_text, pid_text0 );
pid_text0='';
pid_text0=['a2                           = ', num2str(a2)];
pid_text=strvcat(pid_text,pid_text0);
pid_text0='';
pid_text0=['a1                          = ', num2str(a1)];
pid_text=strvcat(pid_text, pid_text0);
pid_text0='';
pid_text0=['b2                           = ', num2str(b2)];
pid_text=strvcat(pid_text,pid_text0);
pid_text0='';
pid_text0=['b1                          = ', num2str(b1)];
pid_text=strvcat(pid_text, pid_text0);
pid_text=strvcat(pid_text, ' ********************************************************************************** ');


% Floating I controller (TauD negative)
%----------------------------------------------------------

Kp=REVnumPinvs(1)/REVdenPinvs(1);
if ord~=0
   KI=[1/Kp/(ord*E(2))];
else
   KI=[1/Kp];
end
denI=[1 0];
temp1=conv(denPs,denI);
temp2=conv(numPs,KI);
PID_FIden=polyadd(conv(temp1,denT),conv(temp2,numT));
PID_FIden=conv(PID_FIden,qdn);
temp1=roots(PID_FIden);
if any(real(temp1) > 0)
disp(' ');
disp(' The floating integral controller is unstable.');
disp(' ');
else
disp(' ');
disp(' The floating integral controller is:          ');
disp('                                ');
disp('            K           ');
disp(' PI(s) =  ----- )      ');
disp('            s        ');
disp('							');
disp([' K         (controller gain)          = ', num2str(KI)]);
disp(' ');
end
pid_text=strvcat(pid_text, ' The floating integral controller is: ');
pid_text=strvcat(pid_text, '             k ');
pid_text=strvcat(pid_text, ' PI(s) = ---  ');
pid_text=strvcat(pid_text, '             s ');
pid_text=strvcat(pid_text, ' where ');
pid_text0='';
pid_text0=[' k                              = ', num2str(KI)];
pid_text=strvcat(pid_text,pid_text0);
pid_text=strvcat(pid_text, ' ********************************************************************************** ');



if a2>b2 

% realizable PID controler (TauI negative, a2>b2)
%----------------------------------------------------------

numPIDa2=keps*[(a2-b2) a1 1];
denPIDa2=[b1 1 0];
temp1=conv(denPs,denPIDa2);
temp2=conv(numPs,numPIDa2);
PID_APXden=polyadd(conv(temp1,denT),conv(temp2,numT));
PID_APXden=conv(PID_APXden,qdn);
temp1=roots(PID_APXden);
if any(real(temp1) > 0)
disp(' ');
disp(' The 1st order lag PID controller is unstable.');
disp(' ');
else
disp(' ');
disp(' The 1st order lag PID controller is:		');
disp('                             			');
disp('          k   (a2-b2)*s^2+a1*s+1		');
disp(' PIDA2(s) = --- --------------------          	');
disp('          s       (b1*s+1)			');
disp('							');
disp([' where k                             = ', num2str(keps)]);                        
disp(['       a2                            = ', num2str(a2)]);
disp(['       a1                            = ', num2str(a1)]);
disp(['       b2                            = ', num2str(b2)]);
disp(['       b1                            = ', num2str(b1)]);
disp(' ');
end
pid_text=strvcat(pid_text, ' The approximation of PID controller is ');
pid_text=strvcat(pid_text, '                     k   (a2-b2)*s^2+a1*s+1 ');
pid_text=strvcat(pid_text, ' PIDA2(s) =  --- ---------------------------------  ');
pid_text=strvcat(pid_text, '                     s       (b1*s+1) ');
pid_text=strvcat(pid_text,' where ');
pid_text0='';
pid_text0=['k                               = ', num2str(keps)];
pid_text=strvcat(pid_text, pid_text0 );
pid_text0='';
pid_text0=['a2                           = ', num2str(a2)];
pid_text=strvcat(pid_text,pid_text0);
pid_text0='';
pid_text0=['a1                          = ', num2str(a1)];
pid_text=strvcat(pid_text, pid_text0);
pid_text0='';
pid_text0=['b2                           = ', num2str(b2)];
pid_text=strvcat(pid_text,pid_text0);
pid_text0='';
pid_text0=['b1                          = ', num2str(b1)];
pid_text=strvcat(pid_text, pid_text0);
pid_text=strvcat(pid_text, ' ********************************************************************************** ');


end

% PI/lag controler (TauD negative)
%----------------------------------------------------------

numPIL=K*[1 TauI+abs(TauD)];
denPIL=[TauI*abs(TauD) TauI 0];
temp1=conv(denPs,denPIL);
temp2=conv(numPs,numPIL);
PI_lagden=polyadd(conv(temp1,denT),conv(temp2,numT));
PI_lagden=conv(PI_lagden,qdn);
temp1=roots(PI_lagden);
if any(real(temp1) > 0)
disp(' ');
disp(' The PI*lag controller is unstable.');
disp(' ');
else
disp(' ');
disp(' The PI*lag controller is:        		');
disp('                             			');
disp('              K       1+(TauI+abs(TauD))*s        ');
disp(' PIL(s) =   ------ * ----------------------       ');
disp('            TauI*s       abs(TauD)*s+1            ');
disp('							');
disp([' K         (controller gain)          = ', num2str(K)]);                        
disp([' TauI      (integral time constant)   = ', num2str(TauI)]);
disp([' abs(TauD) (derivative time constant) = ', num2str(abs(TauD))]);
disp(' ');
end
pid_text=strvcat(pid_text, ' The PI*lag controller is: ');
pid_text=strvcat(pid_text, '                   K         1+(TauI+abs(TauD))*s ');
pid_text=strvcat(pid_text, 'PIL(s) =   ---------- * ------------------------------------- ');
pid_text=strvcat(pid_text, '                TauI*s       abs(TauD)*s+1  ');
pid_text=strvcat(pid_text, ' where ');
pid_text0='';
pid_text0=[' K               (controller gain)                 = ', num2str(K)];
pid_text=strvcat(pid_text, pid_text0 );
pid_text0='';
pid_text0=[' TauI          (integral time constant)     = ', num2str(TauI)];
pid_text=strvcat(pid_text,pid_text0);
pid_text0='';
pid_text0=[' abs(TauD) (derivative time constant) = ', num2str(abs(TauD))];
pid_text=strvcat(pid_text, pid_text0);
pid_text=strvcat(pid_text, ' ********************************************************************************** ');
pid_text=strvcat(pid_text, '');


% PI controler (TauD negative)
%----------------------------------------------------------

numPI=K*[TauI 1];
denPI=[TauI 0];
temp1=conv(denPs,denPI);
temp2=conv(numPs,numPI);
PI_deng=polyadd(conv(temp1,denT),conv(temp2,numT));
PI_deng=conv(PI_deng,qdn);
temp1=roots(PI_deng);
if any(real(temp1) > 0)
disp(' ');
disp(' The PI controller is unstable.');
disp(' ');
else
disp(' ');
disp(' The PI controller is:          ');
disp('                                ');
disp('                    1           ');
disp(' PI(s) = K*( 1 +  ------ )      ');
disp('                  TauI*s        ');
disp('							');
disp([' K         (controller gain)          = ', num2str(K)]);                        
disp([' TauI      (integral time constant)   = ', num2str(TauI)]);
disp(' ');
end
pid_text=strvcat(pid_text, ' The PI controller is: ');
pid_text=strvcat(pid_text, '                            1   ');
pid_text=strvcat(pid_text, ' PI(s) = K*( 1 +  ------------- ) ');
pid_text=strvcat(pid_text, '                          TauI*s   ');
pid_text=strvcat(pid_text, ' where ');
pid_text0='';
pid_text0=[' K           (controller gain)               = ', num2str(K)];
pid_text=strvcat(pid_text, pid_text0 );
pid_text0='';
pid_text0=[' TauI      (integral time constant)   = ', num2str(TauI)];
pid_text=strvcat(pid_text,pid_text0);
pid_text=strvcat(pid_text, ' ********************************************************************************** ');
pid_text=strvcat(pid_text, '');


end


% save pid_cont pid_text

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -