diff --git a/content/article/kothare94_unified_framew_study_anti_windup_desig.md b/content/article/kothare94_unified_framew_study_anti_windup_desig.md new file mode 100644 index 0000000..c9f0d77 --- /dev/null +++ b/content/article/kothare94_unified_framew_study_anti_windup_desig.md @@ -0,0 +1,22 @@ ++++ +title = "A unified framework for the study of anti-windup designs" +author = ["Dehaeze Thomas"] +draft = true ++++ + +Tags +: + + +Reference +: (Kothare et al. 1994) + +Author(s) +: Kothare, M. V., Campo, P. J., Morari, M., & Nett, C. N. + +Year +: 1994 + +
+
Kothare, Mayuresh V., Peter J. Campo, Manfred Morari, and Carl N. Nett. 1994. “A Unified Framework for the Study of Anti-Windup Designs.” Automatica 30 (12): 1869–83. doi:10.1016/0005-1098(94)90048-5.
+
diff --git a/content/zettels/anti_windup_control.md b/content/zettels/anti_windup_control.md index e921f1a..a79993f 100644 --- a/content/zettels/anti_windup_control.md +++ b/content/zettels/anti_windup_control.md @@ -9,6 +9,40 @@ subcategory = "Fundamentals" 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} diff --git a/content/zettels/bumpless_transfer.md b/content/zettels/bumpless_transfer.md index dd25ba1..2285fb1 100644 --- a/content/zettels/bumpless_transfer.md +++ b/content/zettels/bumpless_transfer.md @@ -7,7 +7,35 @@ subcategory = "Fundamentals" +++ 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} diff --git a/content/zettels/cia402.md b/content/zettels/cia402.md new file mode 100644 index 0000000..b2086c8 --- /dev/null +++ b/content/zettels/cia402.md @@ -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} + +
+
diff --git a/content/zettels/stick_slip_piezo_stage.md b/content/zettels/stick_slip_piezo_stage.md new file mode 100644 index 0000000..4758272 --- /dev/null +++ b/content/zettels/stick_slip_piezo_stage.md @@ -0,0 +1,24 @@ ++++ +title = "Stick-Slip Piezo Stage" +author = ["Dehaeze Thomas"] +draft = false +category = "Equipment" +subcategory = "Mechanical Platforms" ++++ + +Tags +: + + +## Xeryon {#xeryon} + + + + +## Smartact {#smartact} + + +## Bibliography {#bibliography} + +
+