IGN CLT Correction as 5x5 table [was 8*2 curve]
* change curve to table on ign clt correction * bump FLASH_DATA_VERSION
This commit is contained in:
parent
d77612fb1b
commit
2d1a0c9827
|
@ -30,6 +30,15 @@ static void setDefaultIatTimingCorrection() {
|
|||
copyArray(config->ignitionIatCorrTable[2], {0, 0, 0, 0, 0, 0, -1, -2});
|
||||
}
|
||||
|
||||
static void setDefaultCltTimingCorrection() {
|
||||
copyArray(config->ignitionCltCorrTempBins, { -20, 0, 20, 40, 60});
|
||||
setLinearCurve(config->ignitionCltCorrLoadBins, /*from=*/ 0, /*to*/ 140, 1);
|
||||
|
||||
for (size_t i = 0; i < CLT_TIMING_CURVE_SIZE; i++) {
|
||||
copyArray(config->ignitionCltCorrTable[i], {0, 0, 0, 0, 0});
|
||||
}
|
||||
}
|
||||
|
||||
static void setDefaultTrailingSparkTable() {
|
||||
setLinearCurve(config->trailingSparkLoadBins, 20, 100, 1);
|
||||
setRpmTableBin(config->trailingSparkRpmBins);
|
||||
|
@ -112,8 +121,7 @@ void setDefaultIgnition() {
|
|||
setDefaultTrailingSparkTable();
|
||||
|
||||
// CLT correction
|
||||
setLinearCurve(config->cltTimingBins, CLT_CURVE_RANGE_FROM, 120, 1);
|
||||
setArrayValues(config->cltTimingExtra, 0.0f);
|
||||
setDefaultCltTimingCorrection();
|
||||
|
||||
// IAT correction
|
||||
setDefaultIatTimingCorrection();
|
||||
|
|
|
@ -144,8 +144,6 @@ void EngineState::periodicFastCallback() {
|
|||
}
|
||||
engine->fuelComputer.running.postCrankingFuelCorrection = m_postCrankingFactor;
|
||||
|
||||
engine->ignitionState.updateAdvanceCorrections();
|
||||
|
||||
baroCorrection = getBaroCorrection();
|
||||
|
||||
auto tps = Sensor::get(SensorType::Tps1);
|
||||
|
@ -175,6 +173,7 @@ void EngineState::periodicFastCallback() {
|
|||
#endif //EFI_LAUNCH_CONTROL
|
||||
|
||||
float l_ignitionLoad = getIgnitionLoad();
|
||||
engine->ignitionState.updateAdvanceCorrections(l_ignitionLoad);
|
||||
float baseAdvance = engine->ignitionState.getWrappedAdvance(rpm, l_ignitionLoad);
|
||||
float corrections = engineConfiguration->timingMode == TM_DYNAMIC ?
|
||||
// Pull any extra timing for knock retard
|
||||
|
|
|
@ -130,17 +130,21 @@ angle_t getRunningAdvance(float rpm, float engineLoad) {
|
|||
return advanceAngle;
|
||||
}
|
||||
|
||||
angle_t getCltTimingCorrection() {
|
||||
angle_t getCltTimingCorrection(float engineLoad) {
|
||||
const auto clt = Sensor::get(SensorType::Clt);
|
||||
|
||||
if (!clt)
|
||||
return 0; // this error should be already reported somewhere else, let's just handle it
|
||||
|
||||
return interpolate2d(clt.Value, config->cltTimingBins, config->cltTimingExtra);
|
||||
return interpolate3d(
|
||||
config->ignitionCltCorrTable,
|
||||
config->ignitionCltCorrLoadBins, engineLoad,
|
||||
config->ignitionCltCorrTempBins, clt.Value
|
||||
);
|
||||
}
|
||||
|
||||
void IgnitionState::updateAdvanceCorrections() {
|
||||
cltTimingCorrection = getCltTimingCorrection();
|
||||
void IgnitionState::updateAdvanceCorrections(float engineLoad) {
|
||||
cltTimingCorrection = getCltTimingCorrection(engineLoad);
|
||||
}
|
||||
|
||||
angle_t getAdvanceCorrections(float engineLoad) {
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
class IgnitionState : public ignition_state_s {
|
||||
public:
|
||||
void updateDwell(float rpm, bool isCranking);
|
||||
void updateAdvanceCorrections();
|
||||
void updateAdvanceCorrections(float engineLoad);
|
||||
|
||||
floatms_t getDwell() const;
|
||||
angle_t getWrappedAdvance(const float rpm, const float engineLoad);
|
||||
|
|
|
@ -606,7 +606,8 @@ bool validateConfigOnStartUpOrBurn() {
|
|||
ensureArrayIsAscendingOrDefault("Ign Trim Rpm", config->ignTrimRpmBins);
|
||||
ensureArrayIsAscendingOrDefault("Ign Trim Load", config->ignTrimLoadBins);
|
||||
|
||||
ensureArrayIsAscending("Ignition CLT corr", config->cltTimingBins);
|
||||
ensureArrayIsAscending("Ignition CLT corr CLT", config->ignitionCltCorrTempBins);
|
||||
ensureArrayIsAscending("Ignition CLT corr Load", config->ignitionCltCorrLoadBins);
|
||||
|
||||
ensureArrayIsAscending("Ignition IAT corr IAT", config->ignitionIatCorrTempBins);
|
||||
ensureArrayIsAscending("Ignition IAT corr Load", config->ignitionIatCorrLoadBins);
|
||||
|
|
|
@ -96,7 +96,7 @@
|
|||
! This is the version of the data stored in flash configuration
|
||||
! Any time an incompatible change is made to the configuration format stored in flash,
|
||||
! update this string to the current date!
|
||||
#define FLASH_DATA_VERSION 250210
|
||||
#define FLASH_DATA_VERSION 250220
|
||||
|
||||
! all the sub-structures are going to be nested within the primary structure, that's
|
||||
! needed to get a proper TunerStudio file
|
||||
|
@ -154,7 +154,7 @@ struct_no_prefix engine_configuration_s
|
|||
#define TRAILING_SPARK_SIZE 4
|
||||
|
||||
#define ENGINE_NOISE_CURVE_SIZE 16
|
||||
#define CLT_TIMING_CURVE_SIZE 8
|
||||
#define CLT_TIMING_CURVE_SIZE 5
|
||||
#define IDLE_VE_SIZE 4
|
||||
|
||||
#define TCU_SOLENOID_COUNT 6
|
||||
|
@ -1819,8 +1819,10 @@ engine_configuration_s engineConfiguration;
|
|||
|
||||
int8_t[CLT_CURVE_SIZE] autoscale cltIdleRpmBins;CLT-based target RPM for automatic idle controller;"C", 2, 0, -40, @@CLT_UPPER_LIMIT@@, 0
|
||||
uint8_t[CLT_CURVE_SIZE] autoscale cltIdleRpm;See idleRpmPid;"RPM", 20, 0, 0, 5000, 0
|
||||
float[CLT_TIMING_CURVE_SIZE] cltTimingBins;CLT-based timing correction;"C", 1, 0, -100, @@CLT_UPPER_LIMIT@@, 1
|
||||
float[CLT_TIMING_CURVE_SIZE] cltTimingExtra;;"degree", 1, 0, -400, 400, 0
|
||||
|
||||
int8_t[CLT_TIMING_CURVE_SIZE x CLT_TIMING_CURVE_SIZE] autoscale ignitionCltCorrTable;;"deg", 0.1, 0, -25, 25, 1
|
||||
int8_t[CLT_TIMING_CURVE_SIZE] ignitionCltCorrTempBins;CLT-based timing correction;"C", 1, 0, -40, @@CLT_UPPER_LIMIT@@, 0
|
||||
uint8_t[CLT_TIMING_CURVE_SIZE] autoscale ignitionCltCorrLoadBins;;"Load", 5, 0, 0, @@MAP_UPPER_LIMIT@@, 0
|
||||
|
||||
|
||||
float[SCRIPT_CURVE_16] scriptCurve1Bins;;"x", 1, 0, -10000, 10000, 3
|
||||
|
|
|
@ -540,14 +540,6 @@ enable2ndByteCanID = false
|
|||
yBins = iatFuelCorr
|
||||
gauge = IATGauge
|
||||
|
||||
curve = cltTimingCorrCurve, "Warmup timing correction"
|
||||
columnLabel = "Coolant", "Extra"
|
||||
xAxis = -40, 120, 9
|
||||
yAxis = 0, 20, 9
|
||||
xBins = cltTimingBins, coolant
|
||||
yBins = cltTimingExtra
|
||||
gauge = CLTGauge
|
||||
|
||||
curve = cltFuelCorrCurve, "Warmup fuel manual Multiplier"
|
||||
columnLabel = "Coolant", "Multiplier"
|
||||
xAxis = -40, 120, 9
|
||||
|
@ -1192,6 +1184,16 @@ curve = rangeMatrix, "Range Switch Input Matrix"
|
|||
gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
|
||||
upDownLabel = "(RICHER)", "(LEANER)"
|
||||
|
||||
table = ignitionCltCorrTable, ignitionCltCorrMap, "Warmup timing correction", 1
|
||||
xyLabels = "CLT Temp", "Ignition Load"
|
||||
xBins = ignitionCltCorrTempBins, coolant
|
||||
yBins = ignitionCltCorrLoadBins, ignitionLoad
|
||||
zBins = ignitionCltCorrTable
|
||||
; gridHeight = 2.0
|
||||
gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees.
|
||||
upDownLabel = "(RICHER)", "(LEANER)"
|
||||
gauge = CLTGauge
|
||||
|
||||
table = trailingSparkTable, trailingSparkMap, "Trailing spark", 1
|
||||
xyLabels = "RPM", "Ignition Load"
|
||||
xBins = trailingSparkRpmBins, RPMValue
|
||||
|
@ -2048,7 +2050,7 @@ menuDialog = main
|
|||
|
||||
subMenu = ignitionTableTbl, "Ignition advance", 0, {isIgnitionEnabled}
|
||||
subMenu = ignitionTableMap, "Ignition advance", 0, {isIgnitionEnabled}
|
||||
subMenu = cltTimingCorrCurve, "Ign CLT correction", 0, {isIgnitionEnabled == 1}
|
||||
subMenu = ignitionCltCorrTable, "Ign CLT correction", 0, {isIgnitionEnabled == 1}
|
||||
subMenu = ignitionIatCorrTableTbl, "Ign IAT correction", 0, {isIgnitionEnabled == 1}
|
||||
subMenu = std_separator
|
||||
|
||||
|
|
Loading…
Reference in New Issue