diff --git a/firmware/config/engines/benelli.cpp b/firmware/config/engines/benelli.cpp new file mode 100644 index 0000000000..baebfdcd4e --- /dev/null +++ b/firmware/config/engines/benelli.cpp @@ -0,0 +1,137 @@ +/* + * @file benelli.cpp + * + * set engine_type 33 + * + * @date Feb 13, 2024 + * @author Michael Holzer, (c) 2024 +*/ + +#include "pch.h" +#include "table_helper.h" +#include "electronic_throttle.h" +#include "mre_meta.h" +#include "defaults.h" + +#include "benelli.h" +#include "custom_engine.h" + +void setMreConfiguration() { + engineConfiguration->afr.hwChannel = MRE_IN_ANALOG_VOLT_10; + + engineConfiguration->tps1_2AdcChannel = MRE_IN_ANALOG_VOLT_9; + + + + // EFI_ADC_7: "31 - AN volt 3" - PA7 + // 36 - AN volt 8 + setPPSInputs(MRE_IN_ANALOG_VOLT_3, MRE_IN_ANALOG_VOLT_8); + + // "26 - AN volt 2" + engineConfiguration->highPressureFuel.hwChannel = MRE_IN_ANALOG_VOLT_2; + + + // "19 - AN volt 4" + engineConfiguration->lowPressureFuel.hwChannel = EFI_ADC_12; + + engineConfiguration->isSdCardEnabled = false; + + engineConfiguration->mc33816spiDevice = SPI_DEVICE_3; + // RED + engineConfiguration->spi3mosiPin = Gpio::C12; + // YELLOW + engineConfiguration->spi3misoPin = Gpio::C11; + // BROWN + engineConfiguration->spi3sckPin = Gpio::C10; + engineConfiguration->sdCardCsPin = Gpio::Unassigned; + engineConfiguration->is_enabled_spi_3 = true; + + + // J8 orange + engineConfiguration->mc33816_cs = Gpio::B8; + // J8 Grey + engineConfiguration->mc33816_rstb = Gpio::A15; + // J8 Dark BLUE + engineConfiguration->mc33816_driven = Gpio::B9; + // J9 violet + engineConfiguration->mc33816_flag0 = Gpio::C13; + + // J10 Dark BLUE + engineConfiguration->injectionPins[0] = Gpio::E6; + // J11 green + engineConfiguration->injectionPins[1] = Gpio::E5; + // J18 grey + engineConfiguration->injectionPins[2] = Gpio::B7; + // J6 white + engineConfiguration->injectionPins[3] = Gpio::E0; + + + gppwm_channel *lowPressureFuelPumpControl = &engineConfiguration->gppwm[1]; + + // "42 - Injector 4", somehow GP4 did not work? not enough current? not happy with diode? + lowPressureFuelPumpControl->pin = MRE_INJ_4; + + + gppwm_channel *coolantControl = &engineConfiguration->gppwm[0]; + + coolantControl->pin = MRE_LS_2; + // "7 - Lowside 1" + //engineConfiguration->hpfpValvePin = MRE_LS_1; + engineConfiguration->hpfpValvePin = Gpio::B10; // AUX J13 + + +#endif /* HW_MICRO_RUSEFI */ +} + +void set_Mre_Benelli_Tre() { + setMreConfiguration(); + + setWholeTimingTable_d(20); + // set cranking_timing_angle 10 + engineConfiguration->crankingTimingAngle = 10; // ToDo:verify + + // set global_trigger_offset_angle 93 + engineConfiguration->globalTriggerAngleOffset = 93; // ToDo:verify + + + setCrankOperationMode(); + engineConfiguration->trigger.type = trigger_type_e::TT_Benelli_Tre; + + engineConfiguration->mafAdcChannel = EFI_ADC_1; // ToDo:verify + + + //Base engine setting + engineConfiguration->cylindersCount = 3; + engineConfiguration->firingOrder = FO_1_2_3; // ToDo:verify + engineConfiguration->injector.flow = 320; // 30lb/h // ToDo:verify + // set algorithm 3 + setAlgorithm(LM_SPEED_DENSITY); + engineConfiguration->map.sensor.type = MT_GM_3_BAR; // ToDo:verify + + engineConfiguration->ignitionMode = IM_INDIVIDUAL_COILS; + + engineConfiguration->ignitionPins[0] = Gpio::E14; // ToDo:verify + engineConfiguration->ignitionPins[1] = Gpio::Unassigned; + engineConfiguration->ignitionPins[2] = Gpio::Unassigned; + engineConfiguration->ignitionPins[3] = Gpio::Unassigned; + + engineConfiguration->wastegatePositionSensor = EFI_ADC_4; // PA4 // ToDo:verify + + float mapRange = 110; // ToDo:verify + + setEgoSensor(ES_PLX); // ToDo:verify + setFuelTablesLoadBin(20, mapRange); // ToDo:verify + setLinearCurve(config->ignitionLoadBins, 20, mapRange); + + engineConfiguration->isSdCardEnabled = false; + engineConfiguration->tpsMin = 0; + engineConfiguration->tpsMax = 100; +} + +void set_Benelli_3_cyl_900ccm() { + engineConfiguration->displacement = 0.9; +} + +void set_Benelli_3_cyl_1130ccm() { + engineConfiguration->displacement = 1.13; +} diff --git a/firmware/config/engines/benelli.h b/firmware/config/engines/benelli.h new file mode 100644 index 0000000000..96b59a583d --- /dev/null +++ b/firmware/config/engines/benelli.h @@ -0,0 +1,15 @@ +/* + * @file benelli.h + * + * @date Feb 13, 2024 + * @author Michael Holzer, (c) 2024 + */ + +#pragma once + +#include "engine_configuration.h" + +void set_Mre_Benelli_Tre(); + +void set_Benelli_3_cyl_900ccm(); +void set_Benelli_3_cyl_1130ccm(); diff --git a/firmware/controllers/algo/engine_types.h b/firmware/controllers/algo/engine_types.h index 524c8d1302..3096e346d1 100644 --- a/firmware/controllers/algo/engine_types.h +++ b/firmware/controllers/algo/engine_types.h @@ -83,6 +83,8 @@ enum class engine_type_e : uint32_t { VW_ABA = 32, + MRE_BENELLI_3_CYL = 33, + HELLEN_NA6 = 34, CAMARO_4 = 35, @@ -207,7 +209,6 @@ enum class engine_type_e : uint32_t { ET_UNUSED_17 = 17, ET_UNUSED_13 = 13, ET_UNUSED_15 = 15, - ET_UNUSED_33 = 33, ET_UNUSED_43 = 43, ET_UNUSED_57 = 57, ET_UNUSED_61 = 61, diff --git a/java_console/autotest/src/main/java/com/rusefi/f4discovery/HighRevTest.java b/java_console/autotest/src/main/java/com/rusefi/f4discovery/HighRevTest.java index fc30ec0b66..4311d36da4 100644 --- a/java_console/autotest/src/main/java/com/rusefi/f4discovery/HighRevTest.java +++ b/java_console/autotest/src/main/java/com/rusefi/f4discovery/HighRevTest.java @@ -29,4 +29,15 @@ public class HighRevTest extends RusefiTestBase { // tests bug 1873 EcuTestHelper.assertRpmDoesNotJump(60, 5, 110, FAIL, ecu.commandQueue); } + @Test + public void testBenelliR3() { + ecu.setEngineType(engine_type_e.MRE_BENELLI_3_CYL); + // set idle RPM + ecu.changeRpm(1500); + // first let's get to RPM near limit + EcuTestHelper.assertRpmDoesNotJump(11000, 5, 40, FAIL, ecu.commandQueue); + + // tests RpmLimit + EcuTestHelper.assertRpmDoesNotJump(12000, 5, 110, FAIL, ecu.commandQueue); + } }