ControlSystems.jl
ControlSystems.jl copied to clipboard
A Control Systems Toolbox for Julia
ControlSystems.jl
A control systems design toolbox for Julia.
Installation
To install, in the Julia REPL:
using Pkg; Pkg.add("ControlSystems")
News
2022-07 v1.0
- Breaking: Frequency-responses have changed data layout to
ny×nu×nωfrom the previousnω×ny×nu. This is for performance reasons and to be consistent with time responses. This affects downstream functionsbodeandnyquistas well. - Breaking:
baltruncandbalrealnow return the diagonal of the Gramian as the second argument rather than the full matrix. - Breaking: The
pidconstructor no longer takes parameters as keyword arguments.pidhas also gotten some new features, the new signature ispid(P, I, D=0; form = :standard, Ts=nothing, Tf=nothing, state_space=false). This change affects downstream functions likeplacePI, loopshapingPI, pidplots. - Breaking: The semantics of broadcasted multiplication between two systems was previously inconsistent between
StateSpaceandTransferFunction. The new behavior is documented under Multiplying systems in the documentation.
Documentation
All functions have docstrings, which can be viewed from the REPL, using for example ?tf .
A documentation website is available at http://juliacontrol.github.io/ControlSystems.jl/latest/ and an introductory video is available here.
Some of the available commands are:
Constructing systems
ss, tf, zpk, delay
Analysis
poles, tzeros, norm, hinfnorm, linfnorm, ctrb, obsv, gangoffour, margin, markovparam, damp, dampreport, zpkdata, dcgain, covar, gram, sigma, sisomargin
Synthesis
are, lyap, lqr, place, leadlink, laglink, leadlinkat, rstd, rstc, dab, balreal, baltrunc
PID design
pid, stabregionPID, loopshapingPI, pidplots, placePI
Time and Frequency response
step, impulse, lsim, freqresp, evalfr, bode, nyquist
Plotting
bodeplot, nyquistplot, sigmaplot, plot(lsim(...)), plot(step(...)), plot(impulse(...)), marginplot, gangoffourplot, pzmap, nicholsplot, pidplots, rlocus, leadlinkcurve
Other
minreal, sminreal, c2d
Usage
This toolbox works similar to that of other major computer-aided control systems design (CACSD) toolboxes. Systems can be created in either a transfer function or a state space representation. These systems can then be combined into larger architectures, simulated in both time and frequency domain, and analyzed for stability/performance properties.
Example
Here we create a simple position controller for an electric motor with an inertial load.
using ControlSystems
# Motor parameters
J = 2.0
b = 0.04
K = 1.0
R = 0.08
L = 1e-4
# Create the model transfer function
s = tf("s")
P = K/(s*((J*s + b)*(L*s + R) + K^2))
# This generates the system
# TransferFunction:
# 1.0
# ---------------------------------
# 0.0002s^3 + 0.160004s^2 + 1.0032s
#
#Continuous-time transfer function model
# Create an array of closed loop systems for different values of Kp
CLs = TransferFunction[kp*P/(1 + kp*P) for kp = [1, 5, 15]];
# Plot the step response of the controllers
# Any keyword arguments supported in Plots.jl can be supplied
using Plots
plot(step.(CLs, 5), label=["Kp = 1" "Kp = 5" "Kp = 15"])

Additional examples
See the examples folder and ControlExamples.jl and several examples in the documentation.