Documentation

# TuningGoal.ControllerPoles class

Package: TuningGoal

Constraint on controller dynamics for control system tuning

## Description

Use `TuningGoal.ControllerPoles` to constrain the dynamics of a tunable component in a control system model. Use this tuning goal for constraining the dynamics of tuned blocks identified in a `slTuner` interface to a Simulink® model. If you are tuning a `genss` model of a control system, use it to constrain tunable elements such as `tunableTF` or `tunableSS` . The `TuningGoal.ControllerPoles` requirement lets you control the minimum decay rate, minimum damping, and maximum natural frequency of the poles of the tunable element, ensuring that the controller is free of fast or resonant dynamics. The tuning goal can also ensure stability of the tuned value of the tunable element.

After you create a requirement object, you can further configure the tuning goal by setting Properties of the object.

## Construction

`Req = TuningGoal.ControllerPoles(blockID,mindecay,mindamping,maxfreq)` creates a tuning goal that constrains the dynamics of a tunable component of a control system. The minimum decay rate, minimum damping constant, and maximum natural frequency define a region of the complex plane in which poles of the component must lie. A nonnegative minimum decay ensures stability of the tuned poles. The tuning goal applies to all poles in the block except fixed integrators, such as the I term of a PID controller.

### Input Arguments

 `blockID` Tunable component to constrain, specified as a character vector. `blockID` designates one of the tuned blocks in the control system you are tuning. For tuning a Simulink model of a control system, `blockID` is a tuned block in the `slTuner` interface to the model. For example, suppose the `slTuner` interface has a tuned block called `Controller`. To constrain this block, use `'Controller'` for the `blockID` input argument. For tuning a `genss` model of a control system, `blockid` is one of the control design blocks of that model. For example, suppose the `genss` interface has a tunable block with name `C1`. To constrain this block, use `'C1'` for the `blockID` input argument. `mindecay` Minimum decay rate of poles of tunable component, specified as a scalar value in the frequency units of the control system model you are tuning. Specify `mindecay` ≥ 0 to ensure that the block is stable. If you specify a negative value, the tuned block can include unstable poles. When you tune the control system using this tuning goal, all poles of the tunable component are constrained to satisfy: `Re(s) < -mindecay`, for continuous-time systems.`log(|z|) < -mindecay*Ts`, for discrete-time systems with sample time `Ts`. Default: 0 `mindamping` Desired minimum damping ratio of poles of the tunable block, specified as a value between 0 and 1. Poles of the block that depend on the tunable parameters are constrained to satisfy `Re(s) < -mindamping*|s|`. In discrete time, the damping ratio is computed using `s=log(z)/Ts`. Default: 0 `maxfreq` Desired maximum natural frequency of poles of the tunable block, specified as a scalar value in the units of the control system model you are tuning. Poles of the block are constrained to satisfy `|s| < maxfreq` for continuous-time blocks, or `|log(z)| < maxfreq*Ts` for discrete-time blocks with sample time `Ts`. This constraint prevents fast dynamics in the tunable block. Default: `Inf`

## Properties

 `Block` Name of tunable component to constrain, specified as a character vector. The `blockID` input argument sets the value of `Block`. `MinDecay` Minimum decay rate of poles of tunable component, specified as a scalar value in the frequency units of the control system you are tuning. The initial value of this property is set by the `mindecay` input argument. `MinDecay` ≥ 0 to ensure that the block is stable. If you specify a negative value, the tuned block can include unstable poles. When you tune the control system using this tuning goal, all poles of the tunable component are constrained to satisfy `Re(s) < -MinDecay` for continuous-time systems, or `log(|z|) < -MinDecay*Ts` for discrete-time systems with sample time `Ts`. You can use dot notation to change the value of this property after you create the tuning goal. For example, suppose `Req` is a `TuningGoal.ControllerPoles` tuning goal. Change the minimum decay rate to 0.001: `Req.MinDecay = 0.001;` Default: 0 `MinDamping` Desired minimum damping ratio of poles of the tunable block, specified as a value between 0 and 1. The initial value of this property is set by the `mindamping` input argument. Poles of the block that depend on the tunable parameters are constrained to satisfy `Re(s) < -MinDamping*|s|`. In discrete time, the damping ratio is computed using `s=log(z)/Ts`. Default: 0 `MaxFrequency` Desired maximum natural frequency of poles of the tunable block, specified as a scalar value in the frequency units of the control system model you are tuning. The initial value of this property is set by the `maxfreq` input argument. Poles of the block are constrained to satisfy `|s| < maxfreq` for continuous-time blocks, or `|log(z)| < maxfreq*Ts` for discrete-time blocks with sample time `Ts`. This constraint prevents fast dynamics in the tunable block. You can use dot notation to change the value of this property after you create the tuning goal. For example, suppose `Req` is a `TuningGoal.ControllerPoles` tuning goal. Change the maximum frequency to 1000: `Req.MaxFrequency = 1000;` Default: `Inf` `Name` Name of the tuning goal, specified as a character vector. For example, if `Req` is a tuning goal: `Req.Name = 'LoopReq';` Default: `[]`

## Examples

collapse all

Create a tuning goal that constrains the dynamics of a tunable transfer function block in a tuned control system.

For this example, suppose that you are tuning a control system that includes a compensator block parametrized as a second-order transfer function. Create a tuning goal that restricts the poles of that transfer function to the region $Re\left(s\right)<-0.1$, $|s|<30$.

Create a tunable component that represents the compensator.

`C = tunableTF('Compensator',2,2);`

This command creates a Control Design Block named `'Compensator'` with two poles and two zeroes. You can construct a tunable control system model, `T`, by interconnecting this Control Design Block with other tunable and numeric LTI models. If you tune `T` using `systune`, the values of these poles and zeroes are unconstrained by default.

Create a tuning requirement to constrain the dynamics of the compensator block. Set the minimum decay rate to 0.1 rad/s, and set the maximum frequency to 30 rad/s.

`Req = TuningGoal.ControllerPoles('Compensator',0.1,0,30);`

The `mindamping` input argument is 0, which imposes no constraint on the damping constant of the poles of the block.

If you tune `T` using `systune` and the tuning requirement `Req`, the poles of the compensator block are constrained satisfy these values. After you tune `T`, you can use `viewGoal` to validate the tuned control system against the tuning goal.

## Tips

• `TuningGoal.ControllerPoles` restricts the dynamics of a single tunable component of the control system. To ensure the stability or restrict the overall dynamics of the tuned control system, use `TuningGoal.Poles`.

## Algorithms

When you use a `TuningGoal` object to specify a tuning goal, the software converts the tuning goal into a normalized scalar value f(x). x is the vector of free (tunable) parameters in the control system. The software then adjusts the parameter values to minimize f(x), or to drive f(x) below 1 if the tuning goal is a hard constraint.

For `TuningGoal.ControllerPoles`, f(x) reflects the relative satisfaction or violation of the goal. For example, if you attempt to constrain the pole of a tuned block to a minimum damping of ζ = 0.5, then:

• f(x) = 1 means the damping of the pole is ζ = 0.5 exactly.

• f(x) = 1.1 means the damping is ζ = 0.5/1.1 = 0.45, roughly 10% less than the target.

• f(x) = 0.9 means the damping is ζ = 0.5/0.9 = 0.55, roughly 10% better than the target.

## Compatibility Considerations

expand all

Behavior changed in R2016a

## See Also

### Topics

#### Learn how to automatically tune PID controller gains

Download code examples