From 52bf6d1014f944a1477b6139207fcf90be5af910 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anian=20B=C3=BChler?= <anian.buehler@reutlingen-university.de> Date: Thu, 16 Dec 2021 12:01:07 +0100 Subject: [PATCH] added constrain to pid integral --- .../com/ardublock/translator/block/operators/PidBlock.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/ardublock/translator/block/operators/PidBlock.java b/src/main/java/com/ardublock/translator/block/operators/PidBlock.java index a306296..34089fa 100644 --- a/src/main/java/com/ardublock/translator/block/operators/PidBlock.java +++ b/src/main/java/com/ardublock/translator/block/operators/PidBlock.java @@ -59,8 +59,11 @@ public class PidBlock extends TranslatorBlock + " long error = setpoint - input; // get error\n" + " out = kp * error; //P output\n\n"; if(integrative) { - functionCode +=" long cumError = cumError + error * elapsedTime; // compute integral\n" - + " out = out + ki * cumError; //I output\n\n"; + functionCode +=" long cumError = cumError + error * elapsedTime; // compute integral\n"; + if(limited) { + functionCode += " cumError = constrain(cumError, limitLow, limitHigh); //limit integral against windup"; + } + functionCode += " out = out + ki * cumError; //I output\n\n"; } if(derivative) { functionCode +=" long rateError = (error - lastError) / elapsedTime; // compute derivative\n" -- GitLab