diff --git a/firmware/controllers/algo/engine_configuration.cpp b/firmware/controllers/algo/engine_configuration.cpp index 7ceb4d3e48..3c68f6e682 100644 --- a/firmware/controllers/algo/engine_configuration.cpp +++ b/firmware/controllers/algo/engine_configuration.cpp @@ -300,6 +300,8 @@ void setDefaultConfiguration(DECLARE_ENGINE_PARAMETER_F) { boardConfiguration->mafSensorType = Bosch0280218037; setBosch0280218037(config); + boardConfiguration->startConsoleInBinaryMode = true; + engineConfiguration->injector.lag = 0.0; setBosch02880155868(PASS_ENGINE_PARAMETER_F); @@ -314,32 +316,32 @@ void setDefaultConfiguration(DECLARE_ENGINE_PARAMETER_F) { engineConfiguration->tachPulseDuractionMs = 4; engineConfiguration->tachPulseTriggerIndex = 4; - setTableValue(config->cltIdleCorrBins, config->cltIdleCorr, CLT_CURVE_SIZE, -40, 1.5); - setTableValue(config->cltIdleCorrBins, config->cltIdleCorr, CLT_CURVE_SIZE, -30, 1.5); - setTableValue(config->cltIdleCorrBins, config->cltIdleCorr, CLT_CURVE_SIZE, -20, 1.42); - setTableValue(config->cltIdleCorrBins, config->cltIdleCorr, CLT_CURVE_SIZE, -10, 1.36); - setTableValue(config->cltIdleCorrBins, config->cltIdleCorr, CLT_CURVE_SIZE, 0, 1.28); - setTableValue(config->cltIdleCorrBins, config->cltIdleCorr, CLT_CURVE_SIZE, 10, 1.19); - setTableValue(config->cltIdleCorrBins, config->cltIdleCorr, CLT_CURVE_SIZE, 20, 1.12); - setTableValue(config->cltIdleCorrBins, config->cltIdleCorr, CLT_CURVE_SIZE, 30, 1.10); - setTableValue(config->cltIdleCorrBins, config->cltIdleCorr, CLT_CURVE_SIZE, 40, 1.06); - setTableValue(config->cltIdleCorrBins, config->cltIdleCorr, CLT_CURVE_SIZE, 50, 1.06); - setTableValue(config->cltIdleCorrBins, config->cltIdleCorr, CLT_CURVE_SIZE, 60, 1.03); - setTableValue(config->cltIdleCorrBins, config->cltIdleCorr, CLT_CURVE_SIZE, 70, 1.01); + setTableValue(config->cltIdleCorrBins, config->cltIdleCorr, CLT_CURVE_SIZE, -40, 150); + setTableValue(config->cltIdleCorrBins, config->cltIdleCorr, CLT_CURVE_SIZE, -30, 150); + setTableValue(config->cltIdleCorrBins, config->cltIdleCorr, CLT_CURVE_SIZE, -20, 142); + setTableValue(config->cltIdleCorrBins, config->cltIdleCorr, CLT_CURVE_SIZE, -10, 136); + setTableValue(config->cltIdleCorrBins, config->cltIdleCorr, CLT_CURVE_SIZE, 0, 128); + setTableValue(config->cltIdleCorrBins, config->cltIdleCorr, CLT_CURVE_SIZE, 10, 119); + setTableValue(config->cltIdleCorrBins, config->cltIdleCorr, CLT_CURVE_SIZE, 20, 112); + setTableValue(config->cltIdleCorrBins, config->cltIdleCorr, CLT_CURVE_SIZE, 30, 110); + setTableValue(config->cltIdleCorrBins, config->cltIdleCorr, CLT_CURVE_SIZE, 40, 106); + setTableValue(config->cltIdleCorrBins, config->cltIdleCorr, CLT_CURVE_SIZE, 50, 106); + setTableValue(config->cltIdleCorrBins, config->cltIdleCorr, CLT_CURVE_SIZE, 60, 103); + setTableValue(config->cltIdleCorrBins, config->cltIdleCorr, CLT_CURVE_SIZE, 70, 101); - setTableValue(config->cltFuelCorrBins, config->cltFuelCorr, CLT_CURVE_SIZE, -40, 1.5); - setTableValue(config->cltFuelCorrBins, config->cltFuelCorr, CLT_CURVE_SIZE, -30, 1.5); - setTableValue(config->cltFuelCorrBins, config->cltFuelCorr, CLT_CURVE_SIZE, -20, 1.42); - setTableValue(config->cltFuelCorrBins, config->cltFuelCorr, CLT_CURVE_SIZE, -10, 1.36); - setTableValue(config->cltFuelCorrBins, config->cltFuelCorr, CLT_CURVE_SIZE, 0, 1.28); - setTableValue(config->cltFuelCorrBins, config->cltFuelCorr, CLT_CURVE_SIZE, 10, 1.19); - setTableValue(config->cltFuelCorrBins, config->cltFuelCorr, CLT_CURVE_SIZE, 20, 1.12); - setTableValue(config->cltFuelCorrBins, config->cltFuelCorr, CLT_CURVE_SIZE, 30, 1.10); - setTableValue(config->cltFuelCorrBins, config->cltFuelCorr, CLT_CURVE_SIZE, 40, 1.06); - setTableValue(config->cltFuelCorrBins, config->cltFuelCorr, CLT_CURVE_SIZE, 50, 1.06); - setTableValue(config->cltFuelCorrBins, config->cltFuelCorr, CLT_CURVE_SIZE, 60, 1.03); - setTableValue(config->cltFuelCorrBins, config->cltFuelCorr, CLT_CURVE_SIZE, 70, 1.01); + setTableValue(config->cltFuelCorrBins, config->cltFuelCorr, CLT_CURVE_SIZE, -40, 150); + setTableValue(config->cltFuelCorrBins, config->cltFuelCorr, CLT_CURVE_SIZE, -30, 150); + setTableValue(config->cltFuelCorrBins, config->cltFuelCorr, CLT_CURVE_SIZE, -20, 142); + setTableValue(config->cltFuelCorrBins, config->cltFuelCorr, CLT_CURVE_SIZE, -10, 136); + setTableValue(config->cltFuelCorrBins, config->cltFuelCorr, CLT_CURVE_SIZE, 0, 128); + setTableValue(config->cltFuelCorrBins, config->cltFuelCorr, CLT_CURVE_SIZE, 10, 119); + setTableValue(config->cltFuelCorrBins, config->cltFuelCorr, CLT_CURVE_SIZE, 20, 112); + setTableValue(config->cltFuelCorrBins, config->cltFuelCorr, CLT_CURVE_SIZE, 30, 110); + setTableValue(config->cltFuelCorrBins, config->cltFuelCorr, CLT_CURVE_SIZE, 40, 106); + setTableValue(config->cltFuelCorrBins, config->cltFuelCorr, CLT_CURVE_SIZE, 50, 106); + setTableValue(config->cltFuelCorrBins, config->cltFuelCorr, CLT_CURVE_SIZE, 60, 103); + setTableValue(config->cltFuelCorrBins, config->cltFuelCorr, CLT_CURVE_SIZE, 70, 101); setConstantDwell(4 PASS_ENGINE_PARAMETER); // 4ms is global default dwell engineConfiguration->useConstantDwellDuringCranking = false; diff --git a/firmware/controllers/algo/fuel_math.cpp b/firmware/controllers/algo/fuel_math.cpp index f1cf9f21da..aa640e2bfd 100644 --- a/firmware/controllers/algo/fuel_math.cpp +++ b/firmware/controllers/algo/fuel_math.cpp @@ -171,7 +171,7 @@ void prepareFuelMap(DECLARE_ENGINE_PARAMETER_F) { float getCltCorrection(float clt DECLARE_ENGINE_PARAMETER_S) { if (cisnan(clt)) return 1; // this error should be already reported somewhere else, let's just handle it - return interpolate2d(clt, config->cltFuelCorrBins, config->cltFuelCorr, CLT_CURVE_SIZE); + return interpolate2d(clt, config->cltFuelCorrBins, config->cltFuelCorr, CLT_CURVE_SIZE) / PERCENT_MULT; } float getIatCorrection(float iat DECLARE_ENGINE_PARAMETER_S) { diff --git a/firmware/controllers/algo/rusefi_enums.h b/firmware/controllers/algo/rusefi_enums.h index a1e0f79d95..37f3ead4d7 100644 --- a/firmware/controllers/algo/rusefi_enums.h +++ b/firmware/controllers/algo/rusefi_enums.h @@ -25,6 +25,10 @@ #define LOGIC_ANALYZER_CHANNEL_COUNT 4 +// I believe that TunerStudio curve editor has a bug with F32 support +// because of that bug we cannot have '1.05' for 5% extra multiplier +#define PERCENT_MULT 100.0 + typedef enum { CUSTOM_ENGINE = 0, AUDI_AAN = 1, diff --git a/firmware/controllers/flash_main.h b/firmware/controllers/flash_main.h index 502355aaca..acee6f465a 100644 --- a/firmware/controllers/flash_main.h +++ b/firmware/controllers/flash_main.h @@ -11,7 +11,7 @@ #include "engine.h" -#define FLASH_DATA_VERSION 9100 +#define FLASH_DATA_VERSION 9105 void readFromFlash(void); void initFlash(Logging *sharedLogger); diff --git a/firmware/controllers/idle_thread.cpp b/firmware/controllers/idle_thread.cpp index 97805a5ea4..a0672e9512 100644 --- a/firmware/controllers/idle_thread.cpp +++ b/firmware/controllers/idle_thread.cpp @@ -102,7 +102,7 @@ static void manualIdleController(int positionPercent) { boardConfiguration->manIdlePosition = positionPercent; percent_t cltCorrectedPosition = interpolate2d(engine->engineState.clt, config->cltIdleCorrBins, config->cltIdleCorr, - CLT_CURVE_SIZE) * positionPercent; + CLT_CURVE_SIZE) / PERCENT_MULT * positionPercent; // let's put the value into the right range cltCorrectedPosition = maxF(cltCorrectedPosition, 0.01); diff --git a/firmware/integration/rusefi.xml b/firmware/integration/rusefi.xml index 830d615b33..e4f8ad5d7d 100644 --- a/firmware/integration/rusefi.xml +++ b/firmware/integration/rusefi.xml @@ -117,7 +117,7 @@ - diff --git a/firmware/tunerstudio/rusefi.ini b/firmware/tunerstudio/rusefi.ini index f04b14654a..e1d3a2015a 100644 --- a/firmware/tunerstudio/rusefi.ini +++ b/firmware/tunerstudio/rusefi.ini @@ -549,16 +549,16 @@ page = 1 le_formulas16 = array, U08, 6016, [200],"char", 1, 0, 0.0, 3.0, 2 timingMultiplier = array, U08, 6216, [200],"char", 1, 0, 0.0, 3.0, 2 timingAdditive = array, U08, 6416, [200],"char", 1, 0, 0.0, 3.0, 2 - cltFuelCorrBins = array, F32, 6616, [16], "C", 1, 0, -100.0, 250.0, 2 - cltFuelCorr = array, F32, 6680, [16], "%", 1, 0, 0.0, 500.0, 2 + cltFuelCorrBins = array, F32, 6616, [16], "C", 1, 0, -100.0, 250.0, 0 + cltFuelCorr = array, F32, 6680, [16], "%", 1, 0, 0.0, 1500.0, 0 iatFuelCorrBins = array, F32, 6744, [16], "C", 1, 0, -100.0, 250.0, 2 iatFuelCorr = array, F32, 6808, [16], "%", 1, 0, 0.0, 500.0, 2 crankingFuelCoef = array, F32, 6872, [8], "%", 1, 0, 0.0, 700.0, 2 crankingFuelBins = array, F32, 6904, [8], "C", 1, 0, -80.0, 170.0, 2 crankingCycleCoef = array, F32, 6936, [8], "%", 1, 0, 0.0, 500.0, 2 crankingCycleBins = array, F32, 6968, [8], "C", 1, 0, -80.0, 170.0, 2 - cltIdleCorrBins = array, F32, 7000, [16], "C", 1, 0, -100.0, 250.0, 2 - cltIdleCorr = array, F32, 7064, [16], "%", 1, 0, 0.0, 500.0, 2 + cltIdleCorrBins = array, F32, 7000, [16], "C", 1, 0, -100.0, 250.0, 0 + cltIdleCorr = array, F32, 7064, [16], "%", 1, 0, 0.0, 1500.0, 0 mafDecoding = array, F32, 7128, [256], "kg/hour", 1, 0, -500.0, 4000.0, 2 mafDecodingBins = array, F32, 8152, [256], "V", 1, 0, -5.0, 150.0, 2 ignitionIatCorrTable = array, F32, 9176, [16x16],"deg", 1, 0, -720, 720, 2 @@ -787,7 +787,7 @@ fileVersion = { 20160122 } curve = cltFuelCorrCurve, "Coolant temp fuel correction" columnLabel = "Coolant", "Correction" xAxis = -40, 120, 10 - yAxis = 0, 5, 10 + yAxis = 0, 50, 100 xBins = cltFuelCorrBins, coolant yBins = cltFuelCorr gauge = CLTGauge @@ -816,10 +816,10 @@ fileVersion = { 20160122 } yBins = crankingCycleCoef - curve = cltIdleCurve, "CLT idle correction" + curve = cltIdleCurve, "CLT manual idle correction" columnLabel = "Coolant", "Correction" xAxis = -40, 120, 10 - yAxis = 0, 5, 10 + yAxis = 0, 50, 100 xBins = cltIdleCorrBins, coolant yBins = cltIdleCorr gauge = CLTGauge @@ -1101,7 +1101,7 @@ fileVersion = { 20160122 } subMenu = crankingTpsCurve, "Cranking TPS correction" subMenu = crankingDurationCurve, "Cranking Duration correction" subMenu = std_separator - subMenu = cltIdleCurve, "Idle warmup correction" + subMenu = cltIdleCurve, "Warmup Idle Air correction" subMenu = std_separator subMenu = fuelTableTbl, "Fuel Table", 0, {algorithm != 3} subMenu = veTableTbl, "VE Table", 0, {algorithm == 3} @@ -1440,6 +1440,7 @@ fileVersion = { 20160122 } ; Board->Connection dialog = tsPort, "TunerStudio Port" + field = "startConsoleInBinaryMode", startConsoleInBinaryMode field = "tunerStudioSerialSpeed", tunerStudioSerialSpeed field = "Use PC10/PC11 serial?", useSerialPort diff --git a/unit_tests/test_fuel_map.cpp b/unit_tests/test_fuel_map.cpp index 1432c48f15..46c2886343 100644 --- a/unit_tests/test_fuel_map.cpp +++ b/unit_tests/test_fuel_map.cpp @@ -86,7 +86,7 @@ void testFuelMap(void) { printf("*************************************************** setting CLT table\r\n"); for (int i = 0; i < CLT_CURVE_SIZE; i++) { eth.engine.config->cltFuelCorrBins[i] = i; - eth.engine.config->cltFuelCorr[i] = 1; + eth.engine.config->cltFuelCorr[i] = 100; } eth.engine.engineConfiguration->injector.lag = 0;