www.gusucode.com > control 案例程序 matlab源码代码 > control/TuneMIMOControlSystemforSpecifiedBandwidthExample.m
%% Tune MIMO Control System for Specified Bandwidth % This example shows how to tune the following control system to achieve % a loop crossover frequency between 0.1 and 1 rad/s, using |looptune|. %% % % <<../looptune2a.png>> % %% % % The plant, |G|, is a two-input, two-output model (_y_ is a two-element % vector signal). For this example, the transfer function of |G| is given by: % % $$G\left( s \right) = \frac{1}{{75s + 1}}\left[ {\begin{array}{*{20}{c}}{87.8}&{ - 86.4}\\{108.2}&{ - 109.6}\end{array}} \right].$$ % % This sample plant is based on the distillation column described in more % detail in the example <docid:control_ug.btl4qin>. % % To tune this control system, you first create a numeric model of the plant. % Then you create tunable models of the controller elements and interconnect % them to build a controller model. Then you use |looptune| to tune the % free parameters of the controller model. Finally, examine the performance % of the tuned system to confirm that the tuned controller yields desirable % performance. %% % Create a model of the plant. s = tf('s'); G = 1/(75*s+1)*[87.8 -86.4; 108.2 -109.6]; G.InputName = {'qL','qV'}; G.OutputName = 'y'; %% % When you tune the control system, |looptune| uses the channel names |G.InputName| % and |G.OutputName| to interconnect the plant and controller. Therefore, % assign these channel names to match the illustration. When you set |G.OutputName % = 'y'|, the |G.OutputName| is automatically expanded to |{'y(1)';'y(2)'}|. % This expansion occurs because |G| is a two-output system. %% % Represent the components of the controller. D = tunableGain('Decoupler',eye(2)); D.InputName = 'e'; D.OutputName = {'pL','pV'}; PI_L = tunablePID('PI_L','pi'); PI_L.InputName = 'pL'; PI_L.OutputName = 'qL'; PI_V = tunablePID('PI_V','pi'); PI_V.InputName = 'pV'; PI_V.OutputName = 'qV'; sum1 = sumblk('e = r - y',2); %% % The control system includes several tunable control elements. |PI_L| and % |PI_V| are tunable PI controllers. These elements represented by |tunablePID| % models. The fixed control structure also includes a decoupling gain matrix % |D|, represented by a tunable |tunableGain| model. When the control % system is tuned, |D| ensures that each output of |G| tracks the corresponding % reference signal |r| with minimal crosstalk. %% % Assigning |InputName| and |OutputName| values to these control elements % allows you to interconnect them to create a tunable model of the entire % controller |C| as shown. % % <<../looptune2a.png>> % %% % When you tune the control system, |looptune| uses these channel names % to interconnect |C| and |G|. The controller |C| also includes the summing % junction |sum1|. This a two-channel summing junction, because |r| and % |y| are vector-valued signals of dimension 2. %% % Connect the controller components. C0 = connect(PI_L,PI_V,D,sum1,{'r','y'},{'qL','qV'}); %% % |C0| is a tunable |genss| model that represents the entire controller % structure. |C0| stores the tunable controller parameters and contains % the initial values of those parameters. %% % Tune the control system. % % The inputs to |looptune| are |G| and |C0|, the plant and initial controller % models that you created. The input |wc = [0.1,1]| sets the target range % for the loop bandwidth. This input specifies that the crossover frequency % of each loop in the tuned system fall between 0.1 and 1 rad/min. wc = [0.1,1]; [G,C,gam,Info] = looptune(G,C0,wc); %% % The displayed |Peak Gain = 0.949| indicates that |looptune| has found % parameter values that achieve the target loop bandwidth. |looptune| displays % the final peak gain value of the optimization run, which is also the output % |gam|. If |gam| is less than 1, all tuning requirements are satisfied. % A value greater than 1 indicates failure to meet some requirement. If % |gam| exceeds 1, you can increase the target bandwidth range or relax % another tuning requirement. %% % |looptune| also returns the tuned controller model |C|. This model is % the tuned version of |C0|. It contains the PI coefficients and the decoupling % matrix gain values that yield the optimized peak gain value. %% % Display the tuned controller parameters. showTunable(C) %% % Check the time-domain response for the control system with the tuned coefficients. % To produce a plot, construct a closed-loop model of the tuned control % system. Plot the step response from reference to output. T = connect(G,C,'r','y'); step(T) %% % The decoupling matrix in the controller permits each channel of the two-channel % output signal |y| to track the corresponding channel of the reference % signal |r|, with minimal crosstalk. From the plot, you can how well this % requirement is achieved when you tune the control system for bandwidth % alone. If the crosstalk still exceeds your design requirements, you can % use a |TuningGoal.Gain| requirement object to impose further restrictions % on tuning. %% % Examine the frequency-domain response of the tuned result as an alternative % method for validating the tuned controller. loopview(G,C,Info) %% % The first plot shows that the open-loop gain crossovers fall within the % specified interval |[0.1,1]|. This plot also includes the maximum and % tuned values of the sensitivity function $S = (I - GC)^{-1}$ and complementary % sensitivity $T = I - S$. The second and third plots show that the MIMO % stability margins of the tuned system (blue curve) do not exceed the upper % limit (yellow curve).