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 8433fa794fc47fcd54aa03b7f2be77bc52a53e6d..3bc24436b6eb7bd033ad7ec6ee9fa60b276eb0e4 100644 --- a/src/main/java/com/ardublock/translator/block/operators/PidBlock.java +++ b/src/main/java/com/ardublock/translator/block/operators/PidBlock.java @@ -73,15 +73,15 @@ public class PidBlock extends TranslatorBlock + " long error = setpoint - input; // get error\n" + " out = kp * error; //P output\n\n"; if(integrative) { - functionCode +=" cumError = cumError + error; // compute integral\n"; + functionCode +=" cumError = cumError + (error * intervalSecond); // compute integral\n"; if(limited) { functionCode += " cumError = constrain(cumError, limitLow * 100.0, limitHigh * 100.0); //limit integral against windup\n"; } - functionCode += " out = out + (ki * intervalSecond) * cumError; //I output\n\n"; + functionCode += " out = out + (ki * cumError); //I output\n\n"; } if(derivative) { - functionCode +=" long rateError = error - lastError; // compute derivative\n" - + " out = out - (kd / intervalSecond) * rateError; //D output\n\n"; + functionCode +=" long rateError = (error - lastError) / intervalSecond; // compute derivative\n" + + " out = out + kd * rateError; //D output\n\n"; } if(limited) { functionCode +=" out = constrain(out, limitLow, limitHigh); //limit output\n\n";