@@ -0,0 +1,22 @@
|
|||||||
|
+++
|
||||||
|
title = "A unified framework for the study of anti-windup designs"
|
||||||
|
author = ["Dehaeze Thomas"]
|
||||||
|
draft = true
|
||||||
|
+++
|
||||||
|
|
||||||
|
Tags
|
||||||
|
:
|
||||||
|
|
||||||
|
|
||||||
|
Reference
|
||||||
|
: (<a href="#citeproc_bib_item_1">Kothare et al. 1994</a>)
|
||||||
|
|
||||||
|
Author(s)
|
||||||
|
: Kothare, M. V., Campo, P. J., Morari, M., & Nett, C. N.
|
||||||
|
|
||||||
|
Year
|
||||||
|
: 1994
|
||||||
|
|
||||||
|
<style>.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}</style><div class="csl-bib-body">
|
||||||
|
<div class="csl-entry"><a id="citeproc_bib_item_1"></a>Kothare, Mayuresh V., Peter J. Campo, Manfred Morari, and Carl N. Nett. 1994. “A Unified Framework for the Study of Anti-Windup Designs.” <i>Automatica</i> 30 (12): 1869–83. doi:<a href="https://doi.org/10.1016/0005-1098(94)90048-5">10.1016/0005-1098(94)90048-5</a>.</div>
|
||||||
|
</div>
|
||||||
@@ -9,6 +9,40 @@ subcategory = "Fundamentals"
|
|||||||
Tags
|
Tags
|
||||||
:
|
:
|
||||||
|
|
||||||
|
Anti-windup control deals with the problem of **actuator saturation**.
|
||||||
|
|
||||||
|
When the control signal \\(u\\) requested by the controller exceeds the actuator limits, the actual actuator input is clipped and the plant no longer responds as the controller expects.
|
||||||
|
If the controller contains an integrator, it keeps integrating the error even though the plant input is saturated: the integral state "winds up" to a very large value.
|
||||||
|
When the error finally changes sign, this large integral state has to be unwound first, which leads to large overshoot, long settling time, and possibly instability.
|
||||||
|
|
||||||
|
This is mostly relevant for [Voice Coil Actuators]({{< relref "voice_coil_actuators.md" >}}), which have a limited current/force range and are usually controlled with high-gain integral action.
|
||||||
|
It is much less relevant for [Piezoelectric Actuators]({{< relref "piezoelectric_actuators.md" >}}).
|
||||||
|
|
||||||
|
In order to implement anti-windup, the integrator usually has to be **explicit** in the controller (i.e. a separate integral term whose state can be modified).
|
||||||
|
This is one of the reasons why the PID controller is so useful: the integral action is clearly separated from the other terms.
|
||||||
|
|
||||||
|
|
||||||
|
### Anti-windup strategies {#anti-windup-strategies}
|
||||||
|
|
||||||
|
|
||||||
|
#### Conditional integration (integrator clamping) {#conditional-integration--integrator-clamping}
|
||||||
|
|
||||||
|
The integrator is simply stopped (or reset) when the actuator is saturated.
|
||||||
|
For instance, the integration is frozen as long as \\(u \neq \text{sat}(u)\\), possibly only if the error would further increase the saturation (i.e. same sign of \\(u\\) and \\(e\\)).
|
||||||
|
|
||||||
|
|
||||||
|
#### Back-calculation {#back-calculation}
|
||||||
|
|
||||||
|
The difference between the saturated and the requested control signal, \\(e\_s = \text{sat}(u) - u\\), is fed back to the integrator input through a gain \\(1/T\_t\\):
|
||||||
|
|
||||||
|
\begin{equation}
|
||||||
|
\dot{x}\_i = K\_i e + \frac{1}{T\_t} \left( \text{sat}(u) - u \right)
|
||||||
|
\end{equation}
|
||||||
|
|
||||||
|
When there is no saturation, \\(e\_s = 0\\) and the controller behaves as usual.
|
||||||
|
When saturated, the integrator state is driven so that \\(u\\) tracks the saturation limit.
|
||||||
|
The tracking time constant \\(T\_t\\) sets how fast the integrator is unwound (a common choice is \\(T\_t = \sqrt{T\_i T\_d}\\) or \\(T\_t = T\_i\\)).
|
||||||
|
|
||||||
|
|
||||||
## Bibliography {#bibliography}
|
## Bibliography {#bibliography}
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,35 @@ subcategory = "Fundamentals"
|
|||||||
+++
|
+++
|
||||||
|
|
||||||
Tags
|
Tags
|
||||||
:
|
: [Anti-Windup Control]({{< relref "anti_windup_control.md" >}})
|
||||||
|
|
||||||
|
Bumpless transfer consists in switching between two controllers without creating a discontinuity (a "bump") in the control signal \\(u\\).
|
||||||
|
|
||||||
|
A bump occurs because the inactive controller has internal states (integrators, filters) that are not consistent with the signal currently applied to the plant.
|
||||||
|
At the switch, its output differs from the active one, and \\(u\\) jumps.
|
||||||
|
|
||||||
|
The principle is to keep the inactive controller "warm": its states must be consistent with the applied signal \\(u\_a\\) before the switch.
|
||||||
|
Anti-windup is a special case of this, with \\(u\_a = \text{sat}(u)\\).
|
||||||
|
|
||||||
|
An example of bumpless transfer between manual and PID control is provided by MathWorks: [Bumpless Control Transfer Between Manual and PID Control](https://www.mathworks.com/help/simulink/slref/bumpless-control-transfer-between-manual-and-pid-control.html).
|
||||||
|
|
||||||
|
|
||||||
|
## Controllers with an explicit integrator (PID) {#controllers-with-an-explicit-integrator--pid}
|
||||||
|
|
||||||
|
The integrator of the offline controller is driven to track the applied signal using back-calculation:
|
||||||
|
|
||||||
|
\begin{equation}
|
||||||
|
\dot{x}\_i = K\_i e + \frac{1}{T\_t} \left( u\_a - u \right)
|
||||||
|
\end{equation}
|
||||||
|
|
||||||
|
This requires the integrator to be explicit, which is one of the reasons why PID controllers are convenient.
|
||||||
|
If the PID is the last element of the chain, its output is \\(u\\) and the tracking is exact.
|
||||||
|
|
||||||
|
|
||||||
|
## Controllers made of biquads {#controllers-made-of-biquads}
|
||||||
|
|
||||||
|
Filters without integrator (notch, low-pass, lead, lag) have fast dynamics and do not need any tracking.
|
||||||
|
The offline chain is simply run in parallel, fed with the same error signal \\(e\\), and its states converge by themselves.
|
||||||
|
|
||||||
|
|
||||||
## Bibliography {#bibliography}
|
## Bibliography {#bibliography}
|
||||||
|
|||||||
@@ -0,0 +1,40 @@
|
|||||||
|
+++
|
||||||
|
title = "CiA402"
|
||||||
|
author = ["Dehaeze Thomas"]
|
||||||
|
draft = false
|
||||||
|
category = "Electronics"
|
||||||
|
+++
|
||||||
|
|
||||||
|
Tags
|
||||||
|
:
|
||||||
|
|
||||||
|
CiA 402 (IEC 61800-7-201) is the CAN in Automation standard drive profile for servo drives, stepper drives and frequency inverters.
|
||||||
|
It defines a common object dictionary and state machine, so that drives from different vendors behave the same way.
|
||||||
|
It was defined for CANopen and is also used over EtherCAT (CoE, CANopen over EtherCAT).
|
||||||
|
|
||||||
|
|
||||||
|
## Main elements {#main-elements}
|
||||||
|
|
||||||
|
- **Control word** (0x6040) and **status word** (0x6041): commands sent to the drive (enable, fault reset, ...) and its feedback.
|
||||||
|
- **State machine**: the drive has to be walked through fixed states before it moves: Switch on disabled, Ready to switch on, Switched on, Operation enabled, Fault.
|
||||||
|
- **Modes of operation** (0x6060 requested, 0x6061 actual):
|
||||||
|
- Cyclic Synchronous Position (CSP): a target position is sent every cycle (e.g. 1 ms). Used for real-time control from a master.
|
||||||
|
- Cyclic Synchronous Velocity (CSV) and Torque (CST): same with velocity or torque setpoints.
|
||||||
|
- Profile Position (PP) and Profile Velocity (PV): the drive generates its own trajectory to a target.
|
||||||
|
- Homing: the drive runs its own homing procedure.
|
||||||
|
- **Standard objects**: target position (0x607A), actual position (0x6064), velocity and acceleration limits, position factor / scaling.
|
||||||
|
|
||||||
|
|
||||||
|
## Use with a real-time target (e.g. Speedgoat) {#use-with-a-real-time-target--e-dot-g-dot-speedgoat}
|
||||||
|
|
||||||
|
- The master needs the ESI file and a PDO mapping with at least control word, target position, status word and actual position.
|
||||||
|
- A small state machine (e.g. Stateflow) brings the drive to _Operation enabled_ before setpoints are sent.
|
||||||
|
- In CSP, the drive internal loop still does the actual control, the master only provides setpoints.
|
||||||
|
- A generic CiA 402 block can be reused across compatible drives.
|
||||||
|
The ESI file, PDO mapping, units, optional objects and vendor quirks are still drive specific.
|
||||||
|
|
||||||
|
|
||||||
|
## Bibliography {#bibliography}
|
||||||
|
|
||||||
|
<style>.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}</style><div class="csl-bib-body">
|
||||||
|
</div>
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
+++
|
||||||
|
title = "Stick-Slip Piezo Stage"
|
||||||
|
author = ["Dehaeze Thomas"]
|
||||||
|
draft = false
|
||||||
|
category = "Equipment"
|
||||||
|
subcategory = "Mechanical Platforms"
|
||||||
|
+++
|
||||||
|
|
||||||
|
Tags
|
||||||
|
:
|
||||||
|
|
||||||
|
|
||||||
|
## Xeryon {#xeryon}
|
||||||
|
|
||||||
|
<https://xeryon.com/>
|
||||||
|
|
||||||
|
|
||||||
|
## Smartact {#smartact}
|
||||||
|
|
||||||
|
|
||||||
|
## Bibliography {#bibliography}
|
||||||
|
|
||||||
|
<style>.csl-entry{text-indent: -1.5em; margin-left: 1.5em;}</style><div class="csl-bib-body">
|
||||||
|
</div>
|
||||||
Reference in New Issue
Block a user