diff --git a/firmware/controllers/actuators/idle_thread.cpp b/firmware/controllers/actuators/idle_thread.cpp index 84d0872b15..2379ef8355 100644 --- a/firmware/controllers/actuators/idle_thread.cpp +++ b/firmware/controllers/actuators/idle_thread.cpp @@ -32,7 +32,9 @@ int IdleController::getTargetRpm(float clt) { // alternator duty cycle has a similar logic targetRpmAcBump = engine->module().unmock().acButtonState ? engineConfiguration->acIdleRpmBump : 0; - return targetRpmByClt + targetRpmAcBump; + auto target = targetRpmByClt + targetRpmAcBump; + idleTarget = target; + return target; } IIdleController::Phase IdleController::determinePhase(int rpm, int targetRpm, SensorResult tps, float vss, float crankingTaperFraction) { @@ -350,7 +352,9 @@ float IdleController::getIdlePosition(float rpm) { useClosedLoop = tps.Valid && engineConfiguration->idleMode == IM_AUTO; // If TPS is working and automatic mode enabled, add any closed loop correction if (useClosedLoop) { - iacPosition += getClosedLoop(phase, tps.Value, rpm, targetRpm); + auto closedLoop = getClosedLoop(phase, tps.Value, rpm, targetRpm); + idleClosedLoop = closedLoop; + iacPosition += closedLoop; } iacPosition = clampPercentValue(iacPosition);