From c38eb6d38f1d638ea861166aada27bab09377822 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Fri, 23 Oct 2020 12:46:16 -0700 Subject: [PATCH] add Injector pressure sensor (#1898) * add sensor type * add config * initialize injector pressure * add UI --- firmware/controllers/algo/rusefi_enums.h | 5 +++++ firmware/controllers/sensors/sensor.cpp | 1 + firmware/controllers/sensors/sensor_type.h | 1 + firmware/init/sensor/init_fluid_pressure.cpp | 13 +++++++++++++ firmware/integration/rusefi_config.txt | 6 +++++- firmware/tunerstudio/rusefi.input | 1 + 6 files changed, 26 insertions(+), 1 deletion(-) diff --git a/firmware/controllers/algo/rusefi_enums.h b/firmware/controllers/algo/rusefi_enums.h index aa0b7560a6..da54ff3fad 100644 --- a/firmware/controllers/algo/rusefi_enums.h +++ b/firmware/controllers/algo/rusefi_enums.h @@ -1011,3 +1011,8 @@ typedef enum __attribute__ ((__packed__)) { ETB_IdleValve = 3, ETB_Wastegate = 4, } etb_function_e; + +typedef enum __attribute__ ((__packed__)) { + IPT_Low = 0, + IPT_High = 1, +} injector_pressure_type_e; diff --git a/firmware/controllers/sensors/sensor.cpp b/firmware/controllers/sensors/sensor.cpp index e692a97e89..66fd00deca 100644 --- a/firmware/controllers/sensors/sensor.cpp +++ b/firmware/controllers/sensors/sensor.cpp @@ -60,6 +60,7 @@ static const char* s_sensorNames[] = { "Fuel Pressure (LP)", "Fuel Pressure (HP)", + "Fuel Pressure (injector)", "TPS 1", "TPS 1 Primary", diff --git a/firmware/controllers/sensors/sensor_type.h b/firmware/controllers/sensors/sensor_type.h index 3a695e8a58..84d092f551 100644 --- a/firmware/controllers/sensors/sensor_type.h +++ b/firmware/controllers/sensors/sensor_type.h @@ -28,6 +28,7 @@ enum class SensorType : unsigned char { FuelPressureLow, FuelPressureHigh, + FuelPressureInjector, // This is the "resolved" position, potentially composited out of the following two Tps1, diff --git a/firmware/init/sensor/init_fluid_pressure.cpp b/firmware/init/sensor/init_fluid_pressure.cpp index d9f88921db..d5c84da518 100644 --- a/firmware/init/sensor/init_fluid_pressure.cpp +++ b/firmware/init/sensor/init_fluid_pressure.cpp @@ -4,6 +4,7 @@ #include "error_handling.h" #include "global.h" #include "functional_sensor.h" +#include "proxy_sensor.h" #include "linear_func.h" EXTERN_ENGINE; @@ -17,6 +18,8 @@ static FunctionalSensor fuelPressureSensorLow(SensorType::FuelPressureLow, /* ti static LinearFunc fuelPressureFuncHigh; static FunctionalSensor fuelPressureSensorHigh(SensorType::FuelPressureHigh, /* timeout = */ MS2NT(50)); +static ProxySensor injectorPressure(SensorType::FuelPressureInjector); + static void configureFluidPressure(LinearFunc& func, const linear_sensor_s& cfg) { float val1 = cfg.value1; float val2 = cfg.value2; @@ -51,6 +54,16 @@ void initOilPressure(DECLARE_CONFIG_PARAMETER_SIGNATURE) { initFluidPressure(oilpSensorFunc, oilpSensor, CONFIG(oilPressure), 10); initFluidPressure(fuelPressureFuncLow, fuelPressureSensorLow, CONFIG(lowPressureFuel), 10); initFluidPressure(fuelPressureFuncHigh, fuelPressureSensorHigh, CONFIG(highPressureFuel), 100); + + injectorPressure.setProxiedSensor( + CONFIG(injectorPressureType) == IPT_High + ? SensorType::FuelPressureHigh + : SensorType::FuelPressureLow + ); + + if (!injectorPressure.Register()) { + firmwareError(OBD_PCM_Processor_Fault, "Duplicate sensor registration"); + } } void reconfigureOilPressure(DECLARE_CONFIG_PARAMETER_SIGNATURE) { diff --git a/firmware/integration/rusefi_config.txt b/firmware/integration/rusefi_config.txt index 21ee4cc7b1..260dab3d61 100644 --- a/firmware/integration/rusefi_config.txt +++ b/firmware/integration/rusefi_config.txt @@ -1196,7 +1196,11 @@ int16_t tps2Max;Full throttle#2. tpsMax value as 10 bit ADC value. Not Voltage!\ pin_output_mode_e starterControlPinMode; adc_channel_e wastegatePositionSensor; afr_override_e ignOverrideMode;+Override the Y axis (load) value used for the ignition table.\nAdvanced users only: If you aren't sure you need this, you probably don't need this. - uint8_t[3] unused_former_warmup_target_afr;;"units", 1, 0, -20, 100, 0 + + custom injector_pressure_type_e 1 bits, U08, @OFFSET@, [0:0], "Low", "High" + injector_pressure_type_e injectorPressureType;+Select which fuel pressure sensor measures the pressure of the fuel at your injectors. + + uint8_t[2] unused_former_warmup_target_afr;;"units", 1, 0, -20, 100, 0 float boostCutPressure;+MAP value above which fuel is cut in case of overboost.\n0 to disable overboost cut.;"kPa (absolute)", 1, 0, 0, 500, 0 diff --git a/firmware/tunerstudio/rusefi.input b/firmware/tunerstudio/rusefi.input index 45f171e9d5..5edd5d084f 100644 --- a/firmware/tunerstudio/rusefi.input +++ b/firmware/tunerstudio/rusefi.input @@ -1712,6 +1712,7 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@\x00\x31\x00\x00" ; Engine->Injection Settings dialog = injChars, "Injector Settings", yAxis field = "Injector Flow", injector_flow, {isInjectionEnabled == 1} + field = "Fuel rail pressure sensor", injectorPressureType, { isInjectionEnabled && (highPressureFuel_hwChannel || lowPressureFuel_hwChannel) } dialog = fuelParams, "Fuel characteristics", yAxis field = "Stoichiometric ratio", stoichRatioPrimary, {isInjectionEnabled == 1}