From b0c3357cba5a3a08ab481dd9cb76f1ab95114ed4 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Sat, 24 Jun 2023 20:14:37 -0700 Subject: [PATCH] #23 and fix https://github.com/rusefi/rusefi/issues/5353 --- firmware/CHANGELOG.md | 1 + firmware/config/engines/chevrolet_camaro_4.cpp | 2 +- firmware/config/engines/dodge_neon.cpp | 4 ---- firmware/config/engines/ford_1995_inline_6.cpp | 2 -- firmware/config/engines/gm_ls_4.cpp | 4 ---- firmware/config/engines/mazda_miata_1_6.cpp | 3 --- firmware/config/engines/mazda_miata_vvt.cpp | 2 -- firmware/config/engines/toyota_jzs147.cpp | 1 - firmware/controllers/engine_cycle/fuel_schedule.cpp | 13 ++----------- firmware/controllers/settings.cpp | 3 --- firmware/integration/rusefi_config.txt | 2 +- firmware/tunerstudio/rusefi.input | 1 - .../injection_mode_transition.cpp | 2 -- unit_tests/tests/trigger/test_trigger_decoder.cpp | 1 - 14 files changed, 5 insertions(+), 36 deletions(-) diff --git a/firmware/CHANGELOG.md b/firmware/CHANGELOG.md index 75c36bf6d4..7d5d5f61ae 100644 --- a/firmware/CHANGELOG.md +++ b/firmware/CHANGELOG.md @@ -36,6 +36,7 @@ Release template (copy/paste this for new release): - Improved bench test resolution (more usable for testing injectors, dwell, etc) - Maximum knock retard table displays correct Y axis values in TunerStudio - Make errors about fuel pressure sensors less aggressive #111 #117 + - Always operate in "two wire" mode for batch fuel, fixing batch firing order #23 ## May 2023 Release diff --git a/firmware/config/engines/chevrolet_camaro_4.cpp b/firmware/config/engines/chevrolet_camaro_4.cpp index 893cafb461..7ab2ccb359 100644 --- a/firmware/config/engines/chevrolet_camaro_4.cpp +++ b/firmware/config/engines/chevrolet_camaro_4.cpp @@ -28,7 +28,7 @@ void setCamaro4() { engineConfiguration->triggerInputPins[1] = Gpio::C6; engineConfiguration->injectionMode = IM_BATCH; - engineConfiguration->twoWireBatchInjection = true; + // set ignition_mode 2 engineConfiguration->ignitionMode = IM_WASTED_SPARK; diff --git a/firmware/config/engines/dodge_neon.cpp b/firmware/config/engines/dodge_neon.cpp index ce29899846..6930e9199b 100644 --- a/firmware/config/engines/dodge_neon.cpp +++ b/firmware/config/engines/dodge_neon.cpp @@ -46,10 +46,6 @@ void setDodgeNeon1995EngineConfiguration() { // set injection_mode 1 engineConfiguration->injectionMode = IM_SEQUENTIAL; - // this is needed for injector lag auto-tune research if switching to batch - // enable two_wire_batch_injection - engineConfiguration->twoWireBatchInjection = true; - // set ignition_mode 2 engineConfiguration->ignitionMode = IM_WASTED_SPARK; // set_firing_order 2 diff --git a/firmware/config/engines/ford_1995_inline_6.cpp b/firmware/config/engines/ford_1995_inline_6.cpp index ef04626ec9..024314446b 100644 --- a/firmware/config/engines/ford_1995_inline_6.cpp +++ b/firmware/config/engines/ford_1995_inline_6.cpp @@ -27,8 +27,6 @@ void setFordInline6() { engineConfiguration->firingOrder = FO_1_5_3_6_2_4; engineConfiguration->crankingInjectionMode = IM_SIMULTANEOUS; engineConfiguration->injectionMode = IM_BATCH; - engineConfiguration->twoWireBatchInjection = true; - /** * 0.5ms dwell time just to be sure it would fit within camshaft revolution, dwell is not controlled by us anyway diff --git a/firmware/config/engines/gm_ls_4.cpp b/firmware/config/engines/gm_ls_4.cpp index 54173dc542..d058c4f363 100644 --- a/firmware/config/engines/gm_ls_4.cpp +++ b/firmware/config/engines/gm_ls_4.cpp @@ -11,10 +11,6 @@ void setGmLs4() { engineConfiguration->globalTriggerAngleOffset = 86; - // would not hurt just in case no cam - engineConfiguration->twoWireBatchInjection = true; - - engineConfiguration->fuelReferencePressure = 400; // 400 kPa, 58 psi engineConfiguration->injectorCompensationMode = ICM_FixedRailPressure; engineConfiguration->injector.flow = 440; diff --git a/firmware/config/engines/mazda_miata_1_6.cpp b/firmware/config/engines/mazda_miata_1_6.cpp index 1dab3b5c37..cca5a1846b 100644 --- a/firmware/config/engines/mazda_miata_1_6.cpp +++ b/firmware/config/engines/mazda_miata_1_6.cpp @@ -264,9 +264,6 @@ void setMiataNA6_MAP_MRE() { engineConfiguration->fuelPumpPin = Gpio::Unassigned; - - engineConfiguration->twoWireBatchInjection = true; - engineConfiguration->useIacTableForCoasting = true; engineConfiguration->idlePidDeactivationTpsThreshold = 90; diff --git a/firmware/config/engines/mazda_miata_vvt.cpp b/firmware/config/engines/mazda_miata_vvt.cpp index ffa407c5f8..23553d1525 100644 --- a/firmware/config/engines/mazda_miata_vvt.cpp +++ b/firmware/config/engines/mazda_miata_vvt.cpp @@ -416,8 +416,6 @@ void setMazdaMiata2003EngineConfiguration() { // engineConfiguration->is_enabled_spi_1 = true; - engineConfiguration->twoWireBatchInjection = true; // this is needed for #492 testing - engineConfiguration->alternatorControlPin = Gpio::E10; engineConfiguration->alternatorControlPinMode = OM_OPENDRAIN; diff --git a/firmware/config/engines/toyota_jzs147.cpp b/firmware/config/engines/toyota_jzs147.cpp index f2df7cb6fd..ca62e53544 100644 --- a/firmware/config/engines/toyota_jzs147.cpp +++ b/firmware/config/engines/toyota_jzs147.cpp @@ -86,7 +86,6 @@ void setToyota_2jz_vics() { engineConfiguration->ignitionMode = IM_WASTED_SPARK; // just for now engineConfiguration->injectionMode = IM_BATCH; // just for now - engineConfiguration->twoWireBatchInjection = true; strcpy(engineConfiguration->engineMake, ENGINE_MAKE_TOYOTA); strcpy(engineConfiguration->engineCode, "2JZ"); diff --git a/firmware/controllers/engine_cycle/fuel_schedule.cpp b/firmware/controllers/engine_cycle/fuel_schedule.cpp index 8c89abc0a6..cb984388fe 100644 --- a/firmware/controllers/engine_cycle/fuel_schedule.cpp +++ b/firmware/controllers/engine_cycle/fuel_schedule.cpp @@ -127,22 +127,13 @@ bool FuelSchedule::addFuelEventsForCylinder(int i) { injection_mode_e mode = getCurrentInjectionMode(); engine->outputChannels.currentInjectionMode = static_cast(mode); - // We need two outputs if: - // - we are running batch fuel, and have "use two wire batch" enabled - // - running mode is sequential, but cranking mode is batch, so we should run two wire batch while cranking - // (if we didn't, only half of injectors would fire while cranking) - bool isTwoWireBatch = engineConfiguration->twoWireBatchInjection || (engineConfiguration->injectionMode == IM_SEQUENTIAL); - int injectorIndex; if (mode == IM_SIMULTANEOUS || mode == IM_SINGLE_POINT) { // These modes only have one injector injectorIndex = 0; - } else if (mode == IM_SEQUENTIAL || (mode == IM_BATCH && isTwoWireBatch)) { + } else if (mode == IM_SEQUENTIAL || mode == IM_BATCH) { // Map order index -> cylinder index (firing order) injectorIndex = getCylinderId(i) - 1; - } else if (mode == IM_BATCH) { - // Loop over the first half of the firing order twice - injectorIndex = i % (engineConfiguration->cylindersCount / 2); } else { firmwareError(ObdCode::CUSTOM_OBD_UNEXPECTED_INJECTION_MODE, "Unexpected injection mode %d", mode); injectorIndex = 0; @@ -150,7 +141,7 @@ bool FuelSchedule::addFuelEventsForCylinder(int i) { InjectorOutputPin *secondOutput; - if (mode == IM_BATCH && isTwoWireBatch) { + if (mode == IM_BATCH) { /** * also fire the 2nd half of the injectors so that we can implement a batch mode on individual wires */ diff --git a/firmware/controllers/settings.cpp b/firmware/controllers/settings.cpp index ccd64ad661..17c6e822a3 100644 --- a/firmware/controllers/settings.cpp +++ b/firmware/controllers/settings.cpp @@ -389,9 +389,6 @@ static void enableOrDisable(const char *param, bool isEnabled) { #endif // EFI_PROD_CODE } else if (strEqualCaseInsensitive(param, "stepperidle")) { engineConfiguration->useStepperIdle = isEnabled; - } else if (strEqualCaseInsensitive(param, "two_wire_batch_injection")) { - engineConfiguration->twoWireBatchInjection = isEnabled; - incrementGlobalConfigurationVersion(); } else if (strEqualCaseInsensitive(param, "boardUseTempPullUp")) { engineConfiguration->boardUseTempPullUp = isEnabled; incrementGlobalConfigurationVersion(); diff --git a/firmware/integration/rusefi_config.txt b/firmware/integration/rusefi_config.txt index 16663238b2..d29e98b988 100644 --- a/firmware/integration/rusefi_config.txt +++ b/firmware/integration/rusefi_config.txt @@ -989,7 +989,7 @@ bit skippedWheelOnCam,"On camshaft","On crankshaft";Where is your primary skippe bit useSeparateVeForIdle;This activates a separate fuel table for Idle, this allows fine tuning of the idle fuelling. bit verboseTriggerSynchDetails;Verbose info in console below engineSnifferRpmThreshold\nenable trigger_details bit isManualSpinningMode;Usually if we have no trigger events that means engine is stopped\nUnless we are troubleshooting and spinning the engine by hand - this case a longer\ndelay is needed - bit twoWireBatchInjection;This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection + bit unused1200b12 bit neverInstantRpm bit unused1200b14 bit useFixedBaroCorrFromMap diff --git a/firmware/tunerstudio/rusefi.input b/firmware/tunerstudio/rusefi.input index 44f8daca03..e11850136e 100644 --- a/firmware/tunerstudio/rusefi.input +++ b/firmware/tunerstudio/rusefi.input @@ -2158,7 +2158,6 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@@@ts_command_e_TS_ field = "Enabled", isInjectionEnabled field = "Mode", injectionMode, {isInjectionEnabled == 1} field = "#Batch injection with individual wiring" - field = "Individually wired Batch Fuel", twoWireBatchInjection, {isInjectionEnabled == 1 && injectionMode == @@injection_mode_e_IM_BATCH@@ } field = "Override VE table load axis", veOverrideMode, { isInjectionEnabled } field = "Override AFR table load axis", afrOverrideMode, { isInjectionEnabled } field = "Injection phase control mode", injectionTimingMode, { isInjectionEnabled } diff --git a/unit_tests/tests/ignition_injection/injection_mode_transition.cpp b/unit_tests/tests/ignition_injection/injection_mode_transition.cpp index c4b19ef995..94a2e03d4f 100644 --- a/unit_tests/tests/ignition_injection/injection_mode_transition.cpp +++ b/unit_tests/tests/ignition_injection/injection_mode_transition.cpp @@ -56,8 +56,6 @@ TEST(fuelControl, transitionIssue1592) { // Test the transition from batch cranking to sequential running engineConfiguration->crankingInjectionMode = IM_BATCH; - engineConfiguration->twoWireBatchInjection = true; - // First sync point will schedule cranking pulse since we're in "faster spin up" mode doRevolution(eth, 240); diff --git a/unit_tests/tests/trigger/test_trigger_decoder.cpp b/unit_tests/tests/trigger/test_trigger_decoder.cpp index dbf2187ab7..2a7a56766f 100644 --- a/unit_tests/tests/trigger/test_trigger_decoder.cpp +++ b/unit_tests/tests/trigger/test_trigger_decoder.cpp @@ -795,7 +795,6 @@ TEST(big, testTwoWireBatch) { .WillRepeatedly(Return(AirmassResult{0.1008f, 50.0f})); engineConfiguration->injectionMode = IM_BATCH; - engineConfiguration->twoWireBatchInjection = true; eth.fireTriggerEventsWithDuration(20); // still no RPM since need to cycles measure cycle duration