www.gusucode.com > control 案例程序 matlab源码代码 > control/Convert1DOFPIDControllerTo2DOFExample.m

    %% Convert 1-DOF PID controller to 2-DOF
% Design a 1-DOF PID controller for a plant.
%%

% Copyright 2015 The MathWorks, Inc.

G = tf(1,[1 0.5 0.1]);
C1 = pidtune(G,'pidf',1.5)
%%
% Convert the controller to two degrees of freedom.
C2 = make2DOF(C1)
%%
% The new controller has the same PID gains and filter constant.  It also
% contains new terms involving the setpoint weights |b| and |c|. By
% default, |b| = |c| = 1.  Therefore, in a
% closed loop with the plant |G|, the 2-DOF controller |C2| yields the same
% response as |C1|.
T1 = feedback(G*C1,1);
CM = tf(C2);
T2 = CM(1)*feedback(G,-CM(2));
stepplot(T1,T2,'r--')
%%
% Convert |C1| to a 2-DOF controller with different |b| and |c| values.
C2_2 = make2DOF(C1,0.5,0.75)
%%
% The PID gains and filter constant are still unchanged, but the setpoint
% weights now change the closed-loop response.
CM_2 = tf(C2_2);
T2_2 = CM_2(1)*feedback(G,-CM_2(2));
stepplot(T1,T2_2,'r--')