Fix tunerstudio ratio vs. percent (#838)

* fix ratio vs pct

* fix idle cranking clt position

* fix defaults

* fix typo

* fix baro corr gauge

* baro default

* fix degree symbols

* fix testFuelMap

* fix testPlainCrankingWithoutAdvancedFeatures

* test testFasterEngineSpinningUp
This commit is contained in:
Matthew Kennedy 2019-06-13 06:05:22 -07:00 committed by rusefi
parent 363f1d04cd
commit e47bc4b952
9 changed files with 67 additions and 72 deletions

View File

@ -306,11 +306,11 @@ private:
cltCorrection = 1.0f;
// Use separate CLT correction table for cranking
else if (engineConfiguration->overrideCrankingIacSetting && !isRunning) {
cltCorrection = interpolate2d("cltCrankingT", clt, config->cltCrankingCorrBins, config->cltCrankingCorr, CLT_CRANKING_CURVE_SIZE) / PERCENT_MULT;
cltCorrection = interpolate2d("cltCrankingT", clt, config->cltCrankingCorrBins, config->cltCrankingCorr, CLT_CRANKING_CURVE_SIZE);
} else {
// this value would be ignored if running in AUTO mode
// but we need it while cranking in AUTO mode
cltCorrection = interpolate2d("cltT", clt, config->cltIdleCorrBins, config->cltIdleCorr, CLT_CURVE_SIZE) / PERCENT_MULT;
cltCorrection = interpolate2d("cltT", clt, config->cltIdleCorrBins, config->cltIdleCorr, CLT_CURVE_SIZE);
}
percent_t iacPosition;

View File

@ -539,39 +539,39 @@ static void setBosch02880155868(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
}
static void setDefaultWarmupIdleCorrection(DECLARE_CONFIG_PARAMETER_SIGNATURE) {
initTemperatureCurve(CLT_MANUAL_IDLE_CORRECTION, PERCENT_MULT);
initTemperatureCurve(CLT_MANUAL_IDLE_CORRECTION, 1.0);
float baseIdle = 30;
setCurveValue(CLT_MANUAL_IDLE_CORRECTION, -40, 150);
setCurveValue(CLT_MANUAL_IDLE_CORRECTION, -30, 150);
setCurveValue(CLT_MANUAL_IDLE_CORRECTION, -20, 40.0 / baseIdle * 100);
setCurveValue(CLT_MANUAL_IDLE_CORRECTION, -10, 40.0 / baseIdle * 100);
setCurveValue(CLT_MANUAL_IDLE_CORRECTION, 0, 40.0 / baseIdle * 100);
setCurveValue(CLT_MANUAL_IDLE_CORRECTION, 10, 40.0 / baseIdle * 100);
setCurveValue(CLT_MANUAL_IDLE_CORRECTION, 20, 40.0 / baseIdle * 100);
setCurveValue(CLT_MANUAL_IDLE_CORRECTION, 30, 40.0 / baseIdle * 100);
setCurveValue(CLT_MANUAL_IDLE_CORRECTION, 40, 40.0 / baseIdle * 100);
setCurveValue(CLT_MANUAL_IDLE_CORRECTION, 50, 37.0 / baseIdle * 100);
setCurveValue(CLT_MANUAL_IDLE_CORRECTION, 60, 35.0 / baseIdle * 100);
setCurveValue(CLT_MANUAL_IDLE_CORRECTION, 70, 33.0 / baseIdle * 100);
setCurveValue(CLT_MANUAL_IDLE_CORRECTION, -40, 1.5);
setCurveValue(CLT_MANUAL_IDLE_CORRECTION, -30, 1.5);
setCurveValue(CLT_MANUAL_IDLE_CORRECTION, -20, 40.0 / baseIdle);
setCurveValue(CLT_MANUAL_IDLE_CORRECTION, -10, 40.0 / baseIdle);
setCurveValue(CLT_MANUAL_IDLE_CORRECTION, 0, 40.0 / baseIdle);
setCurveValue(CLT_MANUAL_IDLE_CORRECTION, 10, 40.0 / baseIdle);
setCurveValue(CLT_MANUAL_IDLE_CORRECTION, 20, 40.0 / baseIdle);
setCurveValue(CLT_MANUAL_IDLE_CORRECTION, 30, 40.0 / baseIdle);
setCurveValue(CLT_MANUAL_IDLE_CORRECTION, 40, 40.0 / baseIdle);
setCurveValue(CLT_MANUAL_IDLE_CORRECTION, 50, 37.0 / baseIdle);
setCurveValue(CLT_MANUAL_IDLE_CORRECTION, 60, 35.0 / baseIdle);
setCurveValue(CLT_MANUAL_IDLE_CORRECTION, 70, 33.0 / baseIdle);
}
static void setDefaultWarmupFuelEnrichment(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
initTemperatureCurve(WARMUP_CLT_EXTRA_FUEL_CURVE, PERCENT_MULT);
initTemperatureCurve(WARMUP_CLT_EXTRA_FUEL_CURVE, 1.0);
setCurveValue(WARMUP_CLT_EXTRA_FUEL_CURVE, -40, 150);
setCurveValue(WARMUP_CLT_EXTRA_FUEL_CURVE, -30, 150);
setCurveValue(WARMUP_CLT_EXTRA_FUEL_CURVE, -20, 142);
setCurveValue(WARMUP_CLT_EXTRA_FUEL_CURVE, -10, 136);
setCurveValue(WARMUP_CLT_EXTRA_FUEL_CURVE, 0, 128);
setCurveValue(WARMUP_CLT_EXTRA_FUEL_CURVE, 10, 119);
setCurveValue(WARMUP_CLT_EXTRA_FUEL_CURVE, 20, 112);
setCurveValue(WARMUP_CLT_EXTRA_FUEL_CURVE, 30, 110);
setCurveValue(WARMUP_CLT_EXTRA_FUEL_CURVE, 40, 106);
setCurveValue(WARMUP_CLT_EXTRA_FUEL_CURVE, 50, 106);
setCurveValue(WARMUP_CLT_EXTRA_FUEL_CURVE, 60, 103);
setCurveValue(WARMUP_CLT_EXTRA_FUEL_CURVE, 70, 101);
setCurveValue(WARMUP_CLT_EXTRA_FUEL_CURVE, -40, 1.50);
setCurveValue(WARMUP_CLT_EXTRA_FUEL_CURVE, -30, 1.50);
setCurveValue(WARMUP_CLT_EXTRA_FUEL_CURVE, -20, 1.42);
setCurveValue(WARMUP_CLT_EXTRA_FUEL_CURVE, -10, 1.36);
setCurveValue(WARMUP_CLT_EXTRA_FUEL_CURVE, 0, 1.28);
setCurveValue(WARMUP_CLT_EXTRA_FUEL_CURVE, 10, 1.19);
setCurveValue(WARMUP_CLT_EXTRA_FUEL_CURVE, 20, 1.12);
setCurveValue(WARMUP_CLT_EXTRA_FUEL_CURVE, 30, 1.10);
setCurveValue(WARMUP_CLT_EXTRA_FUEL_CURVE, 40, 1.06);
setCurveValue(WARMUP_CLT_EXTRA_FUEL_CURVE, 50, 1.06);
setCurveValue(WARMUP_CLT_EXTRA_FUEL_CURVE, 60, 1.03);
setCurveValue(WARMUP_CLT_EXTRA_FUEL_CURVE, 70, 1.01);
}
static void setDefaultFuelCutParameters(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
@ -588,24 +588,24 @@ static void setDefaultCrankingSettings(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
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);
setLinearCurve(config->cltCrankingCorr, CLT_CRANKING_CURVE_SIZE, 1.0, 1.0, 1);
config->crankingFuelCoef[0] = 28; // base cranking fuel adjustment coefficient
config->crankingFuelCoef[0] = 2.8; // base cranking fuel adjustment coefficient
config->crankingFuelBins[0] = -20; // temperature in C
config->crankingFuelCoef[1] = 22;
config->crankingFuelCoef[1] = 2.2;
config->crankingFuelBins[1] = -10;
config->crankingFuelCoef[2] = 18;
config->crankingFuelCoef[2] = 1.8;
config->crankingFuelBins[2] = 5;
config->crankingFuelCoef[3] = 15;
config->crankingFuelCoef[3] = 1.5;
config->crankingFuelBins[3] = 30;
config->crankingFuelCoef[4] = 10;
config->crankingFuelCoef[4] = 1.0;
config->crankingFuelBins[4] = 35;
config->crankingFuelCoef[5] = 10;
config->crankingFuelCoef[5] = 1.0;
config->crankingFuelBins[5] = 50;
config->crankingFuelCoef[6] = 10;
config->crankingFuelCoef[6] = 1.0;
config->crankingFuelBins[6] = 65;
config->crankingFuelCoef[7] = 10;
config->crankingFuelCoef[7] = 1.0;
config->crankingFuelBins[7] = 90;
config->crankingCycleCoef[0] = 1.5;
@ -632,11 +632,11 @@ static void setDefaultCrankingSettings(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
engineConfiguration->crankingAdvance[0] = 0;
engineConfiguration->crankingAdvanceBins[0] = 0;
engineConfiguration->crankingAdvance[1] = 0;
engineConfiguration->crankingAdvanceBins[0] = 200;
engineConfiguration->crankingAdvanceBins[1] = 200;
engineConfiguration->crankingAdvance[2] = 0;
engineConfiguration->crankingAdvanceBins[0] = 400;
engineConfiguration->crankingAdvanceBins[2] = 400;
engineConfiguration->crankingAdvance[3] = 0;
engineConfiguration->crankingAdvanceBins[0] = 1000;
engineConfiguration->crankingAdvanceBins[3] = 1000;
}

View File

@ -243,7 +243,7 @@ void initFuelMap(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
float getCltFuelCorrection(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
if (cisnan(engine->sensors.clt))
return 1; // this error should be already reported somewhere else, let's just handle it
return interpolate2d("cltf", engine->sensors.clt, WARMUP_CLT_EXTRA_FUEL_CURVE) / PERCENT_MULT;
return interpolate2d("cltf", engine->sensors.clt, WARMUP_CLT_EXTRA_FUEL_CURVE);
}
angle_t getCltTimingCorrection(DECLARE_ENGINE_PARAMETER_SIGNATURE) {

View File

@ -144,12 +144,8 @@ floatms_t getSpeedDensityFuel(float map DECLARE_GLOBAL_SUFFIX) {
return sdMath(airMass, ENGINE(engineState.targetAFR) PASS_GLOBAL_SUFFIX) * 1000;
}
static const baro_corr_table_t default_baro_corr = {
{1.141, 1.086, 1.039, 1},
{1.141, 1.086, 1.039, 1},
{1.141, 1.086, 1.039, 1},
{1.141, 1.086, 1.039, 1}
};
// Default baro table is all 1.0, we can't recommend a reasonable default here
static const baro_corr_table_t default_baro_corr = {1};
void setDefaultVETable(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
setRpmTableBin(config->veRpmBins, FUEL_RPM_COUNT);

View File

@ -134,8 +134,7 @@ custom fsio_table_8x8_f32t 4*@@FSIO_TABLE_8@@x@@FSIO_TABLE_8@@ array, F32, @
custom tps_tps_table_t 4*@@TPS_TPS_ACCEL_TABLE@@x@@TPS_TPS_ACCEL_TABLE@@ array, F32, @OFFSET@, [@@TPS_TPS_ACCEL_TABLE@@x@@TPS_TPS_ACCEL_TABLE@@],"value", 1, 0, 0.0, 30000.0, 2
! todo support table size multiplocation
custom baro_corr_table_t 4*@@BARO_CORR_SIZE@@x@@BARO_CORR_SIZE@@ array, F32, @OFFSET@, [@@BARO_CORR_SIZE@@x@@BARO_CORR_SIZE@@],"%", 1, 0, 0, 999.0, 2
custom baro_corr_table_t 4*@@BARO_CORR_SIZE@@x@@BARO_CORR_SIZE@@ array, F32, @OFFSET@, [@@BARO_CORR_SIZE@@x@@BARO_CORR_SIZE@@],"ratio", 1, 0, 0, 2.0, 2
custom ignition_table_t 4*@@IGN_RPM_COUNT@@x@@IGN_LOAD_COUNT@@ array, F32, @OFFSET@, [@@IGN_RPM_COUNT@@x@@IGN_LOAD_COUNT@@],"deg", 1, 0, -20, 90, 2
@ -1079,19 +1078,19 @@ le_formula_t[FSIO_COMMAND_COUNT iterate] fsioFormulas;
le_formula_t timingAdditive;
float[CLT_CURVE_SIZE] cltFuelCorrBins;;"C", 1, 0, -100.0, 250.0, 2
float[CLT_CURVE_SIZE] cltFuelCorr;;"Ratio", 1, 0, 0.0, 500.0, 2
float[CLT_CURVE_SIZE] cltFuelCorr;;"ratio", 1, 0, 0.0, 5.0, 2
float[IAT_CURVE_SIZE] iatFuelCorrBins;;"C", 1, 0, -100.0, 250.0, 2
float[IAT_CURVE_SIZE] iatFuelCorr;;"Ratio", 1, 0, 0.0, 10.0, 2
float[IAT_CURVE_SIZE] iatFuelCorr;;"ratio", 1, 0, 0.0, 5.0, 2
float[CRANKING_CURVE_SIZE] crankingFuelCoef;;"Ratio", 1, 0, 0.0, 300.0, 2
float[CRANKING_CURVE_SIZE] crankingFuelCoef;;"ratio", 1, 0, 0.0, 5.0, 2
float[CRANKING_CURVE_SIZE] crankingFuelBins;;"C", 1, 0, -80.0, 170.0, 2
float[CRANKING_CURVE_SIZE] crankingCycleCoef;;"%", 1, 0, 0.0, 500.0, 2
float[CRANKING_CURVE_SIZE] crankingCycleCoef;;"ratio", 1, 0, 0.0, 5.0, 2
float[CRANKING_CURVE_SIZE] crankingCycleBins;;"counter", 1, 0, -80.0, 170.0, 0
float[CLT_CURVE_SIZE] cltIdleCorrBins;CLT-based idle position multiplier for simple manual idle controller;"C", 1, 0, -100.0, 250.0, 2
float[CLT_CURVE_SIZE] cltIdleCorr; CLT-based idle position multiplier for simple manual idle controller;"%", 1, 0, 0.0, 1000.0, 2
float[CLT_CURVE_SIZE] cltIdleCorr; CLT-based idle position multiplier for simple manual idle controller;"ratio", 1, 0, 0.0, 10.0, 2
float[MAF_DECODING_COUNT] mafDecoding;kg/hour value.\nBy the way 2.081989116 kg/h = 1 ft3/m;"kg/hour", 1, 0, -500.0, 4000.0, 2
float[MAF_DECODING_COUNT] mafDecodingBins;; "V", 1, 0, -5.0, 150.0, 2

View File

@ -420,7 +420,7 @@ fileVersion = { 20171101 }
#else
xAxis = -40, 250, 10
#endif
yAxis = 0, 5, 10
yAxis = 0, 2, 11
xBins = iatFuelCorrBins, intake
yBins = iatFuelCorr
gauge = IATGauge
@ -444,7 +444,7 @@ fileVersion = { 20171101 }
#else
xAxis = -40, 210, 10
#endif
yAxis = 0, 50, 10
yAxis = 0, 3, 10
xBins = cltFuelCorrBins, coolant
yBins = cltFuelCorr
gauge = CLTGauge
@ -456,7 +456,7 @@ fileVersion = { 20171101 }
#else
xAxis = -40, 210, 10
#endif
yAxis = 0, 30, 10
yAxis = 0, 3, 10
xBins = crankingFuelBins, coolant
yBins = crankingFuelCoef
gauge = CLTGauge
@ -472,7 +472,7 @@ fileVersion = { 20171101 }
curve = crankingTpsCurve, "Cranking TPS Multiplier"
columnLabel = "TPS", "Multiplier"
xAxis = 0, 100, 10
yAxis = 0, 5, 10
yAxis = 0, 3, 10
xBins = crankingTpsBins, TPSValue
yBins = crankingTpsCoef
gauge = TPSGauge
@ -480,7 +480,7 @@ fileVersion = { 20171101 }
curve = crankingDurationCurve, "Cranking Duration Multiplier"
columnLabel = "Engine Cycle", "Multiplier"
xAxis = 0, 1000, 10
yAxis = 0, 5, 10
yAxis = 0, 3, 10
xBins = crankingCycleBins
yBins = crankingCycleCoef
@ -492,7 +492,7 @@ fileVersion = { 20171101 }
#else
xAxis = -40, 250, 10
#endif
yAxis = 0, 50, 10
yAxis = 0, 3, 10
xBins = cltIdleCorrBins, coolant
yBins = cltIdleCorr
gauge = CLTGauge
@ -516,7 +516,7 @@ fileVersion = { 20171101 }
#else
xAxis = -40, 250, 10
#endif
yAxis = 0, 300, 10
yAxis = 0, 3, 10
xBins = cltCrankingCorrBins, coolant
yBins = cltCrankingCorr
gauge = CLTGauge
@ -849,7 +849,7 @@ gaugeCategory = Fuel Data
#else
tChargeGauge = tCharge, @@GAUGE_NAME_FUEL_CHARGE_TEMP@@, "°F", -40, 285, 5, 35, 205, 230, 1, 1
#endif
baroCorrectionGauge = baroCorrection,"BaroCorr", "%", 0, 120, 10, 10, 100, 100, 1, 1
baroCorrectionGauge = baroCorrection,"BaroCorr", "ratio", 0.5, 1.5, 0.6, 0.7, 1.3, 1.4, 1, 1
crankingFuelGauge = crankingFuelMs, @@GAUGE_NAME_FUEL_CRANKING@@, "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1
iatCorrectionGauge = iatCorrection, @@GAUGE_NAME_FUEL_IAT_CORR@@, "mult", 0, 3, 0, 0, 3, 3, 2, 2
cltCorrectionGauge = cltCorrection, @@GAUGE_NAME_FUEL_CLT_CORR@@, "mult", 0, 3, 0, 0, 3, 3, 2, 2

View File

@ -53,7 +53,7 @@ TEST(cranking, testFasterEngineSpinningUp) {
// test if ignition mode is temporary changed to wasted spark, if set to individual coils
ASSERT_EQ(IM_WASTED_SPARK, getCurrentIgnitionMode(PASS_ENGINE_PARAMETER_SIGNATURE));
// check real events
eth.assertEvent5(&engine->executor, "inj start#1", 0, (void*)startSimultaniousInjection, timeStartUs, MS2US(200) + 81250);
eth.assertEvent5(&engine->executor, "inj start#1", 0, (void*)startSimultaniousInjection, timeStartUs, MS2US(200) + 98125);
eth.assertEvent5(&engine->executor, "inj end#1", 1, (void*)endSimultaniousInjection, timeStartUs, MS2US(200) + 100000);
// skip the rest of the cycle
@ -75,7 +75,7 @@ TEST(cranking, testFasterEngineSpinningUp) {
// two simultaneous injections
ASSERT_EQ( 4, engine->executor.size()) << "plain#2";
// check real events
eth.assertEvent5(&engine->executor, "inj start#2", 0, (void*)startSimultaniousInjection, eth.getTimeNowUs(), 131250);
eth.assertEvent5(&engine->executor, "inj start#2", 0, (void*)startSimultaniousInjection, eth.getTimeNowUs(), 148125);
eth.assertEvent5(&engine->executor, "inj end#2", 1, (void*)endSimultaniousInjection, eth.getTimeNowUs(), 150000);
// skip, clear & advance 1 more revolution at higher RPM
@ -96,8 +96,8 @@ TEST(cranking, testFasterEngineSpinningUp) {
// check real events for sequential injection
// Note: See addFuelEvents() fix inside setRpmValue()!
eth.assertEvent5(&engine->executor, "inj start#3", 0, (void*)seTurnPinHigh, timeStartUs, MS2US(60) + 11250);
eth.assertEvent5(&engine->executor, "inj end#3", 1, (void*)seTurnPinLow, timeStartUs, MS2US(60) + 11250 + 3000);
eth.assertEvent5(&engine->executor, "inj start#3", 0, (void*)seTurnPinHigh, timeStartUs, MS2US(60) + 28125);
eth.assertEvent5(&engine->executor, "inj end#3", 1, (void*)seTurnPinLow, timeStartUs, MS2US(60) + 28125 + 3000);
}
static void doTestFasterEngineSpinningUp60_2(int startUpDelayMs, int rpm1, int expectedRpm) {

View File

@ -80,7 +80,7 @@ TEST(misc, testFuelMap) {
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] = 100;
eth.engine.config->cltFuelCorr[i] = 1;
}
setFlatInjectorLag(0 PASS_CONFIG_PARAMETER_SUFFIX);
@ -110,10 +110,10 @@ TEST(misc, testFuelMap) {
printf("*************************************************** getStartingFuel\r\n");
// NAN in case we have issues with the CLT sensor
ASSERT_EQ( 6.0, getCrankingFuel3(NAN, 0 PASS_ENGINE_PARAMETER_SUFFIX)) << "getStartingFuel nan";
assertEqualsM("getStartingFuel#1", 116, getCrankingFuel3(0, 4 PASS_ENGINE_PARAMETER_SUFFIX));
assertEqualsM("getStartingFuel#2", 58.2120, getCrankingFuel3(8, 15 PASS_ENGINE_PARAMETER_SUFFIX));
assertEqualsM("getStartingFuel#3", 60.00, getCrankingFuel3(70, 0 PASS_ENGINE_PARAMETER_SUFFIX));
assertEqualsM("getStartingFuel#4", 24.1379, getCrankingFuel3(70, 50 PASS_ENGINE_PARAMETER_SUFFIX));
assertEqualsM("getStartingFuel#1", 11.6, getCrankingFuel3(0, 4 PASS_ENGINE_PARAMETER_SUFFIX));
assertEqualsM("getStartingFuel#2", 5.82120, getCrankingFuel3(8, 15 PASS_ENGINE_PARAMETER_SUFFIX));
assertEqualsM("getStartingFuel#3", 6.000, getCrankingFuel3(70, 0 PASS_ENGINE_PARAMETER_SUFFIX));
assertEqualsM("getStartingFuel#4", 2.41379, getCrankingFuel3(70, 50 PASS_ENGINE_PARAMETER_SUFFIX));
}

View File

@ -25,7 +25,7 @@ TEST(engine, testPlainCrankingWithoutAdvancedFeatures) {
// two simultaneous injections
ASSERT_EQ( 4, engine->executor.size()) << "plain#2";
eth.assertEvent5(&engine->executor, "sim start", 0, (void*)startSimultaniousInjection, eth.getTimeNowUs(), 81250);
eth.assertEvent5(&engine->executor, "sim start", 0, (void*)startSimultaniousInjection, eth.getTimeNowUs(), 100000 - 1875);
eth.assertEvent5(&engine->executor, "sim end", 1, (void*)endSimultaniousInjection, eth.getTimeNowUs(), 100000);
}