move ign & cranking defaults (#2791)

* ignition defaults

* cranking

* s
This commit is contained in:
Matthew Kennedy 2021-06-03 11:40:19 -07:00 committed by GitHub
parent 3ef969d743
commit e7f17b0365
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 171 additions and 157 deletions

View File

@ -39,11 +39,6 @@ static ign_Map3D_t iatAdvanceCorrectionMap;
// todo: reset this between cranking attempts?! #2735
int minCrankingRpm = 0;
#if IGN_LOAD_COUNT == DEFAULT_IGN_LOAD_COUNT
static const float iatTimingRpmBins[IGN_LOAD_COUNT] = {880, 1260, 1640, 2020, 2400, 2780, 3000, 3380, 3760, 4140, 4520, 5000, 5700, 6500, 7200, 8000};
#endif /* IGN_LOAD_COUNT == DEFAULT_IGN_LOAD_COUNT */
/**
* @return ignition timing angle advance before TDC
*/
@ -218,39 +213,6 @@ size_t getMultiSparkCount(int rpm DECLARE_ENGINE_PARAMETER_SUFFIX) {
}
}
void setDefaultIatTimingCorrection(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
setLinearCurve(config->ignitionIatCorrLoadBins, /*from*/CLT_CURVE_RANGE_FROM, 110, 1);
#if IGN_LOAD_COUNT == DEFAULT_IGN_LOAD_COUNT
copyArray(config->ignitionIatCorrRpmBins, iatTimingRpmBins);
static constexpr int8_t defaultIatCorr[16] = {
4, // -40 deg
4,
3,
2,
0, // 0 deg
0,
0,
0,
0,
-1, // 50 deg
-2,
-4,
-4,
-4,
-4,
-4, // 110 deg
};
// Set each row of the table to the same value (no rpm dependence by default)
for (size_t i = 0; i < efi::size(defaultIatCorr); i++) {
setArrayValues(config->ignitionIatCorrTable[i], (float)defaultIatCorr[i]);
}
#else
setLinearCurve(config->ignitionIatCorrLoadBins, /*from*/0, 6000, 1);
#endif /* IGN_LOAD_COUNT == DEFAULT_IGN_LOAD_COUNT */
}
void initTimingMap(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
// We init both tables in RAM because here we're at a very early stage, with no config settings loaded.
advanceMap.init(config->ignitionTable, config->ignitionLoadBins,

View File

@ -10,7 +10,6 @@
#include "engine.h"
angle_t getAdvance(int rpm, float engineLoad DECLARE_ENGINE_PARAMETER_SUFFIX);
void setDefaultIatTimingCorrection(DECLARE_ENGINE_PARAMETER_SIGNATURE);
void initTimingMap(DECLARE_ENGINE_PARAMETER_SIGNATURE);
float getTopAdvanceForBore(chamber_style_e style, int octane, double compression, double bore);
float getInitialAdvance(int rpm, float map, float advanceMax);

View File

@ -22,4 +22,6 @@ CONTROLLERS_ALGO_SRC_CPP = $(PROJECT_DIR)/controllers/algo/advance_map.cpp \
$(PROJECT_DIR)/controllers/algo/fuel/injector_model.cpp \
$(PROJECT_DIR)/controllers/algo/nmea.cpp \
$(PROJECT_DIR)/controllers/algo/defaults/default_base_engine.cpp \
$(PROJECT_DIR)/controllers/algo/defaults/default_cranking.cpp \
$(PROJECT_DIR)/controllers/algo/defaults/default_fuel.cpp \
$(PROJECT_DIR)/controllers/algo/defaults/default_ignition.cpp \

View File

@ -21,6 +21,8 @@ void setDefaultBaseEngine(DECLARE_CONFIG_PARAMETER_SIGNATURE) {
CONFIG(compressionRatio) = 9;
engineConfiguration->fuelAlgorithm = LM_SPEED_DENSITY;
// Limits and Fallbacks
engineConfiguration->rpmHardLimit = 7000;
engineConfiguration->cutFuelOnHardLimit = true;

View File

@ -0,0 +1,84 @@
#include "defaults.h"
#include "engine_configuration.h"
#include "table_helper.h"
EXTERN_CONFIG;
void setDefaultCranking(DECLARE_CONFIG_PARAMETER_SIGNATURE) {
engineConfiguration->cranking.rpm = 550;
// Fuel
CONFIG(crankingInjectionMode) = IM_SIMULTANEOUS;
engineConfiguration->cranking.baseFuel = 27;
// Ignition
engineConfiguration->useConstantDwellDuringCranking = true;
engineConfiguration->ignitionDwellForCrankingMs = 6;
CONFIG(crankingTimingAngle) = 6;
engineConfiguration->crankingChargeAngle = 70;
// IAC
engineConfiguration->crankingIACposition = 50;
engineConfiguration->afterCrankingIACtaperDuration = 35;
// After start enrichment
#if !EFI_UNIT_TEST
// don't set this for unit tests, as it makes things more complicated to test
engineConfiguration->postCrankingFactor = 1.2;
#endif
engineConfiguration->postCrankingDurationSec = 10;
setLinearCurve(engineConfiguration->crankingTpsCoef, /*from*/1, /*to*/1, 1);
setLinearCurve(engineConfiguration->crankingTpsBins, 0, 100, 1);
setLinearCurve(config->cltCrankingCorrBins, CLT_CURVE_RANGE_FROM, 100, 1);
setLinearCurve(config->cltCrankingCorr, 1.0, 1.0, 1);
// Cranking temperature compensation
static const float crankingCoef[] = {
2.8,
2.2,
1.8,
1.55,
1.3,
1.1,
1.0,
1.0
};
copyArray(config->crankingFuelCoef, crankingCoef);
// Deg C
static const float crankingBins[] = {
-20,
-10,
5,
20,
35,
50,
65,
90
};
copyArray(config->crankingFuelBins, crankingBins);
// Cranking cycle compensation
// Whole table is 1.0, except first two values are steeper
setArrayValues(config->crankingCycleCoef, 1.0f);
config->crankingCycleCoef[0] = 2.0f;
config->crankingCycleCoef[1] = 1.3f;
// X values are simply counting up cycle number starting at 1
for (size_t i = 0; i < efi::size(config->crankingCycleBins); i++) {
config->crankingCycleBins[i] = i + 1;
}
// Cranking ignition timing
static const float advanceValues[] = { 0, 0, 0, 0 };
copyArray(engineConfiguration->crankingAdvance, advanceValues);
static const float advanceBins[] = { 0, 200, 400, 1000 };
copyArray(engineConfiguration->crankingAdvanceBins, advanceBins);
CONFIG(useTLE8888_cranking_hack) = true;
}

View File

@ -0,0 +1,78 @@
#include "defaults.h"
#include "engine_configuration.h"
#include "engine_math.h"
#include "table_helper.h"
EXTERN_CONFIG;
static void setDefaultMultisparkParameters(DECLARE_CONFIG_PARAMETER_SIGNATURE) {
// 1ms spark + 2ms dwell
engineConfiguration->multisparkSparkDuration = 1000;
engineConfiguration->multisparkDwell = 2000;
// Conservative defaults - probably won't blow up coils
engineConfiguration->multisparkMaxRpm = 1500;
engineConfiguration->multisparkMaxExtraSparkCount = 2;
engineConfiguration->multisparkMaxSparkingAngle = 30;
}
static constexpr float iatTimingRpmBins[] = { 880, 1260, 1640, 2020, 2400, 2780, 3000, 3380, 3760, 4140, 4520, 5000, 5700, 6500, 7200, 8000 };
static void setDefaultIatTimingCorrection(DECLARE_CONFIG_PARAMETER_SIGNATURE) {
setLinearCurve(config->ignitionIatCorrLoadBins, /*from*/CLT_CURVE_RANGE_FROM, 110, 1);
#if IGN_LOAD_COUNT == DEFAULT_IGN_LOAD_COUNT
copyArray(config->ignitionIatCorrRpmBins, iatTimingRpmBins);
static constexpr int8_t defaultIatCorr[16] = {
4, // -40 deg
4,
3,
2,
0, // 0 deg
0,
0,
0,
0,
-1, // 50 deg
-2,
-4,
-4,
-4,
-4,
-4, // 110 deg
};
// Set each row of the table to the same value (no rpm dependence by default)
for (size_t i = 0; i < efi::size(defaultIatCorr); i++) {
setArrayValues(config->ignitionIatCorrTable[i], (float)defaultIatCorr[i]);
}
#else
setLinearCurve(config->ignitionIatCorrLoadBins, /*from*/0, 6000, 1);
#endif /* IGN_LOAD_COUNT == DEFAULT_IGN_LOAD_COUNT */
}
void setDefaultIgnition(DECLARE_CONFIG_PARAMETER_SIGNATURE) {
// Ignition base settings
CONFIG(isIgnitionEnabled) = true;
engineConfiguration->timingMode = TM_DYNAMIC;
engineConfiguration->fixedModeTiming = 50;
// Dwell table
setConstantDwell(4 PASS_CONFIG_PARAMETER_SUFFIX);
// Multispark
setDefaultMultisparkParameters(PASS_CONFIG_PARAMETER_SIGNATURE);
// Ignition advance table
// TODO: populate some values that aren't all 0?
setTimingLoadBin(1.2, 4.4 PASS_CONFIG_PARAMETER_SUFFIX);
setTimingRpmBin(800, 7000 PASS_CONFIG_PARAMETER_SUFFIX);
// CLT correction
setLinearCurve(engineConfiguration->cltTimingBins, CLT_CURVE_RANGE_FROM, 120, 1);
setArrayValues(engineConfiguration->cltTimingExtra, 0.0f);
// IAT correction
setDefaultIatTimingCorrection(PASS_CONFIG_PARAMETER_SIGNATURE);
}

View File

@ -2,3 +2,5 @@
void setDefaultBaseEngine(DECLARE_CONFIG_PARAMETER_SIGNATURE);
void setDefaultFuel(DECLARE_CONFIG_PARAMETER_SIGNATURE);
void setDefaultIgnition(DECLARE_CONFIG_PARAMETER_SIGNATURE);
void setDefaultCranking(DECLARE_CONFIG_PARAMETER_SIGNATURE);

View File

@ -216,7 +216,7 @@ void setConstantDwell(floatms_t dwellMs DECLARE_CONFIG_PARAMETER_SUFFIX) {
for (int i = 0; i < DWELL_CURVE_SIZE; i++) {
engineConfiguration->sparkDwellRpmBins[i] = 1000 * i;
}
setLinearCurve(engineConfiguration->sparkDwellValues, dwellMs, dwellMs, 0.01);
setArrayValues(engineConfiguration->sparkDwellValues, dwellMs);
}
void setWholeIgnitionIatCorr(float value DECLARE_CONFIG_PARAMETER_SUFFIX) {
@ -328,70 +328,6 @@ static void setDefaultWarmupIdleCorrection(DECLARE_CONFIG_PARAMETER_SIGNATURE) {
setCurveValue(CLT_MANUAL_IDLE_CORRECTION, 70, 33.0 / baseIdle);
}
static void setDefaultCrankingSettings(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
CONFIG(useTLE8888_cranking_hack) = true;
setLinearCurve(engineConfiguration->crankingTpsCoef, /*from*/1, /*to*/1, 1);
setLinearCurve(engineConfiguration->crankingTpsBins, 0, 100, 1);
setLinearCurve(config->cltCrankingCorrBins, CLT_CURVE_RANGE_FROM, 100, 1);
setLinearCurve(config->cltCrankingCorr, 1.0, 1.0, 1);
// Cranking temperature compensation
static const float crankingCoef[] = {
2.8,
2.2,
1.8,
1.55,
1.3,
1.1,
1.0,
1.0
};
copyArray(config->crankingFuelCoef, crankingCoef);
// Deg C
static const float crankingBins[] = {
-20,
-10,
5,
20,
35,
50,
65,
90
};
copyArray(config->crankingFuelBins, crankingBins);
// Cranking cycle compensation
// Whole table is 1.0, except first two values are steeper
setArrayValues(config->crankingCycleCoef, 1.0f);
config->crankingCycleCoef[0] = 2.0f;
config->crankingCycleCoef[1] = 1.3f;
// X values are simply counting up cycle number starting at 1
for (size_t i = 0; i < efi::size(config->crankingCycleBins); i++) {
config->crankingCycleBins[i] = i + 1;
}
// Cranking ignition timing
static const float advanceValues[] = { 0, 0, 0, 0 };
copyArray(engineConfiguration->crankingAdvance, advanceValues);
static const float advanceBins[] = { 0, 200, 400, 1000 };
copyArray(engineConfiguration->crankingAdvanceBins, advanceBins);
#if !EFI_UNIT_TEST
// don't set this for unit tests, as it makes things more complicated to test
engineConfiguration->postCrankingFactor = 1.2;
#endif
engineConfiguration->postCrankingDurationSec = 10;
CONFIG(crankingTimingAngle) = 6;
}
/**
* see also setTargetRpmCurve()
*/
@ -436,17 +372,6 @@ void setTargetRpmCurve(int rpm DECLARE_CONFIG_PARAMETER_SUFFIX) {
setLinearCurve(engineConfiguration->cltIdleRpm, rpm, rpm, 10);
}
static void setDefaultMultisparkParameters(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
// 1ms spark + 2ms dwell
engineConfiguration->multisparkSparkDuration = 1000;
engineConfiguration->multisparkDwell = 2000;
// Conservative defaults - probably won't blow up coils
engineConfiguration->multisparkMaxRpm = 1500;
engineConfiguration->multisparkMaxExtraSparkCount = 2;
engineConfiguration->multisparkMaxSparkingAngle = 30;
}
void setDefaultGppwmParameters(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
// Same config for all channels
for (size_t i = 0; i < efi::size(CONFIG(gppwm)); i++) {
@ -548,6 +473,8 @@ static void setDefaultEngineConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
setDefaultBaseEngine(PASS_CONFIG_PARAMETER_SIGNATURE);
setDefaultFuel(PASS_CONFIG_PARAMETER_SIGNATURE);
setDefaultIgnition(PASS_CONFIG_PARAMETER_SIGNATURE);
setDefaultCranking(PASS_CONFIG_PARAMETER_SIGNATURE);
#if EFI_IDLE_CONTROL
setDefaultIdleParameters(PASS_CONFIG_PARAMETER_SIGNATURE);
@ -561,8 +488,6 @@ static void setDefaultEngineConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
setDefaultBoostParameters(PASS_CONFIG_PARAMETER_SIGNATURE);
#endif
engineConfiguration->afterCrankingIACtaperDuration = 35;
// OBD-II default rate is 500kbps
CONFIG(canBaudRate) = B500KBPS;
@ -601,9 +526,6 @@ static void setDefaultEngineConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
engineConfiguration->alternatorControl.minValue = 10;
engineConfiguration->alternatorControl.maxValue = 90;
setLinearCurve(engineConfiguration->cltTimingBins, CLT_CURVE_RANGE_FROM, 120, 1);
setLinearCurve(engineConfiguration->cltTimingExtra, 0, 0, 1);
setLinearCurve(engineConfiguration->fsioCurve1Bins, 0, 100, 1);
setLinearCurve(engineConfiguration->fsioCurve1, 0, 100, 1);
@ -616,28 +538,11 @@ static void setDefaultEngineConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
#if EFI_ENGINE_CONTROL
setDefaultWarmupIdleCorrection(PASS_CONFIG_PARAMETER_SIGNATURE);
/**
* 4ms is global default dwell for the whole RPM range
* if you only have one coil and many cylinders or high RPM you would need lower value at higher RPM
*/
setConstantDwell(4 PASS_CONFIG_PARAMETER_SUFFIX);
/**
* Use angle-based duration during cranking
* this is equivalent to 'disable cranking_constant_dwell' console command
*/
engineConfiguration->useConstantDwellDuringCranking = true;
engineConfiguration->ignitionDwellForCrankingMs = 6;
setTimingLoadBin(1.2, 4.4 PASS_CONFIG_PARAMETER_SUFFIX);
setTimingRpmBin(800, 7000 PASS_CONFIG_PARAMETER_SUFFIX);
setLinearCurve(engineConfiguration->map.samplingAngleBins, 800, 7000, 1);
setLinearCurve(engineConfiguration->map.samplingAngle, 100, 130, 1);
setLinearCurve(engineConfiguration->map.samplingWindowBins, 800, 7000, 1);
setLinearCurve(engineConfiguration->map.samplingWindow, 50, 50, 1);
setDefaultIatTimingCorrection(PASS_ENGINE_PARAMETER_SIGNATURE);
setLinearCurve(config->vvtTable1LoadBins, 20, 120, 10);
setRpmTableBin(config->vvtTable1RpmBins, FSIO_TABLE_8);
setLinearCurve(config->vvtTable2LoadBins, 20, 120, 10);
@ -668,12 +573,9 @@ static void setDefaultEngineConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
engineConfiguration->slowAdcAlpha = 0.33333;
engineConfiguration->engineSnifferRpmThreshold = 2500;
engineConfiguration->sensorSnifferRpmThreshold = 2500;
engineConfiguration->cranking.rpm = 550;
engineConfiguration->noAccelAfterHardLimitPeriodSecs = 3;
setDefaultCrankingSettings(PASS_ENGINE_PARAMETER_SIGNATURE);
/**
* Idle control defaults
*/
@ -690,7 +592,6 @@ static void setDefaultEngineConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
engineConfiguration->idle.solenoidFrequency = 200;
// set idle_position 50
engineConfiguration->manIdlePosition = 50;
engineConfiguration->crankingIACposition = 50;
// engineConfiguration->idleMode = IM_AUTO;
engineConfiguration->idleMode = IM_MANUAL;
@ -698,18 +599,6 @@ static void setDefaultEngineConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
setDefaultStepperIdleParameters(PASS_ENGINE_PARAMETER_SIGNATURE);
/**
* Cranking defaults
*/
engineConfiguration->cranking.baseFuel = 27;
engineConfiguration->crankingChargeAngle = 70;
engineConfiguration->timingMode = TM_DYNAMIC;
engineConfiguration->fixedModeTiming = 50;
setDefaultMultisparkParameters(PASS_ENGINE_PARAMETER_SIGNATURE);
setDefaultGppwmParameters(PASS_ENGINE_PARAMETER_SIGNATURE);
#if !EFI_UNIT_TEST
@ -722,8 +611,6 @@ static void setDefaultEngineConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
engineConfiguration->extraInjectionOffset = 0;
engineConfiguration->fuelAlgorithm = LM_SPEED_DENSITY;
engineConfiguration->tpsMin = convertVoltageTo10bitADC(0);
engineConfiguration->tpsMax = convertVoltageTo10bitADC(5);
engineConfiguration->tps1SecondaryMin = convertVoltageTo10bitADC(0);
@ -777,8 +664,6 @@ static void setDefaultEngineConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
engineConfiguration->primingSquirtDurationMs = 5;
engineConfiguration->isIgnitionEnabled = true;
engineConfiguration->isMapAveragingEnabled = true;
engineConfiguration->isWaveAnalyzerEnabled = true;