Manual PID controller design based on root locus using Sisotool.
Uses sisotool
to investigate the effect of adding or subtracting an amount deltaK
to the proportional, integral, or derivative (PID) gains of a controller. One of the PID gains, Kp
, Ki
, or Kd
, respectively, can be modified at a time. sisotool
plots the step response, frequency response, and root locus of the closed-loop system controlling the dynamical system specified by plant
. Can be used with either non- interactive plots (e.g. in a Jupyter Notebook), or interactive plots.
To use non-interactively, choose starting-point PID gains Kp0
, Ki0
, and Kd0
(you might want to start with all zeros to begin with), select which gain you would like to vary (e.g. gain
= ‘P’, ‘I’, or ‘D’), and choose a value of deltaK
(default 0.001) to specify by how much you would like to change that gain. Repeatedly run rootlocus_pid_designer
with different values of deltaK
until you are satisfied with the performance for that gain. Then, to tune a different gain, e.g. ‘I’, make sure to add your chosen deltaK
to the previous gain you you were tuning.
Example: to examine the effect of varying Kp
starting from an initial value of 10, use the arguments gain='P', Kp0=10
and try varying values of deltaK
. Suppose a deltaK
of 5 gives satisfactory performance. Then, to tune the derivative gain, add your selected deltaK
to Kp0
in the next call using the arguments gain='D', Kp0=15
, to see how adding different values of deltaK
to your derivative gain affects performance.
To use with interactive plots, you will need to enable interactive mode if you are in a Jupyter Notebook, e.g. using %matplotlib
. See Interactive Plots for more information. Click on a branch of the root locus plot to try different values of deltaK
. Each click updates plots and prints the corresponding deltaK
. It may be helpful to zoom in using the magnifying glass on the plot to get more locations to click. Just make sure to deactivate magnification mode when you are done by clicking the magnifying glass. Otherwise you will not be able to be able to choose a gain on the root locus plot. When you are done, %matplotlib inline
returns to inline, non-interactive plotting.
By default, all three PID terms are in the forward path C_f in the diagram shown below, that is,
C_f = Kp + Ki/s + Kd*s/(tau*s + 1).
------> C_ff ------ d | | | r | e V V u y ------->O---> C_f --->O--->O---> plant ---> ^- ^- | | | | | ----- C_b <-------| ---------------------------------
If plant
is a discrete-time system, then the proportional, integral, and derivative terms are given instead by Kp, Ki*dt/2*(z+1)/(z-1), and Kd/dt*(z-1)/z, respectively.
It is also possible to move the derivative term into the feedback path C_b
using derivative_in_feedback_path
= True. This may be desired to avoid that the plant is subject to an impulse function when the reference r
is a step input. C_b
is otherwise set to zero.
If plant
is a 2-input system, the disturbance d
is fed directly into its second input rather than being added to u
.
LTI
(TransferFunction
or StateSpace
system)
The dynamical system to be controlled.
Which gain to vary by deltaK
. Must be one of ‘P’, ‘I’, or ‘D’ (proportional, integral, or derivative).
The sign of deltaK gain perturbation.
The input used for the step response; must be ‘r’ (reference) or ‘d’ (disturbance) (see figure above).
Initial values for proportional, integral, and derivative gains, respectively.
Perturbation value for gain specified by the gain
keyword.
The time constant associated with the pole in the continuous-time derivative term. This is required to make the derivative transfer function proper.
LTI
system, optional
Feedforward controller. If LTI
, must have timebase that is compatible with plant.
Whether to place the derivative term in feedback transfer function C_b
instead of the forward transfer function C_f
.
Whether to create Sisotool interactive plot.
StateSpace
system
The closed-loop system using initial gains.
Notes
When running using iPython or Jupyter, use %matplotlib
to configure the session for interactive support.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4