diff --git a/firmware/CHANGELOG.md b/firmware/CHANGELOG.md index 8670fa78d9..31a533030e 100644 --- a/firmware/CHANGELOG.md +++ b/firmware/CHANGELOG.md @@ -32,6 +32,7 @@ Release template (copy/paste this for new release): - Support wasted spark on odd cylinder count 4-stroke engines. Improves startup and allows running without a cam sensor! - CLT/IAT boost duty/target compensation #6424 - DFCO MAP condition hysteresis #6915 + - Add I-term bounds for Alternator Control #6988 ### Fixed - Removed questionable MAP sampling trigger index option diff --git a/firmware/controllers/actuators/alternator_controller.cpp b/firmware/controllers/actuators/alternator_controller.cpp index ae2bd2e1b1..774411a7fc 100644 --- a/firmware/controllers/actuators/alternator_controller.cpp +++ b/firmware/controllers/actuators/alternator_controller.cpp @@ -60,6 +60,9 @@ expected AlternatorController::getOpenLoop(float target) { } expected AlternatorController::getClosedLoop(float targetVoltage, float vBattVoltage) { + alternatorPid.iTermMin = engineConfiguration->alternator_iTermMin; + alternatorPid.iTermMax = engineConfiguration->alternator_iTermMax; + percent_t altDuty = alternatorPid.getOutput(targetVoltage, vBattVoltage, FAST_CALLBACK_PERIOD_MS / 1000.0f); // this block could be executed even in on/off alternator control mode diff --git a/firmware/controllers/engine_controller.cpp b/firmware/controllers/engine_controller.cpp index 725700d3b0..70aa9d278c 100644 --- a/firmware/controllers/engine_controller.cpp +++ b/firmware/controllers/engine_controller.cpp @@ -533,6 +533,13 @@ bool validateConfigOnStartUpOrBurn() { engineConfiguration->mapExpAverageAlpha = 1; } + if (engineConfiguration->alternator_iTermMin == 0) { + engineConfiguration->alternator_iTermMin = -1000; + } + if (engineConfiguration->alternator_iTermMax == 0) { + engineConfiguration->alternator_iTermMax = 1000; + } + ensureArrayIsAscending("Injector deadtime", engineConfiguration->injector.battLagCorrBins); #if EFI_ENGINE_CONTROL