looptune
Tune fixed-structure feedback loops
Syntax
[G,C,gam]
= looptune(G0,C0,wc)
[G,C,gam]
= looptune(G0,C0,wc,Req1,...,ReqN)
[G,C,gam]
= looptune(...,options)
[G,C,gam,info]
= looptune(...)
Description
[
tunes the feedback loopG
,C
,gam
]
= looptune(G0
,C0
,wc
)
to meet the following default requirements:
Bandwidth — Gain crossover for each loop falls in the frequency interval
wc
Performance — Integral action at frequencies below
wc
Robustness — Adequate stability margins and gain roll-off at frequencies above
wc
The tunable genss
model C0
specifies the controller structure, parameters, and initial values. The model
G0
specifies the plant. G0
can be a Numeric LTI model, or, for
co-tuning the plant and controller, a tunable genss
model. The sensor signals y
(measurements) and
actuator signals u
(controls) define the boundary between plant and
controller.
Note
For tuning Simulink® models with looptune
, use slTuner
(Simulink Control Design) to create an interface to
your Simulink model. You can then tune the control system with looptune
(Simulink Control Design) for
slTuner
(requires Simulink
Control Design™).
[
tunes the feedback loop to meet additional design requirements specified in one or more
tuning goal objects G
,C
,gam
]
= looptune(G0
,C0
,wc
,Req1,...,ReqN
)Req1,...,ReqN
. Omit wc
to
use the requirements specified in Req1,...,ReqN
instead of an
explicit target crossover frequency and the default performance and robustness
requirements.
[
specifies further options, including target gain margin, target phase margin, and
computational options for the tuning algorithm.G
,C
,gam
]
= looptune(...,options
)
[
returns a structure G
,C
,gam
,info
]
= looptune(...)info
with additional information about the
tuned result. Use info
with the loopview
command to visualize tuning constraints and validate the tuned
design.
Input Arguments
|
Numeric LTI
model or tunable The plant is the portion of your control system whose outputs are sensor
signals (measurements) and whose inputs are actuator signals (controls). Use
|
|
Generalized LTI model representing controller.
The controller is the portion of your control system that receives sensor
signals (measurements) as inputs and produces actuator signals (controls) as
outputs. Use Control
Design Blocks and Generalized LTI models to represent tunable
components of the controller. Use |
|
Vector specifying target crossover region
A scalar |
|
One or more |
|
Set of options for |
Output Arguments
|
Tuned plant. If If | ||||||
|
Tuned controller. | ||||||
|
Parameter indicating degree of success at meeting all tuning constraints.
A value of For best results, use the | ||||||
|
Data for validating tuning results, returned as a structure. To use the
data in
|
Examples
Tune the control system of the following illustration, to achieve crossover between 0.1 and 1 rad/min.
The 2-by-2 plant G
is represented by:
The fixed-structure controller, C
, includes three components:
the 2-by-2 decoupling matrix D
and two PI controllers
PI_L
and PI_V
. The signals
r
, y
, and e
are
vector-valued signals of dimension 2.
Build a numeric model that represents the plant and a tunable model that
represents the controller. Name all inputs and outputs as in the diagram, so that
looptune
knows how to interconnect the plant and controller
via the control and measurement signals.
s = tf('s'); G = 1/(75*s+1)*[87.8 -86.4; 108.2 -109.6]; G.InputName = {'qL','qV'}; G.OutputName = 'y'; 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); C0 = connect(PI_L,PI_V,D,sum1,{'r','y'},{'qL','qV'}); wc = [0.1,1]; [G,C,gam,info] = looptune(G,C0,wc);
C
is the tuned controller, in this case a
genss
model with the same block types as
C0
.
You can examine the tuned result using loopview
.
Algorithms
looptune
automatically converts target bandwidth, performance
requirements, and additional design requirements into weighting functions that express
the requirements as an H∞ optimization
problem. looptune
then uses systune
to optimize tunable parameters to minimize the
H∞ norm. For more information
about the optimization algorithms, see [1].
looptune
computes the
H∞ norm using the algorithm of
[2] and structure-preserving eigensolvers from the SLICOT library. For more information
about the SLICOT library, see https://github.com/SLICOT.
Alternatives
For tuning Simulink models with looptune
, see slTuner
(Simulink Control Design) and looptune
(Simulink Control Design) (requires Simulink
Control Design).
References
[1] P. Apkarian and D. Noll, "Nonsmooth H-infinity Synthesis." IEEE Transactions on Automatic Control, Vol. 51, Number 1, 2006, pp. 71–86.
[2] Bruinsma, N.A., and M. Steinbuch. "A Fast Algorithm to Compute the H∞ Norm of a Transfer Function Matrix." Systems & Control Letters, 14, no.4 (April 1990): 287–93.
Extended Capabilities
Version History
Introduced in R2016aSee Also
TuningGoal.Tracking
| slTuner
(Simulink Control Design) | systune
| looptune (for slTuner)
(Simulink Control Design) | TuningGoal.Gain
| TuningGoal.LoopShape
| hinfstruct
(Robust Control Toolbox) | looptuneOptions
| loopview
| diskmargin
(Robust Control Toolbox) | genss
| connect