From d6dd4fb3f369e23571725ac32f9909668e0c7470 Mon Sep 17 00:00:00 2001 From: andreika-git Date: Sat, 23 Dec 2017 19:24:20 +0200 Subject: [PATCH] Impl. useSeparateVeForIdle/useSeparateAdvanceForIdle (#522) --- firmware/controllers/algo/advance_map.cpp | 10 ++++++++++ firmware/controllers/algo/engine.cpp | 9 ++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/firmware/controllers/algo/advance_map.cpp b/firmware/controllers/algo/advance_map.cpp index 82fe453201..ddda469220 100644 --- a/firmware/controllers/algo/advance_map.cpp +++ b/firmware/controllers/algo/advance_map.cpp @@ -23,6 +23,7 @@ #include "interpolation.h" #include "efilib2.h" #include "engine_math.h" +#include "tps.h" EXTERN_ENGINE; @@ -102,6 +103,15 @@ static angle_t getRunningAdvance(int rpm, float engineLoad DECLARE_ENGINE_PARAME + engine->engineState.cltTimingCorrection // todo: uncomment once we get useable knock - engine->knockCount ; + + // get advance from the separate table for Idle + if (CONFIG(useSeparateAdvanceForIdle)) { + float idleAdvance = interpolate2d("idleAdvance", rpm, config->idleAdvanceBins, config->idleAdvance, IDLE_ADVANCE_CURVE_SIZE); + // interpolate between idle table and normal (running) table using TPS threshold + float tps = getTPS(PASS_ENGINE_PARAMETER_SIGNATURE); + result = interpolateClamped(0.0f, idleAdvance, boardConfiguration->idlePidDeactivationTpsThreshold, result, tps); + } + engine->m.advanceLookupTime = GET_TIMESTAMP() - engine->m.beforeAdvance; return result; } diff --git a/firmware/controllers/algo/engine.cpp b/firmware/controllers/algo/engine.cpp index 179dc0945a..602e5eb3e6 100644 --- a/firmware/controllers/algo/engine.cpp +++ b/firmware/controllers/algo/engine.cpp @@ -262,7 +262,14 @@ void EngineState::periodicFastCallback(DECLARE_ENGINE_PARAMETER_SIGNATURE) { /** * *0.01 because of https://sourceforge.net/p/rusefi/tickets/153/ */ - currentVE = baroCorrection * veMap.getValue(rpm, map) * 0.01; + float rawVe = veMap.getValue(rpm, map); + // get VE from the separate table for Idle + if (CONFIG(useSeparateVeForIdle)) { + float idleVe = interpolate2d("idleVe", rpm, config->idleVeBins, config->idleVe, IDLE_VE_CURVE_SIZE); + // interpolate between idle table and normal (running) table using TPS threshold + rawVe = interpolateClamped(0.0f, idleVe, boardConfiguration->idlePidDeactivationTpsThreshold, rawVe, tps); + } + currentVE = baroCorrection * rawVe * 0.01; targetAFR = afrMap.getValue(rpm, map); } else { baseTableFuel = getBaseTableFuel(rpm, engineLoad);