www.gusucode.com > robust 案例源码程序 matlab代码 > robust/GainScheduledPIDControllerExample.m

    %% Gain-Scheduled PID Controller  
% This example shows how to create a gain-scheduled PID controller. The
% controller's proportional, integral, and derivative gains have linear,
% quadratic, and constant dependence on a scheduling variable, $\alpha$, as follows: 
%%
% 
% 
% 
% $$\begin{array}{l}
% {k_p}\left( \alpha  \right) = {k_p}_0 + {k_{p1}}\alpha \\
% {k_i}\left( \alpha  \right) = {k_i}_0 + {k_{i1}}\alpha  + {k_{i2}}{\alpha ^2}\\
% {k_p}\left( \alpha  \right) = {k_d}_0.
% \end{array}$$
% 
%%
%
% For tuning purposes, sample these gain formulas for a number of values of
% $\alpha$ that span the operating range of the scheduling variable. For
% example, sample the gain formulas for five values of $\alpha$ (five
% design points) in [-1,1].  To do so, first create a vector of $\alpha$ values.
% 

% Copyright 2015 The MathWorks, Inc.

alpha = -1:0.5:1;  

%% 
% The PID gains depend on $\alpha$ and $\alpha^{2}$. Evaluate these functions for the sampled values. 
F1 = alpha;
F2 = alpha.^2;  

%% 
% Create the tunable gain surfaces that represent the proportional, integral,
% and derivative gains over the grid of $\alpha$ values. Initialize all the constant
% coefficients to 1. 
Kp = gainsurf('Kp',1,F1);
Ki = gainsurf('Ki',1,F1,F2);
Kd = gainsurf('Kd',1); 

%%
% Each of |Kp|, |Ki|, and |Kd| is an array of generalized matrices. The
% array element |Kp(:,:,1)| (for example) corresponds to $k_{p}$($\alpha$) for
% $\alpha$ = -1. The element |Kp(:,:,2)| corresponds to $k_{p}$($\alpha$) for $\alpha$
% = -0.5, and so on. These values depend on tunable coefficients |Kp_0|,
% and |Kp_1|. Thus, each of |Kp|, |Ki|, and |Kd| represents a gain curve
% in $\alpha$ with the appropriate number of tunable coefficients.  

%% 
% Combine the tunable gains into a PID controller. Set the derivative filter
% time constant to a fixed value of 0.1. 
Tf = 0.1;
C = pid(Kp,Ki,Kd,Tf) 

%%
% You can use generalized matrices as arguments to model creation commands
% like |pid| and |tf| the same way you would use numeric arguments. The
% resulting controller is a generalized state-space (|genss|) model array
% that depends on the six coefficients of the gain curves. Each entry in
% the array is a PID controller evaluated at a particular value of $\alpha$.  

%% 
% Associate the $\alpha$ values with the corresponding entries of |C|. 
SG = struct('alpha',alpha);
C.SamplingGrid = SG;  

%% 
% Use model interconnection commands (such as |connect| and |feedback|)
% to combine |C| with an array of plant models sampled at the same values
% of $\alpha$. You can then use |systune| to tune the gain-scheduled controller
% to meet your design requirements.