diff --git a/firmware/CHANGELOG.md b/firmware/CHANGELOG.md index 8f0fb8cfdf..3d368e3d04 100644 --- a/firmware/CHANGELOG.md +++ b/firmware/CHANGELOG.md @@ -48,6 +48,7 @@ Release template (copy/paste this for new release): - Fuel Priming reset fix #4627 - Slower than expected RPM information was slowing engine start #4629 - Fix 36-2-1 trigger (Mitsubishi 4B11, etc) #4635 + - Improve injection phase table defaults #4808 ### Removed - Idle timing deadzone #4729 diff --git a/firmware/controllers/algo/defaults/default_fuel.cpp b/firmware/controllers/algo/defaults/default_fuel.cpp index 2baddfb102..f5c0084067 100644 --- a/firmware/controllers/algo/defaults/default_fuel.cpp +++ b/firmware/controllers/algo/defaults/default_fuel.cpp @@ -81,20 +81,11 @@ static void setDefaultVETable() { setRpmTableBin(config->veRpmBins, FUEL_RPM_COUNT); setTable(config->veTable, 80); -// setRpmTableBin(engineConfiguration->ve2RpmBins, FUEL_RPM_COUNT); -// setLinearCurve(engineConfiguration->ve2LoadBins, 10, 300, 1); -// ve2Map.setAll(0.81); - - setRpmTableBin(config->lambdaRpmBins, FUEL_RPM_COUNT); - setRpmTableBin(config->baroCorrRpmBins, BARO_CORR_SIZE); setLinearCurve(config->baroCorrPressureBins, 75, 105, 1); - for (int i = 0; i < BARO_CORR_SIZE;i++) { - for (int j = 0; j < BARO_CORR_SIZE;j++) { - // Default baro table is all 1.0, we can't recommend a reasonable default here - config->baroCorrTable[i][j] = 1; - } - } + + // Default baro table is all 1.0, we can't recommend a reasonable default here + setTable(config->baroCorrTable, 1); } static void setDefaultFuelCutParameters() { @@ -168,6 +159,8 @@ static void setDefaultLambdaTable() { }; copyArray(config->lambdaLoadBins, mapBins); + setRpmTableBin(config->lambdaRpmBins, FUEL_RPM_COUNT); + static constexpr float rowValues[] = { 1, 1, 1, 1, // 30, 40, 50, 60 kpa 1, 0.95, 0.92, 0.90, // 70, 80, 90, 100 kpa @@ -238,9 +231,12 @@ void setDefaultFuel() { setFuelTablesLoadBin(10, 160); setRpmTableBin(config->injPhaseRpmBins, FUEL_RPM_COUNT); setDefaultVETable(); - setTable(config->injectionPhase, -180.0f); setDefaultLambdaTable(); + // -400 will close the injector just before TDC at the end of the exhaust stroke, + // around the time the intake valve opens. + setTable(config->injectionPhase, -400.0f); + // Charge temperature estimation engineConfiguration->tChargeMinRpmMinTps = 0.25; engineConfiguration->tChargeMinRpmMaxTps = 0.25; diff --git a/unit_tests/tests/ignition_injection/test_one_cylinder_logic.cpp b/unit_tests/tests/ignition_injection/test_one_cylinder_logic.cpp index 14a5ffd53e..1e3f29f0ee 100644 --- a/unit_tests/tests/ignition_injection/test_one_cylinder_logic.cpp +++ b/unit_tests/tests/ignition_injection/test_one_cylinder_logic.cpp @@ -8,6 +8,7 @@ TEST(issues, issueOneCylinderSpecialCase968) { EngineTestHelper eth(GY6_139QMB); + setTable(config->injectionPhase, -180.0f); engineConfiguration->isFasterEngineSpinUpEnabled = false; engine->tdcMarkEnabled = false; // set injection_mode 1 diff --git a/unit_tests/tests/ignition_injection/test_startOfCrankingPrimingPulse.cpp b/unit_tests/tests/ignition_injection/test_startOfCrankingPrimingPulse.cpp index 589d17b2c5..55219400da 100644 --- a/unit_tests/tests/ignition_injection/test_startOfCrankingPrimingPulse.cpp +++ b/unit_tests/tests/ignition_injection/test_startOfCrankingPrimingPulse.cpp @@ -9,6 +9,7 @@ TEST(engine, testPlainCrankingWithoutAdvancedFeatures) { EngineTestHelper eth(TEST_ENGINE); + setTable(config->injectionPhase, -180.0f); engineConfiguration->isFasterEngineSpinUpEnabled = false; engine->tdcMarkEnabled = false; engineConfiguration->cranking.baseFuel = 12; diff --git a/unit_tests/tests/trigger/test_fasterEngineSpinningUp.cpp b/unit_tests/tests/trigger/test_fasterEngineSpinningUp.cpp index fe4b2e0280..8ad4867d19 100644 --- a/unit_tests/tests/trigger/test_fasterEngineSpinningUp.cpp +++ b/unit_tests/tests/trigger/test_fasterEngineSpinningUp.cpp @@ -8,6 +8,7 @@ TEST(cranking, testFasterEngineSpinningUp) { EngineTestHelper eth(TEST_ENGINE); + setTable(config->injectionPhase, -180.0f); engine->tdcMarkEnabled = false; // turn on FasterEngineSpinUp mode engineConfiguration->isFasterEngineSpinUpEnabled = true; diff --git a/unit_tests/tests/trigger/test_trigger_decoder.cpp b/unit_tests/tests/trigger/test_trigger_decoder.cpp index bb3c05b6e8..5743128ffb 100644 --- a/unit_tests/tests/trigger/test_trigger_decoder.cpp +++ b/unit_tests/tests/trigger/test_trigger_decoder.cpp @@ -237,6 +237,8 @@ extern bool_t debugSignalExecutor; TEST(misc, testRpmCalculator) { EngineTestHelper eth(FORD_INLINE_6_1995); + setTable(config->injectionPhase, -180.0f); + engine->tdcMarkEnabled = false; // These tests were written when the default target AFR was 14.0, so replicate that @@ -606,6 +608,7 @@ void doTestFuelSchedulerBug299smallAndMedium(int startUpDelayMs) { printf("*************************************************** testFuelSchedulerBug299 small to medium\r\n"); EngineTestHelper eth(TEST_ENGINE); + setTable(config->injectionPhase, -180.0f); engineConfiguration->isFasterEngineSpinUpEnabled = false; engine->tdcMarkEnabled = false; eth.moveTimeForwardMs(startUpDelayMs); // nice to know that same test works the same with different anount of idle time on start @@ -853,6 +856,7 @@ TEST(big, testFuelSchedulerBug299smallAndMedium) { TEST(big, testTwoWireBatch) { EngineTestHelper eth(TEST_ENGINE); + setTable(config->injectionPhase, -180.0f); setupSimpleTestEngineWithMafAndTT_ONE_trigger(ð); EXPECT_CALL(*eth.mockAirmass, getAirmass(_)) .WillRepeatedly(Return(AirmassResult{0.1008f, 50.0f})); @@ -881,6 +885,7 @@ TEST(big, testTwoWireBatch) { TEST(big, testSequential) { EngineTestHelper eth(TEST_ENGINE); + setTable(config->injectionPhase, -180.0f); EXPECT_CALL(*eth.mockAirmass, getAirmass(_)) .WillRepeatedly(Return(AirmassResult{0.1008f, 50.0f})); @@ -908,6 +913,7 @@ TEST(big, testSequential) { TEST(big, testFuelSchedulerBug299smallAndLarge) { EngineTestHelper eth(TEST_ENGINE); + setTable(config->injectionPhase, -180.0f); engineConfiguration->isFasterEngineSpinUpEnabled = false; engine->tdcMarkEnabled = false; setTestBug299(ð);