From 41ac8289dfe07446107fd4f2aeb4f84ba86e7680 Mon Sep 17 00:00:00 2001 From: Nathan Petersen Date: Mon, 5 Jun 2023 17:00:00 -0500 Subject: [PATCH 01/48] Add initial template of new docs control content per #77 --- .../current-control/continuous-time/cvcr/index.md | 1 + .../current-control/continuous-time/index.md | 12 ++++++++++++ .../current-control/continuous-time/sfpi/index.md | 3 +++ .../continuous-time/single-phase/index.md | 3 +++ .../continuous-time/three-phase/index.md | 3 +++ .../current-control/discrete-time/c2d/index.md | 3 +++ .../discrete-time/direct-digital-cvcr/index.md | 3 +++ .../current-control/discrete-time/index.md | 8 ++++++++ source/applications/current-control/index.md | 11 +++++++++++ .../load-modeling/dq-machine/index.md | 3 +++ .../current-control/load-modeling/index.md | 9 +++++++++ .../load-modeling/mp-winding/index.md | 3 +++ .../current-control/load-modeling/rl-load/index.md | 1 + source/applications/maglev-control/index.md | 3 +++ source/applications/speed-control/index.md | 3 +++ .../control-with-amdc/current-sensor-cal/index.md | 4 ++++ .../control-with-amdc/encoder-fb/index.md | 13 +++++++++++++ source/getting-started/control-with-amdc/index.md | 14 ++++++++++++++ .../integrator-anti-windup/index.md | 9 +++++++++ .../control-with-amdc/inv-pwm-dt-comp/index.md | 6 ++++++ .../control-with-amdc/simulink-code-gen/index.md | 3 +++ source/index.rst | 9 +++++++++ 22 files changed, 127 insertions(+) create mode 100644 source/applications/current-control/continuous-time/cvcr/index.md create mode 100644 source/applications/current-control/continuous-time/index.md create mode 100644 source/applications/current-control/continuous-time/sfpi/index.md create mode 100644 source/applications/current-control/continuous-time/single-phase/index.md create mode 100644 source/applications/current-control/continuous-time/three-phase/index.md create mode 100644 source/applications/current-control/discrete-time/c2d/index.md create mode 100644 source/applications/current-control/discrete-time/direct-digital-cvcr/index.md create mode 100644 source/applications/current-control/discrete-time/index.md create mode 100644 source/applications/current-control/index.md create mode 100644 source/applications/current-control/load-modeling/dq-machine/index.md create mode 100644 source/applications/current-control/load-modeling/index.md create mode 100644 source/applications/current-control/load-modeling/mp-winding/index.md create mode 100644 source/applications/current-control/load-modeling/rl-load/index.md create mode 100644 source/applications/maglev-control/index.md create mode 100644 source/applications/speed-control/index.md create mode 100644 source/getting-started/control-with-amdc/current-sensor-cal/index.md create mode 100644 source/getting-started/control-with-amdc/encoder-fb/index.md create mode 100644 source/getting-started/control-with-amdc/index.md create mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/index.md create mode 100644 source/getting-started/control-with-amdc/inv-pwm-dt-comp/index.md create mode 100644 source/getting-started/control-with-amdc/simulink-code-gen/index.md diff --git a/source/applications/current-control/continuous-time/cvcr/index.md b/source/applications/current-control/continuous-time/cvcr/index.md new file mode 100644 index 00000000..86a85b8d --- /dev/null +++ b/source/applications/current-control/continuous-time/cvcr/index.md @@ -0,0 +1 @@ +# Complex Vector Current Regulator (CVCR) \ No newline at end of file diff --git a/source/applications/current-control/continuous-time/index.md b/source/applications/current-control/continuous-time/index.md new file mode 100644 index 00000000..e8e3cc94 --- /dev/null +++ b/source/applications/current-control/continuous-time/index.md @@ -0,0 +1,12 @@ +# Continuous-Time Control + +Foo bar + +```{toctree} +:hidden: + +Single-Phase +Three-Phase +sfpi/index +cvcr/index +``` \ No newline at end of file diff --git a/source/applications/current-control/continuous-time/sfpi/index.md b/source/applications/current-control/continuous-time/sfpi/index.md new file mode 100644 index 00000000..819571e8 --- /dev/null +++ b/source/applications/current-control/continuous-time/sfpi/index.md @@ -0,0 +1,3 @@ +# Synchronous Frame PI (SFPI) Current Regulation + +Foo bar \ No newline at end of file diff --git a/source/applications/current-control/continuous-time/single-phase/index.md b/source/applications/current-control/continuous-time/single-phase/index.md new file mode 100644 index 00000000..0e095f17 --- /dev/null +++ b/source/applications/current-control/continuous-time/single-phase/index.md @@ -0,0 +1,3 @@ +# Single-Phase Current Regulation + +Foo bar \ No newline at end of file diff --git a/source/applications/current-control/continuous-time/three-phase/index.md b/source/applications/current-control/continuous-time/three-phase/index.md new file mode 100644 index 00000000..c4447fac --- /dev/null +++ b/source/applications/current-control/continuous-time/three-phase/index.md @@ -0,0 +1,3 @@ +# Three-Phase Current Regulation + +Foo bar \ No newline at end of file diff --git a/source/applications/current-control/discrete-time/c2d/index.md b/source/applications/current-control/discrete-time/c2d/index.md new file mode 100644 index 00000000..be440135 --- /dev/null +++ b/source/applications/current-control/discrete-time/c2d/index.md @@ -0,0 +1,3 @@ +# Continuous-to-Discrete Approximations + +Foo bar \ No newline at end of file diff --git a/source/applications/current-control/discrete-time/direct-digital-cvcr/index.md b/source/applications/current-control/discrete-time/direct-digital-cvcr/index.md new file mode 100644 index 00000000..b934e87e --- /dev/null +++ b/source/applications/current-control/discrete-time/direct-digital-cvcr/index.md @@ -0,0 +1,3 @@ +# Direct Digital CVCR + +Foo bar \ No newline at end of file diff --git a/source/applications/current-control/discrete-time/index.md b/source/applications/current-control/discrete-time/index.md new file mode 100644 index 00000000..111d7f0c --- /dev/null +++ b/source/applications/current-control/discrete-time/index.md @@ -0,0 +1,8 @@ +# Discrete-Time Control + +```{toctree} +:hidden: + +c2d/index +direct-digital-cvcr/index +``` \ No newline at end of file diff --git a/source/applications/current-control/index.md b/source/applications/current-control/index.md new file mode 100644 index 00000000..23251a1c --- /dev/null +++ b/source/applications/current-control/index.md @@ -0,0 +1,11 @@ +# Current Control + +Foo bar + +```{toctree} +:hidden: + +load-modeling/index +continuous-time/index +discrete-time/index +``` \ No newline at end of file diff --git a/source/applications/current-control/load-modeling/dq-machine/index.md b/source/applications/current-control/load-modeling/dq-machine/index.md new file mode 100644 index 00000000..8c7c14a9 --- /dev/null +++ b/source/applications/current-control/load-modeling/dq-machine/index.md @@ -0,0 +1,3 @@ +# DQ Machine Model + +Foo bar diff --git a/source/applications/current-control/load-modeling/index.md b/source/applications/current-control/load-modeling/index.md new file mode 100644 index 00000000..441b005b --- /dev/null +++ b/source/applications/current-control/load-modeling/index.md @@ -0,0 +1,9 @@ +# Load Modeling + +```{toctree} +:hidden: + +rl-load/index +dq-machine/index +mp-winding/index +``` \ No newline at end of file diff --git a/source/applications/current-control/load-modeling/mp-winding/index.md b/source/applications/current-control/load-modeling/mp-winding/index.md new file mode 100644 index 00000000..8e31b609 --- /dev/null +++ b/source/applications/current-control/load-modeling/mp-winding/index.md @@ -0,0 +1,3 @@ +# Multi-Phase Winding + +Introduce generalized Clarke transform and how to apply it to $m$ phase windings, decoupled subspaces, etc. \ No newline at end of file diff --git a/source/applications/current-control/load-modeling/rl-load/index.md b/source/applications/current-control/load-modeling/rl-load/index.md new file mode 100644 index 00000000..4ec7bcbd --- /dev/null +++ b/source/applications/current-control/load-modeling/rl-load/index.md @@ -0,0 +1 @@ +# RL Load Model \ No newline at end of file diff --git a/source/applications/maglev-control/index.md b/source/applications/maglev-control/index.md new file mode 100644 index 00000000..f4adc1b0 --- /dev/null +++ b/source/applications/maglev-control/index.md @@ -0,0 +1,3 @@ +# Maglev Displacement Control + +Basics of levitation systems, mechanical system stability via PID control. \ No newline at end of file diff --git a/source/applications/speed-control/index.md b/source/applications/speed-control/index.md new file mode 100644 index 00000000..7f684070 --- /dev/null +++ b/source/applications/speed-control/index.md @@ -0,0 +1,3 @@ +# Speed Control + +How to get a motor to spin at a desired speed using FOC? \ No newline at end of file diff --git a/source/getting-started/control-with-amdc/current-sensor-cal/index.md b/source/getting-started/control-with-amdc/current-sensor-cal/index.md new file mode 100644 index 00000000..2bfe373d --- /dev/null +++ b/source/getting-started/control-with-amdc/current-sensor-cal/index.md @@ -0,0 +1,4 @@ +# Current Sensor Calibration + +How to calibrate current sensor feedback + diff --git a/source/getting-started/control-with-amdc/encoder-fb/index.md b/source/getting-started/control-with-amdc/encoder-fb/index.md new file mode 100644 index 00000000..842e3c27 --- /dev/null +++ b/source/getting-started/control-with-amdc/encoder-fb/index.md @@ -0,0 +1,13 @@ +# Encoder Feedback + +## Calibration + +- Converting from raw counts to "theta" +- Direction: +/- depending on phase connections +- Sync machines: dq offset + +## Computing Speed from Position + +- LPF +- State Filter +- Observer \ No newline at end of file diff --git a/source/getting-started/control-with-amdc/index.md b/source/getting-started/control-with-amdc/index.md new file mode 100644 index 00000000..284fb6d8 --- /dev/null +++ b/source/getting-started/control-with-amdc/index.md @@ -0,0 +1,14 @@ +# Control with AMDC + +Foo bar + + +```{toctree} +:hidden: + +current-sensor-cal/index +inv-pwm-dt-comp/index +encoder-fb/index +integrator-anti-windup/index +simulink-code-gen/index +``` \ No newline at end of file diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md new file mode 100644 index 00000000..f35afa77 --- /dev/null +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md @@ -0,0 +1,9 @@ +# Integrator Anti-Windup + +- How to think about performance of anti-windup +- Different methods + - clamping + - back tracking +- Implementation (continuous/discrete-time) + - Simulink + - Handwritten C code \ No newline at end of file diff --git a/source/getting-started/control-with-amdc/inv-pwm-dt-comp/index.md b/source/getting-started/control-with-amdc/inv-pwm-dt-comp/index.md new file mode 100644 index 00000000..32787da4 --- /dev/null +++ b/source/getting-started/control-with-amdc/inv-pwm-dt-comp/index.md @@ -0,0 +1,6 @@ +# Inverter PWM Dead-Time Compensation + +- Sources of non-linearity + - Dead-time +- How to do +- Example results \ No newline at end of file diff --git a/source/getting-started/control-with-amdc/simulink-code-gen/index.md b/source/getting-started/control-with-amdc/simulink-code-gen/index.md new file mode 100644 index 00000000..5500ece9 --- /dev/null +++ b/source/getting-started/control-with-amdc/simulink-code-gen/index.md @@ -0,0 +1,3 @@ +# Simulink Control Code Generation + +This should basically be a port of the AMDC-Examples autogen docs, examples, etc \ No newline at end of file diff --git a/source/index.rst b/source/index.rst index d203ae6c..f16c1a45 100644 --- a/source/index.rst +++ b/source/index.rst @@ -21,6 +21,15 @@ AMDC Platform Documentation getting-started/onboarding getting-started/tutorials/index getting-started/user-guide/index + getting-started/control-with-amdc/index + +.. toctree:: + :hidden: + :caption: Applications + + applications/current-control/index + applications/speed-control/index + applications/maglev-control/index .. toctree:: :hidden: From 73a996fcbf5efbf0a3ff39f1a6e1959184ba8113 Mon Sep 17 00:00:00 2001 From: Takahiro Noguchi Date: Sat, 12 Aug 2023 09:27:18 -0500 Subject: [PATCH 02/48] Add images --- .../images/anti-windup-back-tracking-con.svg | 1410 ++++ .../images/anti-windup-back-tracking-dis.svg | 2441 +++++++ .../images/anti-windup-clamping_con.svg | 3994 +++++++++++ .../images/anti-windup-clamping_dis.svg | 6055 +++++++++++++++++ .../images/compareSat1.svg | 1238 ++++ .../images/compareSat2.svg | 692 ++ .../images/control-diagram-overview.svg | 1370 ++++ .../images/control-diagram-sat.svg | 668 ++ .../images/control-diagram.svg | 585 ++ .../integrator-anti-windup/images/result.svg | 545 ++ .../integrator-anti-windup/index.md | 49 +- 11 files changed, 19045 insertions(+), 2 deletions(-) create mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-back-tracking-con.svg create mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-back-tracking-dis.svg create mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-clamping_con.svg create mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-clamping_dis.svg create mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/images/compareSat1.svg create mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/images/compareSat2.svg create mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/images/control-diagram-overview.svg create mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/images/control-diagram-sat.svg create mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/images/control-diagram.svg create mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/images/result.svg diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-back-tracking-con.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-back-tracking-con.svg new file mode 100644 index 00000000..fcca8faf --- /dev/null +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-back-tracking-con.svg @@ -0,0 +1,1410 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xmlpreSatError + + + + + + + + + + + +postSatTRI_out + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-back-tracking-dis.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-back-tracking-dis.svg new file mode 100644 index 00000000..32d9a09d --- /dev/null +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-back-tracking-dis.svg @@ -0,0 +1,2441 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xmlpreSatError + + + + + + + + + + + +postSatTRI_out + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-clamping_con.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-clamping_con.svg new file mode 100644 index 00000000..42d27c36 --- /dev/null +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-clamping_con.svg @@ -0,0 +1,3994 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + And Gate + + + + image/svg+xmlTRI_out0preSatSignSignErrorpostSatNotEqualEqualAND > 0 + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-clamping_dis.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-clamping_dis.svg new file mode 100644 index 00000000..0c367285 --- /dev/null +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-clamping_dis.svg @@ -0,0 +1,6055 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + And Gate + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xmlTRI_out0preSatSignSignErrorpostSatNotEqualEqualAND > 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/compareSat1.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/compareSat1.svg new file mode 100644 index 00000000..9de828f8 --- /dev/null +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/compareSat1.svg @@ -0,0 +1,1238 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/compareSat2.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/compareSat2.svg new file mode 100644 index 00000000..aded0c10 --- /dev/null +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/compareSat2.svg @@ -0,0 +1,692 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/control-diagram-overview.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/control-diagram-overview.svg new file mode 100644 index 00000000..76aac421 --- /dev/null +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/control-diagram-overview.svg @@ -0,0 +1,1370 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xmlReferenceErrorOutputSaturationI controllerwith Anti-winduppreSatI_outpostSat + + + + + + + + + + + + diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/control-diagram-sat.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/control-diagram-sat.svg new file mode 100644 index 00000000..f6e92189 --- /dev/null +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/control-diagram-sat.svg @@ -0,0 +1,668 @@ + + + +image/svg+xmlControllerReferenceErrorOutputSaturationPlant diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/control-diagram.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/control-diagram.svg new file mode 100644 index 00000000..82ab15d3 --- /dev/null +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/control-diagram.svg @@ -0,0 +1,585 @@ + + + +image/svg+xmlControllerReferenceErrorOutputPlant diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/result.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/result.svg new file mode 100644 index 00000000..95b1cfd5 --- /dev/null +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/result.svg @@ -0,0 +1,545 @@ + + + diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md index f35afa77..6840f8ec 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md @@ -1,9 +1,54 @@ # Integrator Anti-Windup -- How to think about performance of anti-windup +In conventional + +----------------------- +How to think about performance of anti-windup? +----------------------- + - Different methods - clamping - back tracking - Implementation (continuous/discrete-time) - Simulink - - Handwritten C code \ No newline at end of file + - Handwritten C code + +```{image} images/control-diagram.svg + :align: center +``` + +```{image} images/control-diagram-sat.svg + :align: center +``` + +```{image} images/compareSat1.svg + :align: center +``` + +```{image} images/compareSat2.svg + :align: center +``` + +```{image} images/control-diagram-overview.svg + :align: center +``` + +```{image} images/anti-windup-clamping_con.svg + :align: center +``` + +```{image} images/anti-windup-clamping_dis.svg + :align: center +``` + +```{image} images/anti-windup-back-tracking-con.svg + :align: center +``` + +```{image} images/anti-windup-back-tracking-dis.svg + :align: center +``` + +```{image} images/result.svg + :align: center +``` From c2da0feebc7fd20441f020cf5eed208a305038f7 Mon Sep 17 00:00:00 2001 From: Takahiro Noguchi Date: Sat, 12 Aug 2023 13:10:27 -0500 Subject: [PATCH 03/48] Add scripts --- .../images/compareSat1.svg | 2472 +++++++------- .../images/compareSat2.svg | 1311 ++++---- .../images/control-diagram-overview.svg | 8 +- .../integrator-anti-windup/images/result.svg | 2837 +++++++++++++---- .../integrator-anti-windup/index.md | 171 +- 5 files changed, 4391 insertions(+), 2408 deletions(-) diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/compareSat1.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/compareSat1.svg index 9de828f8..811ecace 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/images/compareSat1.svg +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/compareSat1.svg @@ -2,17 +2,17 @@ + inkscape:current-layer="svg773" /> - - - - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + style="color-interpolation:sRGB;fill:#ffffff;stroke:#ffffff;color-rendering:optimizeSpeed;image-rendering:optimizeSpeed;shape-rendering:crispEdges;text-rendering:optimizeSpeed" + id="g271"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/compareSat2.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/compareSat2.svg index aded0c10..2d61c4d6 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/images/compareSat2.svg +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/compareSat2.svg @@ -2,9 +2,9 @@ + inkscape:current-layer="svg773" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/control-diagram-overview.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/control-diagram-overview.svg index 76aac421..fd21849d 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/images/control-diagram-overview.svg +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/control-diagram-overview.svg @@ -1007,9 +1007,9 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="0.9649305" - inkscape:cx="235.2501" - inkscape:cy="286.03096" + inkscape:zoom="5.4584712" + inkscape:cx="300.81683" + inkscape:cy="160.6677" inkscape:document-units="mm" inkscape:current-layer="layer1" showgrid="false" @@ -1307,7 +1307,7 @@ sodipodi:role="line" id="tspan4046" x="86.002785" - y="296.05655">with Anti-windupwith anti-windup - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md index 6840f8ec..c5b91bbd 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md @@ -1,54 +1,205 @@ # Integrator Anti-Windup -In conventional +This document describes how to think about performance of anti-windup. A windup might occur when the controller with an integrator has a limitation on the manipulated variables. When integrator windup occurs, it can degrade system response and stability. ------------------------ -How to think about performance of anti-windup? ------------------------ +## How to think about performance of anti-windup? -- Different methods - - clamping - - back tracking -- Implementation (continuous/discrete-time) - - Simulink - - Handwritten C code +Generally, the main components of a control diagram are the controller and plant, as shown in the figure below. The controller provides a manipulated variable to actuate the plant model. ```{image} images/control-diagram.svg :align: center ``` +In practice, the manipulated variables are physically limited: For example, the manipulated variable of current regulation is voltage reference with a restriction of DC power supply. As another example, in speed control, the manipulated variable is the q-axis current, which is also limited by the current density of coils. Therefore, the control diagram can be rewritten, separating the plant into a saturation block and plant. + ```{image} images/control-diagram-sat.svg :align: center ``` +The difference between these figures is only whether the saturation block exists after the controller. Note the saturation block produces an output signal that is the value of the input signal bounded to the upper saturation value of +Limit and lower saturation value of -Limit. + +Let’s take a look at the simulation result of current regulation with a three-phase voltage source inverter with/without a DC-link limit of 12 V. Therefore, the plant has a known input saturation limit as Limit = 12/2 = 6 V. + ```{image} images/compareSat1.svg :align: center ``` +In this simulation, a continuous PI controller is used, and a step current of 10 A in the q-axis is generated as a reference. Also, the resistance and the inductance are 0.25 Ohm and 500 uH, respectively. As you can see, the current regulation works right if there is no saturation block, whereas overshoot occurs if a saturation block exists. The following figure shows the output of the integral controller. If the saturated block exists, errors are accumulated, and it takes 0.01 s to converge, a condition known as an integral windup. + +Now let’s see the voltage reference in the previous and the post saturation block. + ```{image} images/compareSat2.svg :align: center ``` +The voltage reference in the previous saturation block (denoted as preSat) instantaneously goes to around 15 V outside the DC-link range. On the other hand, the voltage reference in the post saturation block (denoted as postSat) is limited to 6 V due to the DC-link restriction. Even though the saturation block exists, the controller ignores it. Therefore, there is a possibility the PI controller provides the higher voltage after getting the higher error, which causes the windup. As a result, it takes some time to get the output to converge after the integrator accumulates lots of values. + +Note: In this simulation, the q-axis current is set as a higher value than the uInverter tutorial to have the voltage saturate intentionally. Make sure that your currents in the coils are within the range of the rated current if you want to demonstrate the voltage windup. + + +## Different methods + +To avoid the integration windup, the method known as “anti-windup” needs to be utilized. Now, the PI controller is shown in the figure below. Note that the integrator includes the anti-windup. + ```{image} images/control-diagram-overview.svg :align: center ``` +In the anti-windup methods, if the manipulated value reaches the Limit, the integrator is to keep the integrated value from increasing past some specified limit. There are multiple ways to implement integrator anti-windup, however, in this document, two different methods are introduced, i.e., the integrator should do either: +1. Turn the integrator off to avoid accumulating the value further known as the clamping method or +2. Subtract a specific value from the integrator, known as a back-tracking method. + + +## Implementation + +These two methods of clamping and back-tracking are now explained in detail. + +### clamping (continuous) + +The block diagram of the continuous-time integrator with the clamping method is shown below. + ```{image} images/anti-windup-clamping_con.svg :align: center ``` + The idea of the clamping method itself is straightforward, i.e., if the manipulated value reaches the Limit, the integrator stops the accumulation of the value. However, the implementation of clamping is slightly complicated. Here is the workflow of clamping: +Step 1. Compare the sign of the preSat and the error. And then, if both signs are equal, the block outputs 1. If not, the block outputs 0. +Step 2. Compare the preSat and postSat. If these values are equal, then no saturation takes place, and the block outputs 0. If they are not equal, i.e., the manipulated variable reaches saturation, and the block outputs 1. +Step 3. The anti-windup output denoted as tracking-signal TR becomes 1 to clamp the integrator only if both outputs of Step 1. and Step 2. are 1. In other words, the integrator clamps integration if the output is saturating AND the error is the same sign as the preSat. +Step 4. If the TR is 1, the input of the integrator becomes 0 as the switch is triggered, i.e., the integrator will effectively shut down the integration during the windup condition. + +Note: Step 2. is recommended to do! For example, if both the error and the preSat are positive, the integrator still adds the output to make it more positive, which causes a worse result. On the other hand, if the error is positive and the preSat is negative, the integrator output brings better results, which works in the direction of canceling the error. Therefore, if the signs of error and preSat are opposite, the anti-windup is not necessary. + +### clamping (discrete-time) + +The discrete-time PI controller is shown below, where the I gain of Ki becomes KiTs, and the integrator block of 1/s is replaced by 1/(1-z^-1), as opposed to the continuous time equivalency. Note that the backward-Euler method is used in this simulation. Also, the delay block of z^-1 is required after the AND block to avoid the algebraic loop. ```{image} images/anti-windup-clamping_dis.svg :align: center ``` +### back-tracking (continuous) + +The block diagram of the continuous-time integrator with the back-tracking method is shown below. + ```{image} images/anti-windup-back-tracking-con.svg :align: center ``` +The idea of back-tracking method uses a feedback loop to unwind the internal integrator when the manipulated value hits the Limit. For example, if saturation occurs, TR is calculated as TR = Kb(postSat-preSat) and added into the integrator to avoid the windup. On the other hand, if the saturation does not occur, preSat and postSat must be equal, and TR is 0, i.e., the anti-windup is deactivated. + +Note: In general, the feedback gain of Kb is determined by trial and error, depending on the user’s requirements, such as how much overshoot or response-speed you want. There is a paper that shows an example of how to determine the Kb known as a conditioned PI controller. In this literature, the Kb is determined as Kb = Ki/Kp. For detailed information, refer to this paper. + +### back-tracking (discrete-time) + +Similarly, in the case of a discrete-time PI controller, the I gain of Ki becomes KiTs, and the integrator block of 1/s is replaced by 1/(1-z^-1). Also, the delay block of z^-1 is added after the feedback gain Kb. + ```{image} images/anti-windup-back-tracking-dis.svg :align: center ``` +## Simulink +Here is a Simulink simulation of the discrete-time current regulation without anti-windup, back-tracking, and clamping. The sampling time is set as Ts = 0.0001 sec. In the voltage reference, the voltages are saturated up to 6 V. In the current waveforms, an overshoot occurs without anti-windup. However, in the case of the back-tracking and clamping, the overshoot does not occur, where the response of the back-tracking is comparatively higher. In the integrator output, no overshoots appear in both back-tracking and clamping. Note that accumulation of the value with clamping stops while the voltage is saturated. + ```{image} images/result.svg :align: center ``` + +## Handwritten C code + +If you want to implement the anti-windup in your experiments, you can have the handwritten C code below. Note that the callback function is executed every sample time of Ts. + +### clamping + +```C + + const double Ts = 0.0001; // Sampling time [sec] + const double Kp = 1.57; // P gain + const double Ki = 785; // I gain + double Error; + double I_out; // Integrator output + const double Limit; + double preSat; + double postSat; + const double Kb = 0.05; // back-tracking gain (= Ki*Ts/Kp) + double TR; + + void task_back_tracking_callback(void *arg) + { + // I controller + I_out = (Ki * Ts * Error + I_out) + TR; + + // PI controller + preSat = Kp * Error + I_out; + + // Saturate + if (preSat > Limit) { + postSat = Limit; + } else if (preSat < -Limit) { + postSat = -Limit; + } else { + postSat = preSat; + } + + // back-tracking + TR = (postSat - preSat) * Kb; + } +``` + +### back-tracking + +```C + + const double Ts = 0.0001; // Sampling time [sec] + const double Kp = 1.57; // P gain + const double Ki = 785; // I gain + double Error; + double I_out; // Integrator output + const double Limit; + double preSat; + double postSat; + int Error_sign; + int preSat_sign; + int TR; + + void task_clamping_callback(void *arg) + { + // clamping + if (TR) { + I_out = 0; + } else { + I_out += Ki * Ts * Error; + } + + // PI controller + preSat = Kp * Error + I_out; + + // Saturate + if (preSat > Limit) { + postSat = Limit; + } else if (preSat < -Limit) { + postSat = -Limit; + } else { + postSat = preSat; + } + + // Sign of the Error + if (Error > 0.0) { + Error_sign = 1.0; + } else if (Error < 0.0) { + Error_sign = -1.0; + } else { + Error_sign = 0; + } + // Sign of the preSat + if (preSat > 0.0) { + preSat_sign = 1.0; + } else if (preSat < 0.0) { + preSat_sign = -1.0; + } else { + preSat_sign = 0; + } + + // Logic: AND + TR = ((Error_sign == preSat_sign) && (preSat != postSat)); + } +``` From 774a5548cda90c2cd723032decfdd6103e24ee43 Mon Sep 17 00:00:00 2001 From: Takahiro Noguchi Date: Mon, 14 Aug 2023 13:31:02 -0500 Subject: [PATCH 04/48] Modify a layout --- .../images/control-diagram-overview.svg | 6 +- .../integrator-anti-windup/index.md | 229 +++++++++--------- 2 files changed, 123 insertions(+), 112 deletions(-) diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/control-diagram-overview.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/control-diagram-overview.svg index fd21849d..522fc8e7 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/images/control-diagram-overview.svg +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/control-diagram-overview.svg @@ -1008,8 +1008,8 @@ inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="5.4584712" - inkscape:cx="300.81683" - inkscape:cy="160.6677" + inkscape:cx="301.00003" + inkscape:cy="146.01158" inkscape:document-units="mm" inkscape:current-layer="layer1" showgrid="false" @@ -1303,7 +1303,7 @@ sodipodi:role="line" id="tspan4044" x="86.002785" - y="289.88293">I controllerIntegrator Limit) { + postSat = Limit; + } else if (preSat < -Limit) { + postSat = -Limit; + } else { + postSat = preSat; + } - const double Ts = 0.0001; // Sampling time [sec] - const double Kp = 1.57; // P gain - const double Ki = 785; // I gain - double Error; - double I_out; // Integrator output - const double Limit; - double preSat; - double postSat; - const double Kb = 0.05; // back-tracking gain (= Ki*Ts/Kp) - double TR; - - void task_back_tracking_callback(void *arg) - { - // I controller - I_out = (Ki * Ts * Error + I_out) + TR; - - // PI controller - preSat = Kp * Error + I_out; - - // Saturate - if (preSat > Limit) { - postSat = Limit; - } else if (preSat < -Limit) { - postSat = -Limit; - } else { - postSat = preSat; - } - - // back-tracking - TR = (postSat - preSat) * Kb; + // Sign of the Error + if (Error > 0.0) { + Error_sign = 1.0; + } else if (Error < 0.0) { + Error_sign = -1.0; + } else { + Error_sign = 0; } + // Sign of the preSat + if (preSat > 0.0) { + preSat_sign = 1.0; + } else if (preSat < 0.0) { + preSat_sign = -1.0; + } else { + preSat_sign = 0; + } + + // Logic: AND + TR = ((Error_sign == preSat_sign) && (preSat != postSat)); +} ``` ### back-tracking ```C - - const double Ts = 0.0001; // Sampling time [sec] - const double Kp = 1.57; // P gain - const double Ki = 785; // I gain - double Error; - double I_out; // Integrator output - const double Limit; - double preSat; - double postSat; - int Error_sign; - int preSat_sign; - int TR; - - void task_clamping_callback(void *arg) - { - // clamping - if (TR) { - I_out = 0; - } else { - I_out += Ki * Ts * Error; - } - - // PI controller - preSat = Kp * Error + I_out; - - // Saturate - if (preSat > Limit) { - postSat = Limit; - } else if (preSat < -Limit) { - postSat = -Limit; - } else { - postSat = preSat; - } - - // Sign of the Error - if (Error > 0.0) { - Error_sign = 1.0; - } else if (Error < 0.0) { - Error_sign = -1.0; - } else { - Error_sign = 0; - } - // Sign of the preSat - if (preSat > 0.0) { - preSat_sign = 1.0; - } else if (preSat < 0.0) { - preSat_sign = -1.0; - } else { - preSat_sign = 0; - } - - // Logic: AND - TR = ((Error_sign == preSat_sign) && (preSat != postSat)); +const double Ts = 0.0001; // Sampling time [sec] +const double Kp = 1.57; // P gain +const double Ki = 785; // I gain +double Error; +double I_out; +const double Limit; +double preSat; +double postSat; +const double Kb = 0.05; // back-tracking gain (= Ki*Ts/Kp) +double TR; + +void task_back_tracking_callback(void *arg) +{ + // I controller + I_out = (Ki * Ts * Error + I_out) + TR; + + // PI controller + preSat = Kp * Error + I_out; + + // Saturate + if (preSat > Limit) { + postSat = Limit; + } else if (preSat < -Limit) { + postSat = -Limit; + } else { + postSat = preSat; } + + // back-tracking + TR = (postSat - preSat) * Kb; +} ``` From 630892303b5ecac740df5096f93a329dd6667988 Mon Sep 17 00:00:00 2001 From: Takahiro Noguchi Date: Tue, 30 Apr 2024 11:57:19 -0500 Subject: [PATCH 05/48] Add Simulink file --- .../integrator-anti-windup/main.m | 176 ++++++++++++++++++ .../integrator-anti-windup/simple_model.slx | Bin 0 -> 155769 bytes 2 files changed, 176 insertions(+) create mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/main.m create mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/simple_model.slx diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/main.m b/source/getting-started/control-with-amdc/integrator-anti-windup/main.m new file mode 100644 index 00000000..1a625ec2 --- /dev/null +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/main.m @@ -0,0 +1,176 @@ +clc +clear +close all + +%% Set simulation and plant parameters +ref = 0; % Reference +d_ref = 15; % Reference +file_name = {'no_anti_windup', 'simple_clamping', 'advanced_clamping', 'back_tracking'}; +for k = 1:length(file_name) + if k == 1 % no anti-windup + Clamping_enable = 0; % (0: clamping is deactivated) + Advanced_clamping_enable = 0; % (0: advanced clamping is deactivated) + Back_tracking_enable = 0; % (0: back-tracking is deactivated) + elseif k == 2 % simple clamping + Clamping_enable = 1; % (0: clamping is deactivated) + Advanced_clamping_enable = 0; % (0: advanced clamping is deactivated) + Back_tracking_enable = 0; % (0: back-tracking is deactivated) + elseif k == 3 % advanced clamping + Clamping_enable = 1; % (0: clamping is deactivated) + Advanced_clamping_enable = 1; % (0: advanced clamping is deactivated) + Back_tracking_enable = 0; % (0: back-tracking is deactivated) + elseif k == 4 % back-tracking + Clamping_enable = 0; % (0: clamping is deactivated) + Advanced_clamping_enable = 0; % (0: advanced clamping is deactivated) + Back_tracking_enable = 1; % (0: back-tracking is deactivated) + end + + Tsim = 1e-5; % Simulation sampling time [s] + Tend = 1; % Simulation end time [s] + + start = 0.2; % Reference start time [s] + stop = 1; % Reference end time [s] + + fb = 10; % controller bandwidth [Hz] + wb = 2*pi*fb; % Controller bandwidth [rad/s] + + Kp = wb; % P gain + Ki = wb; % I gain + + Kb = Ki/Kp; % Back-calculation coefficient + + upper_limit = 10; % Upper limit + lower_limit = -10; % Lower limit + + d_step1 = 0.2; % Disturbance step time 1 [s] + d_step2 = 0.3; % Disturbance step time 2 [s] + d_step3 = 0.35; % Disturbance step time 3 [s] + d_step4 = 0.4; % Disturbance step time 4 [s] + + %% Implement simulation + out = sim('simple_model'); + + % Extract simulation data + runObj = Simulink.sdi.Run.getLatest; + + % List of variables to extract + obj2ext = {'time','ref','fb','err','I_out','preSat','postSat','d'}; + + % Get signal IDs and store signals into array + for idx = 2:length(obj2ext) + sigID = getSignalIDsByName(runObj,obj2ext{idx}); + sig_obj.(obj2ext{idx}) = Simulink.sdi.getSignal(sigID); + sig_val.(obj2ext{idx}) = sig_obj.(obj2ext{idx}).Values.Data; + end + + time = sig_obj.(obj2ext{2}).Values.Time; + + writematrix([time,sig_val.ref,sig_val.fb,sig_val.err, ... + sig_val.I_out,sig_val.preSat,sig_val.postSat,sig_val.d], append(char(file_name(k)), '.csv')) + +end + +no_anti_windup_data = readmatrix('no_anti_windup.csv'); +simple_clamping_data = readmatrix('simple_clamping.csv'); +advanced_clamping_data = readmatrix('advanced_clamping.csv'); +back_tracking_data = readmatrix('back_tracking.csv'); + +%% Plot figure +markersize = 3; +linewidth = 1; + +figure +% subplot(611) +plot(no_anti_windup_data(:,strmatch('time',obj2ext)),no_anti_windup_data(:,strmatch('ref',obj2ext)),'color','k','Linewidth',linewidth); +hold on +plot(no_anti_windup_data(:,strmatch('time',obj2ext)),no_anti_windup_data(:,strmatch('fb',obj2ext)),'color','r','Linewidth',linewidth); +hold on +plot(simple_clamping_data(:,strmatch('time',obj2ext)),simple_clamping_data(:,strmatch('fb',obj2ext)),'color','b','Linewidth',linewidth); +hold on +plot(advanced_clamping_data(:,strmatch('time',obj2ext)),advanced_clamping_data(:,strmatch('fb',obj2ext)),'color','c','LineStyle','--','Linewidth',linewidth); +hold on +plot(back_tracking_data(:,strmatch('time',obj2ext)),back_tracking_data(:,strmatch('fb',obj2ext)),'color','g','Linewidth',linewidth); +hold on +xlabel('Time [s]','Interpreter','latex'); +ylabel('fb','Interpreter','latex'); +legend('Command','w/o AW','Simple clamping','Advanced clamping','Back-tracking','Interpreter','latex','Location','east'); +xlim([0 Tend]); +figure +% subplot(612) +plot(no_anti_windup_data(:,strmatch('time',obj2ext)),no_anti_windup_data(:,strmatch('err',obj2ext)),'color','r','Linewidth',linewidth); +hold on +plot(simple_clamping_data(:,strmatch('time',obj2ext)),simple_clamping_data(:,strmatch('err',obj2ext)),'color','b','Linewidth',linewidth); +hold on +plot(advanced_clamping_data(:,strmatch('time',obj2ext)),advanced_clamping_data(:,strmatch('err',obj2ext)),'color','c','LineStyle','--','Linewidth',linewidth); +hold on +plot(back_tracking_data(:,strmatch('time',obj2ext)),back_tracking_data(:,strmatch('err',obj2ext)),'color','g','Linewidth',linewidth); +hold on +xlabel('Time [s]','Interpreter','latex'); +ylabel('err','Interpreter','latex'); +legend('w/o AW','Simple clamping','Advanced clamping','Back-tracking','Interpreter','latex','Location','east'); +xlim([0 Tend]); +figure +% subplot(613) +plot(no_anti_windup_data(:,strmatch('time',obj2ext)),no_anti_windup_data(:,strmatch('I_out',obj2ext)),'color','r','Linewidth',linewidth); +hold on +plot(simple_clamping_data(:,strmatch('time',obj2ext)),simple_clamping_data(:,strmatch('I_out',obj2ext)),'color','b','Linewidth',linewidth); +hold on +plot(advanced_clamping_data(:,strmatch('time',obj2ext)),advanced_clamping_data(:,strmatch('I_out',obj2ext)),'color','c','LineStyle','--','Linewidth',linewidth); +hold on +plot(back_tracking_data(:,strmatch('time',obj2ext)),back_tracking_data(:,strmatch('I_out',obj2ext)),'color','g','Linewidth',linewidth); +hold on +xlabel('Time [s]','Interpreter','latex'); +ylabel('Iout','Interpreter','latex'); +legend('w/o AW','Simple clamping','Advanced clamping','Back-tracking','Interpreter','latex','Location','east'); +xlim([0 Tend]); +figure +% subplot(614) +plot(no_anti_windup_data(:,strmatch('time',obj2ext)),no_anti_windup_data(:,strmatch('preSat',obj2ext)),'color','r','Linewidth',linewidth); +hold on +plot(simple_clamping_data(:,strmatch('time',obj2ext)),simple_clamping_data(:,strmatch('preSat',obj2ext)),'color','b','Linewidth',linewidth); +hold on +plot(advanced_clamping_data(:,strmatch('time',obj2ext)),advanced_clamping_data(:,strmatch('preSat',obj2ext)),'color','c','LineStyle','--','Linewidth',linewidth); +hold on +plot(back_tracking_data(:,strmatch('time',obj2ext)),back_tracking_data(:,strmatch('preSat',obj2ext)),'color','g','Linewidth',linewidth); +hold on +xlabel('Time [s]','Interpreter','latex'); +ylabel('preSat','Interpreter','latex'); +legend('w/o AW','Simple clamping','Advanced clamping','Back-tracking','Interpreter','latex','Location','east'); +xlim([0 Tend]); +figure +% subplot(615) +plot(no_anti_windup_data(:,strmatch('time',obj2ext)),no_anti_windup_data(:,strmatch('postSat',obj2ext)),'color','r','Linewidth',linewidth); +hold on +plot(simple_clamping_data(:,strmatch('time',obj2ext)),simple_clamping_data(:,strmatch('postSat',obj2ext)),'color','b','Linewidth',linewidth); +hold on +plot(advanced_clamping_data(:,strmatch('time',obj2ext)),advanced_clamping_data(:,strmatch('postSat',obj2ext)),'color','c','LineStyle','--','Linewidth',linewidth); +hold on +plot(back_tracking_data(:,strmatch('time',obj2ext)),back_tracking_data(:,strmatch('postSat',obj2ext)),'color','g','Linewidth',linewidth); +hold on +xlabel('Time [s]','Interpreter','latex'); +ylabel('postSat','Interpreter','latex'); +legend('w/o AW','Simple clamping','Advanced clamping','Back-tracking','Interpreter','latex','Location','east'); +xlim([0 Tend]); +figure +% subplot(616) +plot(no_anti_windup_data(:,strmatch('time',obj2ext)),no_anti_windup_data(:,strmatch('d',obj2ext)),'color','r','Linewidth',linewidth); +hold on +plot(simple_clamping_data(:,strmatch('time',obj2ext)),simple_clamping_data(:,strmatch('d',obj2ext)),'color','b','Linewidth',linewidth); +hold on +plot(advanced_clamping_data(:,strmatch('time',obj2ext)),advanced_clamping_data(:,strmatch('d',obj2ext)),'color','c','LineStyle','--','Linewidth',linewidth); +hold on +plot(back_tracking_data(:,strmatch('time',obj2ext)),back_tracking_data(:,strmatch('d',obj2ext)),'color','g','Linewidth',linewidth); +hold on +xlabel('Time [s]','Interpreter','latex'); +ylabel('d','Interpreter','latex'); +legend('w/o AW','Simple clamping','Advanced clamping','Back-tracking','Interpreter','latex','Location','east'); +xlim([0 Tend]); + +% width = 5.43; height = 4.38/3; +% set(0,'units','inches') +% Inch_SS = get(0,'screensize'); +% set(gcf,'Units','inches','Position',[(Inch_SS(3)-width)/2 (Inch_SS(4)-height)/2 width height]); +% print('-dsvg','-noui','results'); + + + diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/simple_model.slx b/source/getting-started/control-with-amdc/integrator-anti-windup/simple_model.slx new file mode 100644 index 0000000000000000000000000000000000000000..3a298dac67e131161af10ec3401e8affe10f8056 GIT binary patch literal 155769 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Μoaq0mTn+cG$f!BCIRIz~xZg3$H|sFs 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ʕ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 literal 0 HcmV?d00001 From 9e22b7cf96f835f07aa54d2672d4487074b28065 Mon Sep 17 00:00:00 2001 From: Takahiro Noguchi Date: Wed, 22 May 2024 21:50:09 -0500 Subject: [PATCH 06/48] Replace R2023b with R2023a --- .../integrator-anti-windup/simple_model.slx | Bin 155769 -> 50643 bytes .../simple_model_2023.slx | Bin 0 -> 155769 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/simple_model_2023.slx diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/simple_model.slx b/source/getting-started/control-with-amdc/integrator-anti-windup/simple_model.slx index 3a298dac67e131161af10ec3401e8affe10f8056..ebb5993723f8fa648ea013b7359cfc8ab6c21d2b 100644 GIT binary patch literal 50643 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 tkR|_}_3yUnG41gi$uHVw?QgV4?umLh0^z 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Μoaq0mTn+cG$f!BCIRIz~xZg3$H|sFs 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ʕ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 diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/simple_model_2023.slx b/source/getting-started/control-with-amdc/integrator-anti-windup/simple_model_2023.slx new file mode 100644 index 0000000000000000000000000000000000000000..3a298dac67e131161af10ec3401e8affe10f8056 GIT binary patch literal 155769 zcmeFa2|Shiw?DoOQ8K4Q8B(dtws|I^3?=gr65Bk_WXO;ql}czbC1uD^LJ}D&Qv)GI zhEkDPDpT}d&(_{3sm}M@d;jumLh0^z zaW#@hp^z_D_@%40y}O;YgDtPCx2qe*-u3%`OlpAY%xyMPP+juleP+QkLY z3SMUm-hgOiUj1&4PCs8`kC~%`rj@A^XwKZ))y>+$%+1;Z^Yi=U?Cg+zx@y8D6|`VE z3yYuMw9nm5!PLzZ(VM0l$aKij(GFvZHzqGuV644=(z3jxgR7gVgBwoK^FL#?jTXae z`)6fx3vsauiGfF<;e{}oZy8mhMTLJB``^%`j;WnH=n!Wm$$zp}{_n0OAhO(M(IT)@ zettMc-2B4GOF{fGT3~vd@1VtSr)9w(zY8mGXKL>R2iOGTV0y?7XY_w0IygPnPD1?4 zi4Nuw6o7Atodku2ma)@+rOW>trV_yIS8%!g@(X}{gwRODLtY3iXQ=;%9m|<}m^zqY z%uUSxJ;Mv)6tUa^6+vt+j7EYT@=8?nf7bFlP0egg++5)MzvKKu-*q6&x12LzcaD66 zF9H7l4bHFWerPVAZ7-?G3`S@8GiPY?-Qpa&tWGM3W?ILprg8<3j@!W-tUgkffKuA{VE{;wZ7dLB+>s%s6A|U*lbuO=ilx(bf9LzCZNUp}c zV?mUh!xQHC<>61f$mhRjb?oaOm-r5VST!&fQfzZr$^>+TMFPtPRt=0D7A2Y50R(a} zMS#xtM7PV?-PG>8x&?*s9tMK^E$BcaQAm&v&LLV5c_r{a6_4;+l$Mghs}~O#_c%DY zyZr|^V}S`Z9L&`)ZdPp4n%4GCb{JP268!E7KU(kmum8?L+!kK;_dc?$7buxpJK*d- z_Zpj3m%{^SemFxk8@r0M3Jw|mm2^0~B8qp)pRpPL99jX<(0t%? z{DRBLx5QEZE}!*x$^S||JSdqzH9rf8MnVx9i%PH%@_!7LeBbGzKiTOXh<}!gqQt`A zV0~sjA1{s+V6@-IXKa1Ok9d{<5;K;!8m@HuHxJbw6A%*bt^eVv`gLsG>*%&HyrSn1 z+G3^sQB8;VkT5?)S7GGE@~B)?5WhKm-1|4mkom~!|34F1mp!1rHv}%E2nyq4%0I9K z8iARD2;c;u1+T>Z=M&xkAI+iVV(Q>(fpJkZ!zUeeJ8TV(jUfCuRD}1?1q6l=l5#{4 zXGh$gpKn=6zeEYDfN^lNw|2k+9ce>;){3n;vCVyKOZ1|&gp_k-Hj*}TW9=Ervg8RVr?e?;i}g5)^2Rl z?#OEsJLHF-->B;7iGQOV^7^MY{#(B6+q zIP=G}vj7@4iY@*GkO~m6@Ba`JgRSvg*`&ESeZL>7<&C>Y6*$B4FBNnDTo*{yN4hA)NaO{oei1xV8f91J_o=DUb7?oFF`F zJ0I--K{P=l(S#o#QuzN-?8NP3{unJE2|TUc%&hQv>-$gG(1>0x&T}Irfe_-c0JH$L zE?ee9Qoy?oUg7^nc_!~-4J}7&Q$Q7HR(4A_305sD7mTZwquo5sh+hz^nPqt}97@{f zfGz(qF8iQEYXLZ9VSnzg)rkwQ0`sZnXCwfpor@JwCqEXpF0W3pCH(h)g(`57QfNNY z{HzMBYY8Ix6zf_-{L5#O|GHl8{|c4jqNmV&=U@qyqLH8|#D^SLH1ZwF&1KW`|Km!< z$MfHYKrHyf`YAAb|BtFv)!G5`y@`X%rgOcXg^&RshH;&A{v{BMs_7w&9l%&aIQ&a# zQ`5x^#y12u0}&v;1PP+%$Y2b(IG+TofB>|L7hY#4Ff?XXxZc#yBJs^nGc14x z_{)M+3j;H}W$^_Udwct(I6$M3*73Y2CS1UqxU*sc8s_AFP5uOJ) z%cw{IEe0yW8s#Tr;7$%!S|Prl_4A`-KmGiZ;J8cTv?Mmqb|FIIcY$3}K={Wc7ccO` zPm34BUkbm}LZ`w174I(mLNKJY;9&kJ%n!y|xV9uOF5F1sUM%?ZT-;f}Q{vagNya~K zDg58?VFwwgTg04xKdf_chyS;62Mq&gbLUN%PY^M+(Bjj8UlFTv2xQ=s=Y`HkVk z7nrvp{$g{|iTz5txwZHg`v3B4%_-4oam9>Z4JQfz{E@@|ZB7!tUrBAA^e(KlLO)5nSdJflT5P_bBobN(Qt*FW6c!h`1pX~pS@?gD zW#QU?6ls2-;_+9<`IXReF?-pNE&SV1gbWTZ*xL`*`&pEQro;agZ#d*&FC>AN@MHXk zaJxhEFAQ%#y5*dq7oMwy>cu+7V&g8j!2AmH3S8t$3+0BHjm4+_2URTkAnwZi3rvH& zVZq`HuMMOIWJAFpbp68zu)Z`G>=tepF8RZWgWvqP zh;{GfMOrN44?isy_9y!bECllSzs{X3v4sd>u_l&3SvV~S&0idUX>67TMgO9TnzI8o zP~$fJXKM*BK}*f8wLCVNs|Ik9clovEu*t%{DSlhHEsNl;w7@Cwp=`NmA@ED!GG`1d zT*F=bPsCh;gv1MpQ|(eh0w(w+3Kc;A%5L}rhs zL1DS$BZyvjaQ}3%U!7GbUVpLJyqd8_$Cmm6zqGxe(4Q9pcy$Z>%J_igejycB-E)im znQiAz^`gm7yt?NFS)%m8pX=q03`p_|LFd)C7;oVhpW6x6n16R>q><^e-ubUwXmZT8j$aKeH`*DLQ%1zkeA#v5R35*56qSjmG)ig5*87*786{=pTS8 zGP-eKWtLwh8y*kM?rt)gL9d3@i;f$EpWkJU@6h@ zsS;|`r4RykYrphgyp@qrz@vQJv_zJ=-x&J_U2AjXj+-U_?&t!yEx@hP=JJkq$W696KU`yD@n|RGha3a+4UFw5bcm)Wj5Tpr3V) zb7B4kZ6~~cE5dzhn$|vW9Xxw0$veLU($|xm|8dUxBJ(3T-^u(r>*H?T{2TjYC)p*vH?>prFuQM@j#7cO6Xc|8mGyhl@>5iT3+VzsM`GrLZ^tC@;ZQ{_Q;Qq8;F)&HNp||6mJqBdypQm$BcL z-@_8r(SNiDTr3fuAHV$vd%)i7kF^6DseqQZgTN9o<1hEH&)v-l#KeVu^Y6YSu-s{x zdyFZclAHx9E6sL)N@Myy)esmeT1>}-Cqi` zM8KRAW_ez6ZY`V%|8V0tZ(NXp=hj-Do%D_pv* zd02)UFe&o2EH35yAH$`1zWirgI{!Q|q@0#woBtVm?}*59aSEH#@b|hvc33V zzCUq_n~w+QHp`+*c+8HO3&stj?r!IbQNlPZejW_=x9pp}Jqq_-j6607?Fv zXVD?s69M86dnXS+--6j*e6ffNbm#?hqxe5!1)8Hv5ctA+$kY|HL?>AtZhUcsr}Xgg zEXC<#FY=u_nm6NuQ2$#D{ypO?hrqe9cdcNbn8J-kYD-qe^P64b;K@7M+ry)WFh4$S z=sOmi!*B2;I~TWK!tno^5(Ec*=6&F2c=~<+$h{SF`xjk`6`J4w5-Ic#_rKJm265n3 zh~r<^G<fP0ss zeXvXY9%(KMd;h^qJ9>$d4=akuFJ+lS*#Dq+yHsg52Q+`#`ogXy@E7y*xQHfz!@vtp z``o^MX-<5bZCM=)FB%K{HPBoMbmt}%`_8+GcL-3Z22vDi4gALN`x8z~5RBn!grLik zm`;aAKDvj)({!gDuRUa-UzvP$jX{{;D!B&_i8c;I-_Q6~+4Zej#;(+>2Dd z(y%w)3K1HXIO9D8ogDm`dlxWH`npR<~+*$N)1VY=Om(HIbv3m&~nQ^mI|k6s_vwFV90Yx&8kr{pV>~V?&bqB z&KG@WjXYAHmzdYy;_i6PRea~#Adh+R`);+a5*&f_-rxlM_g5DB*mRqyoT{pw3 z1imyz6T(gX7Cja0@Ase2((#DikWN}Kc*k{SrvR1m8xssYPuDBbjL<71n`RhyPLYQm zxLr<6OFN=-d&qrKWi;xVID5`M)W!Ay#c_ElDfv#c_qm)j8aCs$+IZ%kv=1zVpIc6J zXr=aTPz@%&x8-geT@Hn0BHcur7*(>SS^;I(hG)IDeXG~5+!#icuepU!oByQX-pj^2 z8W?3?>?$5=%^C0A!XRPhn(-gHu1 zQzPe!GSAoZZ6B_(2DI$8(;@3+JnuZTSO0^@=!8G-#A_MjC;o&uu6xeZ>eY`w`Gcuh zNKmNNU}~Ue?Ob_zkngEY?G8bFbfhDP6EA-#p*#OlSHbZWEpIH>#luH7OUZ7w-(z^K zbf#8Xi*D5&712)t{;zK_sR`d?O|-gR&v7-F^$M}}JG6U03%Y7don$DZ00SuqlO zzLH#gh(;rFs{nJOcj=kcD=sIQQ?kp`YerCtiXI%wS$CFW?6ZBuH-X$ntJ(`jkvq55 zr5|~87b z0g<{jLk8x>*_I&@I_cFN4Ue@lHdy6PY2SH$I=f?(T*c<(1FbF1Dtv7uFB<6S8;vtQ z#|)cSG385d78H=S5+!hnw+haAIPB6*?7`AIOHO_{TE^qt3&LaKM-qf7wcU#jY?g?} zn7OSUy-L)OBcJQla8g26`W72ih2gnM5{sU4WA94s$(ftNJv5o^ecc`Oi_O$>!lg(N zF%vNgwPj&TV$NQN5Te}N+7zBhXOEmtto^bY?NuuIs7Xi0r|C8g+l#N=uP>rNM?zK^ z)$-<>v6a95F zHCrv|Qd^!~4hs^Iy`=UqxM7VRL!*+``3rg%-lTVFAOD^cqxqTS zci5z_yGiVPp@*K$&2nV)$c+v?;pP(*HLnSuY~hXVS3(#fI!vUPeF+xZ zVbxl%Z4W^I*T5EAf3|~}ql1ODr6$I0kAsEdydh4N+f?$AhYov_rA)suKg+Lpse`Q8 zVUTFOlDq1mmwFw~Oa0s#DK-q;Oz}@1{#KuR@4mL*q1UIXWjj5RP93;F=uLF3`}J!E zI$f1$qczEaoanTf7vzq&TRD^@!yYMbzfbbsU@Y?afW`6HwzH?rUH5Kng7rjJy1vTIRWI zB;9zi{f*g&fwPs#-yS4?3kZ{QER_%zS*(Y>HyAl9VgK=<2hN3hn0w-?EAO0Net-Td z?iu!TZh1<|wo;Zn)brah`NP~*M`?qez9ck~7musd8K^9!+8cLec6_aQ#47XJG~HhB z`)vc?UR}>V`+_9LR8uFZ+B3P(zkbA3+}BRdS-4chb>xcaCX#%|$oISRYFzH8oVXtH zM!)i$>#I#JB4-2+gzh#L?m2a-27Q$vgjdM?ahAOTbc3!wW5F}qPgf^6k@X*Z4_qs+<`n=`o)YRiC65aTM2QrIw zarU#nsX6H3IUx$Q0d!%HaWgfChp_XSK|5&vDQbv2oH(<8UnMKu(avd3#tvPpV(w5o zqstcic=*LrMkziRDRI@K3=0Ez2U`u?so3v24OP8%DvE606Z@Lx_*w(*{TpfMg5HSJ zXXssy8}xAr-r0YyRzH0$R|5kVnXZ0r*V=cjWho77*KaEe?bxGVo4K`BLU;dh?#^Iy z;g2C7AH)lv5xXa}B76Ne^A%kor^I5r^qy?2Jn{MpqZl+5vrELON?qp=o9U|oV!;&$J>NzY0s!`yPxBxLaTgLP_2W0 zqGj^Q*v)2kS7mzAQhEx}aHCsi^b1E>O4gj}Oi=3WY!yu(cpIRgRwJCy$dH^jx!uOG zzK73=?(rv#vtWFFA(gU{TlaY>@9s}2yL@)szV)e!)uQ}|z$wr3vGxfVMH39fw9q*A zolER8D(r&qv8wPf1I4?&~A;+((I;PmmKcBFPWV3 znPv*UZEBimb?Rb4G+_;U&j)mMPUFx!HL`43%AIT*-yY|B@LW*5!=A%y`wp{oW_>QU zH*zQQ-+QLMIJrKsZKeC&YiMU%O)Z82VtOsV!Vk?C;;z!{Y*Sd9p78!Si3?@NPNNIy z8;VHRPJ2-#Toq;ylgm`#;enVKV9Rjv+Wll5We^{DfbWCqQf@jeRppmO0_^vzo*hiz z>2>y&)mLA`{oN1E*9r7=6bW!0cH@4PDxBY^DRV!N>Lz{0^=aF_VNct$6Aa@o$Tx|q z@}x~iJ~QIK)8Uc3<6&Q#n;Gjhf)h_p)#s9*fl_Tu0d*%aZ?lu`C7M75pGuQ_J__iSMhBo@P77M!!0o?NCt*C)^vZ(^Xnc$Pv$cSTdiO{F0U0<0`dMXJY+SPY?#u%$3KaICma*BToeOKz}I=H}eK zUDnjpG#$fuf@E@XGBx(YXCHG6COIi7>6yK4q$+C2n7pNal+zPFf4;^%sKJUD<>lp7 z*4DPc+SQy$@sPIf#*G_RZ3W!Kaz}JBSD;=MxspD zdzLP(+2)mJryqRkh;r&pyD?*e$FE*rJ)3;~n#zfL@9&&cLbNE5_mVuNVP#4~_}8z# zAWFG8y1c!eX=rF@B_*YzmKGhcTrO9CYd$AhK;U$Aw3+@oIy&MmhZpp`t5>d+&9iuX z>dYC!;PN9+rKib#N|-J3id30g(uuP+WF~6~-kp9j{9rSp4E>tTZs%1=V5JC!L;55r zZi8D#v^aJ-IPjok*-n>LRgv!6wJSB&+sjLqIz*$N&@<|*%*-dvD_5^p9ONsr6Yg$v zymxeGa@s9n6B853(feyo`WAgAL@Z;c;~PSWQck5ku|Y)9#RdJWv60(ekdZ=CQnLQ? zuGOgAjW_Dvx!kgETZf{irw^;B*tt9P89LCIi=w{Pn`IUPse>-zrD zja%HqoSst~=H&UfQfk{aQg3hXQ#IyJuAEXD7ggEiRaMDRvZ)&7R)RazwG3i+#MF{S zJsQ^T*ya351ixZ&aWQ7HSwlH-#2$E)^Qsgd|Q3`l(Mbo_UMKbr4;=Y%=HN3R2TWvm=#;|^(Q=3vdk6K?}zq+PIPC( zV5)h*`+A$w*U*uz$TljrIPdkKrG=h0f|#G5|F-WW-0>m6?>ph-gHs-Ot)kk1uL+npNKQGMhKJiII8&=^ zIfG6E|R?k%Z#YParGj>u(o%MfLrqhXnZWZr`T57Ri^srOfE zb&kt@E}6YkMl+nON!ZSXYOp?9-NMlIo-Hi$K#;E*jl(u`IgWGA0ZKC4-`>oSpxwiy z(8Sj~?x*gTbMMNnTY?HoN-eEleEs|yvW+CdO2hUtObIEO9YGOv*kI20d?fq4eS1^N z(HzU*^x$yDt5c;^8MdGAjXvDqHQw&IX(i#+z46DGBs}y=hLl+RLOcdr^&g(ivF;4` zCiOhau%~`JS2gM0>{P$dm!LP@-J`F=SPYnZmI&&n?RBqaH_0`r--S1ijEz-Z5_9bW z=NWLh^yK_>5_o>{;qf8itmxR-&`t882bbO!{9 zHAes;xR^{4TU!&Et?QyK4WZ0@K;n-m@P_I@dtR?=V zXAVn6Gkoy&A)dHXZnRY?`N@$NSL|*VaU|(zcSLP&ju8)Mq~+!1RZWm&*dXE%VvzL^ zLi7f^T#3UhO^|rV#wTUIeHD0klF87*+uVE$_&Q11PSu#0m^jN|Zo(7Imh`e+rVF2< z@(V9%ux;M#{PFD`a|?^h;H&E;y`0YPGs)jiN)yw3U0>kt$6C(aYHDlkb304@Hf-CM zprE6(j*yU$&uiqMpiNVn*2Sq@DrGe_Zg;wXzNQ^@Pu)}f<*1#8UWs}6_^?49syfM3 znIso%g9)OSqaL^r*}i``xjjdVJz6fa8BWE{R1G<5V(@=Bm}$*@94%3GO{b+SLo2rcj$h&0k}{G`@@4Gj3-u7 zQ0(e{cw)3SC8`2aVnaj2i<_9$cRYtrnpTF!=wIU*4i2ScItIC~t{c)G+WwM$fPn$y zPI-BLr!HB^@mH>=>fYUUc}Lda-NPg~JJG#z<;t{%LHf08%O5;=FyuerM>SZQQ)VSd zh=L4q%K*u&nVFf*{n*r;@YVAyw_!n7gA&Vw;|v1zSN5#gy@i&TnE2p_XQ>eS%9}HF zZBr@PZW=r1?mLfO0XDxMO0hv*UA=4IW(KD5s@g=A%xoZlk0j^rho_WNVfC^zTUAaa zB%I96%|-V&HT%_r|8tw<=swi{eDSe`-K*O)IVE2hNvN2QucqgLJecA++~GC$SmcJ~ zQ)Vl{3kF%~cR=VmVxLi(g8XmiA6uMzY_Xk=4E{~i;($cw(iZC}=O-)R`DwLPkhGDZ zcK-@g8AL`?;fn;QJ$v>zIXlbsKhLVOm+<~*zERXENwJUh^0AqT?kLO`0>nE}2dBRb z#$q0nOS|`J`F^a~_9EAm2o8>IzK&tcE7Av5Rq|OnDVVz0cLnjn_Kf}$ufx!Fwze#E zkQl?q-f4^T(h z<)!5f`?dm?X>q466gf$-(dVxapI;Pv<{0_W<&8_-lBj>@B4&ry^>(htE^@3K^dlMvA z#qZUHa-{17v0=HotlE=8}23DVBkvWNk zkLTC*^-6uk-ao!*X+7NE9|^lQ?Q2R0ugq#JH+Erhd;f@moB@61ncu0fFs1XXH!N7T ztR$plmbB7j?dQsWIL> zTeq&DlAd5yJh?FfWFqn$dL<_-i}Ig*M=xmKN*77b`>;Do#=&~{-8=1}dqgPY4ENS2 z6G=}G2%J;BYSS$4@JjU2C9yn%{*Jni@!UsZpWet8R<)P}P_VGDT$1pl%reLiii}+C z>+5?eI$E<&*;9%Cyy|W5F?QpC8TaE%66+v3L0FQYW?+aYa_xz=9v&P#0r*O1n&nhA zqljb2{hq{tlLhu|Z;E;nTs_40Zd*wR(JOQu~K2c9V~vIXf6m^2k9Dn zryArdDkyx%f4lbYry08UZPumDT9A=TFE^>e|4F=r?og4NlIY=T4qDv+7fuFjI{-`R^>E_Fj`eaA0GHPd~Tn zIX(i-YkRX!w`eB3ef!p?2jIFwqO>2x!LDcfR*riOmyCxD4A>RVw%xLhcAENRZTk3v zP(>gSX^7fI;Z-kRzO2a5&KzpLB>$?rD?>u!atu2?N{R~81-ya8*#6!1sZA_d0 z%+zNg4RAO3XD48z5KyXk@mcX?$R-tWCjL7hQX&@)VqIAQk%3r_I%I!};;Qk^fO~vS zU1b{m5XQ;iy=x&%Y%{mCZ1H*goTG?J-1$w&NEJ(f-WNGUlEi>n{S3d+{z7dBhwS=P z6?)TmwK2`v?f`%)%%Y^&50v^AJu~<^GjlZ2e=7Y|k3(lEx9_)^@#gGgj+Pt~`qq5g zZ38d!u03*vvqL*IKFqsO!b6ohq2>h`n`OIU_6E5Aw+Z@GV`3W;~(J5yN-!G2eMrh=CB0 z-x+6oiwgKkgrcUVMx|>ZSd{E(vP8wpJj+ed?K8&^WaS0o-8l4s3`TWQv=+$eJ4zE84jgcdC&^I+fK6Ia1uIr?_hu;=LoIqjEMjHZf)%TK5|p*C0m{kYa{W|NV$H{FvIa%58|0ke@^$ zkLDMeMI|M%aviu`|8ZJf1JarkB;>m88)j8+`g86*T(eJdzk>-RQu(I|QgwbqBd;ql z{@b!{xV%&TI^Fq=#A)1f9CFSI)b^NK#yT-ut@XX^(KRj&7qvK!LJ(6-2~k)DCv`heOf`{I-0u z(QUA`nP6>9fosoRuz%RNVM2z-rD%4wod6)DzkPMBHb+ZNzKtIF@+CW_bwK-LJ`_v` zU)^>_@<)Q-7yU=^67)NE>_9XLr3B(81HpDNXU`HxC_p`licko;bZH|}zv>k_FhM0? z@%X|~_ze;PAuqY6Q=y&{zbNeVH?--rjtmMSgwv4X-v1n=-icJDa3QD^2il8UTsFBM zJjmKwV80shQZOmip{Y+FPAO-Wj`np3Gl{#EO^)?Ak95gFM!(wR8ZbKvl@=SvS9PO! zzI*Qd>-=XYEfFh(mLHUb`18r9MBc$LPd7D?C%T5~9^ZpwPbcY2h%F;Cq>Jo2OPPpB z$jhdO?@>XOFfl!i)Lz2&M7O6`W$%e**UPh@fQ_70-iqk7ukTn4r|!;Vb-mUE2+0zj zLkbs#?N0$x1tbcvhlbqkvVqpdw@`hI^*qfHkuyFG(Jjfk@v2^lj}Tnsz<~o0V~9mW zMD7Bx_6Sg!cxjo4IA?WT9n?8;{{GS=6pSGd7B@psJ%9c@q-GY@xVp^ztSrMqoni>z z1<5LLJQG93!(5+3jvh7r__hX6lkD!@E0ID6YF$ttJ#Y-#%(t{Lpfw0(08*tuquaOAKyV1p+=n-M$zM>vOMt4<%ige4%Be3sJi{T7OpH;^SD^xZPVk zjCSj2Cqb2)0SB#*Sv9lMw4y28u{ zbs6HPYU}Fc6%`eWo-&+x=#p4hU7a>UmvQf&3?%#2=~_1F$>!V-NJG)*$ss=Q=D(r= zqs(+8sir4N>&kjSqnypERkkhX->ey_p=WY42_MAMP1(RPE9d-*VAM8&=1MVBe1hpO^*{B#9X$3E9_!= zTh{JZPs-wZ@FnS5Dz8I1O3dC@n!3+SKYGK*X{@8IUf|f-fiBzUU3)k?EiJ9WbpVl5 zv!x{eg~4Y1YpO|68^xY6xHp9ZH7NPHNi+8Jz$YIma4pkDI~Rp7FAD58ynl4wY|IDp zhu2V151;FMRYW#GSbN#C8Vi($y1_E;Abp;`Y-vaM&UhM* zB0A=5vh8m%R0>d8jRHK4Yb9+y8hK6mg4E%HJe9OHl2TGPOe;x>OTQHEQu7VpF>Vua z|Gom8ukx0b!lrk#M~@y|NkyeJ+)=`0yju+z3{sy@y@9|!q3_r106?3W-vR!iEHwnF zI7YXKYNIGMqztShK;6?SStX?Xc=>`oAfUZ1&vM_VftS(KNj^y#hLe54E<`i1)Ot}T zR{!Zi5vazHf-o&@CFIs!;C-dvW)HjdHLU{SAT=XF6!@N`W*dO2YEZwvbXl8}lf%n% z;Pw#+WTTQoLZVwO(=x2(s(L;M;#6g2Wyf>RBFHLq$uY*n|BiRCez!1K`(i$K4jHNF6WxNS(~A{LM3GIPNCC29gNWQ*~WG zFW07-11j4jutfa_x7!|rj8H$U1_%pC{#sKv&1OXe)8F>_%mI)uI7)hIB>@4!1f>4D z_=2;$AKCOX51+Akns5SW1*WHxW8|f?Q?|wTT2)k4??dY4gTvz!kS!o6NLN%;B%DJ} zM;9{MT~(>#H-4z{Ko$Z22S&O+a`lz$uX_4VUhQxgamzF`xfX54B<;H%_^b(pA2J(a_rWPb|>qbIogLi-!ZRuXb^98F?Zx zELu!{M+ppc>1KPB%{S_EV36oe>&ls(vh4Eue4oYkKt;yp%*g=ZL}Z1;@IV01)L#lj1t1Xf}$b< zn0ubYZ|C3$GRRT{KddjXH@w!Qms3)1K#1njzj;NcP)+Mhi7R*8=Iz^8Lb058Y2Q6h z+2eh^jn}9kD+VL22LRacW0ZW5l#~>*R3Ic4$g9!-oXG)_pA&cI09IunyNz+MH9s%i z@4!_O%gqARy;%z5C;f%A);4e5dT)?pw&*U=b9!U1WSxEv_B;B@kmBoaJDc5q@IdHA z`HHlm+s@sg^3y6RDwP1yM`x#p4Vz~pwk4De-}`pbGSP3HiQng#%9CkOu}1}1bi-!{m{u02n70hpNmI<_zKxtQP7Eu%K#p(n4jI-Y8Mo0!xduFit? z#jAJD&dz%G{QZia0t*48Yr&(DM;nCg${?xRGbR>a9_-9?>@4-_iTA9(WvzMrKoRZq z_;8Mk`OU-Avyi(+YB_VxGGu77ojwRK9)T(uQg3e==M+vEo`D*%8wwtsai;o5Of!TR zlJ>Ps1yE2%1aBu|I`ZyoiByMIH-+!$1NsRdr^A5kJv92}LG0^wy4eRJ0%pe&*UR`z zei`nJ5_5ge3j2XhidTPDA=kLzlSCPox>#<`=A80_W#COojUSZrxre@ed{=i4$P6+v zGAAIe?@sk)dcoBPeYoFlY-XBrhj0Vctbb}=K2W`@NGUhwhO{S09q#(@A;PhA@~Res zTL5EpHS3z}($hPq-4^g6HI5GmmIK8eSxp~->U{&8cy(>8YtV5Vvv! zU-UdpjM|pqMF^f5s*`!Nuuz0-_3BY5-D9jdPw%Ftr42$zmA+D4IO5_S1L4r`(PbEb zUW4%CZq_*E`a3rml~>$bb>)tnn@N#`#;B@eU|`^G6_sGtmB5Y=IeC7JgOohbd5;CL z4M0FX=Qj%E%#!P&LSIQvPK<(cdiPOF_JbZ{LEU3i>|qMU6jBLdr2EgfhQ>AJ z+v;u3+fR4M~698Uv1HR2_&=W(wGX}@13?M3Z9YS)n z7$2s9u)rhKY+N%7%8R7fAl!8=(LbpCV46!9^xF@anGO1sy!B#cW^SJH8tsg+#WK3=pB#2 zV;4mn4PxWPTuGo2gYi#v7iWSb5($({66E+;0vD*`v91N~|IT5vhzLC>4xv;KJaFKy z*NsQ!`=AF0Fncp{oQ^X~F+v>S6tbKs0byT%_@JLP4hetV}^`6@XtICv(_E z-?*RZ_JecYY%mNS6;xwR3v34^llT@uN~?hX7#$tmiJZ*?PY?3FxE1esZ$>9PDvCGn zYi$hY&i(sOLpvEr9d@v5+B1J3#E$}^SPd*q0+diX)@|T$s}xfjK2Bs6cF;bu$a^<> zdb5&pegM3KI7`Ryo$Zc&9v%fia9MlbwQ0_<`K%c?TMAXj7HIB?7awOV^cXa-j8nG+ zu(~=qIT;f>wz8doUG0L_YgbY#=IalX)3Vct>T{%gKBYbPIeBMSQ|t8ev5y}|CVLW7 z09GNyBgERw13ev_&#R(XqH^xdG9r3|?0N%A=36$+WZ-HOGvl2NMXr`{mkH(O-LX3QOj?%<`5|h444VoYbSgL#Ak8qS%_a#0_&Q5<0O)Q&JDOE0x4VPDB zo7@|!m(E1WCllY%6@Yr*KZ&>1KBapF(9?D#fq<4RC0@|ct!2Y)n!@=-7MpxpV@eKxg7HwD1;#THj+TKM`(5)u(PL(>3y6@m`0 z*87xn?1*+%uYBG`Gy{AnLatph3T^i~dboW{?8_$~L649C#3id$G&o|cnlsiG*u4w_ z-n_}+98s?I-D%(?-$3sYb)-C)GzCBa@JL89zM`>%ST3#5tX*^Fc@mKkPh2Vdulwm0?UB_Y_mopWh|jDs!#|D2uNnm6%q#L;=fl z(RqTsvfD0axDULbfyz8%bPx*5E+FXw0UiKH0Hof~h(6=D&p82Nw`4BgK^m;?LBM3f zF$k0oqcjCh784q@^>XcKDcNQ5UWjq|-nSbcJ$i%=zTKp>fB$|!+D~|b(>h+$i0`Lp zuo6VDYXe}OPs5#^SKR|9UXyYe+*%24R9Q(SLk^@!N`s#1^zq~5cY)cYCMJOMDGy(R z+==0R3?y)kNw|RX#E9vEd;UzoNflVP17mVdmHpLS?=_GIfD+S9RqBK`JupBPc?>|m z1Ia)V4%U@NS`2c*B&JX}uNQNFm-S`@887KT{7BR0y5@0 zc1ivBnRTE%^rFM=#$sZP>Q=k}R;kUC;&? z(6D(0^#IMJ z8FH7D8$Hs~)2WHeUt*}6C14sPLlXe1H;edwA=p~l-VYrm5?UNFd3CHAo?etC1Z#*1 zAQ&sTxMbw1&}3;|^AFowl@nzTCx*e?Vx24x{kI|D-pE{v2=C4MJnM4@+!8i1p>_Lq z__X}f4~^TBnhj)5WM^iQtzP#ixVYGmLPxtW;u~)$hn8MidA8Bv8%~>eTQhc?K7FIN zH9rT@+|a8%J0T^jZ$JBlCw1Lzpk^*0x&pN87=NHR0p*7s6ef>Iz+nh10&g7lC4{h65$+lgy&w4m(;1R9&oY7=ws)1%PQl;Nvi zg*u34Xt=6osi1Hm7?7OfJtml(kqx7i+r2ydC^T*F1stZMd)r-~%))2Wl%k$~fZt7p{ zr~=yF&1029lkCW4QJ`GEaIhpk9QopK{K^%W((!_3Cs1wc;C!Vh$%I~2^Bb*VscOj3 zzUUHl|AZnDv?ev*-4Typr+4{~ zb0J2Gt*t6uJuPGbv)*LT%VE?=zdh9UzHF0%mf=K<1OW;f?}mM&*Y%&GCJrB@OKBi3 zy8HD;{x#L}6evK+8EX9=z4Z*JQ;CU@Z{KjBy{%0?TZjS68K zLj(7|yED!S_g;hs1^L>&$R#s2mZt1X09|Wwlz$n#xUr*90E0>0B@4vJLU6(dm!PdA37A2r;;T8sIie~XsAGKXLMqs?vN0dg5=I^8FDo>JD%_a z+U)U~Si6P&VcV^}{{HM+Xm^}so_U$^rKTnV$`8!MXjQzZ?}V>=?G_pssc25Rex1uQ zPB#B-S)iZSzzqiBtTimWfd_cx$KKm#*$fX25$Ng)!KjD!39>x{5N?FF^YOiSxmBIp z*>hY$RyIkkf6EpHd5##v5@T6e)($T-Zg$mk#__a!-Xa4zd(XthS&mT`YNX$)*c6*? ziVSgx?E%81$tDHP|7m1=QfyCK0RhD!TE+~fyY?r-tM@>M)BNT~rGr~;u0>{jmK((^ z%z{ClO~S&o$;q}f4Bl&;o%ib%40Mi+TE7{%nMQCZY0ds%_jk1>s4cx6CA#_3R*hGg zplcRkSXi+sx`yHXTfwij@!^b@Mn*U%Mk+;|Klcp-%qqy_g+54}u@4a{*X@HLW!lL! zAFq(Tlo&p`O*~IZnanW;1$IQby6z`F?|ZWjPOVaue^`Q4@aRyn;~TiVsK=vO>)lFG zv!no4!i-C%#FCUR_n9U|%Wq}xfQXa`BT6)s!_&ZSuB2oR31em)7%8s;9g1*w_fVw8$_PJo&hXJ91$T7jfrR&q_||XGZ^G#06C*bnS0;YvyvV;cdkv; z-9|>|x*iz}>>zw{xb4C0~# zCsUN74z(571Hl!hoLX^gZO*}-Cu-VX20wgQ<>~3!Z`||^I_o4ygQ^Z`tqb6+{y3>Z`Tgquc~?zNP0*A{Z+6)YlnH#T@`5kL1iJNtm=L-ELoYgaGNNJ$v?ydj0xv7`a2Crp8%MW7K=*me*d*7UF0ud<0Rc_cnA%hE z@wT7)RaI3(YPJL($iC$hKlMK6-d=#IY~oX~c`E6;>w95RlQl`!F{Ge+CH;9i7(u1G z*=KYTsU={bwW&!9Y2fxkMRwF4>aEE83QSX<53kp}_5`L<=ts(ksC33LO~;@LS>Ii? z&)I{4Lb0=y=yY6MaDBb~sk#$hed+gt{h;$4>wyfMpx}QZyAC=}Yqm+BT(#zEcg0Z| zYFdpi)zii#@-(GWHd2aF%-ZjZ9NOVtR<_M%e7+Oi=lIQ}+4m)!;MASva2;){i4IHF z%Ba8gv{L8ZLtujr)+e2|dUZR!xxYySBnZsRWUPywX?vO4#7XXU^8zc%J7~4TmA5;y z&dP6!NmADhd2yC&H?craYpX};1oW`Ig<;Ud?S*Dc_ySvJzZhMWI zkuy#40b>^i+zlXiN2^Bml~gic)noji*py2}zqr*7BX#RfJnV~AV|ysOEwhNzT)iU1 zw}fEyC8O0RlIq9ox4t+lbt^iIs28&e%RJ5~MLI3Wkv1KJEsO$k)l zod?dgzmn|xq}?LKFktpjRngd(lE+vw5?cKf1O!G9-Ux3O>3eb-G+y-wBxK)uHPJ*R zt$8E&=~_73YQ(!wr8ZP{R#7-8iwXJ=(Q4!+>+I<2JJh~Q9OgkQpon%FeY301Ugprd z4OE#5g@fJ3~<(m0h-dQ_s5+)jyiqSD4zt;GH4^vBb z_w#c@XyAq3SX1J9?LB+OrfI}UYG{pjsl6#rHc2;d3oX`txz6f3i@$r#nXSn9%sQR} zde+4uA;d61N`QLR-p(!4q6GM9-wx{i?d7u9Y(~eOtB7XR>Ql@(Gh3m3vjGNg%VF-I z?vh9+5Ku#}CJ$e^4wEx)>XYRGz1CX^zU#OQ=ac-)P`g8CWZDXU|CoJG_@OLD22;XM z@_gIv4-5w;HeS^E@-t~D?affK3JM`H+B!o}EOLJiV9U6;zE_JI9YM^^n4WwpuH=pw zC+CLKr%%UzLuQh8MXoa)A8LP>Ai{z+U)kY5ZGYw3wMr|&3ZT2;D9g*q5gaL&FNKC5 z8#J_5t-1j$rZ>#XZl>J$Lbp4o(fIL2U1_m8ggu6N9_HEES)}!VVg;fODspD&i7p~k zS*~fNa+ap#)_y3|M}fRCgAo?gLH%u;HxogFstRH`_olBfZ`%cbt6I%_S3M&KTBU?2 zpuvnX>}&j=#!G|&OBrXqPr-fl)8y!82;)FGQJ;xk!(kU4A0LsMo2QrGCliYSE({s) zLxv!Xw$04|-q=`VX<@+zWYq~qA!KAJ!KZHrz*6WvldtEaMNsbC3^$-3rfD`NE*Y8P zSBxo_hxTTQ+qVi{H!5DosdHTxC`SO_Wbu2$VANDDRbvx3HwCuC=`cDi2<0Cg9UZHT z3=4{@AE@@%kgFAdK;-VX5@ZCPCgTz5@sN<>Z?Q0iBXj7`AufBBFKx;4qzFj@Tw-eL zn*Hq+aA+qd1j`?u=+tUu2Q;>02i5BvRU8TC?~H*8;Ql=EF3zOj>%jZ>p%9u$cVruv9D_#uS%XsOoxwze8BBtw0)boT zb*|~qc)_;IcYw-q->a>eR%?z{J&!Jq&A72oL*u5}pwWTr7nSoSq;6t(1|h8LKV;yo zX=^KfbhCDfJ4cE}jOA&vW_-cHa>6vN0*br)<6tshw3wL9h819;yTPb#!xxw&r>>~v zm1DaxIF_lAUJ<>oRNcK&nQooUph04IwE?*sZHZxFcK2hExR;Wyjm5*Q0p&*1U*cP`r=-|%-}UL^ z`;ok{Ot}x%0jDSoJ*cBdXDr(vZa5)?J4CJ-LZ$(98v*>oW5@)ieE^dh5r5 zuvyQ4ND>Gh1I)Md^mhU3K++PTfEUurabmkH4iwN{;LRiu{soRnCG=}J>^%FQb5BgV zKfLX%nd?8(h9bU_sx9TDA}8lxRHqB8!~BUMyWA$WjHl~+-@3ud(Szao*x{N+(W#d#!1I6kpxv__J1jcHPz`{R3@QlW(34ADZw@pz2pO^rooP%QTwcUk?sz zxPR+V;PN&MdO2?G{u;|6{{OHowfN-8mhhA=N?nn@a_W~~4gv8GU!J!VW`IM#Z7W)~ z>_Poy-woKAgJ&$L!dcSew3J|;7=4-lcO@I_P^Oum8 z(>(n@opnDts>iy&vaqQ-N?(s_|z zE&KSZy1r9BemrX7$Bo5t{`UiGHfR9E$)t=y!J3C5e;#^0cEbiGG5$1sHp{m~=TEa& zZQ2TTV&};FaNPD9o_0K^>VxvjRwWJJ`q{Q!-$btr+Wh{Jabsh*zkFOhH?Ll5rLg&x z2dg^l=+b9IrJC>0WUdt-=rE_aLCDV!JNhij-PS=jQQh4$e{@7~)WU?G%X+o&_iwOc zNA+>9T0K5_GHUj#yhpd5*ALX3iMVsFUEftpHccFQZu{cneIDF?S;MXO>d>i^C}FPjz4q;U_m;@z8n|?0(;pje z{oV|avRy0s_c{9X{@_o~Wh|M!zC+pYa zCI<%5I(2G)Sg`%s_)8+uiuqZGez<$L#^dOIkl?YmfBrajzW=B3FA>1#HY6scqL)`= zz|U%9XqWF^Y~0(g{zua~-2+x@-oWPx`wql)Fgy@vud5H`v0T`TyW%rv+rcm|xpZ04 zTT=J%xBFi{xv}!-=lg2|K~XnhPSCgs6ATmTdVk;ssnR=c&XXY6o_&0N&3&F1B$ta| z3QdE-X@1YmlK`%dfExCdf8Y1QwoQjUYIwI><-h&4T(_K$V315su33D%PmP+tHU=*Z zkBDgV^`K|bEw+tMZTw503Uv<*x%7Hv%V*8%Nvdp@gl$hO7kc>Q#)s}*$Jg2I?snnk zsal7#E7xe;c=XMiZGanv4f6w^Sq(RC46ayZ^N1ls4#L3J+h-OKzLly^jw$$K%Gfbu z$ByW=a__YxlVR2xk-l_jL^0g6gNr|z@%+fr6T_$90(iXRxA}u_ec!E`+jjWJVQ~EG zua6J+@xOL7%Pq8B1KF`fl{V;G)OV98_hlnkY~HF>ZrzrbuPzO$=;`SRV7=FbdiU!N z7&!aHtJyK%6t`U6qT!K-GaKgy9vFMQ7A(JR9_`xIhE5Wmknlmm+*ggOjuO3ibUJ*W zQun>~e5DfY=q6!d70Q((h^@mn9)8}b+2-9%1TAbF6I9GDV?dGZbwSlaIk*b{AhJnwUr?#pM%^BeRxaK3{ny)=JefI2$ z8H3xo1qSB-@#mjq+!iEPa+{a3a0T2?MPtT|TXZFV!u7R1H%mM8>Qx`m^7tFk9rj+z zc>Qd{s3oE`)yozk$bI3#ciajJp8`+OyiCi1erLb^B;RfOh)PGrvIaG3RCKHBd)3=* z$dT+}Jv`TbKdocanL+pZ?LXvp;m&!8Rky@B<7dS+ui7x^%-;nso-CgJ`p)@nRfboX z+^Y89yAQ$F-sqRvCBt?k{V^|pSp70Z2>_P&8qtY4Eqk*0&Wh#5%SNZ#I-6sQ=Cq^Bs;eB}VL4Ci)FIxT# zbA>o9A}Tfi-Zw#fsBT&$v5hs`P55XP1fET)25vU)>HQY+CwD)@@m#xf<+W?w$4vU+ z*1Vq=6<-cEh-yyTKjZbzv9&rtXK$_6U)-r`)6H-1)gKVk2t;mJzehJKxdG18CHLaa zQ+y8AHAq9tXNUaTD2;3^t)e%uUwfiGUtaE$>lbld31Iz z5T-voznwoPl#l0qetfI%XJPOJJF!V+~q@Kv_sCQBl&Y>ru#-OwsDapS37KV7Jd#zwG<<+QmDUNA-gK zvU+57AAObL<8^}74f1dQ*n8KgwD)dI?idG2F6zCHW^}rE=hk~}l9>mRHn%*ydg98+ zX9s`&`NuDs-AByHjO_D2)Oz*w(3QN0Ga$MjJEoj{B4u%E_UVA_D{^Wbe;>mPPEG#0 zd>y&(;d3ct=dG`u__=&M>`Jf)tv(a@1CRif?^K#RZrt|6#fnz9w0|BH1C>?_zL0pM z`uwYQ0BghtERRg>4&m>Qq>x=_D}7SgZ&HI1yU%ZH)T{7H&pBa(%L6vDXG`Jh@0W(H z`@I?rYHNZId-dFuc_MFYpPD#l4Sznrw^6H&RpZb0Xr)&8%p!oL{g>y>^Jo~Xdl$f0 z&*Pp_=?}*)!zft{pTc{~XLM{sdtq4$hkdfd%CV`Bxo#boq?fu z+h=6Wh@cViqkZd7#BC9;-7?Rk@%FPDw{LrLX}r&&86^kmE%EKp-?;CJ&pzdxDn$(; zDMh_EW7@Q#uU|cG1QNae*x&HUZGI+}j()Xr@XHe`1}#ZWE6B>q68Ra#dnV4FaN)w& z$InfI5Y}>9?YUohtSN^%_4#qgJG&;lyo>|^Y+e9K-pvKc`;(JJOOJQy(Zlb%_y$Aa ztoSBnq35KQ)!ptw6+3;b*V5w`!d@5FhM6l0mVr^#K3i}m@AdQZvYY2#HiMbE8nJ21 z27mqahe<7$RX2d_oZY;Q@Q101zvs(5#)9sRxgMH$CgFMJ zfZOL6&TI@@_WK~YydfM|!y(_551Ff#Q-1>3VIz>?yNn5C3Uu@QQZR;J^E(|NOMpgMq+5aEfVPoOI#d-nlF8KFzxo@=gAo z(XFcK-3Vqn`L8|?^S({~xc}op6(65Jv^ZmN8=U9kU!5*#0{OSw?B72AIwyVtpa#Xs z^>F3KzFW2^3XrCiu-=tfd~E&3F>BW9S1W(o)_2j8QL2a6#V`*ibZ(Wl<>w;eFZpK1 ztXT+<>9ywRoWG#^&%irxd zwDQ|s&%YZL4L4MaxoT*@IUV)_*0h3U3N1$e{Bx%coAU<2Z&3;6bOddT8Mg`Z-Tcek z*P?Ob)N>aOe30F%XM(X#*`kIAVHN;lF)RY6<_?+_Fpnlb9Ps#TVBO%qJHP+I2is4a zsJ?o2XSX2}CZqxjb?~R-X$i$i0H}w6Rg9L;OIZ$6bR?u3cqc|xZ`|wFpaYq{kh_ZY ze`=23zKrlD5bL1`sewsi>Dk1{X*l%$eb2QI50?TrG4l1xJCbJ)>h-SoV&s@UGje9U zta)lNq6~uaZ#Nt^?A3=8ngj>eL$Kz$K7V+HOBAnP^{ngDv@T2&qk66zF=`Z!b^-z1 z+`PW9_=}(Zxce|?5{#|Ih4-gtpW9N~$M@)zY11y={B=zIrXLokEdTq_qnPHd*;`# zG3B!4@Z#Ud|HMNtPW%eH)`YtE{1CBM)eYF7MT39Y)+PB@ zpF3XjrjJkA_C<8X!m~YqkQw|szxBDngIBv1&6-hCQgTx4ckQ?34Juak%W`<_saEq)-DU*L=iPZ#N&ja|#J9Sbo;`D3 z_I>p-tX7MJwYevhH=a}~dUwVbUkuy1^ZeEO5Dccrp7;g9ti#%Qp_Fh+^&6f%*OV5dd*65b;nV<|oe0 z0&=7Vv>@OdD*e7W`29Ldr_53nwL7;_Uj@QgodxN=dIhZL5vw{f^fo}phzKGW8encF z-aZe}GUl-=E;<@6|Dw(czps+78H~*v&t5QksHZy=f?bz(?jkYI0`r z4Je#{Tzxg{-sQ-0ix(!ftWm30*~G*{&lYE7e3s+>L7RdKpmXg%Jvp~r@T845e}7o7 zdBTABn*kqw?B&(qr=P;UN(Cyd1`J*yuO6<9uNz``f6v4!br!YVkGS8aB*y;tzAHZp z38|0h>d5x(hjg7hYsQRfEm}KSr!+O?UUBjZX$33=U{=n4ybf{X2a! zzWBtAix-c4cWU5<&6~p)8+`i2ZO-epYVGBfn*McPr+%IWnPqltzHGd>#oqp98$tCv zeHn)KYiBkVYA3;-FtOPuuMnQP-a{--JG{2t)dyE*Oj=bk_{oWkl$~1^ET}kl@DCr( z4jeoJWOH)t!$p6P8~9oRB<=gwi7 zCtA1M2dqGce*I#n?gbOQ_{UF8(qCuoe;>Q?W7gd0`4~;-&U43|O&AYJ$EQg~#*MA} z8@b)Qc~g>oI2%C@@4C;6X^V-fS>VA9H(mko^>EO@n$L#O(+laxRjaBzJv7#M-g59?~zdai9 zkuiW{&;CAPK+m3y5KLVzu;Q={Yz8cu0?}^1nr$X5;tN+u}ee<*rMnaIyKK)x2clSFY|A!((;#8RU-SaRZIKe@5Mbg zy$C-n?exk1dCB$a94ss>w`lpaLGz~GgIlySyfESL#vEC{Ts2j9?6=RPj2Y9F8Fj)pSBx&XdW2$<>lqY%fz$6r_`c8r^ujD ze_(cZfF}|5OhDXC{Jy{Vv0~~MUnHeA-SzXd#)`{(TE73ml6%*ex?feFQ2utVv3qQV zvRmIle9otk3kD2`>pt;%XT%W_XV<&s%2n#Mx!Jg}W5eM?p8p(?mh-;j zdYGpAKkT1=cT-eU^7i(1y7uem4LSkf)TgVvyN{TgQ2{}-C)%tVUA_7cd{}#|xv0-y zb+45{u87@$t4~BAVa&pV$FltZxygqQsXU@OIyOJtsNwq+D_(1!*8sU_K-0;LOTZt7^d33QT?bu3hT^#`?`S-^7Jr>DR|z9y?|cqnKAEYW@*CXIraw z?b_E)t!)8=*{}G zJPIKMZU4CE;o;dA&l&GSNDF+r=_$nP&dJI0s|Ux7*_ZBpc%t%v@jie{uxJ9JgFzvj zORC%U`|sU$JXcTJuwg@m9}+ut@>$$#z=i>HSM2XsHQrz0Y!;0<}l%{S}d zk72LwRfi%~!!7s4lYS)fbY^Iw4?LXX5w2ej#}mgb9P8Ywb!&H|fLOAm)t5775NI$2 z{WE1Bo<~^H0YqIOq0X|E<=pnq@Y+j|TJ1V$m zs~=moeEIUQ+b^G=TRL~noC$aD<|5{}X^R$NtHRu;e0lPW|AR}H1a4qTkz9-&0yXkCEgIB<_NA&4)y{tbtOxM9@ zh71|Zv*qzxWU=P<>`^dNyjR@ z>lPFea%t@$Y2Uk>p2BZbqd|l2VV&b-vX44_@(BrQgHsH)kzToaeI#6`Bs`HogO4vs zgH<-jaP4!6*Wrq3X~z*2R>loh@G?ZqMT8KDA1=>m$gU$skDi~gZ4d%ac8#o3=fa&k z8DZyoOD+J9Lj(J8UI|o}_)#!pT*sjc;n*E|dF#tZr;#*krl0E9vg-zgtv-mLZ1~Lj zlQ?AEQ*DbWR}amtj<8y9#hzo@?g)d%(H#Z+_r+t2Qy!kav-0)zr7PtKhCPY!nX=Do zxyOz@(7WvYNf2}a<7x0XJ3S_*{1;z*fw+O+ZeG6ru)o`o9-gBSV}q#68?TqAFC}TE zQoD4yj2lw$sO$cf_m>}^etBZxRmJ}4pRPUDW$AIEg1WiE0gq%ueGPFqM#IDI!(-$w zl}eGGXZiU@&)2%`>9($q_`AfCvwI(P>`|%G-g&7Zmu6*^_bWWGKIb*?Hn|%%wi^_^ zce(~NJ}Sy@;KcFQu02NXp-&&&II(v^&#o0PLmDoSb!brU&A$wcC|U44tY<(J5P3DP zPDhlH%5Xt?yV^0p`QvlOj_J6jAZ5--lI98l-Jm)m(HAWTMU;FF(9HO=Wk3MymOZ{3tx{LR~Z5PX9rYU2c4wB)e9Gf z^xXVIgwZ(hE| z-F@iElb=>?EZs7wm;RH@x+|^zzF#FOIH2Cj&mOP1`*)ufU`Wc5gnfb3!T7PN|HD2= zaTT~BBPT~3GokKKz(Q~^B3GVJ-0F7pwqJg3?si}oC)Q6%OB-3P%Jkmbht!xlDSmqA zq|ZkOmY`?$WEQc9Z5O* zs+ay;jbq3EnwPv-l9jL^c5n0j8wLcIt5AK9{|`;vPc<#SX$S&YUmiZQX|h7Aos39` znXBi2_eny+&Z4#@Nj-WXaCKL|`6WaRhF>e0|kNkKU_Tsb2ZdKCAG@AIguK zTrPj})~(|7Is_c9JwG(4-=!8CHm*Ye&$cm}Hg#(lbXWYKe_0@xCk+{*Y3b=XqK9TQ zRJGy-3+hgrcIEJ2*I}dokjR9RRTaMYqUOA$me9zDK~emAz?#;7-`CHB4sdH={yQ^Z zx!iv6;CnFG?7DZk1Bfq4wzKQ}w)y+QJ{E~?{McR#Kh7>3XWYAw3T{1kV3?ZT&v*3p z?HU}@4iP&$r>3P9Z|PA5PMGFZVP?&Hw_Ll4FJ6Q~J1+a`Ril0{pVh8gwS12s<_rsa zQ5>ezt*KGta5Y4y={7cUYrpcu@s%aFVXJ^84OSsweFGodYFjZlm?X1{V3=}HVle0WKtg%SccW--bd%#9WW~SArSIwL- zp#e0}aHG+`N6)ivFV=UPQ*`$1kbt^XgYrG!Id!VU+i(W`S#|3{i97 znA=et`5aEWkr#JmlySpWmCrc;9+>K&MV@XA+dV4_ndtX*_cz`-=~M98bGX53we&jC z`^Pcoe+zFR`lf<6!0jq=ppu1i7UHSXj zKtsscvKJfH52-dG~?OsL61j2ZTEQR zi?5##fAM(O@W}demLEKRyb+}Nk)XE8e?2+*3RxTLl`Z-z&T~ejXP1h-x)c`-h=;Oy zVQ*8>7xfcfc0zX9cSsIRQKbtX=YO%~<@3v6j}K$+xIfwYd$&d+(Yb(>E>TfCfmizj zFv|;P^Ji>7cWy)2?bcns3fLxfpVG|xaBR|*E8QBleN^`5t&tgutt(c1P_}$1?&j~6 zd(9rR=vzQT=2fn&>)fq>1E{>Uw>&~fIk3-Oz|=3gux{*_ZXxAED&0nGZF^|L7mUaI z_}@OWxaJm5_bKn+^~_(h2%Mipssl&9>Zf%&{hgUTE`u@qY%K3S#lQEwsnJiLKW~Cy zIT9XrKD|ee2}s5eSa@&Rk3SZ`r4u?`JYKSR2FaELp86@$1;!f3j9KM}b$bbn_ z*=W$9K@U$8^90a5y^%5nK-i1rK1Gz*q#u8LA2z^7Zg+Q9c|CIOVCk`I-r6%8UhTVu z;61k?xM+%AW!$HvVQm)Ss1V2`^4nbigM@rj?RIyJ(7mNXCQ zdU~#ye1>3#kT$9ojQHBj$5Bzg!FTaN3Bqxot(-r9KC&c^2O|{$n1x_3ZSEPeVt*#o zF8|(u5Bl}%fPXfB@gl^pf2fz&+zy&9iΜoaq0mTn+cG$f!BCIRIz~xZg3$H|sFs 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ʕ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 literal 0 HcmV?d00001 From a039afc2caf5bd5d58b0a4f1ae94f869715ceaab Mon Sep 17 00:00:00 2001 From: Takahiro Noguchi Date: Fri, 5 Jul 2024 17:45:31 -0500 Subject: [PATCH 07/48] Update MATLAB/Simulin model --- .../integrator-anti-windup/main.m | 243 ++++++------------ .../integrator-anti-windup/simple_model.slx | Bin 50643 -> 146387 bytes 2 files changed, 85 insertions(+), 158 deletions(-) diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/main.m b/source/getting-started/control-with-amdc/integrator-anti-windup/main.m index 1a625ec2..7b9b305f 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/main.m +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/main.m @@ -2,175 +2,102 @@ clear close all -%% Set simulation and plant parameters -ref = 0; % Reference -d_ref = 15; % Reference -file_name = {'no_anti_windup', 'simple_clamping', 'advanced_clamping', 'back_tracking'}; -for k = 1:length(file_name) - if k == 1 % no anti-windup - Clamping_enable = 0; % (0: clamping is deactivated) - Advanced_clamping_enable = 0; % (0: advanced clamping is deactivated) - Back_tracking_enable = 0; % (0: back-tracking is deactivated) - elseif k == 2 % simple clamping - Clamping_enable = 1; % (0: clamping is deactivated) - Advanced_clamping_enable = 0; % (0: advanced clamping is deactivated) - Back_tracking_enable = 0; % (0: back-tracking is deactivated) - elseif k == 3 % advanced clamping - Clamping_enable = 1; % (0: clamping is deactivated) - Advanced_clamping_enable = 1; % (0: advanced clamping is deactivated) - Back_tracking_enable = 0; % (0: back-tracking is deactivated) - elseif k == 4 % back-tracking - Clamping_enable = 0; % (0: clamping is deactivated) - Advanced_clamping_enable = 0; % (0: advanced clamping is deactivated) - Back_tracking_enable = 1; % (0: back-tracking is deactivated) - end - - Tsim = 1e-5; % Simulation sampling time [s] - Tend = 1; % Simulation end time [s] - - start = 0.2; % Reference start time [s] - stop = 1; % Reference end time [s] - - fb = 10; % controller bandwidth [Hz] - wb = 2*pi*fb; % Controller bandwidth [rad/s] - - Kp = wb; % P gain - Ki = wb; % I gain +%% Set simulation parameters +Tsim = 1e-5; % Simulation sampling time [s] +Tend = 1; % Simulation end time [s] - Kb = Ki/Kp; % Back-calculation coefficient - - upper_limit = 10; % Upper limit - lower_limit = -10; % Lower limit - - d_step1 = 0.2; % Disturbance step time 1 [s] - d_step2 = 0.3; % Disturbance step time 2 [s] - d_step3 = 0.35; % Disturbance step time 3 [s] - d_step4 = 0.4; % Disturbance step time 4 [s] +ref = 1; % Reference +start = 0.2; % Reference start time [s] +stop = 1.5; % Reference end time [s] + +d_ref = 0; % Disturbance +d_start = 0.2; % Disturbance start time [s] +d_stop = 0.3; % Disturbance end time [s] + +upper_limit = 10; % Upper limit +lower_limit = -10; % Lower limit + +%% Set controller parameters +fb = 10; % Controller bandwidth [Hz] +wb = 2*pi*fb; % Controller bandwidth [rad/s] + +Kp = wb; % P gain +Ki = wb; % I gain + +Kb = Ki/Kp; % Back-calculation coefficient + +% Select anti-windup methods that you want to simulate +sim_scenario = ["No anti-windup","Simple clamping","Advanced clamping","Back-tracking"]; +num_sim_scenario = length(sim_scenario); + +% List of variables to extract from Simulink +interested_signals = {'time','Reference','Output','Error','Iout','preSat','postSat','Disturbance'}; + +% Preallocate the cell array to store results +results = cell(round(Tend/Tsim+1), length(interested_signals)); + +%% Implement each simulation scenario +for i = 1:num_sim_scenario + switch sim_scenario(i) + case "No anti-windup" + Clamping_enable = 0; Advanced_clamping_enable = 0; Back_tracking_enable = 0; + case "Simple clamping" + Clamping_enable = 1; Advanced_clamping_enable = 0; Back_tracking_enable = 0; + case "Advanced clamping" + Clamping_enable = 1; Advanced_clamping_enable = 1; Back_tracking_enable = 0; + case "Back-tracking" + Clamping_enable = 0; Advanced_clamping_enable = 0; Back_tracking_enable = 1; + end - %% Implement simulation + % Run simulation out = sim('simple_model'); % Extract simulation data runObj = Simulink.sdi.Run.getLatest; - % List of variables to extract - obj2ext = {'time','ref','fb','err','I_out','preSat','postSat','d'}; - % Get signal IDs and store signals into array - for idx = 2:length(obj2ext) - sigID = getSignalIDsByName(runObj,obj2ext{idx}); - sig_obj.(obj2ext{idx}) = Simulink.sdi.getSignal(sigID); - sig_val.(obj2ext{idx}) = sig_obj.(obj2ext{idx}).Values.Data; + for idx = 2:length(interested_signals) + sigID = getSignalIDsByName(runObj,interested_signals{idx}); + sig_obj.(interested_signals{idx}) = Simulink.sdi.getSignal(sigID); + sig_val.(interested_signals{idx}) = sig_obj.(interested_signals{idx}).Values.Data; end - time = sig_obj.(obj2ext{2}).Values.Time; - - writematrix([time,sig_val.ref,sig_val.fb,sig_val.err, ... - sig_val.I_out,sig_val.preSat,sig_val.postSat,sig_val.d], append(char(file_name(k)), '.csv')) - + % Store simulation results + time = sig_obj.(interested_signals{2}).Values.Time; + results{i} = [time,sig_val.Reference,sig_val.Output,sig_val.Error, ... + sig_val.Iout,sig_val.preSat,sig_val.postSat,sig_val.Disturbance]; end -no_anti_windup_data = readmatrix('no_anti_windup.csv'); -simple_clamping_data = readmatrix('simple_clamping.csv'); -advanced_clamping_data = readmatrix('advanced_clamping.csv'); -back_tracking_data = readmatrix('back_tracking.csv'); - -%% Plot figure -markersize = 3; -linewidth = 1; - -figure -% subplot(611) -plot(no_anti_windup_data(:,strmatch('time',obj2ext)),no_anti_windup_data(:,strmatch('ref',obj2ext)),'color','k','Linewidth',linewidth); -hold on -plot(no_anti_windup_data(:,strmatch('time',obj2ext)),no_anti_windup_data(:,strmatch('fb',obj2ext)),'color','r','Linewidth',linewidth); -hold on -plot(simple_clamping_data(:,strmatch('time',obj2ext)),simple_clamping_data(:,strmatch('fb',obj2ext)),'color','b','Linewidth',linewidth); -hold on -plot(advanced_clamping_data(:,strmatch('time',obj2ext)),advanced_clamping_data(:,strmatch('fb',obj2ext)),'color','c','LineStyle','--','Linewidth',linewidth); -hold on -plot(back_tracking_data(:,strmatch('time',obj2ext)),back_tracking_data(:,strmatch('fb',obj2ext)),'color','g','Linewidth',linewidth); -hold on -xlabel('Time [s]','Interpreter','latex'); -ylabel('fb','Interpreter','latex'); -legend('Command','w/o AW','Simple clamping','Advanced clamping','Back-tracking','Interpreter','latex','Location','east'); -xlim([0 Tend]); -figure -% subplot(612) -plot(no_anti_windup_data(:,strmatch('time',obj2ext)),no_anti_windup_data(:,strmatch('err',obj2ext)),'color','r','Linewidth',linewidth); -hold on -plot(simple_clamping_data(:,strmatch('time',obj2ext)),simple_clamping_data(:,strmatch('err',obj2ext)),'color','b','Linewidth',linewidth); -hold on -plot(advanced_clamping_data(:,strmatch('time',obj2ext)),advanced_clamping_data(:,strmatch('err',obj2ext)),'color','c','LineStyle','--','Linewidth',linewidth); -hold on -plot(back_tracking_data(:,strmatch('time',obj2ext)),back_tracking_data(:,strmatch('err',obj2ext)),'color','g','Linewidth',linewidth); -hold on -xlabel('Time [s]','Interpreter','latex'); -ylabel('err','Interpreter','latex'); -legend('w/o AW','Simple clamping','Advanced clamping','Back-tracking','Interpreter','latex','Location','east'); -xlim([0 Tend]); -figure -% subplot(613) -plot(no_anti_windup_data(:,strmatch('time',obj2ext)),no_anti_windup_data(:,strmatch('I_out',obj2ext)),'color','r','Linewidth',linewidth); -hold on -plot(simple_clamping_data(:,strmatch('time',obj2ext)),simple_clamping_data(:,strmatch('I_out',obj2ext)),'color','b','Linewidth',linewidth); -hold on -plot(advanced_clamping_data(:,strmatch('time',obj2ext)),advanced_clamping_data(:,strmatch('I_out',obj2ext)),'color','c','LineStyle','--','Linewidth',linewidth); -hold on -plot(back_tracking_data(:,strmatch('time',obj2ext)),back_tracking_data(:,strmatch('I_out',obj2ext)),'color','g','Linewidth',linewidth); -hold on -xlabel('Time [s]','Interpreter','latex'); -ylabel('Iout','Interpreter','latex'); -legend('w/o AW','Simple clamping','Advanced clamping','Back-tracking','Interpreter','latex','Location','east'); -xlim([0 Tend]); -figure -% subplot(614) -plot(no_anti_windup_data(:,strmatch('time',obj2ext)),no_anti_windup_data(:,strmatch('preSat',obj2ext)),'color','r','Linewidth',linewidth); -hold on -plot(simple_clamping_data(:,strmatch('time',obj2ext)),simple_clamping_data(:,strmatch('preSat',obj2ext)),'color','b','Linewidth',linewidth); -hold on -plot(advanced_clamping_data(:,strmatch('time',obj2ext)),advanced_clamping_data(:,strmatch('preSat',obj2ext)),'color','c','LineStyle','--','Linewidth',linewidth); -hold on -plot(back_tracking_data(:,strmatch('time',obj2ext)),back_tracking_data(:,strmatch('preSat',obj2ext)),'color','g','Linewidth',linewidth); -hold on -xlabel('Time [s]','Interpreter','latex'); -ylabel('preSat','Interpreter','latex'); -legend('w/o AW','Simple clamping','Advanced clamping','Back-tracking','Interpreter','latex','Location','east'); -xlim([0 Tend]); -figure -% subplot(615) -plot(no_anti_windup_data(:,strmatch('time',obj2ext)),no_anti_windup_data(:,strmatch('postSat',obj2ext)),'color','r','Linewidth',linewidth); -hold on -plot(simple_clamping_data(:,strmatch('time',obj2ext)),simple_clamping_data(:,strmatch('postSat',obj2ext)),'color','b','Linewidth',linewidth); -hold on -plot(advanced_clamping_data(:,strmatch('time',obj2ext)),advanced_clamping_data(:,strmatch('postSat',obj2ext)),'color','c','LineStyle','--','Linewidth',linewidth); -hold on -plot(back_tracking_data(:,strmatch('time',obj2ext)),back_tracking_data(:,strmatch('postSat',obj2ext)),'color','g','Linewidth',linewidth); -hold on -xlabel('Time [s]','Interpreter','latex'); -ylabel('postSat','Interpreter','latex'); -legend('w/o AW','Simple clamping','Advanced clamping','Back-tracking','Interpreter','latex','Location','east'); -xlim([0 Tend]); -figure -% subplot(616) -plot(no_anti_windup_data(:,strmatch('time',obj2ext)),no_anti_windup_data(:,strmatch('d',obj2ext)),'color','r','Linewidth',linewidth); -hold on -plot(simple_clamping_data(:,strmatch('time',obj2ext)),simple_clamping_data(:,strmatch('d',obj2ext)),'color','b','Linewidth',linewidth); -hold on -plot(advanced_clamping_data(:,strmatch('time',obj2ext)),advanced_clamping_data(:,strmatch('d',obj2ext)),'color','c','LineStyle','--','Linewidth',linewidth); -hold on -plot(back_tracking_data(:,strmatch('time',obj2ext)),back_tracking_data(:,strmatch('d',obj2ext)),'color','g','Linewidth',linewidth); -hold on -xlabel('Time [s]','Interpreter','latex'); -ylabel('d','Interpreter','latex'); -legend('w/o AW','Simple clamping','Advanced clamping','Back-tracking','Interpreter','latex','Location','east'); -xlim([0 Tend]); - -% width = 5.43; height = 4.38/3; -% set(0,'units','inches') -% Inch_SS = get(0,'screensize'); -% set(gcf,'Units','inches','Position',[(Inch_SS(3)-width)/2 (Inch_SS(4)-height)/2 width height]); -% print('-dsvg','-noui','results'); - +%% Plot figures +% Define figure size +width = 5.43; height = 4.38/3; +set(0,'units','inches') +Inch_SS = get(0,'screensize'); +% Define plot line parameters +lw = 1; colors = {'r', 'b', 'c', 'g'}; lineStyles = {'-', '-', '--', '-'}; +% Plot figures +for j = 3:length(interested_signals) + figure + hold on + if j == 3 % This is special handling for 'Output' plot with 'Command' + plot(results{1}(:, 1),results{1}(:, 2),'color','k','Linewidth',lw); + for i = 1:num_sim_scenario + plot(results{i}(:, 1), results{i}(:, j), ... + 'color',colors{i},'LineStyle',lineStyles{i},'Linewidth',lw); + end + legend(['Command', sim_scenario],'Interpreter','latex','Location','east'); + else + for i = 1:num_sim_scenario + plot(results{i}(:, 1),results{i}(:, j), ... + 'color',colors{i},'LineStyle',lineStyles{i},'Linewidth',lw); + end + legend(sim_scenario,'Interpreter','latex','Location','east'); + end + xlabel('Time [s]','Interpreter','latex'); + ylabel(interested_signals{j},'Interpreter','latex'); + xlim([0 Tend]); + set(gcf,'Units','inches','Position',[(Inch_SS(3)-width)/2,(Inch_SS(4)-height)/2,width,height]); + print('-dsvg','-noui',['images/' interested_signals{j}]); +end diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/simple_model.slx b/source/getting-started/control-with-amdc/integrator-anti-windup/simple_model.slx index ebb5993723f8fa648ea013b7359cfc8ab6c21d2b..8bf1ae929ceda39a7dd6f8fda62e65114f4320d3 100644 GIT binary patch literal 146387 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 C=jibO literal 50643 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 tkR|_}_3yUnG41gi$uHVw?QgV4? Date: Fri, 5 Jul 2024 17:52:06 -0500 Subject: [PATCH 08/48] Update document --- .../integrator-anti-windup/index.md | 27 ++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md index f0714750..388c8c5e 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md @@ -1,15 +1,36 @@ # Integrator Anti-Windup -This document describes how to think about performance of anti-windup. A windup might occur when the controller with an integrator has a limitation on the manipulated variables. When integrator windup occurs, it can degrade system response and stability. +This article describes how to evaluate performance of anti-windup. A windup might occur when the controller with an integrator faces limitations on the manipulated variables, leading to degraded system response and stability. The effectiveness of anti-windup strategy depends on the duration of the windup and how extreme it is. Therefore, simulating realistic scenarios of windup and anti-windup performance is crucial to investigate specific scenarios that are likely to be encountered since perfect anti-windup is unachievable. ## How to think about performance of anti-windup? -Generally, the main components of a control diagram are the controller and plant, as shown in the figure below. The controller provides a manipulated variable to actuate the plant model. +### Block Diagram with Saturation -```{image} images/control-diagram.svg +Generally, the primary components of a control diagram are the controller and plant. The controller provides a manipulated variable to actuate the plant model. Practically, manipulated variables are limited by the actuator’s capability. The figure below illustrates a practical block diagram considering the saturation block, demonstrating the physical limitations of the actuator input. + +```{image} images/control-diagram-sat.svg :align: center ``` +In this example, a simple plant model of 1/(s+1) is employed, with the saturation block located before the plant. Note the saturation block produces an output signal bounded to the upper saturation value of `+Limit` and lower saturation value of `-Limit`. This system can be analyzed from following perspectives: + +1. Current regulation: + - Plant input: Voltage reference + - Output: Current + - Physical limitation: The realistic output voltage is restricted by the capability of the DC power supply + +2. Speed control: + - Plant input: q-axis current command + - Output: Rotational speed of the electric machinery + - Physical limitation: The practical output current is limited by the coil current density, typically 8 A/mm^2 (air-cooling). + +3. Temperature control: + - Plant input: Heat + - Output: Resulting system temperature + - Physical limitation: The heater’s power rating (e.g., 1 kW) limits the actuator. + +In this example, the PI controller is employed to achieve the desired system response. The PI gains are set to achieve the first response with a bandwidth of 10 Hz, i.e., $K_p = 2\pi \times 10$, and $K_i = 2\pi \times 10$. + In practice, the manipulated variables are physically limited: For example, the manipulated variable of [current regulation](../../../applications/current-control/index.md) is voltage reference with a restriction of DC power supply. As another example, in [speed control](../../../applications/speed-control/index.md), the manipulated variable is the $q$-axis current, which is also limited by the current density of coils. Therefore, the control diagram can be rewritten, separating the plant into a saturation block and plant. ```{image} images/control-diagram-sat.svg From 134bf43745b2312b62e63ba7521c9ec120db1715 Mon Sep 17 00:00:00 2001 From: Takahiro Noguchi Date: Fri, 5 Jul 2024 18:39:38 -0500 Subject: [PATCH 09/48] Update documents and figures --- .../images/Disturbance.svg | 113 + .../images/Disturbance_advanced_better.svg | 112 + .../images/Iout_advanced_better.svg | 154 + .../images/Iout_advanced_c.svg | 175 ++ .../images/Iout_back_c.svg | 198 ++ .../images/Iout_sat_c.svg | 163 + .../images/Iout_simple_c.svg | 149 + .../images/Output_advanced_better.svg | 171 ++ .../images/Output_advanced_c.svg | 192 ++ .../images/Output_back_c.svg | 215 ++ .../images/Output_back_d.svg | 219 ++ .../images/Output_sat_c.svg | 180 ++ .../images/Output_sat_d.svg | 184 ++ .../images/Output_simple_c.svg | 166 + .../images/Output_simple_d.svg | 170 ++ ....svg => anti-windup-advanced-clamping.svg} | 463 +-- .../images/anti-windup-back-tracking-dis.svg | 2441 --------------- ...-con.svg => anti-windup-back-tracking.svg} | 120 +- ...is.svg => anti-windup-simple-clamping.svg} | 2660 ++--------------- .../images/compareSat1.svg | 1316 -------- .../images/compareSat2.svg | 699 ----- .../images/control-diagram-overview.svg | 341 ++- .../images/control-diagram-sat.svg | 1306 +++++--- .../images/control-diagram.svg | 585 ---- .../images/postSat_advanced_c.svg | 178 ++ .../images/postSat_back_c.svg | 201 ++ .../images/postSat_simple_c.svg | 152 + .../images/preSat_postSat.svg | 156 + .../integrator-anti-windup/images/result.svg | 2292 -------------- .../integrator-anti-windup/index.md | 288 +- 30 files changed, 5029 insertions(+), 10730 deletions(-) create mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/images/Disturbance.svg create mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/images/Disturbance_advanced_better.svg create mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout_advanced_better.svg create mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout_advanced_c.svg create mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout_back_c.svg create mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout_sat_c.svg create mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout_simple_c.svg create mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_advanced_better.svg create mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_advanced_c.svg create mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_back_c.svg create mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_back_d.svg create mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_sat_c.svg create mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_sat_d.svg create mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_simple_c.svg create mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_simple_d.svg rename source/getting-started/control-with-amdc/integrator-anti-windup/images/{anti-windup-clamping_con.svg => anti-windup-advanced-clamping.svg} (90%) delete mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-back-tracking-dis.svg rename source/getting-started/control-with-amdc/integrator-anti-windup/images/{anti-windup-back-tracking-con.svg => anti-windup-back-tracking.svg} (97%) rename source/getting-started/control-with-amdc/integrator-anti-windup/images/{anti-windup-clamping_dis.svg => anti-windup-simple-clamping.svg} (57%) delete mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/images/compareSat1.svg delete mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/images/compareSat2.svg delete mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/images/control-diagram.svg create mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/images/postSat_advanced_c.svg create mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/images/postSat_back_c.svg create mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/images/postSat_simple_c.svg create mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/images/preSat_postSat.svg delete mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/images/result.svg diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/Disturbance.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Disturbance.svg new file mode 100644 index 00000000..0aa28f89 --- /dev/null +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Disturbance.svg @@ -0,0 +1,113 @@ + + + diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/Disturbance_advanced_better.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Disturbance_advanced_better.svg new file mode 100644 index 00000000..b3f3e642 --- /dev/null +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Disturbance_advanced_better.svg @@ -0,0 +1,112 @@ + + + diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout_advanced_better.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout_advanced_better.svg new file mode 100644 index 00000000..85e460ff --- /dev/null +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout_advanced_better.svg @@ -0,0 +1,154 @@ + + + diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout_advanced_c.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout_advanced_c.svg new file mode 100644 index 00000000..6361443c --- /dev/null +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout_advanced_c.svg @@ -0,0 +1,175 @@ + + + diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout_back_c.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout_back_c.svg new file mode 100644 index 00000000..4d75b888 --- /dev/null +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout_back_c.svg @@ -0,0 +1,198 @@ + + + diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout_sat_c.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout_sat_c.svg new file mode 100644 index 00000000..0987cbcc --- /dev/null +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout_sat_c.svg @@ -0,0 +1,163 @@ + + + diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout_simple_c.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout_simple_c.svg new file mode 100644 index 00000000..e2931438 --- /dev/null +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout_simple_c.svg @@ -0,0 +1,149 @@ + + + diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_advanced_better.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_advanced_better.svg new file mode 100644 index 00000000..2da67838 --- /dev/null +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_advanced_better.svg @@ -0,0 +1,171 @@ + + + diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_advanced_c.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_advanced_c.svg new file mode 100644 index 00000000..8bf84a1c --- /dev/null +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_advanced_c.svg @@ -0,0 +1,192 @@ + + + diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_back_c.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_back_c.svg new file mode 100644 index 00000000..504ace62 --- /dev/null +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_back_c.svg @@ -0,0 +1,215 @@ + + + diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_back_d.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_back_d.svg new file mode 100644 index 00000000..71319b57 --- /dev/null +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_back_d.svg @@ -0,0 +1,219 @@ + + + diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_sat_c.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_sat_c.svg new file mode 100644 index 00000000..661af16b --- /dev/null +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_sat_c.svg @@ -0,0 +1,180 @@ + + + diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_sat_d.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_sat_d.svg new file mode 100644 index 00000000..ff54b108 --- /dev/null +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_sat_d.svg @@ -0,0 +1,184 @@ + + + diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_simple_c.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_simple_c.svg new file mode 100644 index 00000000..b6df620c --- /dev/null +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_simple_c.svg @@ -0,0 +1,166 @@ + + + diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_simple_d.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_simple_d.svg new file mode 100644 index 00000000..7a301e87 --- /dev/null +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_simple_d.svg @@ -0,0 +1,170 @@ + + + diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-clamping_con.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-advanced-clamping.svg similarity index 90% rename from source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-clamping_con.svg rename to source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-advanced-clamping.svg index 42d27c36..dcc471b2 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-clamping_con.svg +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-advanced-clamping.svg @@ -2,13 +2,13 @@ TRTRI_outIout00preSatpreSatSignSignSignSignErrorErrorpostSatpostSatNotEqualNotEqualEqualEqualANDAND + transform="translate(37.975362,9.0118016)" /> diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-back-tracking-dis.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-back-tracking-dis.svg deleted file mode 100644 index 32d9a09d..00000000 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-back-tracking-dis.svg +++ /dev/null @@ -1,2441 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xmlpreSatError - - - - - - - - - - - -postSatTRI_out - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-back-tracking-con.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-back-tracking.svg similarity index 97% rename from source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-back-tracking-con.svg rename to source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-back-tracking.svg index fcca8faf..7be3d1d0 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-back-tracking-con.svg +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-back-tracking.svg @@ -2,13 +2,13 @@ preSatErrorpreSatErrorpostSatpostSatTRTRI_outIout diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-clamping_dis.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-simple-clamping.svg similarity index 57% rename from source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-clamping_dis.svg rename to source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-simple-clamping.svg index 0c367285..f89e3f79 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-clamping_dis.svg +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-simple-clamping.svg @@ -2,13 +2,13 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - TRTRI_outIout00preSatSignSignpreSatErrorErrorpostSatpostSatNotEqualNotEqualEqualAND - - - - - - - - - - - - - + id="g5659" + transform="matrix(0.352778,0,0,0.352778,-0.42168,0.0462139)"> + id="g5657" + transform="translate(1.196,4.494)"> - - - - - - + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="path33" /> - - + + + + id="g5664"> + id="use23" + transform="translate(1.301,11.852)"> + d="m 3,-2.625 c -0.171875,0.046875 -0.296875,0.1875 -0.296875,0.328125 0,0.171875 0.140625,0.234375 0.234375,0.234375 0.078125,0 0.34375,-0.046875 0.34375,-0.40625 0,-0.453125 -0.5,-0.609375 -0.9375,-0.609375 -1.078125,0 -1.28125,0.8125 -1.28125,1.015625 0,0.265625 0.15625,0.4375 0.25,0.515625 0.171875,0.140625 0.296875,0.171875 0.78125,0.25 0.15625,0.03125 0.59375,0.109375 0.59375,0.453125 0,0.125 -0.078125,0.390625 -0.359375,0.5625 C 2.046875,-0.125 1.703125,-0.125 1.625,-0.125 1.34375,-0.125 0.953125,-0.1875 0.78125,-0.421875 1.015625,-0.453125 1.171875,-0.625 1.171875,-0.8125 c 0,-0.171875 -0.125,-0.265625 -0.265625,-0.265625 -0.203125,0 -0.40625,0.171875 -0.40625,0.46875 0,0.421875 0.4375,0.671875 1.109375,0.671875 1.296875,0 1.53125,-0.875 1.53125,-1.140625 0,-0.640625 -0.703125,-0.765625 -0.96875,-0.8125 -0.0625,-0.015625 -0.234375,-0.046875 -0.28125,-0.0625 -0.25,-0.046875 -0.375,-0.1875 -0.375,-0.34375 0,-0.15625 0.125,-0.34375 0.28125,-0.453125 0.1875,-0.109375 0.421875,-0.125 0.546875,-0.125 0.140625,0 0.5,0.015625 0.65625,0.25 z m 0,0" + id="path37" /> - + id="g39656" + transform="matrix(0.352778,0,0,0.352778,-0.23151,-0.00216092)"> + id="g39654" + transform="translate(0,9.8030005)"> + d="M 7.171875,-5.796875 C 7.15625,-5.84375 7.09375,-5.953125 7.09375,-6 c 0,-0.015625 0.015625,-0.03125 0.265625,-0.203125 L 8.75,-7.296875 c 1.921875,-1.5 2.546875,-2 3.546875,-2.078125 0.09375,-0.015625 0.234375,-0.015625 0.234375,-0.265625 0,-0.078125 -0.03125,-0.15625 -0.15625,-0.15625 -0.15625,0 -0.328125,0.03125 -0.484375,0.03125 H 11.34375 c -0.4375,0 -0.921875,-0.03125 -1.34375,-0.03125 -0.109375,0 -0.28125,0 -0.28125,0.265625 0,0.140625 0.109375,0.15625 0.1875,0.15625 0.15625,0.015625 0.34375,0.0625 0.34375,0.265625 0,0.28125 -0.421875,0.625 -0.546875,0.71875 L 4.09375,-4.015625 5.28125,-8.75 c 0.125,-0.484375 0.15625,-0.625 1.171875,-0.625 0.28125,0 0.40625,0 0.40625,-0.28125 0,-0.140625 -0.140625,-0.140625 -0.21875,-0.140625 -0.25,0 -0.5625,0.03125 -0.828125,0.03125 H 4.109375 c -0.25,0 -0.5625,-0.03125 -0.828125,-0.03125 -0.109375,0 -0.265625,0 -0.265625,0.265625 0,0.15625 0.125,0.15625 0.34375,0.15625 0.875,0 0.875,0.109375 0.875,0.265625 0,0.03125 0,0.109375 -0.0625,0.328125 l -1.9375,7.71875 c -0.125,0.5 -0.15625,0.640625 -1.15625,0.640625 -0.28125,0 -0.421875,0 -0.421875,0.265625 C 0.65625,0 0.78125,0 0.875,0 1.140625,0 1.4375,-0.03125 1.703125,-0.03125 h 1.6875 C 3.65625,-0.03125 3.953125,0 4.234375,0 4.34375,0 4.5,0 4.5,-0.265625 c 0,-0.15625 -0.125,-0.15625 -0.34375,-0.15625 -0.875,0 -0.875,-0.109375 -0.875,-0.25 0,-0.109375 0.09375,-0.46875 0.140625,-0.6875 l 0.5625,-2.21875 2.1875,-1.71875 C 6.578125,-4.375 7.34375,-2.53125 7.9375,-1.140625 7.96875,-1.046875 8,-0.96875 8,-0.859375 c 0,0.421875 -0.5625,0.4375 -0.703125,0.4375 -0.125,0 -0.265625,0 -0.265625,0.28125 C 7.03125,0 7.1875,0 7.234375,0 c 0.5,0 1.03125,-0.03125 1.53125,-0.03125 h 0.6875 C 9.671875,-0.03125 9.90625,0 10.125,0 c 0.09375,0 0.25,0 0.25,-0.265625 0,-0.15625 -0.140625,-0.15625 -0.28125,-0.15625 C 9.5625,-0.4375 9.375,-0.546875 9.171875,-1.0625 Z m 0,0" + id="path39652" /> - - - - - + clip-path="url(#clipPath969)" + id="g39664" + transform="matrix(0.352778,0,0,0.352778,-0.23151,-0.00216092)"> + id="g39662"> + id="g39660" + transform="translate(11.951,11.955)"> + d="m 2.828125,-6.234375 c 0,-0.203125 -0.140625,-0.359375 -0.359375,-0.359375 -0.28125,0 -0.546875,0.265625 -0.546875,0.53125 0,0.1875 0.140625,0.359375 0.375,0.359375 0.234375,0 0.53125,-0.234375 0.53125,-0.53125 z m -0.75,3.75 c 0.109375,-0.28125 0.109375,-0.3125 0.21875,-0.578125 0.078125,-0.203125 0.125,-0.34375 0.125,-0.53125 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.28125,-0.9375 0.671875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.21875 -0.078125,0.421875 -0.109375,0.53125 -0.078125,0.25 -0.53125,1.40625 -0.6875,1.84375 -0.109375,0.25 -0.234375,0.578125 -0.234375,0.796875 0,0.46875 0.34375,0.8125 0.8125,0.8125 0.9375,0 1.3125,-1.4375 1.3125,-1.53125 0,-0.109375 -0.09375,-0.109375 -0.125,-0.109375 -0.09375,0 -0.09375,0.03125 -0.140625,0.1875 -0.1875,0.625 -0.515625,1.234375 -1.015625,1.234375 -0.171875,0 -0.25,-0.09375 -0.25,-0.328125 0,-0.25 0.0625,-0.390625 0.296875,-1 z m 0,0" + id="path39658" /> - - - - - - - - - - - + diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/compareSat1.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/compareSat1.svg deleted file mode 100644 index 811ecace..00000000 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/images/compareSat1.svg +++ /dev/null @@ -1,1316 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/compareSat2.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/compareSat2.svg deleted file mode 100644 index 2d61c4d6..00000000 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/images/compareSat2.svg +++ /dev/null @@ -1,699 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/control-diagram-overview.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/control-diagram-overview.svg index 522fc8e7..0c2ef6b4 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/images/control-diagram-overview.svg +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/control-diagram-overview.svg @@ -2,9 +2,9 @@ - + + + + + + + + ErrorOutputErrorSaturationSaturationPlantpreSatI_outIout - + + + + + + + + + + + + + + + + + + + + + + + + + + + +DisturbanceOutput diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/control-diagram-sat.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/control-diagram-sat.svg index f6e92189..40973979 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/images/control-diagram-sat.svg +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/control-diagram-sat.svg @@ -2,9 +2,9 @@ + + + + + + + + + + + + ControllerControllerErrorOutputSaturationPlantSaturationpreSatPlant + r="1.0252603" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +postSatDisturbance diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/control-diagram.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/control-diagram.svg deleted file mode 100644 index 82ab15d3..00000000 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/images/control-diagram.svg +++ /dev/null @@ -1,585 +0,0 @@ - - - -image/svg+xmlControllerReferenceErrorOutputPlant diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/postSat_advanced_c.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/postSat_advanced_c.svg new file mode 100644 index 00000000..31d27c3e --- /dev/null +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/postSat_advanced_c.svg @@ -0,0 +1,178 @@ + + + diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/postSat_back_c.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/postSat_back_c.svg new file mode 100644 index 00000000..599f69ae --- /dev/null +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/postSat_back_c.svg @@ -0,0 +1,201 @@ + + + diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/postSat_simple_c.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/postSat_simple_c.svg new file mode 100644 index 00000000..a6cc5bfe --- /dev/null +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/postSat_simple_c.svg @@ -0,0 +1,152 @@ + + + diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/preSat_postSat.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/preSat_postSat.svg new file mode 100644 index 00000000..889352c9 --- /dev/null +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/preSat_postSat.svg @@ -0,0 +1,156 @@ + + + diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/result.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/result.svg deleted file mode 100644 index 2cd80da6..00000000 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/images/result.svg +++ /dev/null @@ -1,2292 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md index 388c8c5e..71601500 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md @@ -22,7 +22,7 @@ In this example, a simple plant model of 1/(s+1) is employed, with the saturatio 2. Speed control: - Plant input: q-axis current command - Output: Rotational speed of the electric machinery - - Physical limitation: The practical output current is limited by the coil current density, typically 8 A/mm^2 (air-cooling). + - Physical limitation: The practical output current is limited by the coil current density, typically 8 A/mm2 (air-cooling). 3. Temperature control: - Plant input: Heat @@ -31,58 +31,111 @@ In this example, a simple plant model of 1/(s+1) is employed, with the saturatio In this example, the PI controller is employed to achieve the desired system response. The PI gains are set to achieve the first response with a bandwidth of 10 Hz, i.e., $K_p = 2\pi \times 10$, and $K_i = 2\pi \times 10$. -In practice, the manipulated variables are physically limited: For example, the manipulated variable of [current regulation](../../../applications/current-control/index.md) is voltage reference with a restriction of DC power supply. As another example, in [speed control](../../../applications/speed-control/index.md), the manipulated variable is the $q$-axis current, which is also limited by the current density of coils. Therefore, the control diagram can be rewritten, separating the plant into a saturation block and plant. +### Technical Challenges on Windup +This section provides the practical challenges from the actuator’s input limitations, especially on the command tracking and disturbance suppression. A definition of windup and its mitigation strategy known as anti-windup will be introduced. -```{image} images/control-diagram-sat.svg +#### Command Tracking without/with Actuator Limitations +Let us analyze the simulation result with the block diagram above to investigate the technical challenges on windup. Two scenarios are compared here: one “without saturation block” and one “with the saturation block”. The objective of this analysis is to evaluate the impact of its saturation block on the output performance. Assume a step command of 1 is generated as a reference at 0.2 seconds and the plant has a known input saturation limit defined as `Limit = 10`. + +```{image} images/Output_sat_c.svg + :align: center + :width: 600 +``` +```{image} images/Iout_sat_c.svg :align: center + :width: 600 ``` -The difference between these figures is only whether the saturation block exists after the controller. Note the saturation block produces an output signal bounded to the upper saturation value of `+Limit` and lower saturation value of `-Limit`. +As observed, the command can track correctly without saturation block, whereas overshoot with slow response occurs when the saturation block is present. The second figure shows the output of the integrator. With the saturated block, errors are accumulated, leading to delayed convergence, a condition known as an integral windup. -Let’s take a look at the simulation result of current regulation with a three-phase voltage source inverter with/without a DC-link limit of `12 V`. Therefore, the plant has a known input saturation limit as `Limit = 12/2 = 6 V`. +Next, let us examine the manipulated variable in the previous and the post saturation block. -```{image} images/compareSat1.svg +```{image} images/preSat_postSat.svg :align: center + :width: 600 ``` -In this simulation, a continuous PI controller is used, and a step current of 10 A in the $q$-axis is generated as a reference. Also, the resistance and the inductance are 0.25 $\Omega$ and 500 $\mu$H, respectively. As you can see, the current regulation works right if there is no saturation block, whereas overshoot occurs if a saturation block exists. The following figure shows the output of the integrator. If the saturated block exists, errors are accumulated, and it takes 0.01 sec to converge, a condition known as an integral windup. +In the previous saturation block (`preSat`), the manipulated variable instantaneously exceeds 60, beyond the saturation range of 10. On the other hand, the voltage reference in the post saturation block (`postSat`) is limited to 10. As demonstrated in this example, the controller disregards the presence of the saturation block because it has no information about real-world saturation occurrences. Consequently, the PI controller may provide a higher manipulated variable after getting the higher error, which causes the windup. As a result, the overshoot and delayed convergence of the output. -Now let’s see the voltage reference in the previous and the post saturation block. +#### Disturbance Suppression without/with Actuator Limitations +Disturbances can degrade the system by introducing unexpected/rapid changes. Let us examine if disturbances affect on the behavior of the integrator. In this scenario, the command is set as 0, and the disturbance of 15 is injected at 0.2 seconds and end at 0.3 seconds, requiring the disturbance to be suppressed and the output to track back to 0. -```{image} images/compareSat2.svg +```{image} images/Disturbance.svg :align: center + :width: 600 +``` +```{image} images/Output_sat_d.svg + :align: center + :width: 600 ``` -The voltage reference in the previous saturation block (denoted as `preSat`) instantaneously goes to around 15 V outside the DC-link range. On the other hand, the voltage reference in the post saturation block (denoted as `postSat`) is limited to 6 V due to the DC-link restriction. Even though the saturation block exists, the controller ignores it. Therefore, there is a possibility the PI controller provides the higher voltage after getting the higher error, which causes the windup. As a result, it takes some time to get the output to converge after the integrator accumulates lots of values. - -## Different methods +In the transient response of `Output` when the disturbance ends, it is observed that with the saturation block, there is a larger negative overshoot and slower convergence to 0 compared to the case without the saturation block. This is because the integrator continues to integrate error caused by the disturbance. -To avoid the integral windup, the method known as anti-windup needs to be utilized. Now, the PI controller is shown in the figure below. Note that the integrator includes the anti-windup. +## Anti-Windup Techniques +To avoid the integral windup, an anti-windup strategy must be implemented. The block diagram incorporating an integrator with the anti-windup is shown in the figure below. ```{image} images/control-diagram-overview.svg :align: center ``` -In the anti-windup methods, if the manipulated variable reaches the `Limit`, the integrator is to keep the integrated value from increasing past the specified limit. There are multiple ways to implement integrator anti-windup, however, two different methods are introduced here, i.e., the integrator should do either: +In the anti-windup methods, if the manipulated variable reaches the specified `Limit`, the integrator is to keep the integrated value from increasing past the specified limit. There are multiple ways to implement integrator anti-windup, however, two common methods are introduced here: + +1. Clamping{link}: Turn off the integrator to stop further accumulation of the value. This can be divided into two methods, i.e., simple clamping{link} and advanced clamping{link}. + +2. Back-tracking{link}: Subtract a specific value from the integrator. + +These two methods are now explained in detail. + +### Clamping +Clamping is a straightforward anti-windup strategy where the integrator is simply "clamped" to prevent it from exceeding a certain limitation, which is called simple clamping in this article. Advanced clamping, on the other hand, is a more sophisticated from of simple clamping that engages only under specific conditions. + +### Simple Clamping +The simple version of clamping simply stops integrating when `preSat` $\neq$ `postSat`. The block diagram of the integrator with the simple clamping method is shown below. + +```{image} images/anti-windup-simple-clamping.svg + :align: center +``` + +Here is a Simulink simulation of the no anti-windup and simple clamping. -1. Turn the integrator off to avoid accumulating the value further known as a **clamping method** or -2. Subtract a specific value from the integrator known as a **back-tracking method**. +#### Command Tracking +```{image} images/Output_simple_c.svg + :align: center + :width: 600 +``` +```{image} images/postSat_simple_c.svg + :align: center + :width: 600 +``` +```{image} images/Iout_simple_c.svg + :align: center + :width: 600 +``` + +In the `Output` waveforms, an overshoot is observed when there is no anti-windup. However, with the simple clamping method, the overshoot is eliminated. In the `postSat`, the manipulated variables are saturated up to 10, where the manipulated variable converge more rapidly in the simple clamping. In the integrator output, no overshoots are present when using simple clamping. -## Implementation +#### Disturbance Suppression -These two methods of clamping and back-tracking are now explained in detail. +```{image} images/Disturbance.svg + :align: center + :width: 600 +``` +```{image} images/Output_simple_d.svg + :align: center + :width: 600 +``` -### clamping (continuous) +From the disturbance suppression simulation results, it is evident that the overshoot and convergence are significantly improved when the simple clamping method is employed. -The block diagram of the continuous integrator with the clamping method is shown below. +### Advanced Clamping +Now, the advanced version of clamping is introduced as shown below the block diagram. -```{image} images/anti-windup-clamping_con.svg - :scale: 65% +```{image} images/anti-windup-advanced-clamping.svg :align: center ``` - The idea of the clamping method itself is straightforward, i.e., if the manipulated variable reaches the `Limit`, the integrator stops the accumulation of the value. However, the implementation of clamping is slightly complicated. Here is the workflow of clamping: +In the advanced clamping method, the behavior itself is essentially similar to that of simple clamping. However, it includes an additional condition as a trigger of anti-windup, i.e., clamping occurs only when the signs of the `Error` and `preSat` are the same. Here is the workflow of the advanced clamping: **Step 1.** Compare the sign of the `preSat` and the `Error`. And then, if both signs are equal, the block outputs 1. If not, the block outputs 0. @@ -92,146 +145,87 @@ The block diagram of the continuous integrator with the clamping method is shown If the `TR` is 1, the input of the integrator becomes 0 as the switch is triggered, i.e., the integrator will effectively shut down the integration during the windup condition. -```{note} -**Step 1.** is recommended to do! For example, if both the `preSat` and the `Error` are positive, the integrator still adds the output to make it more positive, which causes a worse result. On the other hand, if the `preSat` is negative and the `Error` is positive, the integrator output brings better results, which works in the direction of canceling the error. Therefore, if the signs of `preSat` and `Error` are opposite, the anti-windup is not necessary. +Here is a Simulink simulation of the no anti-windup, simple clamping, and advanced clamping. + +```{image} images/Output_advanced_c.svg + :align: center + :width: 600 +``` +```{image} images/postSat_advanced_c.svg + :align: center + :width: 600 +``` +```{image} images/Iout_advanced_c.svg + :align: center + :width: 600 ``` -### clamping (discrete-time) +Notice that the simple and advanced clamping perform the same in this example. Given that the above assumptions cause the simple and advanced clamping to behave identical. +Basen on this, a highly specific scenario is now introduced where advanced clamping demonstrates better performance. Here is simulation scenario to demonstrate the superiority of advanced clamping than simple clamping. -The discrete-time PI controller is shown below, where the I gain of $K_i$ becomes $K_iT_s$, and the integrator block of $1/s$ is replaced by $1/(1-z^{-1})$, as opposed to the continuous time equivalency. Note that the backward-Euler method is used in this document. Also, the delay block of $z^{-1}$ is required after the AND block to avoid the algebraic loop. +**Initial State**: A disturbance of 5 causes the system to saturate and stabilize at -1 output. -```{image} images/anti-windup-clamping_dis.svg - :scale: 65% +**Controller Behavior**: At 5 seconds, the controller set point starts toggling around the saturated output. + +Here are simulation results based on the above scenarios: + +```{image} images/Disturbance_advanced_better.svg + :align: center + :width: 600 +``` +```{image} images/Output_advanced_better.svg + :align: center + :width: 600 +``` +```{image} images/Iout_advanced_better.svg :align: center + :width: 600 ``` -### back-tracking (continuous) +From the Output figure, when the controller set point drops below the output, the advanced clamping method avoids integrating, allowing for effective unwinding. On the other hand, the simple clamping continues to integrate, which may not handle unwinding as effectively as the advanced method. However, this can be observed only if the proportional gain of $K_p$ is very small ($= 0.0002*2\pi \times 10$ in this case), which is not commonly preferred, especially if the PI controller is tuned for pole-zero cancellation. +Significant differences in the advanced clamping only appear when the system saturates AND signs are different from error vs control output, which is uncommon since the difference in signs usually moves out immediately. Therefore, the highly specific scenario where the system stays in saturation during this flip in signs is necessary to clearly make the advanced method better. This suggests that the effort to implement the advanced clamping version is probably not worth it for the typical motor control systems. -The block diagram of the continuous integrator with the back-tracking method is shown below. +### Back-tracking +The idea of back-tracking method is to use a feedback loop to unwind the internal integrator when the manipulated variable hits the `Limit`. The block diagram of the integrator with the back-tracking method is shown below. -```{image} images/anti-windup-back-tracking-con.svg - :scale: 65% +```{image} images/anti-windup-back-tracking.svg :align: center ``` -The idea of back-tracking method is to use a feedback loop to unwind the internal integrator when the manipulated variable hits the `Limit`. For example, if saturation occurs, `TR` is calculated as `TR = Kb(postSat-preSat)` and added into the integrator to avoid the windup, where $K_b$ is a feedback gain of the back-tracking. On the other hand, if the saturation does not occur, `preSat` and `postSat` must be equal, and `TR` is 0, i.e., the anti-windup is deactivated. +For example, if saturation occurs, `TR` is calculated as `TR = Kb(postSat-preSat)` and added into the integrator to avoid the windup, where $K_b$ is a feedback gain of the back-tracking. On the other hand, if the saturation does not occur, `preSat` and `postSat` must be equal, and `TR` is 0, i.e., the anti-windup is deactivated. ```{tip} -In general, the feedback gain of $K_b$ is determined by trial and error, depending on the user’s requirements, such as how much overshoot or response-speed they want. There is a paper that shows an example of how to determine the $K_b$ known as a `conditioned PI controller`. In this literature, the $K_b$ is determined as $K_b = K_i/K_p$. For detailed information, refer to [this paper](https://www.sciencedirect.com/science/article/pii/000510988790029X). +The selection of kb is highly nuanced upon the specific event being managed. Making an incorrect choice for kb can lead to the clamping method better. In practice, the feedback gain of $K_b$ is determined by trial and error, depending on the user’s requirements, such as how much overshoot or response-speed they want. There is a paper that shows an example of how to determine the $K_b$ known as a `conditioned PI controller`. In this literature, the $K_b$ is determined as $K_b = K_i/K_p$. For detailed information, refer to [this paper](https://www.sciencedirect.com/science/article/pii/000510988790029X). ``` -### back-tracking (discrete-time) +Here is a Simulink simulation of the no anti-windup, simple clamping, advanced clamping, and back-tracking. -Similarly, in the case of a discrete-time PI controller, the I gain of $K_i$ becomes $K_iT_s$, and the integrator block of $1/s$ is replaced by $1/(1-z^{-1})$. Also, the delay block of $z^{-1}$ is added after the feedback gain $K_b$. +#### Command Tracking -```{image} images/anti-windup-back-tracking-dis.svg - :scale: 65% - :align: center -``` - -## Simulink -Here is a Simulink simulation of the discrete-time current regulation without anti-windup, back-tracking, and clamping. - -```{image} images/result.svg - :align: center -``` - -The sampling time is set as $T_s = 0.0001$ sec. In the voltage reference, the voltages are saturated up to 6 V, where the voltages converge faster in back-tracking and clamping. In the current waveforms, an overshoot occurs without anti-windup. However, in the case of the back-tracking and clamping, the overshoot does not occur, where the response of the back-tracking is comparatively higher. In the integrator output, no overshoots appear in both back-tracking and clamping. Note that accumulation of the value with clamping stops while the voltage is saturated. - -## Handwritten C code - -If you want to implement the anti-windup in your experiments, you can have the handwritten C code below. Note that the callback function is executed every sample time of $T_s$. - -### clamping - -```C -const double Ts = 0.0001; // Sampling time [sec] -const double Kp = 1.57; // P gain -const double Ki = 785; // I gain -double Error; -double I_out; -const double Limit; -double preSat; -double postSat; -int Error_sign; -int preSat_sign; -int TR; - -void task_clamping_callback(void *arg) -{ - // clamping - if (TR) { - I_out = 0; - } else { - I_out += Ki * Ts * Error; - } - - // PI controller - preSat = Kp * Error + I_out; - - // Saturate - if (preSat > Limit) { - postSat = Limit; - } else if (preSat < -Limit) { - postSat = -Limit; - } else { - postSat = preSat; - } - - // Sign of the Error - if (Error > 0.0) { - Error_sign = 1.0; - } else if (Error < 0.0) { - Error_sign = -1.0; - } else { - Error_sign = 0; - } - // Sign of the preSat - if (preSat > 0.0) { - preSat_sign = 1.0; - } else if (preSat < 0.0) { - preSat_sign = -1.0; - } else { - preSat_sign = 0; - } - - // Logic: AND - TR = ((Error_sign == preSat_sign) && (preSat != postSat)); -} -``` - -### back-tracking - -```C -const double Ts = 0.0001; // Sampling time [sec] -const double Kp = 1.57; // P gain -const double Ki = 785; // I gain -double Error; -double I_out; -const double Limit; -double preSat; -double postSat; -const double Kb = 0.05; // back-tracking gain (= Ki*Ts/Kp) -double TR; - -void task_back_tracking_callback(void *arg) -{ - // I controller - I_out = (Ki * Ts * Error + I_out) + TR; - - // PI controller - preSat = Kp * Error + I_out; - - // Saturate - if (preSat > Limit) { - postSat = Limit; - } else if (preSat < -Limit) { - postSat = -Limit; - } else { - postSat = preSat; - } - - // back-tracking - TR = (postSat - preSat) * Kb; -} +```{image} images/postSat_back_c.svg + :align: center + :width: 600 +``` +```{image} images/Output_back_c.svg + :align: center + :width: 600 ``` +```{image} images/Iout_back_c.svg + :align: center + :width: 600 +``` + +From the Output waveform, it is evident that the back-tracking technique marginally improves its response than clamping. + +#### Disturbance Suppression + +```{image} images/Disturbance.svg + :align: center + :width: 600 +``` +```{image} images/Output_back_d.svg + :align: center + :width: 600 +``` + +The disturbance suppression results demonstrate that both the clamping and the back-tracking methods improved the performance. Interestingly, the clamping methods is better to suppress disturbance than the back-tracking in this example. It should be noted that these results were achieved using the back-tracking gain of $K_b = K_i/K_p$, which might be required to adjust based on the specific condition and simulation outcomes. From 37da81282bc06993ea36c3880746fbbf7ad0ebf3 Mon Sep 17 00:00:00 2001 From: Takahiro Noguchi Date: Fri, 5 Jul 2024 19:37:01 -0500 Subject: [PATCH 10/48] Update document --- .../integrator-anti-windup/index.md | 42 +++++++++++-------- 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md index 71601500..55771b1e 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md @@ -2,7 +2,7 @@ This article describes how to evaluate performance of anti-windup. A windup might occur when the controller with an integrator faces limitations on the manipulated variables, leading to degraded system response and stability. The effectiveness of anti-windup strategy depends on the duration of the windup and how extreme it is. Therefore, simulating realistic scenarios of windup and anti-windup performance is crucial to investigate specific scenarios that are likely to be encountered since perfect anti-windup is unachievable. -## How to think about performance of anti-windup? +## Exploring Windup Phenomena in Integrators ### Block Diagram with Saturation @@ -20,7 +20,7 @@ In this example, a simple plant model of 1/(s+1) is employed, with the saturatio - Physical limitation: The realistic output voltage is restricted by the capability of the DC power supply 2. Speed control: - - Plant input: q-axis current command + - Plant input: $q$-axis current command - Output: Rotational speed of the electric machinery - Physical limitation: The practical output current is limited by the coil current density, typically 8 A/mm2 (air-cooling). @@ -32,7 +32,7 @@ In this example, a simple plant model of 1/(s+1) is employed, with the saturatio In this example, the PI controller is employed to achieve the desired system response. The PI gains are set to achieve the first response with a bandwidth of 10 Hz, i.e., $K_p = 2\pi \times 10$, and $K_i = 2\pi \times 10$. ### Technical Challenges on Windup -This section provides the practical challenges from the actuator’s input limitations, especially on the command tracking and disturbance suppression. A definition of windup and its mitigation strategy known as anti-windup will be introduced. +This section provides the practical challenges from the actuator’s input limitations, especially on the command tracking and disturbance suppression. A definition of windup will be introduced. #### Command Tracking without/with Actuator Limitations Let us analyze the simulation result with the block diagram above to investigate the technical challenges on windup. Two scenarios are compared here: one “without saturation block” and one “with the saturation block”. The objective of this analysis is to evaluate the impact of its saturation block on the output performance. Assume a step command of 1 is generated as a reference at 0.2 seconds and the plant has a known input saturation limit defined as `Limit = 10`. @@ -46,7 +46,7 @@ Let us analyze the simulation result with the block diagram above to investigate :width: 600 ``` -As observed, the command can track correctly without saturation block, whereas overshoot with slow response occurs when the saturation block is present. The second figure shows the output of the integrator. With the saturated block, errors are accumulated, leading to delayed convergence, a condition known as an integral windup. +As observed, the command can track correctly without saturation block, whereas overshoot with slow response occurs is present when the saturation block. The second figure shows the output of the integrator. With the saturated block, errors are accumulated, leading to delayed convergence, a condition known as an integral windup. Next, let us examine the manipulated variable in the previous and the post saturation block. @@ -55,10 +55,10 @@ Next, let us examine the manipulated variable in the previous and the post satur :width: 600 ``` -In the previous saturation block (`preSat`), the manipulated variable instantaneously exceeds 60, beyond the saturation range of 10. On the other hand, the voltage reference in the post saturation block (`postSat`) is limited to 10. As demonstrated in this example, the controller disregards the presence of the saturation block because it has no information about real-world saturation occurrences. Consequently, the PI controller may provide a higher manipulated variable after getting the higher error, which causes the windup. As a result, the overshoot and delayed convergence of the output. +In the previous saturation block (`preSat`), the manipulated variable instantaneously exceeds 60, beyond the saturation range of 10. On the other hand, the voltage reference in the post saturation block (`postSat`) is limited to 10. As demonstrated in this example, the controller disregards the presence of the saturation block because it has no information about real-world saturation occurrences. Consequently, the PI controller may provide a higher manipulated variable after getting the higher error, which causes the windup. #### Disturbance Suppression without/with Actuator Limitations -Disturbances can degrade the system by introducing unexpected/rapid changes. Let us examine if disturbances affect on the behavior of the integrator. In this scenario, the command is set as 0, and the disturbance of 15 is injected at 0.2 seconds and end at 0.3 seconds, requiring the disturbance to be suppressed and the output to track back to 0. +Disturbances can degrade the system by introducing unexpected/rapid changes. Let us examine if disturbances affect on the behavior of the integrator. In this scenario, the command is set as 0, and the disturbance of 15 (i.e., higher value than `Limit = 10`) is injected at 0.2 seconds and end at 0.3 seconds, requiring the disturbance to be suppressed and the output to track back to 0. ```{image} images/Disturbance.svg :align: center @@ -72,7 +72,7 @@ Disturbances can degrade the system by introducing unexpected/rapid changes. Let In the transient response of `Output` when the disturbance ends, it is observed that with the saturation block, there is a larger negative overshoot and slower convergence to 0 compared to the case without the saturation block. This is because the integrator continues to integrate error caused by the disturbance. ## Anti-Windup Techniques -To avoid the integral windup, an anti-windup strategy must be implemented. The block diagram incorporating an integrator with the anti-windup is shown in the figure below. +To avoid the integral windup, the mitigation strategy known as the anti-windup strategy is now introduced. The block diagram incorporating an integrator with the anti-windup is shown in the figure below. ```{image} images/control-diagram-overview.svg :align: center @@ -80,20 +80,21 @@ To avoid the integral windup, an anti-windup strategy must be implemented. The b In the anti-windup methods, if the manipulated variable reaches the specified `Limit`, the integrator is to keep the integrated value from increasing past the specified limit. There are multiple ways to implement integrator anti-windup, however, two common methods are introduced here: -1. Clamping{link}: Turn off the integrator to stop further accumulation of the value. This can be divided into two methods, i.e., simple clamping{link} and advanced clamping{link}. +1. [**Clamping**](#clamping): Turn off the integrator to stop further accumulation of the value. This can be divided into two methods, i.e., [simple clamping](#simple-clamping) and [advanced clamping](#advanced-clamping). -2. Back-tracking{link}: Subtract a specific value from the integrator. +2. [**Back-tracking**](#back-tracking): Subtract a specific value from the integrator. These two methods are now explained in detail. ### Clamping -Clamping is a straightforward anti-windup strategy where the integrator is simply "clamped" to prevent it from exceeding a certain limitation, which is called simple clamping in this article. Advanced clamping, on the other hand, is a more sophisticated from of simple clamping that engages only under specific conditions. +Clamping is a straightforward anti-windup strategy where the integrator is simply "clamped" to prevent it from exceeding a certain limitation, which is called simple clamping in this article. Advanced clamping, on the other hand, is a more sophisticated from simple clamping that engages only under specific conditions. ### Simple Clamping The simple version of clamping simply stops integrating when `preSat` $\neq$ `postSat`. The block diagram of the integrator with the simple clamping method is shown below. ```{image} images/anti-windup-simple-clamping.svg :align: center + :width: 70% ``` Here is a Simulink simulation of the no anti-windup and simple clamping. @@ -133,13 +134,14 @@ Now, the advanced version of clamping is introduced as shown below the block dia ```{image} images/anti-windup-advanced-clamping.svg :align: center + :width: 70% ``` In the advanced clamping method, the behavior itself is essentially similar to that of simple clamping. However, it includes an additional condition as a trigger of anti-windup, i.e., clamping occurs only when the signs of the `Error` and `preSat` are the same. Here is the workflow of the advanced clamping: -**Step 1.** Compare the sign of the `preSat` and the `Error`. And then, if both signs are equal, the block outputs 1. If not, the block outputs 0. +**Step 1.** Compare the `preSat` and `postSat`. If these values are not equal, i.e., the manipulated variable reaches saturation, the block outputs 1. If they are equal, then no saturation takes place, and the block outputs 0 -- this is the same purpose of the simple clamping. -**Step 2.** Compare the `preSat` and `postSat`. If these values are not equal, i.e., the manipulated variable reaches saturation, the block outputs 1. If they are equal, then no saturation takes place, and the block outputs 0. +**Step 2.** Compare the sign of the `preSat` and the `Error`. And then, if both signs are equal, the block outputs 1. If not, the block outputs 0 -- this is the additional condition necessary for advanced clamping. **Step 3.** The anti-windup output denoted as tracking-signal `TR` becomes 1 to clamp the integrator only if both outputs of **Step 1.** and **Step 2.** are 1. In other words, the integrator clamps integration if the output is saturating AND the `Error` is the same sign as the `preSat`. @@ -160,8 +162,9 @@ Here is a Simulink simulation of the no anti-windup, simple clamping, and advanc :width: 600 ``` -Notice that the simple and advanced clamping perform the same in this example. Given that the above assumptions cause the simple and advanced clamping to behave identical. -Basen on this, a highly specific scenario is now introduced where advanced clamping demonstrates better performance. Here is simulation scenario to demonstrate the superiority of advanced clamping than simple clamping. +Notice that the above assumptions cause the simple and advanced clamping to behave identical in this example. + +Based on this, a highly specific scenario is now introduced where advanced clamping demonstrates better performance. Here is simulation scenario to demonstrate the superiority of advanced clamping than simple clamping: **Initial State**: A disturbance of 5 causes the system to saturate and stabilize at -1 output. @@ -182,20 +185,21 @@ Here are simulation results based on the above scenarios: :width: 600 ``` -From the Output figure, when the controller set point drops below the output, the advanced clamping method avoids integrating, allowing for effective unwinding. On the other hand, the simple clamping continues to integrate, which may not handle unwinding as effectively as the advanced method. However, this can be observed only if the proportional gain of $K_p$ is very small ($= 0.0002*2\pi \times 10$ in this case), which is not commonly preferred, especially if the PI controller is tuned for pole-zero cancellation. -Significant differences in the advanced clamping only appear when the system saturates AND signs are different from error vs control output, which is uncommon since the difference in signs usually moves out immediately. Therefore, the highly specific scenario where the system stays in saturation during this flip in signs is necessary to clearly make the advanced method better. This suggests that the effort to implement the advanced clamping version is probably not worth it for the typical motor control systems. +From the `Output` result, when the controller set point drops below the output, the advanced clamping method avoids integrating, allowing for effective unwinding. On the other hand, the simple clamping continues to integrate, which may not handle unwinding as effectively as the advanced method. _However_, this can be observed only if the proportional gain of $K_p$ is very small ($= 0.0002*2\pi \times 10$ in this case), which is not commonly preferred, especially if the PI controller is tuned for pole-zero cancellation. +Significant differences in the advanced clamping only appear when the system saturates **AND** signs are different from error vs control output, which is uncommon since the difference in signs usually moves out immediately. Therefore, the highly specific scenario where the system stays in saturation during this flip in signs is necessary to clearly make the advanced method better. This suggests that the effort to implement the advanced clamping version is probably not worth it for the typical motor control systems. ### Back-tracking The idea of back-tracking method is to use a feedback loop to unwind the internal integrator when the manipulated variable hits the `Limit`. The block diagram of the integrator with the back-tracking method is shown below. ```{image} images/anti-windup-back-tracking.svg :align: center + :width: 70% ``` For example, if saturation occurs, `TR` is calculated as `TR = Kb(postSat-preSat)` and added into the integrator to avoid the windup, where $K_b$ is a feedback gain of the back-tracking. On the other hand, if the saturation does not occur, `preSat` and `postSat` must be equal, and `TR` is 0, i.e., the anti-windup is deactivated. ```{tip} -The selection of kb is highly nuanced upon the specific event being managed. Making an incorrect choice for kb can lead to the clamping method better. In practice, the feedback gain of $K_b$ is determined by trial and error, depending on the user’s requirements, such as how much overshoot or response-speed they want. There is a paper that shows an example of how to determine the $K_b$ known as a `conditioned PI controller`. In this literature, the $K_b$ is determined as $K_b = K_i/K_p$. For detailed information, refer to [this paper](https://www.sciencedirect.com/science/article/pii/000510988790029X). +The selection of $K_b$ is highly nuanced upon the specific event being managed. Making an incorrect choice for $K_b$ can lead to the clamping method better. In practice, the feedback gain of $K_b$ is determined by trial and error, depending on the user’s requirements, such as how much overshoot or response-speed they want. There is a paper that shows an example of how to determine the $K_b$ known as a `conditioned PI controller`. In this literature, the $K_b$ is determined as $K_b = K_i/K_p$. For detailed information, refer to [this paper](https://www.sciencedirect.com/science/article/pii/000510988790029X). ``` Here is a Simulink simulation of the no anti-windup, simple clamping, advanced clamping, and back-tracking. @@ -215,7 +219,7 @@ Here is a Simulink simulation of the no anti-windup, simple clamping, advanced c :width: 600 ``` -From the Output waveform, it is evident that the back-tracking technique marginally improves its response than clamping. +From the `Output` waveform, it is evident that the back-tracking technique marginally improves its response than clamping. #### Disturbance Suppression @@ -229,3 +233,5 @@ From the Output waveform, it is evident that the back-tracking technique margina ``` The disturbance suppression results demonstrate that both the clamping and the back-tracking methods improved the performance. Interestingly, the clamping methods is better to suppress disturbance than the back-tracking in this example. It should be noted that these results were achieved using the back-tracking gain of $K_b = K_i/K_p$, which might be required to adjust based on the specific condition and simulation outcomes. + +The anti-windup methods introduced in this article can be implemented by running the Simulink model provided [here](https://github.com/Severson-Group/docs.amdc.dev/source/getting-started/control-with-amdc/integrator-anti-windup). \ No newline at end of file From 76adcd26b0e6a65659ec81088ba1258293581d8c Mon Sep 17 00:00:00 2001 From: mhmokhtarabadi Date: Fri, 3 Oct 2025 16:17:35 -0500 Subject: [PATCH 11/48] Add anti-windup article to the control with AMDC page --- source/getting-started/control-with-amdc/index.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/getting-started/control-with-amdc/index.md b/source/getting-started/control-with-amdc/index.md index c7b5d929..b0f838db 100644 --- a/source/getting-started/control-with-amdc/index.md +++ b/source/getting-started/control-with-amdc/index.md @@ -1,13 +1,15 @@ # Control with AMDC -The AMDC Platform provides a versatile and open foundation for establishing high performance motor controls. This section of the documentation explains how to use the AMDC's capabilties to implement standard motor control functionality. +The AMDC Platform provides a versatile and open foundation for establishing high performance motor controls. This section of the documentation explains how to use the AMDC's capabilities to implement standard motor control functionality. | Control Topic | Aim / Goal / Outcome | |---|---| | [Current Sensor Calibration](current-sensor-cal/index.md) | Approach and tools to calibrate current sensor gain and offset. | +| [Integrator Anti-Windup](integrator-anti-windup/index.md) | Anti-Windup performance evaluation. | ```{toctree} :hidden: Current Sensor Calibration +Integrator Anti-Windup ``` From 9c5cac0af094160276862ee44d68bf8a08082a6f Mon Sep 17 00:00:00 2001 From: mhmokhtarabadi Date: Fri, 3 Oct 2025 16:54:40 -0500 Subject: [PATCH 12/48] Remove white spaces --- .../integrator-anti-windup/index.md | 54 +++++++++++++------ 1 file changed, 37 insertions(+), 17 deletions(-) diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md index 55771b1e..f2742d2d 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md @@ -14,33 +14,36 @@ Generally, the primary components of a control diagram are the controller and pl In this example, a simple plant model of 1/(s+1) is employed, with the saturation block located before the plant. Note the saturation block produces an output signal bounded to the upper saturation value of `+Limit` and lower saturation value of `-Limit`. This system can be analyzed from following perspectives: -1. Current regulation: +1. Current regulation: - Plant input: Voltage reference - Output: Current - Physical limitation: The realistic output voltage is restricted by the capability of the DC power supply -2. Speed control: +2. Speed control: - Plant input: $q$-axis current command - Output: Rotational speed of the electric machinery - Physical limitation: The practical output current is limited by the coil current density, typically 8 A/mm2 (air-cooling). -3. Temperature control: +3. Temperature control: - Plant input: Heat - Output: Resulting system temperature - Physical limitation: The heater’s power rating (e.g., 1 kW) limits the actuator. -In this example, the PI controller is employed to achieve the desired system response. The PI gains are set to achieve the first response with a bandwidth of 10 Hz, i.e., $K_p = 2\pi \times 10$, and $K_i = 2\pi \times 10$. +In this example, the PI controller is employed to achieve the desired system response. The PI gains are set to achieve the first response with a bandwidth of 10 Hz, i.e., $K_p = 2\pi \times 10$, and $K_i = 2\pi \times 10$. ### Technical Challenges on Windup + This section provides the practical challenges from the actuator’s input limitations, especially on the command tracking and disturbance suppression. A definition of windup will be introduced. #### Command Tracking without/with Actuator Limitations + Let us analyze the simulation result with the block diagram above to investigate the technical challenges on windup. Two scenarios are compared here: one “without saturation block” and one “with the saturation block”. The objective of this analysis is to evaluate the impact of its saturation block on the output performance. Assume a step command of 1 is generated as a reference at 0.2 seconds and the plant has a known input saturation limit defined as `Limit = 10`. ```{image} images/Output_sat_c.svg :align: center :width: 600 ``` + ```{image} images/Iout_sat_c.svg :align: center :width: 600 @@ -58,21 +61,24 @@ Next, let us examine the manipulated variable in the previous and the post satur In the previous saturation block (`preSat`), the manipulated variable instantaneously exceeds 60, beyond the saturation range of 10. On the other hand, the voltage reference in the post saturation block (`postSat`) is limited to 10. As demonstrated in this example, the controller disregards the presence of the saturation block because it has no information about real-world saturation occurrences. Consequently, the PI controller may provide a higher manipulated variable after getting the higher error, which causes the windup. #### Disturbance Suppression without/with Actuator Limitations -Disturbances can degrade the system by introducing unexpected/rapid changes. Let us examine if disturbances affect on the behavior of the integrator. In this scenario, the command is set as 0, and the disturbance of 15 (i.e., higher value than `Limit = 10`) is injected at 0.2 seconds and end at 0.3 seconds, requiring the disturbance to be suppressed and the output to track back to 0. + +Disturbances can degrade the system by introducing unexpected/rapid changes. Let us examine if disturbances affect on the behavior of the integrator. In this scenario, the command is set as 0, and the disturbance of 15 (i.e., higher value than `Limit = 10`) is injected at 0.2 seconds and end at 0.3 seconds, requiring the disturbance to be suppressed and the output to track back to 0. ```{image} images/Disturbance.svg :align: center :width: 600 ``` + ```{image} images/Output_sat_d.svg :align: center :width: 600 ``` -In the transient response of `Output` when the disturbance ends, it is observed that with the saturation block, there is a larger negative overshoot and slower convergence to 0 compared to the case without the saturation block. This is because the integrator continues to integrate error caused by the disturbance. +In the transient response of `Output` when the disturbance ends, it is observed that with the saturation block, there is a larger negative overshoot and slower convergence to 0 compared to the case without the saturation block. This is because the integrator continues to integrate error caused by the disturbance. ## Anti-Windup Techniques -To avoid the integral windup, the mitigation strategy known as the anti-windup strategy is now introduced. The block diagram incorporating an integrator with the anti-windup is shown in the figure below. + +To avoid the integral windup, the mitigation strategy known as the anti-windup strategy is now introduced. The block diagram incorporating an integrator with the anti-windup is shown in the figure below. ```{image} images/control-diagram-overview.svg :align: center @@ -80,16 +86,18 @@ To avoid the integral windup, the mitigation strategy known as the anti-windup s In the anti-windup methods, if the manipulated variable reaches the specified `Limit`, the integrator is to keep the integrated value from increasing past the specified limit. There are multiple ways to implement integrator anti-windup, however, two common methods are introduced here: -1. [**Clamping**](#clamping): Turn off the integrator to stop further accumulation of the value. This can be divided into two methods, i.e., [simple clamping](#simple-clamping) and [advanced clamping](#advanced-clamping). +1. [**Clamping**](#clamping): Turn off the integrator to stop further accumulation of the value. This can be divided into two methods, i.e., [simple clamping](#simple-clamping) and [advanced clamping](#advanced-clamping). 2. [**Back-tracking**](#back-tracking): Subtract a specific value from the integrator. These two methods are now explained in detail. ### Clamping + Clamping is a straightforward anti-windup strategy where the integrator is simply "clamped" to prevent it from exceeding a certain limitation, which is called simple clamping in this article. Advanced clamping, on the other hand, is a more sophisticated from simple clamping that engages only under specific conditions. ### Simple Clamping + The simple version of clamping simply stops integrating when `preSat` $\neq$ `postSat`. The block diagram of the integrator with the simple clamping method is shown below. ```{image} images/anti-windup-simple-clamping.svg @@ -97,7 +105,7 @@ The simple version of clamping simply stops integrating when `preSat` $\neq$ `po :width: 70% ``` -Here is a Simulink simulation of the no anti-windup and simple clamping. +Here is a Simulink simulation of the no anti-windup and simple clamping. #### Command Tracking @@ -105,10 +113,12 @@ Here is a Simulink simulation of the no anti-windup and simple clamping. :align: center :width: 600 ``` + ```{image} images/postSat_simple_c.svg :align: center :width: 600 ``` + ```{image} images/Iout_simple_c.svg :align: center :width: 600 @@ -122,6 +132,7 @@ In the `Output` waveforms, an overshoot is observed when there is no anti-windup :align: center :width: 600 ``` + ```{image} images/Output_simple_d.svg :align: center :width: 600 @@ -130,7 +141,8 @@ In the `Output` waveforms, an overshoot is observed when there is no anti-windup From the disturbance suppression simulation results, it is evident that the overshoot and convergence are significantly improved when the simple clamping method is employed. ### Advanced Clamping -Now, the advanced version of clamping is introduced as shown below the block diagram. + +Now, the advanced version of clamping is introduced as shown below the block diagram. ```{image} images/anti-windup-advanced-clamping.svg :align: center @@ -145,24 +157,26 @@ In the advanced clamping method, the behavior itself is essentially similar to t **Step 3.** The anti-windup output denoted as tracking-signal `TR` becomes 1 to clamp the integrator only if both outputs of **Step 1.** and **Step 2.** are 1. In other words, the integrator clamps integration if the output is saturating AND the `Error` is the same sign as the `preSat`. -If the `TR` is 1, the input of the integrator becomes 0 as the switch is triggered, i.e., the integrator will effectively shut down the integration during the windup condition. +If the `TR` is 1, the input of the integrator becomes 0 as the switch is triggered, i.e., the integrator will effectively shut down the integration during the windup condition. -Here is a Simulink simulation of the no anti-windup, simple clamping, and advanced clamping. +Here is a Simulink simulation of the no anti-windup, simple clamping, and advanced clamping. ```{image} images/Output_advanced_c.svg :align: center :width: 600 ``` + ```{image} images/postSat_advanced_c.svg :align: center :width: 600 ``` + ```{image} images/Iout_advanced_c.svg :align: center :width: 600 ``` -Notice that the above assumptions cause the simple and advanced clamping to behave identical in this example. +Notice that the above assumptions cause the simple and advanced clamping to behave identical in this example. Based on this, a highly specific scenario is now introduced where advanced clamping demonstrates better performance. Here is simulation scenario to demonstrate the superiority of advanced clamping than simple clamping: @@ -176,20 +190,23 @@ Here are simulation results based on the above scenarios: :align: center :width: 600 ``` + ```{image} images/Output_advanced_better.svg :align: center :width: 600 ``` + ```{image} images/Iout_advanced_better.svg :align: center :width: 600 ``` -From the `Output` result, when the controller set point drops below the output, the advanced clamping method avoids integrating, allowing for effective unwinding. On the other hand, the simple clamping continues to integrate, which may not handle unwinding as effectively as the advanced method. _However_, this can be observed only if the proportional gain of $K_p$ is very small ($= 0.0002*2\pi \times 10$ in this case), which is not commonly preferred, especially if the PI controller is tuned for pole-zero cancellation. -Significant differences in the advanced clamping only appear when the system saturates **AND** signs are different from error vs control output, which is uncommon since the difference in signs usually moves out immediately. Therefore, the highly specific scenario where the system stays in saturation during this flip in signs is necessary to clearly make the advanced method better. This suggests that the effort to implement the advanced clamping version is probably not worth it for the typical motor control systems. +From the `Output` result, when the controller set point drops below the output, the advanced clamping method avoids integrating, allowing for effective unwinding. On the other hand, the simple clamping continues to integrate, which may not handle unwinding as effectively as the advanced method. _However_, this can be observed only if the proportional gain of $K_p$ is very small ($= 0.0002*2\pi \times 10$ in this case), which is not commonly preferred, especially if the PI controller is tuned for pole-zero cancellation. +Significant differences in the advanced clamping only appear when the system saturates **AND** signs are different from error vs control output, which is uncommon since the difference in signs usually moves out immediately. Therefore, the highly specific scenario where the system stays in saturation during this flip in signs is necessary to clearly make the advanced method better. This suggests that the effort to implement the advanced clamping version is probably not worth it for the typical motor control systems. ### Back-tracking -The idea of back-tracking method is to use a feedback loop to unwind the internal integrator when the manipulated variable hits the `Limit`. The block diagram of the integrator with the back-tracking method is shown below. + +The idea of back-tracking method is to use a feedback loop to unwind the internal integrator when the manipulated variable hits the `Limit`. The block diagram of the integrator with the back-tracking method is shown below. ```{image} images/anti-windup-back-tracking.svg :align: center @@ -210,10 +227,12 @@ Here is a Simulink simulation of the no anti-windup, simple clamping, advanced c :align: center :width: 600 ``` + ```{image} images/Output_back_c.svg :align: center :width: 600 ``` + ```{image} images/Iout_back_c.svg :align: center :width: 600 @@ -227,6 +246,7 @@ From the `Output` waveform, it is evident that the back-tracking technique margi :align: center :width: 600 ``` + ```{image} images/Output_back_d.svg :align: center :width: 600 @@ -234,4 +254,4 @@ From the `Output` waveform, it is evident that the back-tracking technique margi The disturbance suppression results demonstrate that both the clamping and the back-tracking methods improved the performance. Interestingly, the clamping methods is better to suppress disturbance than the back-tracking in this example. It should be noted that these results were achieved using the back-tracking gain of $K_b = K_i/K_p$, which might be required to adjust based on the specific condition and simulation outcomes. -The anti-windup methods introduced in this article can be implemented by running the Simulink model provided [here](https://github.com/Severson-Group/docs.amdc.dev/source/getting-started/control-with-amdc/integrator-anti-windup). \ No newline at end of file +The anti-windup methods introduced in this article can be implemented by running the Simulink model provided [here](https://github.com/Severson-Group/docs.amdc.dev/source/getting-started/control-with-amdc/integrator-anti-windup). From 3417cc0ae72bfe7e09f9697acbf6969f1ff3cf22 Mon Sep 17 00:00:00 2001 From: Takahiro <114006024+noguchi-takahiro@users.noreply.github.com> Date: Fri, 10 Oct 2025 11:02:26 -0500 Subject: [PATCH 13/48] Update source/getting-started/control-with-amdc/integrator-anti-windup/index.md Co-authored-by: Mohamadhasan <70004596+mhmokhtarabadi@users.noreply.github.com> --- .../control-with-amdc/integrator-anti-windup/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md index f2742d2d..e4448d49 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md @@ -15,7 +15,7 @@ Generally, the primary components of a control diagram are the controller and pl In this example, a simple plant model of 1/(s+1) is employed, with the saturation block located before the plant. Note the saturation block produces an output signal bounded to the upper saturation value of `+Limit` and lower saturation value of `-Limit`. This system can be analyzed from following perspectives: 1. Current regulation: - - Plant input: Voltage reference + - Plant input: Voltage command - Output: Current - Physical limitation: The realistic output voltage is restricted by the capability of the DC power supply From 7e3935cba7ebb3966d23723ee1ef8473893c30b2 Mon Sep 17 00:00:00 2001 From: Takahiro <114006024+noguchi-takahiro@users.noreply.github.com> Date: Fri, 10 Oct 2025 11:07:33 -0500 Subject: [PATCH 14/48] Update source/getting-started/control-with-amdc/integrator-anti-windup/index.md Co-authored-by: Mohamadhasan <70004596+mhmokhtarabadi@users.noreply.github.com> --- .../control-with-amdc/integrator-anti-windup/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md index e4448d49..d4f89aa3 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md @@ -16,7 +16,7 @@ In this example, a simple plant model of 1/(s+1) is employed, with the saturatio 1. Current regulation: - Plant input: Voltage command - - Output: Current + - Plant output: Current - Physical limitation: The realistic output voltage is restricted by the capability of the DC power supply 2. Speed control: From 3ef2ef482d6def81779e876789af6c493327d10f Mon Sep 17 00:00:00 2001 From: Takahiro <114006024+noguchi-takahiro@users.noreply.github.com> Date: Fri, 10 Oct 2025 11:07:41 -0500 Subject: [PATCH 15/48] Update source/getting-started/control-with-amdc/integrator-anti-windup/index.md Co-authored-by: Mohamadhasan <70004596+mhmokhtarabadi@users.noreply.github.com> --- .../control-with-amdc/integrator-anti-windup/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md index d4f89aa3..c75d3042 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md @@ -17,7 +17,7 @@ In this example, a simple plant model of 1/(s+1) is employed, with the saturatio 1. Current regulation: - Plant input: Voltage command - Plant output: Current - - Physical limitation: The realistic output voltage is restricted by the capability of the DC power supply + - Physical limitation: The realistic command voltage to the plant is restricted by the capability of the DC power supply 2. Speed control: - Plant input: $q$-axis current command From 0738e87988f1cb94ef755baa0403caa669a8b245 Mon Sep 17 00:00:00 2001 From: Takahiro <114006024+noguchi-takahiro@users.noreply.github.com> Date: Fri, 10 Oct 2025 11:29:22 -0500 Subject: [PATCH 16/48] Update source/getting-started/control-with-amdc/integrator-anti-windup/index.md Co-authored-by: Mohamadhasan <70004596+mhmokhtarabadi@users.noreply.github.com> --- .../control-with-amdc/integrator-anti-windup/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md index c75d3042..6932d25e 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md @@ -22,7 +22,7 @@ In this example, a simple plant model of 1/(s+1) is employed, with the saturatio 2. Speed control: - Plant input: $q$-axis current command - Output: Rotational speed of the electric machinery - - Physical limitation: The practical output current is limited by the coil current density, typically 8 A/mm2 (air-cooling). + - Physical limitation: The practical command current to the plant is limited by the coil current density, typically 8 A/mm2 (air-cooling). 3. Temperature control: - Plant input: Heat From c1198e1765fef92fc8b6eb2e303aec886ea0530a Mon Sep 17 00:00:00 2001 From: Takahiro <114006024+noguchi-takahiro@users.noreply.github.com> Date: Fri, 10 Oct 2025 11:29:31 -0500 Subject: [PATCH 17/48] Update source/getting-started/control-with-amdc/integrator-anti-windup/index.md Co-authored-by: Mohamadhasan <70004596+mhmokhtarabadi@users.noreply.github.com> --- .../control-with-amdc/integrator-anti-windup/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md index 6932d25e..8a8b4419 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md @@ -37,7 +37,7 @@ This section provides the practical challenges from the actuator’s input limit #### Command Tracking without/with Actuator Limitations -Let us analyze the simulation result with the block diagram above to investigate the technical challenges on windup. Two scenarios are compared here: one “without saturation block” and one “with the saturation block”. The objective of this analysis is to evaluate the impact of its saturation block on the output performance. Assume a step command of 1 is generated as a reference at 0.2 seconds and the plant has a known input saturation limit defined as `Limit = 10`. +Let us analyze the simulation result with the block diagram above to investigate the technical challenges of windup. Two scenarios are compared here: one “without saturation block” and one “with the saturation block”. The objective of this analysis is to evaluate the impact of its saturation block on the output performance. Assume a step command of 1 is generated as a reference at 0.2 seconds and the plant has a known input saturation limit defined as `Limit = 10`. ```{image} images/Output_sat_c.svg :align: center From d6ca68f8ef73ef0933495ad43e7a394205f48171 Mon Sep 17 00:00:00 2001 From: Takahiro <114006024+noguchi-takahiro@users.noreply.github.com> Date: Fri, 10 Oct 2025 11:32:39 -0500 Subject: [PATCH 18/48] Update source/getting-started/control-with-amdc/integrator-anti-windup/index.md Co-authored-by: Mohamadhasan <70004596+mhmokhtarabadi@users.noreply.github.com> --- .../control-with-amdc/integrator-anti-windup/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md index 8a8b4419..8c6ca4ad 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md @@ -49,7 +49,7 @@ Let us analyze the simulation result with the block diagram above to investigate :width: 600 ``` -As observed, the command can track correctly without saturation block, whereas overshoot with slow response occurs is present when the saturation block. The second figure shows the output of the integrator. With the saturated block, errors are accumulated, leading to delayed convergence, a condition known as an integral windup. +As observed, the command can track correctly without saturation block, whereas overshoot with slow response occurs in presence of the saturation block. The second figure shows the output of the integrator. With the saturated block, errors are accumulated, leading to delayed convergence, a condition known as an integral windup. Next, let us examine the manipulated variable in the previous and the post saturation block. From 1d5e655a62d498bb26491c3837432953def5bd54 Mon Sep 17 00:00:00 2001 From: Takahiro <114006024+noguchi-takahiro@users.noreply.github.com> Date: Fri, 10 Oct 2025 11:50:40 -0500 Subject: [PATCH 19/48] Update source/getting-started/control-with-amdc/integrator-anti-windup/index.md Co-authored-by: Mohamadhasan <70004596+mhmokhtarabadi@users.noreply.github.com> --- .../control-with-amdc/integrator-anti-windup/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md index 8c6ca4ad..5cea99c1 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md @@ -62,7 +62,7 @@ In the previous saturation block (`preSat`), the manipulated variable instantane #### Disturbance Suppression without/with Actuator Limitations -Disturbances can degrade the system by introducing unexpected/rapid changes. Let us examine if disturbances affect on the behavior of the integrator. In this scenario, the command is set as 0, and the disturbance of 15 (i.e., higher value than `Limit = 10`) is injected at 0.2 seconds and end at 0.3 seconds, requiring the disturbance to be suppressed and the output to track back to 0. +Disturbances can degrade the system by introducing unexpected/rapid changes. Let us examine whether disturbances affect the behavior of the integrator. In this scenario, the command is set as 0, and the disturbance of 15 (i.e., higher value than `Limit = 10`) is injected at 0.2 seconds and ends at 0.3 seconds, requiring the disturbance to be suppressed and the output to track back to 0. ```{image} images/Disturbance.svg :align: center From eb1ffcf1d6b78b01dd441e2bf7066a336e45bc83 Mon Sep 17 00:00:00 2001 From: Takahiro Noguchi Date: Sat, 11 Oct 2025 16:43:37 -0500 Subject: [PATCH 20/48] Remove not used folder --- .../current-control/continuous-time/cvcr/index.md | 1 - .../current-control/continuous-time/index.md | 12 ------------ .../current-control/continuous-time/sfpi/index.md | 3 --- .../continuous-time/single-phase/index.md | 3 --- .../continuous-time/three-phase/index.md | 3 --- .../current-control/discrete-time/c2d/index.md | 3 --- .../discrete-time/direct-digital-cvcr/index.md | 3 --- .../current-control/discrete-time/index.md | 8 -------- source/applications/current-control/index.md | 11 ----------- .../load-modeling/dq-machine/index.md | 3 --- .../current-control/load-modeling/index.md | 9 --------- .../load-modeling/mp-winding/index.md | 3 --- .../current-control/load-modeling/rl-load/index.md | 1 - source/applications/maglev-control/index.md | 3 --- source/applications/speed-control/index.md | 3 --- 15 files changed, 69 deletions(-) delete mode 100644 source/applications/current-control/continuous-time/cvcr/index.md delete mode 100644 source/applications/current-control/continuous-time/index.md delete mode 100644 source/applications/current-control/continuous-time/sfpi/index.md delete mode 100644 source/applications/current-control/continuous-time/single-phase/index.md delete mode 100644 source/applications/current-control/continuous-time/three-phase/index.md delete mode 100644 source/applications/current-control/discrete-time/c2d/index.md delete mode 100644 source/applications/current-control/discrete-time/direct-digital-cvcr/index.md delete mode 100644 source/applications/current-control/discrete-time/index.md delete mode 100644 source/applications/current-control/index.md delete mode 100644 source/applications/current-control/load-modeling/dq-machine/index.md delete mode 100644 source/applications/current-control/load-modeling/index.md delete mode 100644 source/applications/current-control/load-modeling/mp-winding/index.md delete mode 100644 source/applications/current-control/load-modeling/rl-load/index.md delete mode 100644 source/applications/maglev-control/index.md delete mode 100644 source/applications/speed-control/index.md diff --git a/source/applications/current-control/continuous-time/cvcr/index.md b/source/applications/current-control/continuous-time/cvcr/index.md deleted file mode 100644 index 86a85b8d..00000000 --- a/source/applications/current-control/continuous-time/cvcr/index.md +++ /dev/null @@ -1 +0,0 @@ -# Complex Vector Current Regulator (CVCR) \ No newline at end of file diff --git a/source/applications/current-control/continuous-time/index.md b/source/applications/current-control/continuous-time/index.md deleted file mode 100644 index e8e3cc94..00000000 --- a/source/applications/current-control/continuous-time/index.md +++ /dev/null @@ -1,12 +0,0 @@ -# Continuous-Time Control - -Foo bar - -```{toctree} -:hidden: - -Single-Phase -Three-Phase -sfpi/index -cvcr/index -``` \ No newline at end of file diff --git a/source/applications/current-control/continuous-time/sfpi/index.md b/source/applications/current-control/continuous-time/sfpi/index.md deleted file mode 100644 index 819571e8..00000000 --- a/source/applications/current-control/continuous-time/sfpi/index.md +++ /dev/null @@ -1,3 +0,0 @@ -# Synchronous Frame PI (SFPI) Current Regulation - -Foo bar \ No newline at end of file diff --git a/source/applications/current-control/continuous-time/single-phase/index.md b/source/applications/current-control/continuous-time/single-phase/index.md deleted file mode 100644 index 0e095f17..00000000 --- a/source/applications/current-control/continuous-time/single-phase/index.md +++ /dev/null @@ -1,3 +0,0 @@ -# Single-Phase Current Regulation - -Foo bar \ No newline at end of file diff --git a/source/applications/current-control/continuous-time/three-phase/index.md b/source/applications/current-control/continuous-time/three-phase/index.md deleted file mode 100644 index c4447fac..00000000 --- a/source/applications/current-control/continuous-time/three-phase/index.md +++ /dev/null @@ -1,3 +0,0 @@ -# Three-Phase Current Regulation - -Foo bar \ No newline at end of file diff --git a/source/applications/current-control/discrete-time/c2d/index.md b/source/applications/current-control/discrete-time/c2d/index.md deleted file mode 100644 index be440135..00000000 --- a/source/applications/current-control/discrete-time/c2d/index.md +++ /dev/null @@ -1,3 +0,0 @@ -# Continuous-to-Discrete Approximations - -Foo bar \ No newline at end of file diff --git a/source/applications/current-control/discrete-time/direct-digital-cvcr/index.md b/source/applications/current-control/discrete-time/direct-digital-cvcr/index.md deleted file mode 100644 index b934e87e..00000000 --- a/source/applications/current-control/discrete-time/direct-digital-cvcr/index.md +++ /dev/null @@ -1,3 +0,0 @@ -# Direct Digital CVCR - -Foo bar \ No newline at end of file diff --git a/source/applications/current-control/discrete-time/index.md b/source/applications/current-control/discrete-time/index.md deleted file mode 100644 index 111d7f0c..00000000 --- a/source/applications/current-control/discrete-time/index.md +++ /dev/null @@ -1,8 +0,0 @@ -# Discrete-Time Control - -```{toctree} -:hidden: - -c2d/index -direct-digital-cvcr/index -``` \ No newline at end of file diff --git a/source/applications/current-control/index.md b/source/applications/current-control/index.md deleted file mode 100644 index 23251a1c..00000000 --- a/source/applications/current-control/index.md +++ /dev/null @@ -1,11 +0,0 @@ -# Current Control - -Foo bar - -```{toctree} -:hidden: - -load-modeling/index -continuous-time/index -discrete-time/index -``` \ No newline at end of file diff --git a/source/applications/current-control/load-modeling/dq-machine/index.md b/source/applications/current-control/load-modeling/dq-machine/index.md deleted file mode 100644 index 8c7c14a9..00000000 --- a/source/applications/current-control/load-modeling/dq-machine/index.md +++ /dev/null @@ -1,3 +0,0 @@ -# DQ Machine Model - -Foo bar diff --git a/source/applications/current-control/load-modeling/index.md b/source/applications/current-control/load-modeling/index.md deleted file mode 100644 index 441b005b..00000000 --- a/source/applications/current-control/load-modeling/index.md +++ /dev/null @@ -1,9 +0,0 @@ -# Load Modeling - -```{toctree} -:hidden: - -rl-load/index -dq-machine/index -mp-winding/index -``` \ No newline at end of file diff --git a/source/applications/current-control/load-modeling/mp-winding/index.md b/source/applications/current-control/load-modeling/mp-winding/index.md deleted file mode 100644 index 8e31b609..00000000 --- a/source/applications/current-control/load-modeling/mp-winding/index.md +++ /dev/null @@ -1,3 +0,0 @@ -# Multi-Phase Winding - -Introduce generalized Clarke transform and how to apply it to $m$ phase windings, decoupled subspaces, etc. \ No newline at end of file diff --git a/source/applications/current-control/load-modeling/rl-load/index.md b/source/applications/current-control/load-modeling/rl-load/index.md deleted file mode 100644 index 4ec7bcbd..00000000 --- a/source/applications/current-control/load-modeling/rl-load/index.md +++ /dev/null @@ -1 +0,0 @@ -# RL Load Model \ No newline at end of file diff --git a/source/applications/maglev-control/index.md b/source/applications/maglev-control/index.md deleted file mode 100644 index f4adc1b0..00000000 --- a/source/applications/maglev-control/index.md +++ /dev/null @@ -1,3 +0,0 @@ -# Maglev Displacement Control - -Basics of levitation systems, mechanical system stability via PID control. \ No newline at end of file diff --git a/source/applications/speed-control/index.md b/source/applications/speed-control/index.md deleted file mode 100644 index 7f684070..00000000 --- a/source/applications/speed-control/index.md +++ /dev/null @@ -1,3 +0,0 @@ -# Speed Control - -How to get a motor to spin at a desired speed using FOC? \ No newline at end of file From 64eb8d8a14b6d63af8e5f14f9a68608df2136b13 Mon Sep 17 00:00:00 2001 From: Takahiro Noguchi Date: Sat, 11 Oct 2025 16:44:52 -0500 Subject: [PATCH 21/48] Removed not used folder --- .../control-with-amdc/encoder-fb/index.md | 13 ------------- .../control-with-amdc/inv-pwm-dt-comp/index.md | 6 ------ .../control-with-amdc/simulink-code-gen/index.md | 3 --- 3 files changed, 22 deletions(-) delete mode 100644 source/getting-started/control-with-amdc/encoder-fb/index.md delete mode 100644 source/getting-started/control-with-amdc/inv-pwm-dt-comp/index.md delete mode 100644 source/getting-started/control-with-amdc/simulink-code-gen/index.md diff --git a/source/getting-started/control-with-amdc/encoder-fb/index.md b/source/getting-started/control-with-amdc/encoder-fb/index.md deleted file mode 100644 index 842e3c27..00000000 --- a/source/getting-started/control-with-amdc/encoder-fb/index.md +++ /dev/null @@ -1,13 +0,0 @@ -# Encoder Feedback - -## Calibration - -- Converting from raw counts to "theta" -- Direction: +/- depending on phase connections -- Sync machines: dq offset - -## Computing Speed from Position - -- LPF -- State Filter -- Observer \ No newline at end of file diff --git a/source/getting-started/control-with-amdc/inv-pwm-dt-comp/index.md b/source/getting-started/control-with-amdc/inv-pwm-dt-comp/index.md deleted file mode 100644 index 32787da4..00000000 --- a/source/getting-started/control-with-amdc/inv-pwm-dt-comp/index.md +++ /dev/null @@ -1,6 +0,0 @@ -# Inverter PWM Dead-Time Compensation - -- Sources of non-linearity - - Dead-time -- How to do -- Example results \ No newline at end of file diff --git a/source/getting-started/control-with-amdc/simulink-code-gen/index.md b/source/getting-started/control-with-amdc/simulink-code-gen/index.md deleted file mode 100644 index 5500ece9..00000000 --- a/source/getting-started/control-with-amdc/simulink-code-gen/index.md +++ /dev/null @@ -1,3 +0,0 @@ -# Simulink Control Code Generation - -This should basically be a port of the AMDC-Examples autogen docs, examples, etc \ No newline at end of file From 6b2f8e7c0b4ea0e0a017302917ae02803315dc1f Mon Sep 17 00:00:00 2001 From: Takahiro Noguchi Date: Sat, 11 Oct 2025 17:32:44 -0500 Subject: [PATCH 22/48] Remove old version file --- .../simple_model_2023.slx | Bin 155769 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/simple_model_2023.slx diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/simple_model_2023.slx b/source/getting-started/control-with-amdc/integrator-anti-windup/simple_model_2023.slx deleted file mode 100644 index 3a298dac67e131161af10ec3401e8affe10f8056..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 155769 zcmeFa2|Shiw?DoOQ8K4Q8B(dtws|I^3?=gr65Bk_WXO;ql}czbC1uD^LJ}D&Qv)GI zhEkDPDpT}d&(_{3sm}M@d;jumLh0^z zaW#@hp^z_D_@%40y}O;YgDtPCx2qe*-u3%`OlpAY%xyMPP+juleP+QkLY z3SMUm-hgOiUj1&4PCs8`kC~%`rj@A^XwKZ))y>+$%+1;Z^Yi=U?Cg+zx@y8D6|`VE z3yYuMw9nm5!PLzZ(VM0l$aKij(GFvZHzqGuV644=(z3jxgR7gVgBwoK^FL#?jTXae z`)6fx3vsauiGfF<;e{}oZy8mhMTLJB``^%`j;WnH=n!Wm$$zp}{_n0OAhO(M(IT)@ zettMc-2B4GOF{fGT3~vd@1VtSr)9w(zY8mGXKL>R2iOGTV0y?7XY_w0IygPnPD1?4 zi4Nuw6o7Atodku2ma)@+rOW>trV_yIS8%!g@(X}{gwRODLtY3iXQ=;%9m|<}m^zqY z%uUSxJ;Mv)6tUa^6+vt+j7EYT@=8?nf7bFlP0egg++5)MzvKKu-*q6&x12LzcaD66 zF9H7l4bHFWerPVAZ7-?G3`S@8GiPY?-Qpa&tWGM3W?ILprg8<3j@!W-tUgkffKuA{VE{;wZ7dLB+>s%s6A|U*lbuO=ilx(bf9LzCZNUp}c zV?mUh!xQHC<>61f$mhRjb?oaOm-r5VST!&fQfzZr$^>+TMFPtPRt=0D7A2Y50R(a} zMS#xtM7PV?-PG>8x&?*s9tMK^E$BcaQAm&v&LLV5c_r{a6_4;+l$Mghs}~O#_c%DY zyZr|^V}S`Z9L&`)ZdPp4n%4GCb{JP268!E7KU(kmum8?L+!kK;_dc?$7buxpJK*d- z_Zpj3m%{^SemFxk8@r0M3Jw|mm2^0~B8qp)pRpPL99jX<(0t%? z{DRBLx5QEZE}!*x$^S||JSdqzH9rf8MnVx9i%PH%@_!7LeBbGzKiTOXh<}!gqQt`A zV0~sjA1{s+V6@-IXKa1Ok9d{<5;K;!8m@HuHxJbw6A%*bt^eVv`gLsG>*%&HyrSn1 z+G3^sQB8;VkT5?)S7GGE@~B)?5WhKm-1|4mkom~!|34F1mp!1rHv}%E2nyq4%0I9K z8iARD2;c;u1+T>Z=M&xkAI+iVV(Q>(fpJkZ!zUeeJ8TV(jUfCuRD}1?1q6l=l5#{4 zXGh$gpKn=6zeEYDfN^lNw|2k+9ce>;){3n;vCVyKOZ1|&gp_k-Hj*}TW9=Ervg8RVr?e?;i}g5)^2Rl z?#OEsJLHF-->B;7iGQOV^7^MY{#(B6+q zIP=G}vj7@4iY@*GkO~m6@Ba`JgRSvg*`&ESeZL>7<&C>Y6*$B4FBNnDTo*{yN4hA)NaO{oei1xV8f91J_o=DUb7?oFF`F zJ0I--K{P=l(S#o#QuzN-?8NP3{unJE2|TUc%&hQv>-$gG(1>0x&T}Irfe_-c0JH$L zE?ee9Qoy?oUg7^nc_!~-4J}7&Q$Q7HR(4A_305sD7mTZwquo5sh+hz^nPqt}97@{f zfGz(qF8iQEYXLZ9VSnzg)rkwQ0`sZnXCwfpor@JwCqEXpF0W3pCH(h)g(`57QfNNY z{HzMBYY8Ix6zf_-{L5#O|GHl8{|c4jqNmV&=U@qyqLH8|#D^SLH1ZwF&1KW`|Km!< z$MfHYKrHyf`YAAb|BtFv)!G5`y@`X%rgOcXg^&RshH;&A{v{BMs_7w&9l%&aIQ&a# zQ`5x^#y12u0}&v;1PP+%$Y2b(IG+TofB>|L7hY#4Ff?XXxZc#yBJs^nGc14x z_{)M+3j;H}W$^_Udwct(I6$M3*73Y2CS1UqxU*sc8s_AFP5uOJ) z%cw{IEe0yW8s#Tr;7$%!S|Prl_4A`-KmGiZ;J8cTv?Mmqb|FIIcY$3}K={Wc7ccO` zPm34BUkbm}LZ`w174I(mLNKJY;9&kJ%n!y|xV9uOF5F1sUM%?ZT-;f}Q{vagNya~K zDg58?VFwwgTg04xKdf_chyS;62Mq&gbLUN%PY^M+(Bjj8UlFTv2xQ=s=Y`HkVk z7nrvp{$g{|iTz5txwZHg`v3B4%_-4oam9>Z4JQfz{E@@|ZB7!tUrBAA^e(KlLO)5nSdJflT5P_bBobN(Qt*FW6c!h`1pX~pS@?gD zW#QU?6ls2-;_+9<`IXReF?-pNE&SV1gbWTZ*xL`*`&pEQro;agZ#d*&FC>AN@MHXk zaJxhEFAQ%#y5*dq7oMwy>cu+7V&g8j!2AmH3S8t$3+0BHjm4+_2URTkAnwZi3rvH& zVZq`HuMMOIWJAFpbp68zu)Z`G>=tepF8RZWgWvqP zh;{GfMOrN44?isy_9y!bECllSzs{X3v4sd>u_l&3SvV~S&0idUX>67TMgO9TnzI8o zP~$fJXKM*BK}*f8wLCVNs|Ik9clovEu*t%{DSlhHEsNl;w7@Cwp=`NmA@ED!GG`1d zT*F=bPsCh;gv1MpQ|(eh0w(w+3Kc;A%5L}rhs zL1DS$BZyvjaQ}3%U!7GbUVpLJyqd8_$Cmm6zqGxe(4Q9pcy$Z>%J_igejycB-E)im znQiAz^`gm7yt?NFS)%m8pX=q03`p_|LFd)C7;oVhpW6x6n16R>q><^e-ubUwXmZT8j$aKeH`*DLQ%1zkeA#v5R35*56qSjmG)ig5*87*786{=pTS8 zGP-eKWtLwh8y*kM?rt)gL9d3@i;f$EpWkJU@6h@ zsS;|`r4RykYrphgyp@qrz@vQJv_zJ=-x&J_U2AjXj+-U_?&t!yEx@hP=JJkq$W696KU`yD@n|RGha3a+4UFw5bcm)Wj5Tpr3V) zb7B4kZ6~~cE5dzhn$|vW9Xxw0$veLU($|xm|8dUxBJ(3T-^u(r>*H?T{2TjYC)p*vH?>prFuQM@j#7cO6Xc|8mGyhl@>5iT3+VzsM`GrLZ^tC@;ZQ{_Q;Qq8;F)&HNp||6mJqBdypQm$BcL z-@_8r(SNiDTr3fuAHV$vd%)i7kF^6DseqQZgTN9o<1hEH&)v-l#KeVu^Y6YSu-s{x zdyFZclAHx9E6sL)N@Myy)esmeT1>}-Cqi` zM8KRAW_ez6ZY`V%|8V0tZ(NXp=hj-Do%D_pv* zd02)UFe&o2EH35yAH$`1zWirgI{!Q|q@0#woBtVm?}*59aSEH#@b|hvc33V zzCUq_n~w+QHp`+*c+8HO3&stj?r!IbQNlPZejW_=x9pp}Jqq_-j6607?Fv zXVD?s69M86dnXS+--6j*e6ffNbm#?hqxe5!1)8Hv5ctA+$kY|HL?>AtZhUcsr}Xgg zEXC<#FY=u_nm6NuQ2$#D{ypO?hrqe9cdcNbn8J-kYD-qe^P64b;K@7M+ry)WFh4$S z=sOmi!*B2;I~TWK!tno^5(Ec*=6&F2c=~<+$h{SF`xjk`6`J4w5-Ic#_rKJm265n3 zh~r<^G<fP0ss zeXvXY9%(KMd;h^qJ9>$d4=akuFJ+lS*#Dq+yHsg52Q+`#`ogXy@E7y*xQHfz!@vtp z``o^MX-<5bZCM=)FB%K{HPBoMbmt}%`_8+GcL-3Z22vDi4gALN`x8z~5RBn!grLik zm`;aAKDvj)({!gDuRUa-UzvP$jX{{;D!B&_i8c;I-_Q6~+4Zej#;(+>2Dd z(y%w)3K1HXIO9D8ogDm`dlxWH`npR<~+*$N)1VY=Om(HIbv3m&~nQ^mI|k6s_vwFV90Yx&8kr{pV>~V?&bqB z&KG@WjXYAHmzdYy;_i6PRea~#Adh+R`);+a5*&f_-rxlM_g5DB*mRqyoT{pw3 z1imyz6T(gX7Cja0@Ase2((#DikWN}Kc*k{SrvR1m8xssYPuDBbjL<71n`RhyPLYQm zxLr<6OFN=-d&qrKWi;xVID5`M)W!Ay#c_ElDfv#c_qm)j8aCs$+IZ%kv=1zVpIc6J zXr=aTPz@%&x8-geT@Hn0BHcur7*(>SS^;I(hG)IDeXG~5+!#icuepU!oByQX-pj^2 z8W?3?>?$5=%^C0A!XRPhn(-gHu1 zQzPe!GSAoZZ6B_(2DI$8(;@3+JnuZTSO0^@=!8G-#A_MjC;o&uu6xeZ>eY`w`Gcuh zNKmNNU}~Ue?Ob_zkngEY?G8bFbfhDP6EA-#p*#OlSHbZWEpIH>#luH7OUZ7w-(z^K zbf#8Xi*D5&712)t{;zK_sR`d?O|-gR&v7-F^$M}}JG6U03%Y7don$DZ00SuqlO zzLH#gh(;rFs{nJOcj=kcD=sIQQ?kp`YerCtiXI%wS$CFW?6ZBuH-X$ntJ(`jkvq55 zr5|~87b z0g<{jLk8x>*_I&@I_cFN4Ue@lHdy6PY2SH$I=f?(T*c<(1FbF1Dtv7uFB<6S8;vtQ z#|)cSG385d78H=S5+!hnw+haAIPB6*?7`AIOHO_{TE^qt3&LaKM-qf7wcU#jY?g?} zn7OSUy-L)OBcJQla8g26`W72ih2gnM5{sU4WA94s$(ftNJv5o^ecc`Oi_O$>!lg(N zF%vNgwPj&TV$NQN5Te}N+7zBhXOEmtto^bY?NuuIs7Xi0r|C8g+l#N=uP>rNM?zK^ z)$-<>v6a95F zHCrv|Qd^!~4hs^Iy`=UqxM7VRL!*+``3rg%-lTVFAOD^cqxqTS zci5z_yGiVPp@*K$&2nV)$c+v?;pP(*HLnSuY~hXVS3(#fI!vUPeF+xZ zVbxl%Z4W^I*T5EAf3|~}ql1ODr6$I0kAsEdydh4N+f?$AhYov_rA)suKg+Lpse`Q8 zVUTFOlDq1mmwFw~Oa0s#DK-q;Oz}@1{#KuR@4mL*q1UIXWjj5RP93;F=uLF3`}J!E zI$f1$qczEaoanTf7vzq&TRD^@!yYMbzfbbsU@Y?afW`6HwzH?rUH5Kng7rjJy1vTIRWI zB;9zi{f*g&fwPs#-yS4?3kZ{QER_%zS*(Y>HyAl9VgK=<2hN3hn0w-?EAO0Net-Td z?iu!TZh1<|wo;Zn)brah`NP~*M`?qez9ck~7musd8K^9!+8cLec6_aQ#47XJG~HhB z`)vc?UR}>V`+_9LR8uFZ+B3P(zkbA3+}BRdS-4chb>xcaCX#%|$oISRYFzH8oVXtH zM!)i$>#I#JB4-2+gzh#L?m2a-27Q$vgjdM?ahAOTbc3!wW5F}qPgf^6k@X*Z4_qs+<`n=`o)YRiC65aTM2QrIw zarU#nsX6H3IUx$Q0d!%HaWgfChp_XSK|5&vDQbv2oH(<8UnMKu(avd3#tvPpV(w5o zqstcic=*LrMkziRDRI@K3=0Ez2U`u?so3v24OP8%DvE606Z@Lx_*w(*{TpfMg5HSJ zXXssy8}xAr-r0YyRzH0$R|5kVnXZ0r*V=cjWho77*KaEe?bxGVo4K`BLU;dh?#^Iy z;g2C7AH)lv5xXa}B76Ne^A%kor^I5r^qy?2Jn{MpqZl+5vrELON?qp=o9U|oV!;&$J>NzY0s!`yPxBxLaTgLP_2W0 zqGj^Q*v)2kS7mzAQhEx}aHCsi^b1E>O4gj}Oi=3WY!yu(cpIRgRwJCy$dH^jx!uOG zzK73=?(rv#vtWFFA(gU{TlaY>@9s}2yL@)szV)e!)uQ}|z$wr3vGxfVMH39fw9q*A zolER8D(r&qv8wPf1I4?&~A;+((I;PmmKcBFPWV3 znPv*UZEBimb?Rb4G+_;U&j)mMPUFx!HL`43%AIT*-yY|B@LW*5!=A%y`wp{oW_>QU zH*zQQ-+QLMIJrKsZKeC&YiMU%O)Z82VtOsV!Vk?C;;z!{Y*Sd9p78!Si3?@NPNNIy z8;VHRPJ2-#Toq;ylgm`#;enVKV9Rjv+Wll5We^{DfbWCqQf@jeRppmO0_^vzo*hiz z>2>y&)mLA`{oN1E*9r7=6bW!0cH@4PDxBY^DRV!N>Lz{0^=aF_VNct$6Aa@o$Tx|q z@}x~iJ~QIK)8Uc3<6&Q#n;Gjhf)h_p)#s9*fl_Tu0d*%aZ?lu`C7M75pGuQ_J__iSMhBo@P77M!!0o?NCt*C)^vZ(^Xnc$Pv$cSTdiO{F0U0<0`dMXJY+SPY?#u%$3KaICma*BToeOKz}I=H}eK zUDnjpG#$fuf@E@XGBx(YXCHG6COIi7>6yK4q$+C2n7pNal+zPFf4;^%sKJUD<>lp7 z*4DPc+SQy$@sPIf#*G_RZ3W!Kaz}JBSD;=MxspD zdzLP(+2)mJryqRkh;r&pyD?*e$FE*rJ)3;~n#zfL@9&&cLbNE5_mVuNVP#4~_}8z# zAWFG8y1c!eX=rF@B_*YzmKGhcTrO9CYd$AhK;U$Aw3+@oIy&MmhZpp`t5>d+&9iuX z>dYC!;PN9+rKib#N|-J3id30g(uuP+WF~6~-kp9j{9rSp4E>tTZs%1=V5JC!L;55r zZi8D#v^aJ-IPjok*-n>LRgv!6wJSB&+sjLqIz*$N&@<|*%*-dvD_5^p9ONsr6Yg$v zymxeGa@s9n6B853(feyo`WAgAL@Z;c;~PSWQck5ku|Y)9#RdJWv60(ekdZ=CQnLQ? zuGOgAjW_Dvx!kgETZf{irw^;B*tt9P89LCIi=w{Pn`IUPse>-zrD zja%HqoSst~=H&UfQfk{aQg3hXQ#IyJuAEXD7ggEiRaMDRvZ)&7R)RazwG3i+#MF{S zJsQ^T*ya351ixZ&aWQ7HSwlH-#2$E)^Qsgd|Q3`l(Mbo_UMKbr4;=Y%=HN3R2TWvm=#;|^(Q=3vdk6K?}zq+PIPC( zV5)h*`+A$w*U*uz$TljrIPdkKrG=h0f|#G5|F-WW-0>m6?>ph-gHs-Ot)kk1uL+npNKQGMhKJiII8&=^ zIfG6E|R?k%Z#YParGj>u(o%MfLrqhXnZWZr`T57Ri^srOfE zb&kt@E}6YkMl+nON!ZSXYOp?9-NMlIo-Hi$K#;E*jl(u`IgWGA0ZKC4-`>oSpxwiy z(8Sj~?x*gTbMMNnTY?HoN-eEleEs|yvW+CdO2hUtObIEO9YGOv*kI20d?fq4eS1^N z(HzU*^x$yDt5c;^8MdGAjXvDqHQw&IX(i#+z46DGBs}y=hLl+RLOcdr^&g(ivF;4` zCiOhau%~`JS2gM0>{P$dm!LP@-J`F=SPYnZmI&&n?RBqaH_0`r--S1ijEz-Z5_9bW z=NWLh^yK_>5_o>{;qf8itmxR-&`t882bbO!{9 zHAes;xR^{4TU!&Et?QyK4WZ0@K;n-m@P_I@dtR?=V zXAVn6Gkoy&A)dHXZnRY?`N@$NSL|*VaU|(zcSLP&ju8)Mq~+!1RZWm&*dXE%VvzL^ zLi7f^T#3UhO^|rV#wTUIeHD0klF87*+uVE$_&Q11PSu#0m^jN|Zo(7Imh`e+rVF2< z@(V9%ux;M#{PFD`a|?^h;H&E;y`0YPGs)jiN)yw3U0>kt$6C(aYHDlkb304@Hf-CM zprE6(j*yU$&uiqMpiNVn*2Sq@DrGe_Zg;wXzNQ^@Pu)}f<*1#8UWs}6_^?49syfM3 znIso%g9)OSqaL^r*}i``xjjdVJz6fa8BWE{R1G<5V(@=Bm}$*@94%3GO{b+SLo2rcj$h&0k}{G`@@4Gj3-u7 zQ0(e{cw)3SC8`2aVnaj2i<_9$cRYtrnpTF!=wIU*4i2ScItIC~t{c)G+WwM$fPn$y zPI-BLr!HB^@mH>=>fYUUc}Lda-NPg~JJG#z<;t{%LHf08%O5;=FyuerM>SZQQ)VSd zh=L4q%K*u&nVFf*{n*r;@YVAyw_!n7gA&Vw;|v1zSN5#gy@i&TnE2p_XQ>eS%9}HF zZBr@PZW=r1?mLfO0XDxMO0hv*UA=4IW(KD5s@g=A%xoZlk0j^rho_WNVfC^zTUAaa zB%I96%|-V&HT%_r|8tw<=swi{eDSe`-K*O)IVE2hNvN2QucqgLJecA++~GC$SmcJ~ zQ)Vl{3kF%~cR=VmVxLi(g8XmiA6uMzY_Xk=4E{~i;($cw(iZC}=O-)R`DwLPkhGDZ zcK-@g8AL`?;fn;QJ$v>zIXlbsKhLVOm+<~*zERXENwJUh^0AqT?kLO`0>nE}2dBRb z#$q0nOS|`J`F^a~_9EAm2o8>IzK&tcE7Av5Rq|OnDVVz0cLnjn_Kf}$ufx!Fwze#E zkQl?q-f4^T(h z<)!5f`?dm?X>q466gf$-(dVxapI;Pv<{0_W<&8_-lBj>@B4&ry^>(htE^@3K^dlMvA z#qZUHa-{17v0=HotlE=8}23DVBkvWNk zkLTC*^-6uk-ao!*X+7NE9|^lQ?Q2R0ugq#JH+Erhd;f@moB@61ncu0fFs1XXH!N7T ztR$plmbB7j?dQsWIL> zTeq&DlAd5yJh?FfWFqn$dL<_-i}Ig*M=xmKN*77b`>;Do#=&~{-8=1}dqgPY4ENS2 z6G=}G2%J;BYSS$4@JjU2C9yn%{*Jni@!UsZpWet8R<)P}P_VGDT$1pl%reLiii}+C z>+5?eI$E<&*;9%Cyy|W5F?QpC8TaE%66+v3L0FQYW?+aYa_xz=9v&P#0r*O1n&nhA zqljb2{hq{tlLhu|Z;E;nTs_40Zd*wR(JOQu~K2c9V~vIXf6m^2k9Dn zryArdDkyx%f4lbYry08UZPumDT9A=TFE^>e|4F=r?og4NlIY=T4qDv+7fuFjI{-`R^>E_Fj`eaA0GHPd~Tn zIX(i-YkRX!w`eB3ef!p?2jIFwqO>2x!LDcfR*riOmyCxD4A>RVw%xLhcAENRZTk3v zP(>gSX^7fI;Z-kRzO2a5&KzpLB>$?rD?>u!atu2?N{R~81-ya8*#6!1sZA_d0 z%+zNg4RAO3XD48z5KyXk@mcX?$R-tWCjL7hQX&@)VqIAQk%3r_I%I!};;Qk^fO~vS zU1b{m5XQ;iy=x&%Y%{mCZ1H*goTG?J-1$w&NEJ(f-WNGUlEi>n{S3d+{z7dBhwS=P z6?)TmwK2`v?f`%)%%Y^&50v^AJu~<^GjlZ2e=7Y|k3(lEx9_)^@#gGgj+Pt~`qq5g zZ38d!u03*vvqL*IKFqsO!b6ohq2>h`n`OIU_6E5Aw+Z@GV`3W;~(J5yN-!G2eMrh=CB0 z-x+6oiwgKkgrcUVMx|>ZSd{E(vP8wpJj+ed?K8&^WaS0o-8l4s3`TWQv=+$eJ4zE84jgcdC&^I+fK6Ia1uIr?_hu;=LoIqjEMjHZf)%TK5|p*C0m{kYa{W|NV$H{FvIa%58|0ke@^$ zkLDMeMI|M%aviu`|8ZJf1JarkB;>m88)j8+`g86*T(eJdzk>-RQu(I|QgwbqBd;ql z{@b!{xV%&TI^Fq=#A)1f9CFSI)b^NK#yT-ut@XX^(KRj&7qvK!LJ(6-2~k)DCv`heOf`{I-0u z(QUA`nP6>9fosoRuz%RNVM2z-rD%4wod6)DzkPMBHb+ZNzKtIF@+CW_bwK-LJ`_v` zU)^>_@<)Q-7yU=^67)NE>_9XLr3B(81HpDNXU`HxC_p`licko;bZH|}zv>k_FhM0? z@%X|~_ze;PAuqY6Q=y&{zbNeVH?--rjtmMSgwv4X-v1n=-icJDa3QD^2il8UTsFBM zJjmKwV80shQZOmip{Y+FPAO-Wj`np3Gl{#EO^)?Ak95gFM!(wR8ZbKvl@=SvS9PO! zzI*Qd>-=XYEfFh(mLHUb`18r9MBc$LPd7D?C%T5~9^ZpwPbcY2h%F;Cq>Jo2OPPpB z$jhdO?@>XOFfl!i)Lz2&M7O6`W$%e**UPh@fQ_70-iqk7ukTn4r|!;Vb-mUE2+0zj zLkbs#?N0$x1tbcvhlbqkvVqpdw@`hI^*qfHkuyFG(Jjfk@v2^lj}Tnsz<~o0V~9mW zMD7Bx_6Sg!cxjo4IA?WT9n?8;{{GS=6pSGd7B@psJ%9c@q-GY@xVp^ztSrMqoni>z z1<5LLJQG93!(5+3jvh7r__hX6lkD!@E0ID6YF$ttJ#Y-#%(t{Lpfw0(08*tuquaOAKyV1p+=n-M$zM>vOMt4<%ige4%Be3sJi{T7OpH;^SD^xZPVk zjCSj2Cqb2)0SB#*Sv9lMw4y28u{ zbs6HPYU}Fc6%`eWo-&+x=#p4hU7a>UmvQf&3?%#2=~_1F$>!V-NJG)*$ss=Q=D(r= zqs(+8sir4N>&kjSqnypERkkhX->ey_p=WY42_MAMP1(RPE9d-*VAM8&=1MVBe1hpO^*{B#9X$3E9_!= zTh{JZPs-wZ@FnS5Dz8I1O3dC@n!3+SKYGK*X{@8IUf|f-fiBzUU3)k?EiJ9WbpVl5 zv!x{eg~4Y1YpO|68^xY6xHp9ZH7NPHNi+8Jz$YIma4pkDI~Rp7FAD58ynl4wY|IDp zhu2V151;FMRYW#GSbN#C8Vi($y1_E;Abp;`Y-vaM&UhM* zB0A=5vh8m%R0>d8jRHK4Yb9+y8hK6mg4E%HJe9OHl2TGPOe;x>OTQHEQu7VpF>Vua z|Gom8ukx0b!lrk#M~@y|NkyeJ+)=`0yju+z3{sy@y@9|!q3_r106?3W-vR!iEHwnF zI7YXKYNIGMqztShK;6?SStX?Xc=>`oAfUZ1&vM_VftS(KNj^y#hLe54E<`i1)Ot}T zR{!Zi5vazHf-o&@CFIs!;C-dvW)HjdHLU{SAT=XF6!@N`W*dO2YEZwvbXl8}lf%n% z;Pw#+WTTQoLZVwO(=x2(s(L;M;#6g2Wyf>RBFHLq$uY*n|BiRCez!1K`(i$K4jHNF6WxNS(~A{LM3GIPNCC29gNWQ*~WG zFW07-11j4jutfa_x7!|rj8H$U1_%pC{#sKv&1OXe)8F>_%mI)uI7)hIB>@4!1f>4D z_=2;$AKCOX51+Akns5SW1*WHxW8|f?Q?|wTT2)k4??dY4gTvz!kS!o6NLN%;B%DJ} zM;9{MT~(>#H-4z{Ko$Z22S&O+a`lz$uX_4VUhQxgamzF`xfX54B<;H%_^b(pA2J(a_rWPb|>qbIogLi-!ZRuXb^98F?Zx zELu!{M+ppc>1KPB%{S_EV36oe>&ls(vh4Eue4oYkKt;yp%*g=ZL}Z1;@IV01)L#lj1t1Xf}$b< zn0ubYZ|C3$GRRT{KddjXH@w!Qms3)1K#1njzj;NcP)+Mhi7R*8=Iz^8Lb058Y2Q6h z+2eh^jn}9kD+VL22LRacW0ZW5l#~>*R3Ic4$g9!-oXG)_pA&cI09IunyNz+MH9s%i z@4!_O%gqARy;%z5C;f%A);4e5dT)?pw&*U=b9!U1WSxEv_B;B@kmBoaJDc5q@IdHA z`HHlm+s@sg^3y6RDwP1yM`x#p4Vz~pwk4De-}`pbGSP3HiQng#%9CkOu}1}1bi-!{m{u02n70hpNmI<_zKxtQP7Eu%K#p(n4jI-Y8Mo0!xduFit? z#jAJD&dz%G{QZia0t*48Yr&(DM;nCg${?xRGbR>a9_-9?>@4-_iTA9(WvzMrKoRZq z_;8Mk`OU-Avyi(+YB_VxGGu77ojwRK9)T(uQg3e==M+vEo`D*%8wwtsai;o5Of!TR zlJ>Ps1yE2%1aBu|I`ZyoiByMIH-+!$1NsRdr^A5kJv92}LG0^wy4eRJ0%pe&*UR`z zei`nJ5_5ge3j2XhidTPDA=kLzlSCPox>#<`=A80_W#COojUSZrxre@ed{=i4$P6+v zGAAIe?@sk)dcoBPeYoFlY-XBrhj0Vctbb}=K2W`@NGUhwhO{S09q#(@A;PhA@~Res zTL5EpHS3z}($hPq-4^g6HI5GmmIK8eSxp~->U{&8cy(>8YtV5Vvv! zU-UdpjM|pqMF^f5s*`!Nuuz0-_3BY5-D9jdPw%Ftr42$zmA+D4IO5_S1L4r`(PbEb zUW4%CZq_*E`a3rml~>$bb>)tnn@N#`#;B@eU|`^G6_sGtmB5Y=IeC7JgOohbd5;CL z4M0FX=Qj%E%#!P&LSIQvPK<(cdiPOF_JbZ{LEU3i>|qMU6jBLdr2EgfhQ>AJ z+v;u3+fR4M~698Uv1HR2_&=W(wGX}@13?M3Z9YS)n z7$2s9u)rhKY+N%7%8R7fAl!8=(LbpCV46!9^xF@anGO1sy!B#cW^SJH8tsg+#WK3=pB#2 zV;4mn4PxWPTuGo2gYi#v7iWSb5($({66E+;0vD*`v91N~|IT5vhzLC>4xv;KJaFKy z*NsQ!`=AF0Fncp{oQ^X~F+v>S6tbKs0byT%_@JLP4hetV}^`6@XtICv(_E z-?*RZ_JecYY%mNS6;xwR3v34^llT@uN~?hX7#$tmiJZ*?PY?3FxE1esZ$>9PDvCGn zYi$hY&i(sOLpvEr9d@v5+B1J3#E$}^SPd*q0+diX)@|T$s}xfjK2Bs6cF;bu$a^<> zdb5&pegM3KI7`Ryo$Zc&9v%fia9MlbwQ0_<`K%c?TMAXj7HIB?7awOV^cXa-j8nG+ zu(~=qIT;f>wz8doUG0L_YgbY#=IalX)3Vct>T{%gKBYbPIeBMSQ|t8ev5y}|CVLW7 z09GNyBgERw13ev_&#R(XqH^xdG9r3|?0N%A=36$+WZ-HOGvl2NMXr`{mkH(O-LX3QOj?%<`5|h444VoYbSgL#Ak8qS%_a#0_&Q5<0O)Q&JDOE0x4VPDB zo7@|!m(E1WCllY%6@Yr*KZ&>1KBapF(9?D#fq<4RC0@|ct!2Y)n!@=-7MpxpV@eKxg7HwD1;#THj+TKM`(5)u(PL(>3y6@m`0 z*87xn?1*+%uYBG`Gy{AnLatph3T^i~dboW{?8_$~L649C#3id$G&o|cnlsiG*u4w_ z-n_}+98s?I-D%(?-$3sYb)-C)GzCBa@JL89zM`>%ST3#5tX*^Fc@mKkPh2Vdulwm0?UB_Y_mopWh|jDs!#|D2uNnm6%q#L;=fl z(RqTsvfD0axDULbfyz8%bPx*5E+FXw0UiKH0Hof~h(6=D&p82Nw`4BgK^m;?LBM3f zF$k0oqcjCh784q@^>XcKDcNQ5UWjq|-nSbcJ$i%=zTKp>fB$|!+D~|b(>h+$i0`Lp zuo6VDYXe}OPs5#^SKR|9UXyYe+*%24R9Q(SLk^@!N`s#1^zq~5cY)cYCMJOMDGy(R z+==0R3?y)kNw|RX#E9vEd;UzoNflVP17mVdmHpLS?=_GIfD+S9RqBK`JupBPc?>|m z1Ia)V4%U@NS`2c*B&JX}uNQNFm-S`@887KT{7BR0y5@0 zc1ivBnRTE%^rFM=#$sZP>Q=k}R;kUC;&? z(6D(0^#IMJ z8FH7D8$Hs~)2WHeUt*}6C14sPLlXe1H;edwA=p~l-VYrm5?UNFd3CHAo?etC1Z#*1 zAQ&sTxMbw1&}3;|^AFowl@nzTCx*e?Vx24x{kI|D-pE{v2=C4MJnM4@+!8i1p>_Lq z__X}f4~^TBnhj)5WM^iQtzP#ixVYGmLPxtW;u~)$hn8MidA8Bv8%~>eTQhc?K7FIN zH9rT@+|a8%J0T^jZ$JBlCw1Lzpk^*0x&pN87=NHR0p*7s6ef>Iz+nh10&g7lC4{h65$+lgy&w4m(;1R9&oY7=ws)1%PQl;Nvi zg*u34Xt=6osi1Hm7?7OfJtml(kqx7i+r2ydC^T*F1stZMd)r-~%))2Wl%k$~fZt7p{ zr~=yF&1029lkCW4QJ`GEaIhpk9QopK{K^%W((!_3Cs1wc;C!Vh$%I~2^Bb*VscOj3 zzUUHl|AZnDv?ev*-4Typr+4{~ zb0J2Gt*t6uJuPGbv)*LT%VE?=zdh9UzHF0%mf=K<1OW;f?}mM&*Y%&GCJrB@OKBi3 zy8HD;{x#L}6evK+8EX9=z4Z*JQ;CU@Z{KjBy{%0?TZjS68K zLj(7|yED!S_g;hs1^L>&$R#s2mZt1X09|Wwlz$n#xUr*90E0>0B@4vJLU6(dm!PdA37A2r;;T8sIie~XsAGKXLMqs?vN0dg5=I^8FDo>JD%_a z+U)U~Si6P&VcV^}{{HM+Xm^}so_U$^rKTnV$`8!MXjQzZ?}V>=?G_pssc25Rex1uQ zPB#B-S)iZSzzqiBtTimWfd_cx$KKm#*$fX25$Ng)!KjD!39>x{5N?FF^YOiSxmBIp z*>hY$RyIkkf6EpHd5##v5@T6e)($T-Zg$mk#__a!-Xa4zd(XthS&mT`YNX$)*c6*? ziVSgx?E%81$tDHP|7m1=QfyCK0RhD!TE+~fyY?r-tM@>M)BNT~rGr~;u0>{jmK((^ z%z{ClO~S&o$;q}f4Bl&;o%ib%40Mi+TE7{%nMQCZY0ds%_jk1>s4cx6CA#_3R*hGg zplcRkSXi+sx`yHXTfwij@!^b@Mn*U%Mk+;|Klcp-%qqy_g+54}u@4a{*X@HLW!lL! zAFq(Tlo&p`O*~IZnanW;1$IQby6z`F?|ZWjPOVaue^`Q4@aRyn;~TiVsK=vO>)lFG zv!no4!i-C%#FCUR_n9U|%Wq}xfQXa`BT6)s!_&ZSuB2oR31em)7%8s;9g1*w_fVw8$_PJo&hXJ91$T7jfrR&q_||XGZ^G#06C*bnS0;YvyvV;cdkv; z-9|>|x*iz}>>zw{xb4C0~# zCsUN74z(571Hl!hoLX^gZO*}-Cu-VX20wgQ<>~3!Z`||^I_o4ygQ^Z`tqb6+{y3>Z`Tgquc~?zNP0*A{Z+6)YlnH#T@`5kL1iJNtm=L-ELoYgaGNNJ$v?ydj0xv7`a2Crp8%MW7K=*me*d*7UF0ud<0Rc_cnA%hE z@wT7)RaI3(YPJL($iC$hKlMK6-d=#IY~oX~c`E6;>w95RlQl`!F{Ge+CH;9i7(u1G z*=KYTsU={bwW&!9Y2fxkMRwF4>aEE83QSX<53kp}_5`L<=ts(ksC33LO~;@LS>Ii? z&)I{4Lb0=y=yY6MaDBb~sk#$hed+gt{h;$4>wyfMpx}QZyAC=}Yqm+BT(#zEcg0Z| zYFdpi)zii#@-(GWHd2aF%-ZjZ9NOVtR<_M%e7+Oi=lIQ}+4m)!;MASva2;){i4IHF z%Ba8gv{L8ZLtujr)+e2|dUZR!xxYySBnZsRWUPywX?vO4#7XXU^8zc%J7~4TmA5;y z&dP6!NmADhd2yC&H?craYpX};1oW`Ig<;Ud?S*Dc_ySvJzZhMWI zkuy#40b>^i+zlXiN2^Bml~gic)noji*py2}zqr*7BX#RfJnV~AV|ysOEwhNzT)iU1 zw}fEyC8O0RlIq9ox4t+lbt^iIs28&e%RJ5~MLI3Wkv1KJEsO$k)l zod?dgzmn|xq}?LKFktpjRngd(lE+vw5?cKf1O!G9-Ux3O>3eb-G+y-wBxK)uHPJ*R zt$8E&=~_73YQ(!wr8ZP{R#7-8iwXJ=(Q4!+>+I<2JJh~Q9OgkQpon%FeY301Ugprd z4OE#5g@fJ3~<(m0h-dQ_s5+)jyiqSD4zt;GH4^vBb z_w#c@XyAq3SX1J9?LB+OrfI}UYG{pjsl6#rHc2;d3oX`txz6f3i@$r#nXSn9%sQR} zde+4uA;d61N`QLR-p(!4q6GM9-wx{i?d7u9Y(~eOtB7XR>Ql@(Gh3m3vjGNg%VF-I z?vh9+5Ku#}CJ$e^4wEx)>XYRGz1CX^zU#OQ=ac-)P`g8CWZDXU|CoJG_@OLD22;XM z@_gIv4-5w;HeS^E@-t~D?affK3JM`H+B!o}EOLJiV9U6;zE_JI9YM^^n4WwpuH=pw zC+CLKr%%UzLuQh8MXoa)A8LP>Ai{z+U)kY5ZGYw3wMr|&3ZT2;D9g*q5gaL&FNKC5 z8#J_5t-1j$rZ>#XZl>J$Lbp4o(fIL2U1_m8ggu6N9_HEES)}!VVg;fODspD&i7p~k zS*~fNa+ap#)_y3|M}fRCgAo?gLH%u;HxogFstRH`_olBfZ`%cbt6I%_S3M&KTBU?2 zpuvnX>}&j=#!G|&OBrXqPr-fl)8y!82;)FGQJ;xk!(kU4A0LsMo2QrGCliYSE({s) zLxv!Xw$04|-q=`VX<@+zWYq~qA!KAJ!KZHrz*6WvldtEaMNsbC3^$-3rfD`NE*Y8P zSBxo_hxTTQ+qVi{H!5DosdHTxC`SO_Wbu2$VANDDRbvx3HwCuC=`cDi2<0Cg9UZHT z3=4{@AE@@%kgFAdK;-VX5@ZCPCgTz5@sN<>Z?Q0iBXj7`AufBBFKx;4qzFj@Tw-eL zn*Hq+aA+qd1j`?u=+tUu2Q;>02i5BvRU8TC?~H*8;Ql=EF3zOj>%jZ>p%9u$cVruv9D_#uS%XsOoxwze8BBtw0)boT zb*|~qc)_;IcYw-q->a>eR%?z{J&!Jq&A72oL*u5}pwWTr7nSoSq;6t(1|h8LKV;yo zX=^KfbhCDfJ4cE}jOA&vW_-cHa>6vN0*br)<6tshw3wL9h819;yTPb#!xxw&r>>~v zm1DaxIF_lAUJ<>oRNcK&nQooUph04IwE?*sZHZxFcK2hExR;Wyjm5*Q0p&*1U*cP`r=-|%-}UL^ z`;ok{Ot}x%0jDSoJ*cBdXDr(vZa5)?J4CJ-LZ$(98v*>oW5@)ieE^dh5r5 zuvyQ4ND>Gh1I)Md^mhU3K++PTfEUurabmkH4iwN{;LRiu{soRnCG=}J>^%FQb5BgV zKfLX%nd?8(h9bU_sx9TDA}8lxRHqB8!~BUMyWA$WjHl~+-@3ud(Szao*x{N+(W#d#!1I6kpxv__J1jcHPz`{R3@QlW(34ADZw@pz2pO^rooP%QTwcUk?sz zxPR+V;PN&MdO2?G{u;|6{{OHowfN-8mhhA=N?nn@a_W~~4gv8GU!J!VW`IM#Z7W)~ z>_Poy-woKAgJ&$L!dcSew3J|;7=4-lcO@I_P^Oum8 z(>(n@opnDts>iy&vaqQ-N?(s_|z zE&KSZy1r9BemrX7$Bo5t{`UiGHfR9E$)t=y!J3C5e;#^0cEbiGG5$1sHp{m~=TEa& zZQ2TTV&};FaNPD9o_0K^>VxvjRwWJJ`q{Q!-$btr+Wh{Jabsh*zkFOhH?Ll5rLg&x z2dg^l=+b9IrJC>0WUdt-=rE_aLCDV!JNhij-PS=jQQh4$e{@7~)WU?G%X+o&_iwOc zNA+>9T0K5_GHUj#yhpd5*ALX3iMVsFUEftpHccFQZu{cneIDF?S;MXO>d>i^C}FPjz4q;U_m;@z8n|?0(;pje z{oV|avRy0s_c{9X{@_o~Wh|M!zC+pYa zCI<%5I(2G)Sg`%s_)8+uiuqZGez<$L#^dOIkl?YmfBrajzW=B3FA>1#HY6scqL)`= zz|U%9XqWF^Y~0(g{zua~-2+x@-oWPx`wql)Fgy@vud5H`v0T`TyW%rv+rcm|xpZ04 zTT=J%xBFi{xv}!-=lg2|K~XnhPSCgs6ATmTdVk;ssnR=c&XXY6o_&0N&3&F1B$ta| z3QdE-X@1YmlK`%dfExCdf8Y1QwoQjUYIwI><-h&4T(_K$V315su33D%PmP+tHU=*Z zkBDgV^`K|bEw+tMZTw503Uv<*x%7Hv%V*8%Nvdp@gl$hO7kc>Q#)s}*$Jg2I?snnk zsal7#E7xe;c=XMiZGanv4f6w^Sq(RC46ayZ^N1ls4#L3J+h-OKzLly^jw$$K%Gfbu z$ByW=a__YxlVR2xk-l_jL^0g6gNr|z@%+fr6T_$90(iXRxA}u_ec!E`+jjWJVQ~EG zua6J+@xOL7%Pq8B1KF`fl{V;G)OV98_hlnkY~HF>ZrzrbuPzO$=;`SRV7=FbdiU!N z7&!aHtJyK%6t`U6qT!K-GaKgy9vFMQ7A(JR9_`xIhE5Wmknlmm+*ggOjuO3ibUJ*W zQun>~e5DfY=q6!d70Q((h^@mn9)8}b+2-9%1TAbF6I9GDV?dGZbwSlaIk*b{AhJnwUr?#pM%^BeRxaK3{ny)=JefI2$ z8H3xo1qSB-@#mjq+!iEPa+{a3a0T2?MPtT|TXZFV!u7R1H%mM8>Qx`m^7tFk9rj+z zc>Qd{s3oE`)yozk$bI3#ciajJp8`+OyiCi1erLb^B;RfOh)PGrvIaG3RCKHBd)3=* z$dT+}Jv`TbKdocanL+pZ?LXvp;m&!8Rky@B<7dS+ui7x^%-;nso-CgJ`p)@nRfboX z+^Y89yAQ$F-sqRvCBt?k{V^|pSp70Z2>_P&8qtY4Eqk*0&Wh#5%SNZ#I-6sQ=Cq^Bs;eB}VL4Ci)FIxT# zbA>o9A}Tfi-Zw#fsBT&$v5hs`P55XP1fET)25vU)>HQY+CwD)@@m#xf<+W?w$4vU+ z*1Vq=6<-cEh-yyTKjZbzv9&rtXK$_6U)-r`)6H-1)gKVk2t;mJzehJKxdG18CHLaa zQ+y8AHAq9tXNUaTD2;3^t)e%uUwfiGUtaE$>lbld31Iz z5T-voznwoPl#l0qetfI%XJPOJJF!V+~q@Kv_sCQBl&Y>ru#-OwsDapS37KV7Jd#zwG<<+QmDUNA-gK zvU+57AAObL<8^}74f1dQ*n8KgwD)dI?idG2F6zCHW^}rE=hk~}l9>mRHn%*ydg98+ zX9s`&`NuDs-AByHjO_D2)Oz*w(3QN0Ga$MjJEoj{B4u%E_UVA_D{^Wbe;>mPPEG#0 zd>y&(;d3ct=dG`u__=&M>`Jf)tv(a@1CRif?^K#RZrt|6#fnz9w0|BH1C>?_zL0pM z`uwYQ0BghtERRg>4&m>Qq>x=_D}7SgZ&HI1yU%ZH)T{7H&pBa(%L6vDXG`Jh@0W(H z`@I?rYHNZId-dFuc_MFYpPD#l4Sznrw^6H&RpZb0Xr)&8%p!oL{g>y>^Jo~Xdl$f0 z&*Pp_=?}*)!zft{pTc{~XLM{sdtq4$hkdfd%CV`Bxo#boq?fu z+h=6Wh@cViqkZd7#BC9;-7?Rk@%FPDw{LrLX}r&&86^kmE%EKp-?;CJ&pzdxDn$(; zDMh_EW7@Q#uU|cG1QNae*x&HUZGI+}j()Xr@XHe`1}#ZWE6B>q68Ra#dnV4FaN)w& z$InfI5Y}>9?YUohtSN^%_4#qgJG&;lyo>|^Y+e9K-pvKc`;(JJOOJQy(Zlb%_y$Aa ztoSBnq35KQ)!ptw6+3;b*V5w`!d@5FhM6l0mVr^#K3i}m@AdQZvYY2#HiMbE8nJ21 z27mqahe<7$RX2d_oZY;Q@Q101zvs(5#)9sRxgMH$CgFMJ zfZOL6&TI@@_WK~YydfM|!y(_551Ff#Q-1>3VIz>?yNn5C3Uu@QQZR;J^E(|NOMpgMq+5aEfVPoOI#d-nlF8KFzxo@=gAo z(XFcK-3Vqn`L8|?^S({~xc}op6(65Jv^ZmN8=U9kU!5*#0{OSw?B72AIwyVtpa#Xs z^>F3KzFW2^3XrCiu-=tfd~E&3F>BW9S1W(o)_2j8QL2a6#V`*ibZ(Wl<>w;eFZpK1 ztXT+<>9ywRoWG#^&%irxd zwDQ|s&%YZL4L4MaxoT*@IUV)_*0h3U3N1$e{Bx%coAU<2Z&3;6bOddT8Mg`Z-Tcek z*P?Ob)N>aOe30F%XM(X#*`kIAVHN;lF)RY6<_?+_Fpnlb9Ps#TVBO%qJHP+I2is4a zsJ?o2XSX2}CZqxjb?~R-X$i$i0H}w6Rg9L;OIZ$6bR?u3cqc|xZ`|wFpaYq{kh_ZY ze`=23zKrlD5bL1`sewsi>Dk1{X*l%$eb2QI50?TrG4l1xJCbJ)>h-SoV&s@UGje9U zta)lNq6~uaZ#Nt^?A3=8ngj>eL$Kz$K7V+HOBAnP^{ngDv@T2&qk66zF=`Z!b^-z1 z+`PW9_=}(Zxce|?5{#|Ih4-gtpW9N~$M@)zY11y={B=zIrXLokEdTq_qnPHd*;`# zG3B!4@Z#Ud|HMNtPW%eH)`YtE{1CBM)eYF7MT39Y)+PB@ zpF3XjrjJkA_C<8X!m~YqkQw|szxBDngIBv1&6-hCQgTx4ckQ?34Juak%W`<_saEq)-DU*L=iPZ#N&ja|#J9Sbo;`D3 z_I>p-tX7MJwYevhH=a}~dUwVbUkuy1^ZeEO5Dccrp7;g9ti#%Qp_Fh+^&6f%*OV5dd*65b;nV<|oe0 z0&=7Vv>@OdD*e7W`29Ldr_53nwL7;_Uj@QgodxN=dIhZL5vw{f^fo}phzKGW8encF z-aZe}GUl-=E;<@6|Dw(czps+78H~*v&t5QksHZy=f?bz(?jkYI0`r z4Je#{Tzxg{-sQ-0ix(!ftWm30*~G*{&lYE7e3s+>L7RdKpmXg%Jvp~r@T845e}7o7 zdBTABn*kqw?B&(qr=P;UN(Cyd1`J*yuO6<9uNz``f6v4!br!YVkGS8aB*y;tzAHZp z38|0h>d5x(hjg7hYsQRfEm}KSr!+O?UUBjZX$33=U{=n4ybf{X2a! zzWBtAix-c4cWU5<&6~p)8+`i2ZO-epYVGBfn*McPr+%IWnPqltzHGd>#oqp98$tCv zeHn)KYiBkVYA3;-FtOPuuMnQP-a{--JG{2t)dyE*Oj=bk_{oWkl$~1^ET}kl@DCr( z4jeoJWOH)t!$p6P8~9oRB<=gwi7 zCtA1M2dqGce*I#n?gbOQ_{UF8(qCuoe;>Q?W7gd0`4~;-&U43|O&AYJ$EQg~#*MA} z8@b)Qc~g>oI2%C@@4C;6X^V-fS>VA9H(mko^>EO@n$L#O(+laxRjaBzJv7#M-g59?~zdai9 zkuiW{&;CAPK+m3y5KLVzu;Q={Yz8cu0?}^1nr$X5;tN+u}ee<*rMnaIyKK)x2clSFY|A!((;#8RU-SaRZIKe@5Mbg zy$C-n?exk1dCB$a94ss>w`lpaLGz~GgIlySyfESL#vEC{Ts2j9?6=RPj2Y9F8Fj)pSBx&XdW2$<>lqY%fz$6r_`c8r^ujD ze_(cZfF}|5OhDXC{Jy{Vv0~~MUnHeA-SzXd#)`{(TE73ml6%*ex?feFQ2utVv3qQV zvRmIle9otk3kD2`>pt;%XT%W_XV<&s%2n#Mx!Jg}W5eM?p8p(?mh-;j zdYGpAKkT1=cT-eU^7i(1y7uem4LSkf)TgVvyN{TgQ2{}-C)%tVUA_7cd{}#|xv0-y zb+45{u87@$t4~BAVa&pV$FltZxygqQsXU@OIyOJtsNwq+D_(1!*8sU_K-0;LOTZt7^d33QT?bu3hT^#`?`S-^7Jr>DR|z9y?|cqnKAEYW@*CXIraw z?b_E)t!)8=*{}G zJPIKMZU4CE;o;dA&l&GSNDF+r=_$nP&dJI0s|Ux7*_ZBpc%t%v@jie{uxJ9JgFzvj zORC%U`|sU$JXcTJuwg@m9}+ut@>$$#z=i>HSM2XsHQrz0Y!;0<}l%{S}d zk72LwRfi%~!!7s4lYS)fbY^Iw4?LXX5w2ej#}mgb9P8Ywb!&H|fLOAm)t5775NI$2 z{WE1Bo<~^H0YqIOq0X|E<=pnq@Y+j|TJ1V$m zs~=moeEIUQ+b^G=TRL~noC$aD<|5{}X^R$NtHRu;e0lPW|AR}H1a4qTkz9-&0yXkCEgIB<_NA&4)y{tbtOxM9@ zh71|Zv*qzxWU=P<>`^dNyjR@ z>lPFea%t@$Y2Uk>p2BZbqd|l2VV&b-vX44_@(BrQgHsH)kzToaeI#6`Bs`HogO4vs zgH<-jaP4!6*Wrq3X~z*2R>loh@G?ZqMT8KDA1=>m$gU$skDi~gZ4d%ac8#o3=fa&k z8DZyoOD+J9Lj(J8UI|o}_)#!pT*sjc;n*E|dF#tZr;#*krl0E9vg-zgtv-mLZ1~Lj zlQ?AEQ*DbWR}amtj<8y9#hzo@?g)d%(H#Z+_r+t2Qy!kav-0)zr7PtKhCPY!nX=Do zxyOz@(7WvYNf2}a<7x0XJ3S_*{1;z*fw+O+ZeG6ru)o`o9-gBSV}q#68?TqAFC}TE zQoD4yj2lw$sO$cf_m>}^etBZxRmJ}4pRPUDW$AIEg1WiE0gq%ueGPFqM#IDI!(-$w zl}eGGXZiU@&)2%`>9($q_`AfCvwI(P>`|%G-g&7Zmu6*^_bWWGKIb*?Hn|%%wi^_^ zce(~NJ}Sy@;KcFQu02NXp-&&&II(v^&#o0PLmDoSb!brU&A$wcC|U44tY<(J5P3DP zPDhlH%5Xt?yV^0p`QvlOj_J6jAZ5--lI98l-Jm)m(HAWTMU;FF(9HO=Wk3MymOZ{3tx{LR~Z5PX9rYU2c4wB)e9Gf z^xXVIgwZ(hE| z-F@iElb=>?EZs7wm;RH@x+|^zzF#FOIH2Cj&mOP1`*)ufU`Wc5gnfb3!T7PN|HD2= zaTT~BBPT~3GokKKz(Q~^B3GVJ-0F7pwqJg3?si}oC)Q6%OB-3P%Jkmbht!xlDSmqA zq|ZkOmY`?$WEQc9Z5O* zs+ay;jbq3EnwPv-l9jL^c5n0j8wLcIt5AK9{|`;vPc<#SX$S&YUmiZQX|h7Aos39` znXBi2_eny+&Z4#@Nj-WXaCKL|`6WaRhF>e0|kNkKU_Tsb2ZdKCAG@AIguK zTrPj})~(|7Is_c9JwG(4-=!8CHm*Ye&$cm}Hg#(lbXWYKe_0@xCk+{*Y3b=XqK9TQ zRJGy-3+hgrcIEJ2*I}dokjR9RRTaMYqUOA$me9zDK~emAz?#;7-`CHB4sdH={yQ^Z zx!iv6;CnFG?7DZk1Bfq4wzKQ}w)y+QJ{E~?{McR#Kh7>3XWYAw3T{1kV3?ZT&v*3p z?HU}@4iP&$r>3P9Z|PA5PMGFZVP?&Hw_Ll4FJ6Q~J1+a`Ril0{pVh8gwS12s<_rsa zQ5>ezt*KGta5Y4y={7cUYrpcu@s%aFVXJ^84OSsweFGodYFjZlm?X1{V3=}HVle0WKtg%SccW--bd%#9WW~SArSIwL- zp#e0}aHG+`N6)ivFV=UPQ*`$1kbt^XgYrG!Id!VU+i(W`S#|3{i97 znA=et`5aEWkr#JmlySpWmCrc;9+>K&MV@XA+dV4_ndtX*_cz`-=~M98bGX53we&jC z`^Pcoe+zFR`lf<6!0jq=ppu1i7UHSXj zKtsscvKJfH52-dG~?OsL61j2ZTEQR zi?5##fAM(O@W}demLEKRyb+}Nk)XE8e?2+*3RxTLl`Z-z&T~ejXP1h-x)c`-h=;Oy zVQ*8>7xfcfc0zX9cSsIRQKbtX=YO%~<@3v6j}K$+xIfwYd$&d+(Yb(>E>TfCfmizj zFv|;P^Ji>7cWy)2?bcns3fLxfpVG|xaBR|*E8QBleN^`5t&tgutt(c1P_}$1?&j~6 zd(9rR=vzQT=2fn&>)fq>1E{>Uw>&~fIk3-Oz|=3gux{*_ZXxAED&0nGZF^|L7mUaI z_}@OWxaJm5_bKn+^~_(h2%Mipssl&9>Zf%&{hgUTE`u@qY%K3S#lQEwsnJiLKW~Cy zIT9XrKD|ee2}s5eSa@&Rk3SZ`r4u?`JYKSR2FaELp86@$1;!f3j9KM}b$bbn_ z*=W$9K@U$8^90a5y^%5nK-i1rK1Gz*q#u8LA2z^7Zg+Q9c|CIOVCk`I-r6%8UhTVu z;61k?xM+%AW!$HvVQm)Ss1V2`^4nbigM@rj?RIyJ(7mNXCQ zdU~#ye1>3#kT$9ojQHBj$5Bzg!FTaN3Bqxot(-r9KC&c^2O|{$n1x_3ZSEPeVt*#o zF8|(u5Bl}%fPXfB@gl^pf2fz&+zy&9iΜoaq0mTn+cG$f!BCIRIz~xZg3$H|sFs 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ʕ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 From 9b07028896440d1f88a26904410f0e57d7945aa4 Mon Sep 17 00:00:00 2001 From: Takahiro Noguchi Date: Sat, 11 Oct 2025 17:37:43 -0500 Subject: [PATCH 23/48] Add Gitignore --- .../control-with-amdc/integrator-anti-windup/.gitignore | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/.gitignore diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/.gitignore b/source/getting-started/control-with-amdc/integrator-anti-windup/.gitignore new file mode 100644 index 00000000..05bf92ae --- /dev/null +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/.gitignore @@ -0,0 +1,2 @@ +slprj/ +*slxc \ No newline at end of file From 45a8be99a70d83ed271787e7a497cb0c75dba1a4 Mon Sep 17 00:00:00 2001 From: Takahiro Noguchi Date: Sat, 11 Oct 2025 17:41:18 -0500 Subject: [PATCH 24/48] Rename all image files --- .../images/{Iout_advanced_better.svg => Iout-advanced-better.svg} | 0 .../images/{Iout_advanced_c.svg => Iout-advanced-c.svg} | 0 .../images/{Iout_back_c.svg => Iout-back-c.svg} | 0 .../images/{Iout_sat_c.svg => Iout-sat-c.svg} | 0 .../images/{Iout_simple_c.svg => Iout-simple-c.svg} | 0 ...rbance_advanced_better.svg => disturbance-advanced-better.svg} | 0 .../{Output_advanced_better.svg => output-advanced-better.svg} | 0 .../images/{Output_advanced_c.svg => output-advanced-c.svg} | 0 .../images/{Output_back_c.svg => output-back-c.svg} | 0 .../images/{Output_back_d.svg => output-back-d.svg} | 0 .../images/{Output_sat_c.svg => output-sat-c.svg} | 0 .../images/{Output_sat_d.svg => output-sat-d.svg} | 0 .../images/{Output_simple_c.svg => output-simple-c.svg} | 0 .../images/{Output_simple_d.svg => output-simple-d.svg} | 0 .../images/{postSat_advanced_c.svg => postSat-advanced-c.svg} | 0 .../images/{postSat_back_c.svg => postSat-back-c.svg} | 0 .../images/{postSat_simple_c.svg => postSat-simple-c.svg} | 0 .../images/{preSat_postSat.svg => preSat-postSat.svg} | 0 18 files changed, 0 insertions(+), 0 deletions(-) rename source/getting-started/control-with-amdc/integrator-anti-windup/images/{Iout_advanced_better.svg => Iout-advanced-better.svg} (100%) rename source/getting-started/control-with-amdc/integrator-anti-windup/images/{Iout_advanced_c.svg => Iout-advanced-c.svg} (100%) rename source/getting-started/control-with-amdc/integrator-anti-windup/images/{Iout_back_c.svg => Iout-back-c.svg} (100%) rename source/getting-started/control-with-amdc/integrator-anti-windup/images/{Iout_sat_c.svg => Iout-sat-c.svg} (100%) rename source/getting-started/control-with-amdc/integrator-anti-windup/images/{Iout_simple_c.svg => Iout-simple-c.svg} (100%) rename source/getting-started/control-with-amdc/integrator-anti-windup/images/{Disturbance_advanced_better.svg => disturbance-advanced-better.svg} (100%) rename source/getting-started/control-with-amdc/integrator-anti-windup/images/{Output_advanced_better.svg => output-advanced-better.svg} (100%) rename source/getting-started/control-with-amdc/integrator-anti-windup/images/{Output_advanced_c.svg => output-advanced-c.svg} (100%) rename source/getting-started/control-with-amdc/integrator-anti-windup/images/{Output_back_c.svg => output-back-c.svg} (100%) rename source/getting-started/control-with-amdc/integrator-anti-windup/images/{Output_back_d.svg => output-back-d.svg} (100%) rename source/getting-started/control-with-amdc/integrator-anti-windup/images/{Output_sat_c.svg => output-sat-c.svg} (100%) rename source/getting-started/control-with-amdc/integrator-anti-windup/images/{Output_sat_d.svg => output-sat-d.svg} (100%) rename source/getting-started/control-with-amdc/integrator-anti-windup/images/{Output_simple_c.svg => output-simple-c.svg} (100%) rename source/getting-started/control-with-amdc/integrator-anti-windup/images/{Output_simple_d.svg => output-simple-d.svg} (100%) rename source/getting-started/control-with-amdc/integrator-anti-windup/images/{postSat_advanced_c.svg => postSat-advanced-c.svg} (100%) rename source/getting-started/control-with-amdc/integrator-anti-windup/images/{postSat_back_c.svg => postSat-back-c.svg} (100%) rename source/getting-started/control-with-amdc/integrator-anti-windup/images/{postSat_simple_c.svg => postSat-simple-c.svg} (100%) rename source/getting-started/control-with-amdc/integrator-anti-windup/images/{preSat_postSat.svg => preSat-postSat.svg} (100%) diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout_advanced_better.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout-advanced-better.svg similarity index 100% rename from source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout_advanced_better.svg rename to source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout-advanced-better.svg diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout_advanced_c.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout-advanced-c.svg similarity index 100% rename from source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout_advanced_c.svg rename to source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout-advanced-c.svg diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout_back_c.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout-back-c.svg similarity index 100% rename from source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout_back_c.svg rename to source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout-back-c.svg diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout_sat_c.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout-sat-c.svg similarity index 100% rename from source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout_sat_c.svg rename to source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout-sat-c.svg diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout_simple_c.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout-simple-c.svg similarity index 100% rename from source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout_simple_c.svg rename to source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout-simple-c.svg diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/Disturbance_advanced_better.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/disturbance-advanced-better.svg similarity index 100% rename from source/getting-started/control-with-amdc/integrator-anti-windup/images/Disturbance_advanced_better.svg rename to source/getting-started/control-with-amdc/integrator-anti-windup/images/disturbance-advanced-better.svg diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_advanced_better.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/output-advanced-better.svg similarity index 100% rename from source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_advanced_better.svg rename to source/getting-started/control-with-amdc/integrator-anti-windup/images/output-advanced-better.svg diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_advanced_c.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/output-advanced-c.svg similarity index 100% rename from source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_advanced_c.svg rename to source/getting-started/control-with-amdc/integrator-anti-windup/images/output-advanced-c.svg diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_back_c.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/output-back-c.svg similarity index 100% rename from source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_back_c.svg rename to source/getting-started/control-with-amdc/integrator-anti-windup/images/output-back-c.svg diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_back_d.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/output-back-d.svg similarity index 100% rename from source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_back_d.svg rename to source/getting-started/control-with-amdc/integrator-anti-windup/images/output-back-d.svg diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_sat_c.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/output-sat-c.svg similarity index 100% rename from source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_sat_c.svg rename to source/getting-started/control-with-amdc/integrator-anti-windup/images/output-sat-c.svg diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_sat_d.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/output-sat-d.svg similarity index 100% rename from source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_sat_d.svg rename to source/getting-started/control-with-amdc/integrator-anti-windup/images/output-sat-d.svg diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_simple_c.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/output-simple-c.svg similarity index 100% rename from source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_simple_c.svg rename to source/getting-started/control-with-amdc/integrator-anti-windup/images/output-simple-c.svg diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_simple_d.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/output-simple-d.svg similarity index 100% rename from source/getting-started/control-with-amdc/integrator-anti-windup/images/Output_simple_d.svg rename to source/getting-started/control-with-amdc/integrator-anti-windup/images/output-simple-d.svg diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/postSat_advanced_c.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/postSat-advanced-c.svg similarity index 100% rename from source/getting-started/control-with-amdc/integrator-anti-windup/images/postSat_advanced_c.svg rename to source/getting-started/control-with-amdc/integrator-anti-windup/images/postSat-advanced-c.svg diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/postSat_back_c.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/postSat-back-c.svg similarity index 100% rename from source/getting-started/control-with-amdc/integrator-anti-windup/images/postSat_back_c.svg rename to source/getting-started/control-with-amdc/integrator-anti-windup/images/postSat-back-c.svg diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/postSat_simple_c.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/postSat-simple-c.svg similarity index 100% rename from source/getting-started/control-with-amdc/integrator-anti-windup/images/postSat_simple_c.svg rename to source/getting-started/control-with-amdc/integrator-anti-windup/images/postSat-simple-c.svg diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/preSat_postSat.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/preSat-postSat.svg similarity index 100% rename from source/getting-started/control-with-amdc/integrator-anti-windup/images/preSat_postSat.svg rename to source/getting-started/control-with-amdc/integrator-anti-windup/images/preSat-postSat.svg From e4f5dd68373f7abc149adaf465f58786347c2b1b Mon Sep 17 00:00:00 2001 From: Takahiro Noguchi Date: Sat, 11 Oct 2025 17:42:12 -0500 Subject: [PATCH 25/48] Create simulink folder --- .../integrator-anti-windup/{ => simulink}/main.m | 0 .../{ => simulink}/simple_model.slx | Bin 2 files changed, 0 insertions(+), 0 deletions(-) rename source/getting-started/control-with-amdc/integrator-anti-windup/{ => simulink}/main.m (100%) rename source/getting-started/control-with-amdc/integrator-anti-windup/{ => simulink}/simple_model.slx (100%) diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/main.m b/source/getting-started/control-with-amdc/integrator-anti-windup/simulink/main.m similarity index 100% rename from source/getting-started/control-with-amdc/integrator-anti-windup/main.m rename to source/getting-started/control-with-amdc/integrator-anti-windup/simulink/main.m diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/simple_model.slx b/source/getting-started/control-with-amdc/integrator-anti-windup/simulink/simple_model.slx similarity index 100% rename from source/getting-started/control-with-amdc/integrator-anti-windup/simple_model.slx rename to source/getting-started/control-with-amdc/integrator-anti-windup/simulink/simple_model.slx From e4e41647e8393b6491e6d98214ce83cfa8a68152 Mon Sep 17 00:00:00 2001 From: Takahiro Noguchi Date: Sat, 11 Oct 2025 17:46:15 -0500 Subject: [PATCH 26/48] Rename simulink --- .../integrator-anti-windup/simulink/main.m | 103 ------------------ .../{simple_model.slx => simpleModel.slx} | Bin 2 files changed, 103 deletions(-) delete mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/simulink/main.m rename source/getting-started/control-with-amdc/integrator-anti-windup/simulink/{simple_model.slx => simpleModel.slx} (100%) diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/simulink/main.m b/source/getting-started/control-with-amdc/integrator-anti-windup/simulink/main.m deleted file mode 100644 index 7b9b305f..00000000 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/simulink/main.m +++ /dev/null @@ -1,103 +0,0 @@ -clc -clear -close all - -%% Set simulation parameters -Tsim = 1e-5; % Simulation sampling time [s] -Tend = 1; % Simulation end time [s] - -ref = 1; % Reference -start = 0.2; % Reference start time [s] -stop = 1.5; % Reference end time [s] - -d_ref = 0; % Disturbance -d_start = 0.2; % Disturbance start time [s] -d_stop = 0.3; % Disturbance end time [s] - -upper_limit = 10; % Upper limit -lower_limit = -10; % Lower limit - -%% Set controller parameters -fb = 10; % Controller bandwidth [Hz] -wb = 2*pi*fb; % Controller bandwidth [rad/s] - -Kp = wb; % P gain -Ki = wb; % I gain - -Kb = Ki/Kp; % Back-calculation coefficient - -% Select anti-windup methods that you want to simulate -sim_scenario = ["No anti-windup","Simple clamping","Advanced clamping","Back-tracking"]; -num_sim_scenario = length(sim_scenario); - -% List of variables to extract from Simulink -interested_signals = {'time','Reference','Output','Error','Iout','preSat','postSat','Disturbance'}; - -% Preallocate the cell array to store results -results = cell(round(Tend/Tsim+1), length(interested_signals)); - -%% Implement each simulation scenario -for i = 1:num_sim_scenario - switch sim_scenario(i) - case "No anti-windup" - Clamping_enable = 0; Advanced_clamping_enable = 0; Back_tracking_enable = 0; - case "Simple clamping" - Clamping_enable = 1; Advanced_clamping_enable = 0; Back_tracking_enable = 0; - case "Advanced clamping" - Clamping_enable = 1; Advanced_clamping_enable = 1; Back_tracking_enable = 0; - case "Back-tracking" - Clamping_enable = 0; Advanced_clamping_enable = 0; Back_tracking_enable = 1; - end - - % Run simulation - out = sim('simple_model'); - - % Extract simulation data - runObj = Simulink.sdi.Run.getLatest; - - % Get signal IDs and store signals into array - for idx = 2:length(interested_signals) - sigID = getSignalIDsByName(runObj,interested_signals{idx}); - sig_obj.(interested_signals{idx}) = Simulink.sdi.getSignal(sigID); - sig_val.(interested_signals{idx}) = sig_obj.(interested_signals{idx}).Values.Data; - end - - % Store simulation results - time = sig_obj.(interested_signals{2}).Values.Time; - results{i} = [time,sig_val.Reference,sig_val.Output,sig_val.Error, ... - sig_val.Iout,sig_val.preSat,sig_val.postSat,sig_val.Disturbance]; -end - -%% Plot figures -% Define figure size -width = 5.43; height = 4.38/3; -set(0,'units','inches') -Inch_SS = get(0,'screensize'); - -% Define plot line parameters -lw = 1; colors = {'r', 'b', 'c', 'g'}; lineStyles = {'-', '-', '--', '-'}; - -% Plot figures -for j = 3:length(interested_signals) - figure - hold on - if j == 3 % This is special handling for 'Output' plot with 'Command' - plot(results{1}(:, 1),results{1}(:, 2),'color','k','Linewidth',lw); - for i = 1:num_sim_scenario - plot(results{i}(:, 1), results{i}(:, j), ... - 'color',colors{i},'LineStyle',lineStyles{i},'Linewidth',lw); - end - legend(['Command', sim_scenario],'Interpreter','latex','Location','east'); - else - for i = 1:num_sim_scenario - plot(results{i}(:, 1),results{i}(:, j), ... - 'color',colors{i},'LineStyle',lineStyles{i},'Linewidth',lw); - end - legend(sim_scenario,'Interpreter','latex','Location','east'); - end - xlabel('Time [s]','Interpreter','latex'); - ylabel(interested_signals{j},'Interpreter','latex'); - xlim([0 Tend]); - set(gcf,'Units','inches','Position',[(Inch_SS(3)-width)/2,(Inch_SS(4)-height)/2,width,height]); - print('-dsvg','-noui',['images/' interested_signals{j}]); -end diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/simulink/simple_model.slx b/source/getting-started/control-with-amdc/integrator-anti-windup/simulink/simpleModel.slx similarity index 100% rename from source/getting-started/control-with-amdc/integrator-anti-windup/simulink/simple_model.slx rename to source/getting-started/control-with-amdc/integrator-anti-windup/simulink/simpleModel.slx From e3bbee54011951c33a6b7e8170ac34567a98ad31 Mon Sep 17 00:00:00 2001 From: Takahiro Noguchi Date: Sat, 11 Oct 2025 17:46:36 -0500 Subject: [PATCH 27/48] Rename m file --- .../integrator-anti-windup/simulink/Main.m | 103 ++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/simulink/Main.m diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/simulink/Main.m b/source/getting-started/control-with-amdc/integrator-anti-windup/simulink/Main.m new file mode 100644 index 00000000..d01ead02 --- /dev/null +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/simulink/Main.m @@ -0,0 +1,103 @@ +clc +clear +close all + +%% Set simulation parameters +Tsim = 1e-5; % Simulation sampling time [s] +Tend = 1; % Simulation end time [s] + +ref = 1; % Reference +start = 0.2; % Reference start time [s] +stop = 1.5; % Reference end time [s] + +d_ref = 0; % Disturbance +d_start = 0.2; % Disturbance start time [s] +d_stop = 0.3; % Disturbance end time [s] + +upper_limit = 10; % Upper limit +lower_limit = -10; % Lower limit + +%% Set controller parameters +fb = 10; % Controller bandwidth [Hz] +wb = 2*pi*fb; % Controller bandwidth [rad/s] + +Kp = wb; % P gain +Ki = wb; % I gain + +Kb = Ki/Kp; % Back-calculation coefficient + +% Select anti-windup methods that you want to simulate +sim_scenario = ["No anti-windup","Simple clamping","Advanced clamping","Back-tracking"]; +num_sim_scenario = length(sim_scenario); + +% List of variables to extract from Simulink +interested_signals = {'time','Reference','Output','Error','Iout','preSat','postSat','Disturbance'}; + +% Preallocate the cell array to store results +results = cell(round(Tend/Tsim+1), length(interested_signals)); + +%% Implement each simulation scenario +for i = 1:num_sim_scenario + switch sim_scenario(i) + case "No anti-windup" + Clamping_enable = 0; Advanced_clamping_enable = 0; Back_tracking_enable = 0; + case "Simple clamping" + Clamping_enable = 1; Advanced_clamping_enable = 0; Back_tracking_enable = 0; + case "Advanced clamping" + Clamping_enable = 1; Advanced_clamping_enable = 1; Back_tracking_enable = 0; + case "Back-tracking" + Clamping_enable = 0; Advanced_clamping_enable = 0; Back_tracking_enable = 1; + end + + % Run simulation + out = sim('simpleModel'); + + % Extract simulation data + runObj = Simulink.sdi.Run.getLatest; + + % Get signal IDs and store signals into array + for idx = 2:length(interested_signals) + sigID = getSignalIDsByName(runObj,interested_signals{idx}); + sig_obj.(interested_signals{idx}) = Simulink.sdi.getSignal(sigID); + sig_val.(interested_signals{idx}) = sig_obj.(interested_signals{idx}).Values.Data; + end + + % Store simulation results + time = sig_obj.(interested_signals{2}).Values.Time; + results{i} = [time,sig_val.Reference,sig_val.Output,sig_val.Error, ... + sig_val.Iout,sig_val.preSat,sig_val.postSat,sig_val.Disturbance]; +end + +%% Plot figures +% Define figure size +width = 5.43; height = 4.38/3; +set(0,'units','inches') +Inch_SS = get(0,'screensize'); + +% Define plot line parameters +lw = 1; colors = {'r', 'b', 'c', 'g'}; lineStyles = {'-', '-', '--', '-'}; + +% Plot figures +for j = 3:length(interested_signals) + figure + hold on + if j == 3 % This is special handling for 'Output' plot with 'Command' + plot(results{1}(:, 1),results{1}(:, 2),'color','k','Linewidth',lw); + for i = 1:num_sim_scenario + plot(results{i}(:, 1), results{i}(:, j), ... + 'color',colors{i},'LineStyle',lineStyles{i},'Linewidth',lw); + end + legend(['Command', sim_scenario],'Interpreter','latex','Location','east'); + else + for i = 1:num_sim_scenario + plot(results{i}(:, 1),results{i}(:, j), ... + 'color',colors{i},'LineStyle',lineStyles{i},'Linewidth',lw); + end + legend(sim_scenario,'Interpreter','latex','Location','east'); + end + xlabel('Time [s]','Interpreter','latex'); + ylabel(interested_signals{j},'Interpreter','latex'); + xlim([0 Tend]); + set(gcf,'Units','inches','Position',[(Inch_SS(3)-width)/2,(Inch_SS(4)-height)/2,width,height]); + print('-dsvg','-noui',['../images/' interested_signals{j}]); +end From ce7d3ea7e32f7bc4b88c5b06d1e158bffb07e425 Mon Sep 17 00:00:00 2001 From: Takahiro Noguchi Date: Sat, 11 Oct 2025 17:47:30 -0500 Subject: [PATCH 28/48] Remove Disturbance --- .../images/Disturbance.svg | 113 ------------------ 1 file changed, 113 deletions(-) delete mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/images/Disturbance.svg diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/Disturbance.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Disturbance.svg deleted file mode 100644 index 0aa28f89..00000000 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/images/Disturbance.svg +++ /dev/null @@ -1,113 +0,0 @@ - - - From b2a6d1095f825738dbdf64b5f6233e9a2a20e101 Mon Sep 17 00:00:00 2001 From: Takahiro Noguchi Date: Sat, 11 Oct 2025 17:48:00 -0500 Subject: [PATCH 29/48] Rename disturbance --- .../images/disturbance.svg | 113 ++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/images/disturbance.svg diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/disturbance.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/disturbance.svg new file mode 100644 index 00000000..0aa28f89 --- /dev/null +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/disturbance.svg @@ -0,0 +1,113 @@ + + + From e2557bdc818ca6bc2b6295c02b4006237229953e Mon Sep 17 00:00:00 2001 From: Takahiro Noguchi Date: Sat, 11 Oct 2025 17:54:46 -0500 Subject: [PATCH 30/48] Make them non italic --- .../control-with-amdc/integrator-anti-windup/index.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md index 5cea99c1..511ba4d3 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md @@ -29,7 +29,7 @@ In this example, a simple plant model of 1/(s+1) is employed, with the saturatio - Output: Resulting system temperature - Physical limitation: The heater’s power rating (e.g., 1 kW) limits the actuator. -In this example, the PI controller is employed to achieve the desired system response. The PI gains are set to achieve the first response with a bandwidth of 10 Hz, i.e., $K_p = 2\pi \times 10$, and $K_i = 2\pi \times 10$. +In this example, the PI controller is employed to achieve the desired system response. The PI gains are set to achieve the first response with a bandwidth of 10 Hz, i.e., $K_\text{p} = 2\pi \times 10$, and $K_\text{i} = 2\pi \times 10$. ### Technical Challenges on Windup @@ -201,7 +201,7 @@ Here are simulation results based on the above scenarios: :width: 600 ``` -From the `Output` result, when the controller set point drops below the output, the advanced clamping method avoids integrating, allowing for effective unwinding. On the other hand, the simple clamping continues to integrate, which may not handle unwinding as effectively as the advanced method. _However_, this can be observed only if the proportional gain of $K_p$ is very small ($= 0.0002*2\pi \times 10$ in this case), which is not commonly preferred, especially if the PI controller is tuned for pole-zero cancellation. +From the `Output` result, when the controller set point drops below the output, the advanced clamping method avoids integrating, allowing for effective unwinding. On the other hand, the simple clamping continues to integrate, which may not handle unwinding as effectively as the advanced method. _However_, this can be observed only if the proportional gain of $K_\text{p}$ is very small ($= 0.0002*2\pi \times 10$ in this case), which is not commonly preferred, especially if the PI controller is tuned for pole-zero cancellation. Significant differences in the advanced clamping only appear when the system saturates **AND** signs are different from error vs control output, which is uncommon since the difference in signs usually moves out immediately. Therefore, the highly specific scenario where the system stays in saturation during this flip in signs is necessary to clearly make the advanced method better. This suggests that the effort to implement the advanced clamping version is probably not worth it for the typical motor control systems. ### Back-tracking @@ -213,10 +213,10 @@ The idea of back-tracking method is to use a feedback loop to unwind the interna :width: 70% ``` -For example, if saturation occurs, `TR` is calculated as `TR = Kb(postSat-preSat)` and added into the integrator to avoid the windup, where $K_b$ is a feedback gain of the back-tracking. On the other hand, if the saturation does not occur, `preSat` and `postSat` must be equal, and `TR` is 0, i.e., the anti-windup is deactivated. +For example, if saturation occurs, `TR` is calculated as `TR = Kb(postSat-preSat)` and added into the integrator to avoid the windup, where $K_\text{b}$ is a feedback gain of the back-tracking. On the other hand, if the saturation does not occur, `preSat` and `postSat` must be equal, and `TR` is 0, i.e., the anti-windup is deactivated. ```{tip} -The selection of $K_b$ is highly nuanced upon the specific event being managed. Making an incorrect choice for $K_b$ can lead to the clamping method better. In practice, the feedback gain of $K_b$ is determined by trial and error, depending on the user’s requirements, such as how much overshoot or response-speed they want. There is a paper that shows an example of how to determine the $K_b$ known as a `conditioned PI controller`. In this literature, the $K_b$ is determined as $K_b = K_i/K_p$. For detailed information, refer to [this paper](https://www.sciencedirect.com/science/article/pii/000510988790029X). +The selection of $K_\text{b}$ is highly nuanced upon the specific event being managed. Making an incorrect choice for $K_\text{b}$ can lead to the clamping method better. In practice, the feedback gain of $K_\text{b}$ is determined by trial and error, depending on the user’s requirements, such as how much overshoot or response-speed they want. There is a paper that shows an example of how to determine the $K_\text{b}$ known as a `conditioned PI controller`. In this literature, the $K_\text{b}$ is determined as $K_\text{b} = K_\text{i}/K_\text{p}$. For detailed information, refer to [this paper](https://www.sciencedirect.com/science/article/pii/000510988790029X). ``` Here is a Simulink simulation of the no anti-windup, simple clamping, advanced clamping, and back-tracking. @@ -252,6 +252,6 @@ From the `Output` waveform, it is evident that the back-tracking technique margi :width: 600 ``` -The disturbance suppression results demonstrate that both the clamping and the back-tracking methods improved the performance. Interestingly, the clamping methods is better to suppress disturbance than the back-tracking in this example. It should be noted that these results were achieved using the back-tracking gain of $K_b = K_i/K_p$, which might be required to adjust based on the specific condition and simulation outcomes. +The disturbance suppression results demonstrate that both the clamping and the back-tracking methods improved the performance. Interestingly, the clamping methods is better to suppress disturbance than the back-tracking in this example. It should be noted that these results were achieved using the back-tracking gain of $K_\text{b} = K_\text{i}/K_\text{p}$, which might be required to adjust based on the specific condition and simulation outcomes. The anti-windup methods introduced in this article can be implemented by running the Simulink model provided [here](https://github.com/Severson-Group/docs.amdc.dev/source/getting-started/control-with-amdc/integrator-anti-windup). From b6c061b10b64a4b0616978b751a20bfa46fdcc50 Mon Sep 17 00:00:00 2001 From: Takahiro Noguchi Date: Sat, 11 Oct 2025 17:58:11 -0500 Subject: [PATCH 31/48] Fix links to images --- .../integrator-anti-windup/index.md | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md index 511ba4d3..3a9611a2 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md @@ -39,12 +39,12 @@ This section provides the practical challenges from the actuator’s input limit Let us analyze the simulation result with the block diagram above to investigate the technical challenges of windup. Two scenarios are compared here: one “without saturation block” and one “with the saturation block”. The objective of this analysis is to evaluate the impact of its saturation block on the output performance. Assume a step command of 1 is generated as a reference at 0.2 seconds and the plant has a known input saturation limit defined as `Limit = 10`. -```{image} images/Output_sat_c.svg +```{image} images/Output-sat-c.svg :align: center :width: 600 ``` -```{image} images/Iout_sat_c.svg +```{image} images/Iout-sat-c.svg :align: center :width: 600 ``` @@ -53,7 +53,7 @@ As observed, the command can track correctly without saturation block, whereas o Next, let us examine the manipulated variable in the previous and the post saturation block. -```{image} images/preSat_postSat.svg +```{image} images/preSat-postSat.svg :align: center :width: 600 ``` @@ -69,7 +69,7 @@ Disturbances can degrade the system by introducing unexpected/rapid changes. Let :width: 600 ``` -```{image} images/Output_sat_d.svg +```{image} images/output-sat-d.svg :align: center :width: 600 ``` @@ -109,17 +109,17 @@ Here is a Simulink simulation of the no anti-windup and simple clamping. #### Command Tracking -```{image} images/Output_simple_c.svg +```{image} images/output-simple-c.svg :align: center :width: 600 ``` -```{image} images/postSat_simple_c.svg +```{image} images/postSat-simple-c.svg :align: center :width: 600 ``` -```{image} images/Iout_simple_c.svg +```{image} images/Iout-simple-c.svg :align: center :width: 600 ``` @@ -133,7 +133,7 @@ In the `Output` waveforms, an overshoot is observed when there is no anti-windup :width: 600 ``` -```{image} images/Output_simple_d.svg +```{image} images/output-simple-d.svg :align: center :width: 600 ``` @@ -161,17 +161,17 @@ If the `TR` is 1, the input of the integrator becomes 0 as the switch is trigger Here is a Simulink simulation of the no anti-windup, simple clamping, and advanced clamping. -```{image} images/Output_advanced_c.svg +```{image} images/output-advanced-c.svg :align: center :width: 600 ``` -```{image} images/postSat_advanced_c.svg +```{image} images/postSat-advanced-c.svg :align: center :width: 600 ``` -```{image} images/Iout_advanced_c.svg +```{image} images/Iout-advanced-c.svg :align: center :width: 600 ``` @@ -186,17 +186,17 @@ Based on this, a highly specific scenario is now introduced where advanced clamp Here are simulation results based on the above scenarios: -```{image} images/Disturbance_advanced_better.svg +```{image} images/disturbance-advanced-better.svg :align: center :width: 600 ``` -```{image} images/Output_advanced_better.svg +```{image} images/output-advanced-better.svg :align: center :width: 600 ``` -```{image} images/Iout_advanced_better.svg +```{image} images/Iout-advanced-better.svg :align: center :width: 600 ``` @@ -223,17 +223,17 @@ Here is a Simulink simulation of the no anti-windup, simple clamping, advanced c #### Command Tracking -```{image} images/postSat_back_c.svg +```{image} images/postSat-back-c.svg :align: center :width: 600 ``` -```{image} images/Output_back_c.svg +```{image} images/Output-back-c.svg :align: center :width: 600 ``` -```{image} images/Iout_back_c.svg +```{image} images/Iout-back-c.svg :align: center :width: 600 ``` @@ -247,7 +247,7 @@ From the `Output` waveform, it is evident that the back-tracking technique margi :width: 600 ``` -```{image} images/Output_back_d.svg +```{image} images/output-back-d.svg :align: center :width: 600 ``` From 87fe6360c95982644a337f4ee5c9aaf6860ecfa0 Mon Sep 17 00:00:00 2001 From: Takahiro Noguchi Date: Sat, 11 Oct 2025 18:01:31 -0500 Subject: [PATCH 32/48] Update readme --- .../control-with-amdc/integrator-anti-windup/index.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md index 3a9611a2..388de957 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md @@ -1,6 +1,6 @@ # Integrator Anti-Windup -This article describes how to evaluate performance of anti-windup. A windup might occur when the controller with an integrator faces limitations on the manipulated variables, leading to degraded system response and stability. The effectiveness of anti-windup strategy depends on the duration of the windup and how extreme it is. Therefore, simulating realistic scenarios of windup and anti-windup performance is crucial to investigate specific scenarios that are likely to be encountered since perfect anti-windup is unachievable. +This article describes how to evaluate performance of anti-windup. A windup might occur when the controller with an integrator faces limitations on the manipulated variables, leading to degraded system response and stability. The effectiveness of an anti-windup strategy depends on both the duration and the extent of saturation of the windup. Therefore, simulating realistic scenarios of windup and anti-windup performance is crucial to investigate specific scenarios that are likely to be encountered since perfect anti-windup is unachievable. ## Exploring Windup Phenomena in Integrators @@ -37,7 +37,7 @@ This section provides the practical challenges from the actuator’s input limit #### Command Tracking without/with Actuator Limitations -Let us analyze the simulation result with the block diagram above to investigate the technical challenges of windup. Two scenarios are compared here: one “without saturation block” and one “with the saturation block”. The objective of this analysis is to evaluate the impact of its saturation block on the output performance. Assume a step command of 1 is generated as a reference at 0.2 seconds and the plant has a known input saturation limit defined as `Limit = 10`. +Let us analyze the simulation result with the block diagram above to investigate the technical challenges of windup. Two scenarios are compared here: one “without saturation block” and one “with the saturation block”. The objective of this analysis is to evaluate the impact of its saturation block on the output performance. Assume a step command of 1 is generated as a reference at 0.2 seconds and the plant has a known input saturation limit defined as `Limit = 10`. ```{image} images/Output-sat-c.svg :align: center @@ -58,7 +58,7 @@ Next, let us examine the manipulated variable in the previous and the post satur :width: 600 ``` -In the previous saturation block (`preSat`), the manipulated variable instantaneously exceeds 60, beyond the saturation range of 10. On the other hand, the voltage reference in the post saturation block (`postSat`) is limited to 10. As demonstrated in this example, the controller disregards the presence of the saturation block because it has no information about real-world saturation occurrences. Consequently, the PI controller may provide a higher manipulated variable after getting the higher error, which causes the windup. +In the previous saturation block (`preSat`), the manipulated variable instantaneously exceeds 60, beyond the saturation range of 10. On the other hand, the voltage reference in the post saturation block (`postSat`) is limited to 10. As demonstrated in this example, the controller disregards the presence of the saturation block because it has no information about real-world saturation occurrences. Consequently, the PI controller may provide a higher manipulated variable after getting the higher error, which causes the windup. #### Disturbance Suppression without/with Actuator Limitations @@ -153,7 +153,7 @@ In the advanced clamping method, the behavior itself is essentially similar to t **Step 1.** Compare the `preSat` and `postSat`. If these values are not equal, i.e., the manipulated variable reaches saturation, the block outputs 1. If they are equal, then no saturation takes place, and the block outputs 0 -- this is the same purpose of the simple clamping. -**Step 2.** Compare the sign of the `preSat` and the `Error`. And then, if both signs are equal, the block outputs 1. If not, the block outputs 0 -- this is the additional condition necessary for advanced clamping. +**Step 2.** Compare the sign of the `preSat` and the `Error`. And then, if both signs are equal, the block outputs 1. If not, the block outputs 0 -- this is the additional condition necessary for advanced clamping. **Step 3.** The anti-windup output denoted as tracking-signal `TR` becomes 1 to clamp the integrator only if both outputs of **Step 1.** and **Step 2.** are 1. In other words, the integrator clamps integration if the output is saturating AND the `Error` is the same sign as the `preSat`. From 56bd487bbb3585d4d91b23046344e3086a364b4f Mon Sep 17 00:00:00 2001 From: Takahiro Noguchi Date: Sat, 11 Oct 2025 18:03:53 -0500 Subject: [PATCH 33/48] Update readme --- .../control-with-amdc/integrator-anti-windup/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md index 388de957..5a80ffa3 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md @@ -1,6 +1,6 @@ # Integrator Anti-Windup -This article describes how to evaluate performance of anti-windup. A windup might occur when the controller with an integrator faces limitations on the manipulated variables, leading to degraded system response and stability. The effectiveness of an anti-windup strategy depends on both the duration and the extent of saturation of the windup. Therefore, simulating realistic scenarios of windup and anti-windup performance is crucial to investigate specific scenarios that are likely to be encountered since perfect anti-windup is unachievable. +This article describes how to evaluate performance of anti-windup. A windup might occur when the controller with an integrator faces limitations on the manipulated variables, leading to degraded system response and stability. The effectiveness of an anti-windup strategy depends on both the duration and the extent of saturation of the windup. Therefore, simulating realistic windup and anti-windup behaviors is crucial to investigate specific scenarios that are likely to occur since perfect anti-windup is unachievable. ## Exploring Windup Phenomena in Integrators From b11fbb16eb421ce1d9dbcc0f179444b70ecc39e4 Mon Sep 17 00:00:00 2001 From: Takahiro Noguchi Date: Sat, 11 Oct 2025 18:18:10 -0500 Subject: [PATCH 34/48] Update image to use nonitalice --- .../images/anti-windup-advanced-clamping.svg | 82 +++++---- .../images/anti-windup-back-tracking.svg | 143 ++++++++------- .../images/anti-windup-simple-clamping.svg | 91 ++++++---- .../images/control-diagram-overview.svg | 108 ++++++----- .../images/control-diagram-sat.svg | 169 +++++++++++------- .../integrator-anti-windup/index.md | 2 +- 6 files changed, 346 insertions(+), 249 deletions(-) diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-advanced-clamping.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-advanced-clamping.svg index dcc471b2..ac92190e 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-advanced-clamping.svg +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-advanced-clamping.svg @@ -3248,16 +3248,22 @@ id="path1007-9-0-0-1-6-4-2-2-4" style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" - transform="scale(-0.6)" /> + + - - - - - - - - - - - - + sodipodi:nodetypes="cc" /> + + + + + + + + + + + + diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-back-tracking.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-back-tracking.svg index 7be3d1d0..24f0f961 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-back-tracking.svg +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-back-tracking.svg @@ -1049,16 +1049,35 @@ id="path1007-9-8-8-1" style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" - transform="scale(-0.6)" /> + + + + + + + - - - - - - - - - - - - - + id="path31-9" /> + id="g23-0"> + d="M 1.765625,-4.40625 0.375,-4.296875 v 0.3125 c 0.640625,0 0.734375,0.0625 0.734375,0.546875 V -0.75 c 0,0.4375 -0.109375,0.4375 -0.78125,0.4375 V 0 C 0.640625,-0.015625 1.1875,-0.03125 1.421875,-0.03125 1.78125,-0.03125 2.125,-0.015625 2.46875,0 v -0.3125 c -0.671875,0 -0.703125,-0.046875 -0.703125,-0.4375 z m 0.03125,-1.734375 c 0,-0.3125 -0.234375,-0.53125 -0.515625,-0.53125 -0.3125,0 -0.53125,0.265625 -0.53125,0.53125 0,0.265625 0.21875,0.53125 0.53125,0.53125 0.28125,0 0.515625,-0.21875 0.515625,-0.53125 z m 0,0" + id="path35-6" /> - + + + + + + + + + + + + + diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-simple-clamping.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-simple-clamping.svg index f89e3f79..f5ce0446 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-simple-clamping.svg +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/anti-windup-simple-clamping.svg @@ -3140,16 +3140,29 @@ id="path1007-9-0-0-1-6-4-2-2-4" style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" - transform="scale(-0.6)" /> + + + + + - - - - - - - - - - - - + sodipodi:nodetypes="cc" /> + + + + + + + + + + + + diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/control-diagram-overview.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/control-diagram-overview.svg index 0c2ef6b4..9499aa25 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/images/control-diagram-overview.svg +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/control-diagram-overview.svg @@ -1057,24 +1057,44 @@ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" transform="scale(-0.6)" - inkscape:connector-curvature="0" /> + + + + + + + + postSat - - - - - - - - - - - - + sodipodi:nodetypes="cc" /> + + + + + + + + + + + + diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/control-diagram-sat.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/control-diagram-sat.svg index 40973979..fe8a02f8 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/images/control-diagram-sat.svg +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/control-diagram-sat.svg @@ -498,23 +498,48 @@ id="path1007-9-0" style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" - transform="scale(-0.6)" /> + + + + + + + + + + + + + + + + + + + style="stroke-width:0.613737"> + id="path64" + style="stroke-width:0.613737" /> + style="stroke-width:0.511447"> + style="stroke-width:0.613737"> + d="m 1.71875,-3.75 v -0.65625 l -1.4375,0.109375 v 0.3125 c 0.703125,0 0.78125,0.0625 0.78125,0.5 v 4.65625 C 1.0625,1.625 0.953125,1.625 0.28125,1.625 V 1.9375 C 0.625,1.921875 1.140625,1.90625 1.390625,1.90625 c 0.28125,0 0.78125,0.015625 1.125,0.03125 V 1.625 C 1.859375,1.625 1.75,1.625 1.75,1.171875 V -0.59375 c 0.046875,0.171875 0.46875,0.703125 1.21875,0.703125 1.1875,0 2.21875,-0.984375 2.21875,-2.265625 0,-1.265625 -0.953125,-2.25 -2.078125,-2.25 -0.78125,0 -1.203125,0.4375 -1.390625,0.65625 z M 1.75,-1.140625 v -2.21875 C 2.03125,-3.875 2.515625,-4.15625 3.03125,-4.15625 c 0.734375,0 1.328125,0.875 1.328125,2 0,1.203125 -0.6875,2.046875 -1.421875,2.046875 -0.40625,0 -0.78125,-0.203125 -1.046875,-0.609375 C 1.75,-0.921875 1.75,-0.9375 1.75,-1.140625 Z m 0,0" + id="path68" + style="stroke-width:0.613737" /> + style="stroke-width:0.511447"> + id="use40" + transform="translate(21.172001,12.75)" + style="stroke-width:0.613737"> + id="path72" + style="stroke-width:0.613737" /> + style="stroke-width:0.511447"> + id="use44" + transform="translate(36.480999,6.8080001)" + style="stroke-width:0.613737"> + id="path12555" + style="stroke-width:0.613737" /> + style="stroke-width:0.511447"> + id="use48" + transform="translate(44.942001,8.3030005)" + style="stroke-width:0.613737"> + d="m 1.46875,-4.296875 c 0,-0.203125 -0.171875,-0.40625 -0.40625,-0.40625 -0.203125,0 -0.390625,0.171875 -0.390625,0.40625 0,0.25 0.203125,0.40625 0.390625,0.40625 0.234375,0 0.40625,-0.171875 0.40625,-0.40625 z M 0.40625,-3 v 0.25 c 0.4375,0 0.5,0.046875 0.5,0.390625 v 1.8125 C 0.90625,-0.25 0.84375,-0.25 0.390625,-0.25 V 0 c 0.015625,0 0.5,-0.03125 0.78125,-0.03125 0.25,0 0.5,0.015625 0.734375,0.03125 V -0.25 C 1.5,-0.25 1.4375,-0.25 1.4375,-0.546875 v -2.53125 z m 0,0" + id="path12559" + style="stroke-width:0.613737" /> - - - + d="M 35.824219,9.1685624 H 47.039063" + id="path52" + transform="scale(0.352778)" /> + style="stroke-width:0.613737"> + id="g12567" + style="stroke-width:0.511447"> + id="use54" + transform="translate(39.752998,17.697001)" + style="stroke-width:0.613737"> + id="path12564" + style="stroke-width:0.613737" /> - Date: Sat, 11 Oct 2025 18:41:31 -0500 Subject: [PATCH 35/48] Update readme --- .../integrator-anti-windup/index.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md index 2fb33803..9597ce88 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md @@ -6,13 +6,13 @@ This article describes how to evaluate performance of anti-windup. A windup migh ### Block Diagram with Saturation -Generally, the primary components of a control diagram are the controller and plant. The controller provides a manipulated variable to actuate the plant model. However, in practice, manipulated variables are limited by the actuator’s capability. The figure below illustrates a practical block diagram considering the Saturation block, demonstrating the physical limitations of the actuator input. +Generally, the primary components of a control diagram are the controller and plant. The controller provides a manipulated variable to actuate the plant model. However, in practice, manipulated variables are limited by the actuator’s capability. The figure below illustrates a practical block diagram considering the `Saturation` block, demonstrating the physical limitations of the actuator input. ```{image} images/control-diagram-sat.svg :align: center ``` -In this example, a simple plant model of 1/(s+1) is employed, with the saturation block located before the plant. Note the saturation block produces an output signal bounded to the upper saturation value of `+Limit` and lower saturation value of `-Limit`. This system can be analyzed from following perspectives: +In this example, a simple plant model of 1/(s+1) is employed, with the saturation block located before the plant. Note the saturation block produces an output signal bounded to the upper saturation value of `+Limit` and lower saturation value of `-Limit`. This system can be interpreted from following examples: 1. Current regulation: - Plant input: Voltage command @@ -22,7 +22,7 @@ In this example, a simple plant model of 1/(s+1) is employed, with the saturatio 2. Speed control: - Plant input: $q$-axis current command - Output: Rotational speed of the electric machinery - - Physical limitation: The practical command current to the plant is limited by the coil current density, typically 8 A/mm2 (air-cooling). + - Physical limitation: The practical command current to the plant is limited by the coil current density. 3. Temperature control: - Plant input: Heat @@ -33,11 +33,11 @@ In this example, the PI controller is employed to achieve the desired system res ### Technical Challenges on Windup -This section provides the practical challenges from the actuator’s input limitations, especially on the command tracking and disturbance suppression. A definition of windup will be introduced. +This section provides the practical challenges from the actuator’s input limitations, especially on the command tracking and disturbance suppression, and introduces the definition of windup. #### Command Tracking without/with Actuator Limitations -Let us analyze the simulation result with the block diagram above to investigate the technical challenges of windup. Two scenarios are compared here: one “without saturation block” and one “with the saturation block”. The objective of this analysis is to evaluate the impact of its saturation block on the output performance. Assume a step command of 1 is generated as a reference at 0.2 seconds and the plant has a known input saturation limit defined as `Limit = 10`. +Let us analyze the simulation result with the block diagram above to investigate the technical challenges of windup. The objective of this analysis is to evaluate the impact of the saturation block on the output performance. The simulation results are shown below, where two scenarios are compared: one “without saturation block (red line)” and one “with the saturation block (blue line)”. Assume a step command of 1 is generated as a reference at 0.2 seconds and the plant has a known input saturation limit defined as `Limit = 10`. ```{image} images/Output-sat-c.svg :align: center @@ -49,16 +49,16 @@ Let us analyze the simulation result with the block diagram above to investigate :width: 600 ``` -As observed, the command can track correctly without saturation block, whereas overshoot with slow response occurs in presence of the saturation block. The second figure shows the output of the integrator. With the saturated block, errors are accumulated, leading to delayed convergence, a condition known as an integral windup. +As observed in the top figure, the command tracks correctly when no saturation block is present, whereas overshoot occurs when the saturation block is included. The bottom figure illustrates the output of the integrator `Iout`. With the saturated block, `Iout` becomes larger than that without the saturation block. -Next, let us examine the manipulated variable in the previous and the post saturation block. +Let us examine why this phenomenon occurs by analyzing the manipulated variable before and after the saturation block. ```{image} images/preSat-postSat.svg :align: center :width: 600 ``` -In the previous saturation block (`preSat`), the manipulated variable instantaneously exceeds 60, beyond the saturation range of 10. On the other hand, the voltage reference in the post saturation block (`postSat`) is limited to 10. As demonstrated in this example, the controller disregards the presence of the saturation block because it has no information about real-world saturation occurrences. Consequently, the PI controller may provide a higher manipulated variable after getting the higher error, which causes the windup. +In the previous saturation block (`preSat`), the manipulated variable instantaneously exceeds 60, which is beyond the saturation range of 10. In contrast, the voltage reference in the post saturation block (`postSat`) is limited to 10. As demonstrated in this example, the controller disregards the presence of the saturation block because it has no information about real-world saturation. Consequently, the PI controller continue to increase the manipulated variable after getting the larger error. If this error is continuously accumulated, the system exhibits delayed convergence, a condition known as an integral windup. #### Disturbance Suppression without/with Actuator Limitations From 58ba0c7b98d36227c3e8b07951a8951acfade906 Mon Sep 17 00:00:00 2001 From: Takahiro Noguchi Date: Sat, 11 Oct 2025 18:52:41 -0500 Subject: [PATCH 36/48] Update readme --- .../control-with-amdc/integrator-anti-windup/index.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md index 9597ce88..7ba5b8d1 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md @@ -33,7 +33,7 @@ In this example, the PI controller is employed to achieve the desired system res ### Technical Challenges on Windup -This section provides the practical challenges from the actuator’s input limitations, especially on the command tracking and disturbance suppression, and introduces the definition of windup. +This section provides the practical challenges from the actuator’s input limitations, especially on the command tracking and disturbance suppression, and introduces the definition of an integral windup. #### Command Tracking without/with Actuator Limitations @@ -84,7 +84,7 @@ To avoid the integral windup, the mitigation strategy known as the anti-windup s :align: center ``` -In the anti-windup methods, if the manipulated variable reaches the specified `Limit`, the integrator is to keep the integrated value from increasing past the specified limit. There are multiple ways to implement integrator anti-windup, however, two common methods are introduced here: +In the anti-windup methods, if the manipulated variable reaches the specified `Limit`, the integrator is to keep the integrated value from increasing past the specified limit. There are multiple ways to implement integrator anti-windup, however, two common methods are introduced in this article: 1. [**Clamping**](#clamping): Turn off the integrator to stop further accumulation of the value. This can be divided into two methods, i.e., [simple clamping](#simple-clamping) and [advanced clamping](#advanced-clamping). @@ -213,10 +213,10 @@ The idea of back-tracking method is to use a feedback loop to unwind the interna :width: 70% ``` -For example, if saturation occurs, `TR` is calculated as `TR = Kb(postSat-preSat)` and added into the integrator to avoid the windup, where $K_\text{b}$ is a feedback gain of the back-tracking. On the other hand, if the saturation does not occur, `preSat` and `postSat` must be equal, and `TR` is 0, i.e., the anti-windup is deactivated. +For example, if saturation occurs, `TR` is calculated as `TR = Kb(postSat-preSat)` and added into the integrator to avoid the windup, where $K_\text{b}$ is a feedback gain of the back-tracking. In contrast, if the saturation does not occur, `preSat` and `postSat` must be equal, and `TR` is 0, i.e., the anti-windup is deactivated. ```{tip} -The selection of $K_\text{b}$ is highly nuanced upon the specific event being managed. Making an incorrect choice for $K_\text{b}$ can lead to the clamping method better. In practice, the feedback gain of $K_\text{b}$ is determined by trial and error, depending on the user’s requirements, such as how much overshoot or response-speed they want. There is a paper that shows an example of how to determine the $K_\text{b}$ known as a `conditioned PI controller`. In this literature, the $K_\text{b}$ is determined as $K_\text{b} = K_\text{i}/K_\text{p}$. For detailed information, refer to [this paper](https://www.sciencedirect.com/science/article/pii/000510988790029X). +The selection of $K_\text{b}$ is highly nuanced upon the specific event being managed. Making an incorrect choice for $K_\text{b}$ can lead to the clamping method better. In practice, the feedback gain of $K_\text{b}$ is determined by trial and error, depending on the user’s requirements, such as the allowable overshoot and desired response speed. There is a paper that shows an example of how to determine the $K_\text{b}$ known as a `conditioned PI controller`. In this literature, the $K_\text{b}$ is determined as $K_\text{b} = K_\text{i}/K_\text{p}$. For detailed information, refer to [this paper](https://www.sciencedirect.com/science/article/pii/000510988790029X). ``` Here is a Simulink simulation of the no anti-windup, simple clamping, advanced clamping, and back-tracking. @@ -254,4 +254,4 @@ From the `Output` waveform, it is evident that the back-tracking technique margi The disturbance suppression results demonstrate that both the clamping and the back-tracking methods improved the performance. Interestingly, the clamping methods is better to suppress disturbance than the back-tracking in this example. It should be noted that these results were achieved using the back-tracking gain of $K_\text{b} = K_\text{i}/K_\text{p}$, which might be required to adjust based on the specific condition and simulation outcomes. -The anti-windup methods introduced in this article can be implemented by running the Simulink model provided [here](https://github.com/Severson-Group/docs.amdc.dev/source/getting-started/control-with-amdc/integrator-anti-windup). +The anti-windup methods introduced in this article can be implemented by running the Simulink model provided [here](../integrator-anti-windup/simulink/). From 4f2b4cec9ec09498f2a15e9d1efe79286eb35a9e Mon Sep 17 00:00:00 2001 From: Takahiro Noguchi Date: Sun, 12 Oct 2025 18:27:42 -0500 Subject: [PATCH 37/48] Update readme --- .../control-with-amdc/integrator-anti-windup/index.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md index 7ba5b8d1..64454b19 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md @@ -1,6 +1,8 @@ # Integrator Anti-Windup -This article describes how to evaluate performance of anti-windup. A windup might occur when the controller with an integrator faces limitations on the manipulated variables, leading to degraded system response and stability. The effectiveness of an anti-windup strategy depends on both the duration and the extent of saturation of the windup. Therefore, simulating realistic windup and anti-windup behaviors is crucial to investigate specific scenarios that are likely to occur since perfect anti-windup is unachievable. +This article describes how to evaluate performance of anti-windup. A windup might occur when the controller with an integrator faces limitations on the manipulated variables, leading to degraded system response and stability. + +The effectiveness of an anti-windup strategy depends on both the duration and the extent of saturation of the windup. Since perfect anti-windup is unachievable, it is crucial to simulate realistic windup and anti-windup behaviors to examine specific scenarios that are likely to occur in practice. To help readers understand this, an example of Simulink model (available [here](../integrator-anti-windup/simulink/)) is provided in this article to demonstrate how such scenario can be simulated and how the anti-windup strategy can address them. ## Exploring Windup Phenomena in Integrators @@ -254,4 +256,4 @@ From the `Output` waveform, it is evident that the back-tracking technique margi The disturbance suppression results demonstrate that both the clamping and the back-tracking methods improved the performance. Interestingly, the clamping methods is better to suppress disturbance than the back-tracking in this example. It should be noted that these results were achieved using the back-tracking gain of $K_\text{b} = K_\text{i}/K_\text{p}$, which might be required to adjust based on the specific condition and simulation outcomes. -The anti-windup methods introduced in this article can be implemented by running the Simulink model provided [here](../integrator-anti-windup/simulink/). + From 2b239e66e855ecccabb790c881eba7a502d66179 Mon Sep 17 00:00:00 2001 From: Takahiro Noguchi Date: Sun, 12 Oct 2025 19:08:41 -0500 Subject: [PATCH 38/48] Update advanced image --- .../images/Iout-advanced-better.svg | 78 +++---------- .../images/disturbance-advanced-better.svg | 107 +++++++++++++++++- .../images/output-advanced-better.svg | 92 +++------------ 3 files changed, 136 insertions(+), 141 deletions(-) diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout-advanced-better.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout-advanced-better.svg index 85e460ff..501fe763 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout-advanced-better.svg +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout-advanced-better.svg @@ -75,79 +75,37 @@ > Date: Sun, 12 Oct 2025 19:25:13 -0500 Subject: [PATCH 39/48] Upate figures --- .../images/Iout-advanced-c.svg | 571 +++++++++++----- .../images/Iout-back-c.svg | 602 +++++++++++------ .../images/Iout-sat-c.svg | 551 ++++++++++----- .../images/Iout-simple-c.svg | 537 ++++++++++----- .../images/postSat-advanced-c.svg | 594 ++++++++++++----- .../images/postSat-back-c.svg | 625 ++++++++++++------ .../images/postSat-simple-c.svg | 560 +++++++++++----- 7 files changed, 2824 insertions(+), 1216 deletions(-) diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout-advanced-c.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout-advanced-c.svg index 6361443c..8b5d8ab4 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout-advanced-c.svg +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout-advanced-c.svg @@ -1,175 +1,396 @@ - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout-back-c.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout-back-c.svg index 4d75b888..a530072f 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout-back-c.svg +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout-back-c.svg @@ -1,198 +1,404 @@ - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout-sat-c.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout-sat-c.svg index 0987cbcc..05ab0663 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout-sat-c.svg +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout-sat-c.svg @@ -1,163 +1,388 @@ - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout-simple-c.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout-simple-c.svg index e2931438..71d95b93 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout-simple-c.svg +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout-simple-c.svg @@ -1,149 +1,388 @@ - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/postSat-advanced-c.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/postSat-advanced-c.svg index 31d27c3e..6c1d990c 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/images/postSat-advanced-c.svg +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/postSat-advanced-c.svg @@ -1,178 +1,416 @@ - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/postSat-back-c.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/postSat-back-c.svg index 599f69ae..eb3f080a 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/images/postSat-back-c.svg +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/postSat-back-c.svg @@ -1,201 +1,424 @@ - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/postSat-simple-c.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/postSat-simple-c.svg index a6cc5bfe..4760a8ef 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/images/postSat-simple-c.svg +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/postSat-simple-c.svg @@ -1,152 +1,408 @@ - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 61487aa9357b1d3ed8e8c74b704490688a091454 Mon Sep 17 00:00:00 2001 From: Takahiro Noguchi Date: Sun, 12 Oct 2025 19:34:09 -0500 Subject: [PATCH 40/48] Remove m file --- .../integrator-anti-windup/simulink/Main.m | 103 ------------------ 1 file changed, 103 deletions(-) delete mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/simulink/Main.m diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/simulink/Main.m b/source/getting-started/control-with-amdc/integrator-anti-windup/simulink/Main.m deleted file mode 100644 index d01ead02..00000000 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/simulink/Main.m +++ /dev/null @@ -1,103 +0,0 @@ -clc -clear -close all - -%% Set simulation parameters -Tsim = 1e-5; % Simulation sampling time [s] -Tend = 1; % Simulation end time [s] - -ref = 1; % Reference -start = 0.2; % Reference start time [s] -stop = 1.5; % Reference end time [s] - -d_ref = 0; % Disturbance -d_start = 0.2; % Disturbance start time [s] -d_stop = 0.3; % Disturbance end time [s] - -upper_limit = 10; % Upper limit -lower_limit = -10; % Lower limit - -%% Set controller parameters -fb = 10; % Controller bandwidth [Hz] -wb = 2*pi*fb; % Controller bandwidth [rad/s] - -Kp = wb; % P gain -Ki = wb; % I gain - -Kb = Ki/Kp; % Back-calculation coefficient - -% Select anti-windup methods that you want to simulate -sim_scenario = ["No anti-windup","Simple clamping","Advanced clamping","Back-tracking"]; -num_sim_scenario = length(sim_scenario); - -% List of variables to extract from Simulink -interested_signals = {'time','Reference','Output','Error','Iout','preSat','postSat','Disturbance'}; - -% Preallocate the cell array to store results -results = cell(round(Tend/Tsim+1), length(interested_signals)); - -%% Implement each simulation scenario -for i = 1:num_sim_scenario - switch sim_scenario(i) - case "No anti-windup" - Clamping_enable = 0; Advanced_clamping_enable = 0; Back_tracking_enable = 0; - case "Simple clamping" - Clamping_enable = 1; Advanced_clamping_enable = 0; Back_tracking_enable = 0; - case "Advanced clamping" - Clamping_enable = 1; Advanced_clamping_enable = 1; Back_tracking_enable = 0; - case "Back-tracking" - Clamping_enable = 0; Advanced_clamping_enable = 0; Back_tracking_enable = 1; - end - - % Run simulation - out = sim('simpleModel'); - - % Extract simulation data - runObj = Simulink.sdi.Run.getLatest; - - % Get signal IDs and store signals into array - for idx = 2:length(interested_signals) - sigID = getSignalIDsByName(runObj,interested_signals{idx}); - sig_obj.(interested_signals{idx}) = Simulink.sdi.getSignal(sigID); - sig_val.(interested_signals{idx}) = sig_obj.(interested_signals{idx}).Values.Data; - end - - % Store simulation results - time = sig_obj.(interested_signals{2}).Values.Time; - results{i} = [time,sig_val.Reference,sig_val.Output,sig_val.Error, ... - sig_val.Iout,sig_val.preSat,sig_val.postSat,sig_val.Disturbance]; -end - -%% Plot figures -% Define figure size -width = 5.43; height = 4.38/3; -set(0,'units','inches') -Inch_SS = get(0,'screensize'); - -% Define plot line parameters -lw = 1; colors = {'r', 'b', 'c', 'g'}; lineStyles = {'-', '-', '--', '-'}; - -% Plot figures -for j = 3:length(interested_signals) - figure - hold on - if j == 3 % This is special handling for 'Output' plot with 'Command' - plot(results{1}(:, 1),results{1}(:, 2),'color','k','Linewidth',lw); - for i = 1:num_sim_scenario - plot(results{i}(:, 1), results{i}(:, j), ... - 'color',colors{i},'LineStyle',lineStyles{i},'Linewidth',lw); - end - legend(['Command', sim_scenario],'Interpreter','latex','Location','east'); - else - for i = 1:num_sim_scenario - plot(results{i}(:, 1),results{i}(:, j), ... - 'color',colors{i},'LineStyle',lineStyles{i},'Linewidth',lw); - end - legend(sim_scenario,'Interpreter','latex','Location','east'); - end - xlabel('Time [s]','Interpreter','latex'); - ylabel(interested_signals{j},'Interpreter','latex'); - xlim([0 Tend]); - set(gcf,'Units','inches','Position',[(Inch_SS(3)-width)/2,(Inch_SS(4)-height)/2,width,height]); - print('-dsvg','-noui',['../images/' interested_signals{j}]); -end From bf196ec29255d38257ba059eae0726829cd456fe Mon Sep 17 00:00:00 2001 From: Takahiro Noguchi Date: Sun, 12 Oct 2025 19:34:26 -0500 Subject: [PATCH 41/48] Add m file --- .../integrator-anti-windup/simulink/main.m | 103 ++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/simulink/main.m diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/simulink/main.m b/source/getting-started/control-with-amdc/integrator-anti-windup/simulink/main.m new file mode 100644 index 00000000..d01ead02 --- /dev/null +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/simulink/main.m @@ -0,0 +1,103 @@ +clc +clear +close all + +%% Set simulation parameters +Tsim = 1e-5; % Simulation sampling time [s] +Tend = 1; % Simulation end time [s] + +ref = 1; % Reference +start = 0.2; % Reference start time [s] +stop = 1.5; % Reference end time [s] + +d_ref = 0; % Disturbance +d_start = 0.2; % Disturbance start time [s] +d_stop = 0.3; % Disturbance end time [s] + +upper_limit = 10; % Upper limit +lower_limit = -10; % Lower limit + +%% Set controller parameters +fb = 10; % Controller bandwidth [Hz] +wb = 2*pi*fb; % Controller bandwidth [rad/s] + +Kp = wb; % P gain +Ki = wb; % I gain + +Kb = Ki/Kp; % Back-calculation coefficient + +% Select anti-windup methods that you want to simulate +sim_scenario = ["No anti-windup","Simple clamping","Advanced clamping","Back-tracking"]; +num_sim_scenario = length(sim_scenario); + +% List of variables to extract from Simulink +interested_signals = {'time','Reference','Output','Error','Iout','preSat','postSat','Disturbance'}; + +% Preallocate the cell array to store results +results = cell(round(Tend/Tsim+1), length(interested_signals)); + +%% Implement each simulation scenario +for i = 1:num_sim_scenario + switch sim_scenario(i) + case "No anti-windup" + Clamping_enable = 0; Advanced_clamping_enable = 0; Back_tracking_enable = 0; + case "Simple clamping" + Clamping_enable = 1; Advanced_clamping_enable = 0; Back_tracking_enable = 0; + case "Advanced clamping" + Clamping_enable = 1; Advanced_clamping_enable = 1; Back_tracking_enable = 0; + case "Back-tracking" + Clamping_enable = 0; Advanced_clamping_enable = 0; Back_tracking_enable = 1; + end + + % Run simulation + out = sim('simpleModel'); + + % Extract simulation data + runObj = Simulink.sdi.Run.getLatest; + + % Get signal IDs and store signals into array + for idx = 2:length(interested_signals) + sigID = getSignalIDsByName(runObj,interested_signals{idx}); + sig_obj.(interested_signals{idx}) = Simulink.sdi.getSignal(sigID); + sig_val.(interested_signals{idx}) = sig_obj.(interested_signals{idx}).Values.Data; + end + + % Store simulation results + time = sig_obj.(interested_signals{2}).Values.Time; + results{i} = [time,sig_val.Reference,sig_val.Output,sig_val.Error, ... + sig_val.Iout,sig_val.preSat,sig_val.postSat,sig_val.Disturbance]; +end + +%% Plot figures +% Define figure size +width = 5.43; height = 4.38/3; +set(0,'units','inches') +Inch_SS = get(0,'screensize'); + +% Define plot line parameters +lw = 1; colors = {'r', 'b', 'c', 'g'}; lineStyles = {'-', '-', '--', '-'}; + +% Plot figures +for j = 3:length(interested_signals) + figure + hold on + if j == 3 % This is special handling for 'Output' plot with 'Command' + plot(results{1}(:, 1),results{1}(:, 2),'color','k','Linewidth',lw); + for i = 1:num_sim_scenario + plot(results{i}(:, 1), results{i}(:, j), ... + 'color',colors{i},'LineStyle',lineStyles{i},'Linewidth',lw); + end + legend(['Command', sim_scenario],'Interpreter','latex','Location','east'); + else + for i = 1:num_sim_scenario + plot(results{i}(:, 1),results{i}(:, j), ... + 'color',colors{i},'LineStyle',lineStyles{i},'Linewidth',lw); + end + legend(sim_scenario,'Interpreter','latex','Location','east'); + end + xlabel('Time [s]','Interpreter','latex'); + ylabel(interested_signals{j},'Interpreter','latex'); + xlim([0 Tend]); + set(gcf,'Units','inches','Position',[(Inch_SS(3)-width)/2,(Inch_SS(4)-height)/2,width,height]); + print('-dsvg','-noui',['../images/' interested_signals{j}]); +end From 0d9038865ffc64b33568b2042dd42c60911d4993 Mon Sep 17 00:00:00 2001 From: Takahiro Noguchi Date: Sun, 12 Oct 2025 19:38:22 -0500 Subject: [PATCH 42/48] Update disturbance --- .../integrator-anti-windup/images/disturbance.svg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/disturbance.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/disturbance.svg index 0aa28f89..f8bf6acf 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/images/disturbance.svg +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/disturbance.svg @@ -104,9 +104,8 @@ /> Date: Sun, 12 Oct 2025 19:39:51 -0500 Subject: [PATCH 43/48] Update image --- .../images/disturbance-advanced-better.svg | 99 +------------------ 1 file changed, 1 insertion(+), 98 deletions(-) diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/disturbance-advanced-better.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/disturbance-advanced-better.svg index 83e8e8ee..351e80eb 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/images/disturbance-advanced-better.svg +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/disturbance-advanced-better.svg @@ -104,105 +104,8 @@ /> Date: Sun, 12 Oct 2025 19:50:17 -0500 Subject: [PATCH 44/48] Update image --- .../images/output-advanced-better.svg | 85 ++++++++++++++++++- 1 file changed, 83 insertions(+), 2 deletions(-) diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/output-advanced-better.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/output-advanced-better.svg index 115e7849..37c8e650 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/images/output-advanced-better.svg +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/output-advanced-better.svg @@ -103,8 +103,89 @@ > Date: Sun, 12 Oct 2025 19:52:56 -0500 Subject: [PATCH 45/48] Update image --- .../integrator-anti-windup/images/Iout-advanced-better.svg | 3 --- 1 file changed, 3 deletions(-) diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout-advanced-better.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout-advanced-better.svg index 501fe763..5fd3febb 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout-advanced-better.svg +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/Iout-advanced-better.svg @@ -104,9 +104,6 @@ > From f1944ff5d08813dbf3447c442a982ebd8c64c2ad Mon Sep 17 00:00:00 2001 From: Takahiro Noguchi Date: Sun, 12 Oct 2025 19:55:55 -0500 Subject: [PATCH 46/48] Update readme --- .../control-with-amdc/integrator-anti-windup/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md index 64454b19..99c9e949 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md @@ -203,7 +203,7 @@ Here are simulation results based on the above scenarios: :width: 600 ``` -From the `Output` result, when the controller set point drops below the output, the advanced clamping method avoids integrating, allowing for effective unwinding. On the other hand, the simple clamping continues to integrate, which may not handle unwinding as effectively as the advanced method. _However_, this can be observed only if the proportional gain of $K_\text{p}$ is very small ($= 0.0002*2\pi \times 10$ in this case), which is not commonly preferred, especially if the PI controller is tuned for pole-zero cancellation. +From the `Output` result, when the controller set point drops below the output, the advanced clamping method avoids integrating, allowing for effective unwinding. On the other hand, the simple clamping continues to integrate, which may not handle unwinding as effectively as the advanced method. _However_, this can be observed only if the proportional gain of $K_\text{p}$ is very small ($= 0.0002 \times 2\pi \times 10$ in this case), which is not commonly preferred, especially if the PI controller is tuned for pole-zero cancellation. Significant differences in the advanced clamping only appear when the system saturates **AND** signs are different from error vs control output, which is uncommon since the difference in signs usually moves out immediately. Therefore, the highly specific scenario where the system stays in saturation during this flip in signs is necessary to clearly make the advanced method better. This suggests that the effort to implement the advanced clamping version is probably not worth it for the typical motor control systems. ### Back-tracking From 08d9be4c046eda76fcbcef6d97c322884f926284 Mon Sep 17 00:00:00 2001 From: Takahiro Noguchi Date: Sun, 12 Oct 2025 20:11:29 -0500 Subject: [PATCH 47/48] Add error and preSat images --- .../images/error-advanced-better.svg | 110 +++++++++++++++++ .../images/preSat-advanced-better.svg | 111 ++++++++++++++++++ .../integrator-anti-windup/index.md | 14 ++- 3 files changed, 234 insertions(+), 1 deletion(-) create mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/images/error-advanced-better.svg create mode 100644 source/getting-started/control-with-amdc/integrator-anti-windup/images/preSat-advanced-better.svg diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/error-advanced-better.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/error-advanced-better.svg new file mode 100644 index 00000000..82dc29ec --- /dev/null +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/error-advanced-better.svg @@ -0,0 +1,110 @@ + + + diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/images/preSat-advanced-better.svg b/source/getting-started/control-with-amdc/integrator-anti-windup/images/preSat-advanced-better.svg new file mode 100644 index 00000000..91732e03 --- /dev/null +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/images/preSat-advanced-better.svg @@ -0,0 +1,111 @@ + + + diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md index 99c9e949..18296711 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md @@ -182,7 +182,9 @@ Notice that the above assumptions cause the simple and advanced clamping to beha Based on this, a highly specific scenario is now introduced where advanced clamping demonstrates better performance. Here is simulation scenario to demonstrate the superiority of advanced clamping than simple clamping: -**Initial State**: A disturbance of 5 causes the system to saturate and stabilize at -1 output. +1. A disturbance of 3 occurs at 0.5 seconds, and causes the system to saturate. +2. After the output is stabilized to 0, the positive reference of 1 is commanded at 5 seconds. +3. **Controller Behavior**: At 5 seconds, the controller set point starts toggling around the saturated output. @@ -198,6 +200,16 @@ Here are simulation results based on the above scenarios: :width: 600 ``` +```{image} images/error-advanced-better.svg + :align: center + :width: 600 +``` + +```{image} images/preSat-advanced-better.svg + :align: center + :width: 600 +``` + ```{image} images/Iout-advanced-better.svg :align: center :width: 600 From f789a1c47ccacca7c2b4f47c183dc883d504f1f2 Mon Sep 17 00:00:00 2001 From: Takahiro Noguchi Date: Sun, 12 Oct 2025 21:20:07 -0500 Subject: [PATCH 48/48] Updat readme --- .../integrator-anti-windup/index.md | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md index 18296711..1fe7ebb5 100644 --- a/source/getting-started/control-with-amdc/integrator-anti-windup/index.md +++ b/source/getting-started/control-with-amdc/integrator-anti-windup/index.md @@ -182,11 +182,8 @@ Notice that the above assumptions cause the simple and advanced clamping to beha Based on this, a highly specific scenario is now introduced where advanced clamping demonstrates better performance. Here is simulation scenario to demonstrate the superiority of advanced clamping than simple clamping: -1. A disturbance of 3 occurs at 0.5 seconds, and causes the system to saturate. -2. After the output is stabilized to 0, the positive reference of 1 is commanded at 5 seconds. -3. - -**Controller Behavior**: At 5 seconds, the controller set point starts toggling around the saturated output. +1. A `Disturbance` with amplitude of 3 is applied at 0.5 seconds, causing the system to saturate. +2. Once the `Output` has stabilized at 0, a positive reference of 1 is commanded at 5 seconds. Here are simulation results based on the above scenarios: @@ -210,13 +207,9 @@ Here are simulation results based on the above scenarios: :width: 600 ``` -```{image} images/Iout-advanced-better.svg - :align: center - :width: 600 -``` +As indicated in `Output` plot, the advanced clamping performs better, whereas the simple clamping can no longer track the reference. Interestingly, the simple clamping can be even worse than having no anti-windup in this example. _However_, this can be observed only if the proportional gain of $K_\text{p}$ is very small ($= 0.0001 \times 2\pi \times 10$ in this case). -From the `Output` result, when the controller set point drops below the output, the advanced clamping method avoids integrating, allowing for effective unwinding. On the other hand, the simple clamping continues to integrate, which may not handle unwinding as effectively as the advanced method. _However_, this can be observed only if the proportional gain of $K_\text{p}$ is very small ($= 0.0002 \times 2\pi \times 10$ in this case), which is not commonly preferred, especially if the PI controller is tuned for pole-zero cancellation. -Significant differences in the advanced clamping only appear when the system saturates **AND** signs are different from error vs control output, which is uncommon since the difference in signs usually moves out immediately. Therefore, the highly specific scenario where the system stays in saturation during this flip in signs is necessary to clearly make the advanced method better. This suggests that the effort to implement the advanced clamping version is probably not worth it for the typical motor control systems. +Significant differences in the advanced clamping only appear when the system saturates **AND** signs are different from error vs control output, which is uncommon since the difference in signs usually moves out immediately. In this example, the `Error` suddenly becomes positive at 5 seconds, while the `preSat` remains negative due to low P gain. This brakes the equal sign condition (i.e., `Error` does not have the same sign as the `preSat`) and unclamps the integrator. Because setting a significantly low P gain is generally undesirable, this suggests that the additional effort to implement the advanced clamping is probably not worth for the typical motor control systems. ### Back-tracking