www.gusucode.com > control_featured 案例源码程序 matlab代码 > control_featured/cascadepiddemo.m
%% Designing Cascade Control System with PI Controllers % This example shows how to design a cascade control loop with two PI % controllers using the pidtune command. % Copyright 2009-2014 The MathWorks, Inc. %% Introduction to Cascade Control % Cascade control is mainly used to achieve fast rejection of disturbance % before it propagates to the other parts of the plant. The simplest % cascade control system involves two control loops (inner and outer) as % shown in the block diagram below. % % <<../cascadepiddemoscheme.png>> %% % Controller *C1* in the outer loop is the primary controller that % regulates the primary controlled variable *y1* by setting the set-point % of the inner loop. Controller *C2* in the inner loop is the secondary % controller that rejects disturbance *d2* locally before it propagates to % *P1*. For a cascade control system to function properly, the inner loop % must respond much faster than the outer loop. %% % In this example, you will design a single loop control system with a PI % controller and a cascade control system with two PI controllers. The % responses of the two control systems are compared for both reference % tracking and disturbance rejection. %% Plant % In this example, the inner loop plant P2 is % % $$ P2(s) = \frac{3}{s+2} $$ % % The outer loop plant P1 is % % $$ P1(s) = \frac{10}{(s+1)^3} $$ P2 = zpk([],-2,3); P1 = zpk([],[-1 -1 -1],10); %% Designing a Single Loop Control System with a PI Controller % Use *pidtune* command to design a PI controller in standard form for % the whole plant model P = P1 * P2. % % <<../cascadepiddemoscheme1.png>> % % The desired open loop bandwidth is 0.2 rad/s, which roughly corresponds % to the response time of 10 seconds. % The plant model is P = P1*P2 P = P1*P2; % Use a PID or PIDSTD object to define the desired controller structure C = pidstd(1,1); % Tune PI controller for target bandwidth is 0.2 rad/s C = pidtune(P,C,0.2); C %% Designing a Cascade Control System with Two PI Controllers % The best practice is to design the inner loop controller *C2* first and % then design the outer loop controller *C1* with the inner loop closed. In % this example, the inner loop bandwidth is selected as 2 rad/s, which is % ten times higher than the desired outer loop bandwidth. In order to have % an effective cascade control system, it is essential that the inner loop % responds much faster than the outer loop. %% % Tune inner-loop controller C2 with open-loop bandwidth at 2 rad/s. C2 = pidtune(P2,pidstd(1,1),2); C2 %% % Tune outer-loop controller C1 with the same bandwidth as the single % loop system. % Inner loop system when the control loop is closed first clsys = feedback(P2*C2,1); % Plant seen by the outer loop controller C1 is clsys*P1 C1 = pidtune(clsys*P1,pidstd(1,1),0.2); C1 %% Performance Comparison % First, plot the step reference tracking responses for both control systems. % single loop system for reference tracking sys1 = feedback(P*C,1); sys1.Name = 'Single Loop'; % cascade system for reference tracking sys2 = feedback(clsys*P1*C1,1); sys2.Name = 'Cascade'; % plot step response figure; step(sys1,'r',sys2,'b') legend('show','location','southeast') title('Reference Tracking') %% % Secondly, plot the step disturbance rejection responses of d2 for both % control systems. % single loop system for rejecting d2 sysd1 = feedback(P1,P2*C); sysd1.Name = 'Single Loop'; % cascade system for rejecting d2 sysd2 = P1/(1+P2*C2+P2*P1*C1*C2); sysd2.Name = 'Cascade'; % plot step response figure; step(sysd1,'r',sysd2,'b') legend('show') title('Disturbance Rejection') %% % From the two response plots you can conclude that the cascade control % system performs much better in rejecting disturbance d2 while the % set-point tracking performances are almost identical. %%