www.gusucode.com > control 案例程序 matlab源码代码 > control/PIDControllerDesignAtTheCommandLineExample.m
%% PID Controller Design at the Command Line % This example shows how to design a PID controller for the plant given by: %% % % $$sys = \frac{1}{{{{\left( {s + 1} \right)}^3}}}.$$ % %% % As a first pass, create a model of the plant and design a simple PI % controller for it. % Copyright 2015 The MathWorks, Inc. sys = zpk([],[-1 -1 -1],1); [C_pi,info] = pidtune(sys,'PI') %% % |C_pi| is a |pid| controller object % that represents a PI controller. The fields of |info| show % that the tuning algorithm chooses an open-loop crossover frequency % of about 0.52 rad/s. %% % Examine the closed-loop step response (reference tracking) of the % controlled system. T_pi = feedback(C_pi*sys, 1); step(T_pi) %% % To improve the response time, you can set a higher target crossover % frequency than the result that |pidtune| automatically selects, 0.52. % Increase the crossover frequency to 1.0. [C_pi_fast,info] = pidtune(sys,'PI',1.0) %% % The new controller achieves the higher crossover frequency, but at the % cost of a reduced phase margin. %% % Compare the closed-loop step response with the two controllers. T_pi_fast = feedback(C_pi_fast*sys,1); step(T_pi,T_pi_fast) axis([0 30 0 1.4]) legend('PI','PI,fast') %% % This reduction in performance results because the PI controller does not % have enough degrees of freedom to achieve a good phase margin at a % crossover frequency of 1.0 rad/s. Adding a derivative action improves the % response. %% % Design a PIDF controller for |Gc| with the target % crossover frequency of 1.0 rad/s. [C_pidf_fast,info] = pidtune(sys,'PIDF',1.0) %% % The fields of info show that the derivative action in the controller % allows the tuning algorithm to design a more aggressive controller that % achieves the target crossover frequency with a good phase margin. %% % Compare the closed-loop step response and disturbance rejection for the % fast PI and PIDF controllers. T_pidf_fast = feedback(C_pidf_fast*sys,1); step(T_pi_fast, T_pidf_fast); axis([0 30 0 1.4]); legend('PI,fast','PIDF,fast'); %% % You can compare the input (load) disturbance rejection of the controlled % system with the fast PI and PIDF controllers. To do so, plot the response % of the closed-loop transfer function from the plant input to the plant % output. S_pi_fast = feedback(sys,C_pi_fast); S_pidf_fast = feedback(sys,C_pidf_fast); step(S_pi_fast,S_pidf_fast); axis([0 50 0 0.4]); legend('PI,fast','PIDF,fast'); %% % This plot shows that the PIDF controller also provides faster disturbance rejection.