diff --git a/firmware/controllers/alternatorController.cpp b/firmware/controllers/alternatorController.cpp index 5f6a573745..1669a3143e 100644 --- a/firmware/controllers/alternatorController.cpp +++ b/firmware/controllers/alternatorController.cpp @@ -38,8 +38,8 @@ static msg_t AltCtrlThread(int param) { currentAltDuty = altPid.getValue(14, getVBatt(engineConfiguration), 1); if (boardConfiguration->isVerboseAlternator) { - scheduleMsg(logger, "alt duty: %f/vbatt=%f/p=%f/i=%f", currentAltDuty, getVBatt(engineConfiguration), - altPid.getP(), altPid.getI()); + scheduleMsg(logger, "alt duty: %f/vbatt=%f/p=%f/i=%f/d=%f int=%f", currentAltDuty, getVBatt(engineConfiguration), + altPid.getP(), altPid.getI(), altPid.getD(), altPid.getIntegration()); } alternatorControl.setSimplePwmDutyCycle(currentAltDuty / 100); diff --git a/firmware/controllers/math/pid.cpp b/firmware/controllers/math/pid.cpp index e262c7ad50..1c00399c41 100644 --- a/firmware/controllers/math/pid.cpp +++ b/firmware/controllers/math/pid.cpp @@ -36,7 +36,6 @@ float Pid::getValue(float target, float input, float dTime) { } else if (result < minResult) { integration += minResult - result; result = minResult; - } return result; } @@ -61,6 +60,10 @@ float Pid::getI(void) { return iFactor; } +float Pid::getIntegration(void) { + return integration; +} + float Pid::getD(void) { return dFactor; } diff --git a/firmware/controllers/math/pid.h b/firmware/controllers/math/pid.h index 609bfcc421..18783b50a2 100644 --- a/firmware/controllers/math/pid.h +++ b/firmware/controllers/math/pid.h @@ -17,6 +17,7 @@ public: void reset(void); float getP(void); float getI(void); + float getIntegration(void); float getD(void); private: float pFactor; diff --git a/unit_tests/test_idle_controller.cpp b/unit_tests/test_idle_controller.cpp index 209a6c513e..af452a14ab 100644 --- a/unit_tests/test_idle_controller.cpp +++ b/unit_tests/test_idle_controller.cpp @@ -48,5 +48,14 @@ void testPidController(void) { assertEquals(10, pid.getValue(14, 16, 0.1)); assertEquals(10, pid.getValue(14, 16, 1)); + pid.updateFactors(29, 0, 0); + assertEquals(10, pid.getValue(14, 16, 1)); + assertEquals(68, pid.getIntegration()); + + assertEquals(10, pid.getValue(14, 16, 1)); + assertEquals(68, pid.getIntegration()); + + assertEquals(10, pid.getValue(14, 16, 1)); + assertEquals(68, pid.getIntegration()); }