diff --git a/firmware/CHANGELOG.md b/firmware/CHANGELOG.md index 819c3bb25f..dcf047da97 100644 --- a/firmware/CHANGELOG.md +++ b/firmware/CHANGELOG.md @@ -36,6 +36,7 @@ Release template (copy/paste this for new release): ### Removed - ICU trigger input logic since it is unused in any current ECU #639 + - Idle PID "offset" field, as this role is filled more effectively by the various open loop parameters. ## July 2022 Release - "Day 130" diff --git a/firmware/config/engines/mazda_miata_1_6.cpp b/firmware/config/engines/mazda_miata_1_6.cpp index 458d3b1f9b..5e2b8d25ba 100644 --- a/firmware/config/engines/mazda_miata_1_6.cpp +++ b/firmware/config/engines/mazda_miata_1_6.cpp @@ -358,7 +358,6 @@ void setMiataNA6_MAP_MRE() { engineConfiguration->idle_derivativeFilterLoss = 0.1; engineConfiguration->idle_antiwindupFreq = 0.1; engineConfiguration->idleRpmPid.dFactor = 0.002; - engineConfiguration->idleRpmPid.offset = 0; engineConfiguration->acIdleExtraOffset = 14; engineConfiguration->idleRpmPid.minValue = -7; engineConfiguration->idleRpmPid.maxValue = 35; diff --git a/firmware/config/engines/mazda_miata_na8.cpp b/firmware/config/engines/mazda_miata_na8.cpp index 36eeddc06d..12a94c03ad 100644 --- a/firmware/config/engines/mazda_miata_na8.cpp +++ b/firmware/config/engines/mazda_miata_na8.cpp @@ -30,7 +30,6 @@ static void commonNA8() { engineConfiguration->idle_derivativeFilterLoss = 0.08; engineConfiguration->idle_antiwindupFreq = 0.03; engineConfiguration->idleRpmPid.dFactor = 0.002; - engineConfiguration->idleRpmPid.offset = 9; engineConfiguration->idleRpmPid.minValue = 76; engineConfiguration->idlerpmpid_iTermMin = -15; engineConfiguration->idlerpmpid_iTermMax = 30; diff --git a/firmware/config/engines/mazda_miata_vvt.cpp b/firmware/config/engines/mazda_miata_vvt.cpp index 43b0c4e583..752e906710 100644 --- a/firmware/config/engines/mazda_miata_vvt.cpp +++ b/firmware/config/engines/mazda_miata_vvt.cpp @@ -343,7 +343,6 @@ static void setCommonMazdaNB() { engineConfiguration->idle_derivativeFilterLoss = 0.08; engineConfiguration->idle_antiwindupFreq = 0.03; engineConfiguration->idleRpmPid.dFactor = 0.002; - engineConfiguration->idleRpmPid.offset = 9; engineConfiguration->idleRpmPid.minValue = -8; engineConfiguration->idleRpmPid.minValue = 76; engineConfiguration->idlerpmpid_iTermMin = -15; diff --git a/firmware/controllers/actuators/idle_thread.h b/firmware/controllers/actuators/idle_thread.h index 6e2a7b3278..e88e2c1ee3 100644 --- a/firmware/controllers/actuators/idle_thread.h +++ b/firmware/controllers/actuators/idle_thread.h @@ -105,7 +105,6 @@ void setManualIdleValvePosition(int positionPercent); void startIdleThread(); void setDefaultIdleParameters(); void startIdleBench(void); -void setIdleOffset(float value); void setIdlePFactor(float value); void setIdleIFactor(float value); void setIdleDFactor(float value); diff --git a/firmware/controllers/actuators/idle_thread_io.cpp b/firmware/controllers/actuators/idle_thread_io.cpp index d7ed364b12..b04e686722 100644 --- a/firmware/controllers/actuators/idle_thread_io.cpp +++ b/firmware/controllers/actuators/idle_thread_io.cpp @@ -139,11 +139,6 @@ void setTargetIdleRpm(int value) { showIdleInfo(); } -void setIdleOffset(float value) { - engineConfiguration->idleRpmPid.offset = value; - showIdleInfo(); -} - void setIdlePFactor(float value) { engineConfiguration->idleRpmPid.pFactor = value; applyPidSettings(); @@ -213,6 +208,9 @@ static void blipIdle(int idlePosition, int durationMs) { } void startIdleThread() { + // Force the idle controller to use 0 offset, as this is handled by the open loop table instead. + engineConfiguration->idleRpmPid.offset = 0; + engine->module().unmock().init(); #if ! EFI_UNIT_TEST diff --git a/firmware/controllers/settings.cpp b/firmware/controllers/settings.cpp index 692470521f..6bc8b794b2 100644 --- a/firmware/controllers/settings.cpp +++ b/firmware/controllers/settings.cpp @@ -979,7 +979,6 @@ const command_f_s commandsF[] = { {"script_curve_2_value", setScriptCurve2Value}, #if EFI_PROD_CODE #if EFI_IDLE_CONTROL - {"idle_offset", setIdleOffset}, {"idle_p", setIdlePFactor}, {"idle_i", setIdleIFactor}, {"idle_d", setIdleDFactor}, diff --git a/firmware/tunerstudio/rusefi.input b/firmware/tunerstudio/rusefi.input index 0bad30d43d..cf62a07694 100644 --- a/firmware/tunerstudio/rusefi.input +++ b/firmware/tunerstudio/rusefi.input @@ -89,7 +89,6 @@ enable2ndByteCanID = false ; this section will be generated automatically by ConfigDefinition.jar based on rusefi_config.txt ; CONFIG_DEFINITION_END - idleRpmPid_offset = "Constant base value" [Tuning] spotDepth = 2 ; 0 = no indicators, 1 = Z only, 2 = XYZ indicators. @@ -2839,7 +2838,6 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@\x00\x31\x00\x00" field = "derivativeFilterLoss", idle_derivativeFilterLoss field = "antiwindupFreq", idle_antiwindupFreq field = "D-factor", idleRpmPid_dFactor - field = "Offset", idleRpmPid_offset field = "Min", idleRpmPid_minValue field = "Max", idleRpmPid_maxValue field = "iTerm Min", idlerpmpid_iTermMin diff --git a/unit_tests/tests/test_idle_controller.cpp b/unit_tests/tests/test_idle_controller.cpp index 1dfaa3323a..8eafef213d 100644 --- a/unit_tests/tests/test_idle_controller.cpp +++ b/unit_tests/tests/test_idle_controller.cpp @@ -304,7 +304,6 @@ TEST(idle_v2, closedLoopBasic) { engineConfiguration->idleRpmPid.pFactor = 0.5; // 0.5 output per 1 RPM error = 50% per 100 rpm engineConfiguration->idleRpmPid.iFactor = 0; engineConfiguration->idleRpmPid.dFactor = 0; - engineConfiguration->idleRpmPid.offset = 0; engineConfiguration->idleRpmPid.iFactor = 0; engineConfiguration->idleRpmPid.periodMs = 0; engineConfiguration->idleRpmPid.minValue = -50; @@ -333,7 +332,6 @@ TEST(idle_v2, closedLoopDeadzone) { engineConfiguration->idleRpmPid.pFactor = 0.5; // 0.5 output per 1 RPM error = 50% per 100 rpm engineConfiguration->idleRpmPid.iFactor = 0; engineConfiguration->idleRpmPid.dFactor = 0; - engineConfiguration->idleRpmPid.offset = 0; engineConfiguration->idleRpmPid.iFactor = 0; engineConfiguration->idleRpmPid.periodMs = 0; engineConfiguration->idleRpmPid.minValue = -50;