diff --git a/firmware/controllers/actuators/idle_thread.cpp b/firmware/controllers/actuators/idle_thread.cpp index e1c1e13f55..057c1c73ce 100644 --- a/firmware/controllers/actuators/idle_thread.cpp +++ b/firmware/controllers/actuators/idle_thread.cpp @@ -320,7 +320,7 @@ private: baseIdlePosition = iacPosition; idleState = BLIP; } else if (!isRunning) { - // during cranking it's always manual mode, PID would make no sence during cranking + // during cranking it's always manual mode, PID would make no sense during cranking iacPosition = cltCorrection * engineConfiguration->crankingIACposition; // save cranking position & cycles counter for taper transition lastCrankingIacPosition = iacPosition; diff --git a/firmware/controllers/algo/advance_map.cpp b/firmware/controllers/algo/advance_map.cpp index e284bbc42a..e0b14d1c61 100644 --- a/firmware/controllers/algo/advance_map.cpp +++ b/firmware/controllers/algo/advance_map.cpp @@ -225,7 +225,7 @@ angle_t getAdvance(int rpm, float engineLoad DECLARE_ENGINE_PARAMETER_SUFFIX) { } void setDefaultIatTimingCorrection(DECLARE_ENGINE_PARAMETER_SIGNATURE) { - setLinearCurve(config->ignitionIatCorrLoadBins, IGN_LOAD_COUNT, -40, 110, 1); + setLinearCurve(config->ignitionIatCorrLoadBins, IGN_LOAD_COUNT, /*from*/CLT_CURVE_RANGE_FROM, 110, 1); memcpy(config->ignitionIatCorrRpmBins, iatTimingRpmBins, sizeof(iatTimingRpmBins)); copyTimingTable(defaultIatTiming, config->ignitionIatCorrTable); } diff --git a/firmware/controllers/algo/engine_configuration.cpp b/firmware/controllers/algo/engine_configuration.cpp index a1f7c05665..9ab4dba761 100644 --- a/firmware/controllers/algo/engine_configuration.cpp +++ b/firmware/controllers/algo/engine_configuration.cpp @@ -569,9 +569,12 @@ static void setDefaultFuelCutParameters(DECLARE_ENGINE_PARAMETER_SIGNATURE) { } static void setDefaultCrankingSettings(DECLARE_ENGINE_PARAMETER_SIGNATURE) { - setLinearCurve(engineConfiguration->crankingTpsCoef, CRANKING_CURVE_SIZE, 1, 1, 1); + setLinearCurve(engineConfiguration->crankingTpsCoef, CRANKING_CURVE_SIZE, /*from*/1, /*to*/1, 1); setLinearCurve(engineConfiguration->crankingTpsBins, CRANKING_CURVE_SIZE, 0, 100, 1); + setLinearCurve(config->cltCrankingCorrBins, CLT_CRANKING_CURVE_SIZE, CLT_CURVE_RANGE_FROM, 100, 1); + setLinearCurve(config->cltCrankingCorr, CLT_CRANKING_CURVE_SIZE, 100, 100, 1); + config->crankingFuelCoef[0] = 28; // base cranking fuel adjustment coefficient config->crankingFuelBins[0] = -20; // temperature in C config->crankingFuelCoef[1] = 22; @@ -626,7 +629,7 @@ static void setDefaultCrankingSettings(DECLARE_ENGINE_PARAMETER_SIGNATURE) { * see also setTargetRpmCurve() */ static void setDefaultIdleSpeedTarget(DECLARE_ENGINE_PARAMETER_SIGNATURE) { - setLinearCurve(engineConfiguration->cltIdleRpmBins, CLT_CURVE_SIZE, -40, 140, 10); + setLinearCurve(engineConfiguration->cltIdleRpmBins, CLT_CURVE_SIZE, CLT_CURVE_RANGE_FROM, 140, 10); setCurveValue(engineConfiguration->cltIdleRpmBins, engineConfiguration->cltIdleRpm, CLT_CURVE_SIZE, -30, 1350); setCurveValue(engineConfiguration->cltIdleRpmBins, engineConfiguration->cltIdleRpm, CLT_CURVE_SIZE, -20, 1300); @@ -669,7 +672,7 @@ static void setCanDefaults(DECLARE_ENGINE_PARAMETER_SIGNATURE) { * see also setDefaultIdleSpeedTarget() */ void setTargetRpmCurve(int rpm DECLARE_CONFIG_PARAMETER_SUFFIX) { - setLinearCurve(engineConfiguration->cltIdleRpmBins, CLT_CURVE_SIZE, -40, 90, 10); + setLinearCurve(engineConfiguration->cltIdleRpmBins, CLT_CURVE_SIZE, CLT_CURVE_RANGE_FROM, 90, 10); setLinearCurve(engineConfiguration->cltIdleRpm, CLT_CURVE_SIZE, rpm, rpm, 10); } @@ -740,7 +743,7 @@ void setDefaultConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE) { engineConfiguration->alternatorControl.minValue = 10; engineConfiguration->alternatorControl.maxValue = 90; - setLinearCurve(engineConfiguration->cltTimingBins, CLT_TIMING_CURVE_SIZE, -40, 120, 1); + setLinearCurve(engineConfiguration->cltTimingBins, CLT_TIMING_CURVE_SIZE, CLT_CURVE_RANGE_FROM, 120, 1); setLinearCurve(engineConfiguration->cltTimingExtra, CLT_TIMING_CURVE_SIZE, 0, 0, 1); setLinearCurve(engineConfiguration->fsioCurve1Bins, FSIO_CURVE_16, 0, 100, 1); diff --git a/firmware/tunerstudio/rusefi.ini b/firmware/tunerstudio/rusefi.ini index 7445306423..0e1d58a7a6 100644 --- a/firmware/tunerstudio/rusefi.ini +++ b/firmware/tunerstudio/rusefi.ini @@ -72,7 +72,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Sat May 11 13:38:32 EDT 2019 +; this section was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Sat May 25 13:35:29 EDT 2019 pageSize = 20000 page = 1 @@ -1430,14 +1430,14 @@ fileVersion = { 20171101 } yBins = iacCoasting gauge = idleAirValvePositionGauge - curve = cltCrankingCurve, "Cranking IAC multiplier" + curve = cltCrankingCurve, "Cranking Idle Air multiplier" columnLabel = "Coolant", "Multiplier" #if CELSIUS xAxis = -40, 120, 10 #else xAxis = -40, 250, 10 #endif - yAxis = 0, 50, 10 + yAxis = 0, 300, 10 xBins = cltCrankingCorrBins, coolant yBins = cltCrankingCorr gauge = CLTGauge @@ -3086,7 +3086,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = crankingIAC, "IAC" field = "Cranking IAC position", crankingIACposition field = "After cranking IAC taper duration", afterCrankingIACtaperDuration - field = "Override IAC Multiplier for Cranking", overrideCrankingIacSetting + field = "Override Idle Air Multiplier for Cranking", overrideCrankingIacSetting dialog = crankingIgnition, "Ignition" field = "Advance", crankingTimingAngle, {useSeparateAdvanceForCranking == 0} diff --git a/firmware/tunerstudio/rusefi.input b/firmware/tunerstudio/rusefi.input index 5db01a4079..d1767f472e 100644 --- a/firmware/tunerstudio/rusefi.input +++ b/firmware/tunerstudio/rusefi.input @@ -499,14 +499,14 @@ fileVersion = { 20171101 } yBins = iacCoasting gauge = idleAirValvePositionGauge - curve = cltCrankingCurve, "Cranking IAC multiplier" + curve = cltCrankingCurve, "Cranking Idle Air multiplier" columnLabel = "Coolant", "Multiplier" #if CELSIUS xAxis = -40, 120, 10 #else xAxis = -40, 250, 10 #endif - yAxis = 0, 50, 10 + yAxis = 0, 300, 10 xBins = cltCrankingCorrBins, coolant yBins = cltCrankingCorr gauge = CLTGauge @@ -2155,7 +2155,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = crankingIAC, "IAC" field = "Cranking IAC position", crankingIACposition field = "After cranking IAC taper duration", afterCrankingIACtaperDuration - field = "Override IAC Multiplier for Cranking", overrideCrankingIacSetting + field = "Override Idle Air Multiplier for Cranking", overrideCrankingIacSetting dialog = crankingIgnition, "Ignition" field = "Advance", crankingTimingAngle, {useSeparateAdvanceForCranking == 0} diff --git a/firmware/util/containers/table_helper.h b/firmware/util/containers/table_helper.h index edd2a1b32e..ff5f369da6 100644 --- a/firmware/util/containers/table_helper.h +++ b/firmware/util/containers/table_helper.h @@ -12,6 +12,9 @@ #include "interpolation.h" #include "efilib.h" +// popular left edge of CLT-based correction curvers +#define CLT_CURVE_RANGE_FROM -40 + /** * this helper class brings together 3D table with two 2D axis curves */ diff --git a/firmware/util/math/interpolation.cpp b/firmware/util/math/interpolation.cpp index d99a805657..c490527513 100644 --- a/firmware/util/math/interpolation.cpp +++ b/firmware/util/math/interpolation.cpp @@ -237,6 +237,8 @@ int findIndex(const float array[], int size, float value) { /** * @brief One-dimensional table lookup with linear interpolation + * + * @see setLinearCurve() */ float interpolate2d(const char *msg, float value, const float bin[], const float values[], int size) { if (isnan(value)) {