From 4486ca0b51bf6c8cb282d526a8590dfc2daa9771 Mon Sep 17 00:00:00 2001 From: rusEfi Date: Thu, 12 Feb 2015 20:06:16 -0600 Subject: [PATCH] auto-sync --- firmware/config/engines/dodge_neon.cpp | 5 ++++- firmware/controllers/algo/advance_map.cpp | 6 +++--- .../controllers/algo/engine_configuration.cpp | 3 +++ firmware/controllers/algo/fuel_math.cpp | 9 +++++---- firmware/controllers/core/table_helper.h | 16 +++++++++++----- firmware/controllers/math/speed_density.cpp | 13 ++++++------- 6 files changed, 32 insertions(+), 20 deletions(-) diff --git a/firmware/config/engines/dodge_neon.cpp b/firmware/config/engines/dodge_neon.cpp index 19a723bd04..cac76041c1 100644 --- a/firmware/config/engines/dodge_neon.cpp +++ b/firmware/config/engines/dodge_neon.cpp @@ -189,7 +189,10 @@ void setDodgeNeonNGCEngineConfiguration(engine_configuration_s *engineConfigurat // set_global_trigger_offset_angle 46 engineConfiguration->globalTriggerAngleOffset = 46; - engineConfiguration->injectionAngle = 46; + // set_injection_offset 0 + engineConfiguration->injectionAngle = 0; + + setMap(engineConfiguration->fuelTable, -180); engineConfiguration->crankingInjectionMode = IM_SIMULTANEOUS; engineConfiguration->injectionMode = IM_SEQUENTIAL; diff --git a/firmware/controllers/algo/advance_map.cpp b/firmware/controllers/algo/advance_map.cpp index bb88e98e57..4d0bfa631f 100644 --- a/firmware/controllers/algo/advance_map.cpp +++ b/firmware/controllers/algo/advance_map.cpp @@ -40,8 +40,7 @@ float getBaseAdvance(int rpm, float engineLoad DECLARE_ENGINE_PARAMETER_S) { engine->m.zeroTestTime = GET_TIMESTAMP() - engine->m.beforeZeroTest; engine->m.beforeAdvance = GET_TIMESTAMP(); - float result = advanceMap.getValue(engineLoad, engineConfiguration->ignitionLoadBins, (float) rpm, - engineConfiguration->ignitionRpmBins); + float result = advanceMap.getValue(engineLoad, (float) rpm); engine->m.advanceTime = GET_TIMESTAMP() - engine->m.beforeAdvance; return result; } @@ -59,5 +58,6 @@ float getAdvance(int rpm, float engineLoad DECLARE_ENGINE_PARAMETER_S) { } void prepareTimingMap(DECLARE_ENGINE_PARAMETER_F) { - advanceMap.init(engineConfiguration->ignitionTable); + advanceMap.init(engineConfiguration->ignitionTable, engineConfiguration->ignitionLoadBins, + engineConfiguration->ignitionRpmBins); } diff --git a/firmware/controllers/algo/engine_configuration.cpp b/firmware/controllers/algo/engine_configuration.cpp index 3270598e1f..7a625043c8 100644 --- a/firmware/controllers/algo/engine_configuration.cpp +++ b/firmware/controllers/algo/engine_configuration.cpp @@ -192,7 +192,10 @@ void setDefaultConfiguration(engine_configuration_s *engineConfiguration, board_ setWholeFuelMap(engineConfiguration, 3); setWholeVEMap(engineConfiguration, 0.8); setMap(engineConfiguration->afrTable, 14.7); + setMap(engineConfiguration->injectionPhase, 0); + setRpmTableBin(engineConfiguration->injPhaseRpmBins, FUEL_RPM_COUNT); + setTableBin2(engineConfiguration->injPhaseLoadBins, FUEL_LOAD_COUNT, 10, 300, 1); setThermistorConfiguration(&engineConfiguration->clt, 0, 9500, 23.8889, 2100, 48.8889, 1000); engineConfiguration->clt.bias_resistor = 1500; diff --git a/firmware/controllers/algo/fuel_math.cpp b/firmware/controllers/algo/fuel_math.cpp index 2f94cd75f8..5ed77dd2cd 100644 --- a/firmware/controllers/algo/fuel_math.cpp +++ b/firmware/controllers/algo/fuel_math.cpp @@ -44,6 +44,7 @@ EXTERN_ENGINE; static Map3D1616 fuelMap; +static Map3D1616 fuelPhaseMap; float getBaseFuel(int rpm DECLARE_ENGINE_PARAMETER_S) { if (engine->engineConfiguration->algorithm == LM_SPEED_DENSITY) { @@ -119,8 +120,9 @@ float getInjectorLag(float vBatt DECLARE_ENGINE_PARAMETER_S) { * @note this method has nothing to do with fuel map VALUES - it's job * is to prepare the fuel map data structure for 3d interpolation */ -void prepareFuelMap(engine_configuration_s *engineConfiguration) { - fuelMap.init(engineConfiguration->fuelTable); +void prepareFuelMap(engine_configuration_s *e) { + fuelMap.init(e->fuelTable, e->fuelLoadBins, e->fuelRpmBins); + fuelPhaseMap.init(e->injectionPhase, e->injPhaseLoadBins, e->injPhaseRpmBins); } /** @@ -146,8 +148,7 @@ float getBaseTableFuel(engine_configuration_s *engineConfiguration, int rpm, flo warning(OBD_PCM_Processor_Fault, "NaN engine load"); return NAN; } - return fuelMap.getValue(engineLoad, engineConfiguration->fuelLoadBins, rpm, - engineConfiguration->fuelRpmBins); + return fuelMap.getValue(engineLoad, rpm); } #if EFI_ENGINE_CONTROL diff --git a/firmware/controllers/core/table_helper.h b/firmware/controllers/core/table_helper.h index 5ab81ece10..f0b84ee59f 100644 --- a/firmware/controllers/core/table_helper.h +++ b/firmware/controllers/core/table_helper.h @@ -17,11 +17,13 @@ template class Map3D { public: - void init(float table[RPM_BIN_SIZE][LOAD_BIN_SIZE]); - float getValue(float x, float xBin[], float y, float yBin[]); + void init(float table[RPM_BIN_SIZE][LOAD_BIN_SIZE], float loadBins[LOAD_BIN_SIZE], float rpmBins[RPM_BIN_SIZE]); + float getValue(float x, float rpm); void setAll(float value); private: float *pointers[LOAD_BIN_SIZE]; + float *loadBins; + float *rpmBins; int initialized; }; @@ -55,17 +57,21 @@ void Table2D::preCalc(float *bin, float *values) { template -void Map3D::init(float table[RPM_BIN_SIZE][LOAD_BIN_SIZE]) { +void Map3D::init(float table[RPM_BIN_SIZE][LOAD_BIN_SIZE], + float loadBins[LOAD_BIN_SIZE], + float rpmBins[RPM_BIN_SIZE]) { for (int k = 0; k < LOAD_BIN_SIZE; k++) { pointers[k] = table[k]; } initialized = MAGIC_TRUE_VALUE; + this->loadBins = loadBins; + this->rpmBins = rpmBins; } template -float Map3D::getValue(float x, float xBin[], float y, float yBin[]) { +float Map3D::getValue(float x, float rpm) { efiAssert(initialized == MAGIC_TRUE_VALUE, "map not initialized", NAN); - return interpolate3d(x, xBin, LOAD_BIN_SIZE, y, yBin, RPM_BIN_SIZE, pointers); + return interpolate3d(x, loadBins, LOAD_BIN_SIZE, rpm, rpmBins, RPM_BIN_SIZE, pointers); } template diff --git a/firmware/controllers/math/speed_density.cpp b/firmware/controllers/math/speed_density.cpp index 4d43bb051f..a2b9a319fc 100644 --- a/firmware/controllers/math/speed_density.cpp +++ b/firmware/controllers/math/speed_density.cpp @@ -85,10 +85,8 @@ float getSpeedDensityFuel(Engine *engine, int rpm) { float intakeC = engine->engineState.iat; float tChargeK = convertCelsiusToKelvin(getTCharge(rpm, tps, coolantC, intakeC)); float map = getMap(); - float VE = veMap.getValue(map, engineConfiguration->veLoadBins, rpm, - engineConfiguration->veRpmBins); - float AFR = afrMap.getValue(map, engineConfiguration->afrLoadBins, rpm, - engineConfiguration->afrRpmBins); + float VE = veMap.getValue(map, rpm); + float AFR = afrMap.getValue(map, rpm); return sdMath(engine->engineConfiguration, VE, map, AFR, tChargeK) * 1000; } @@ -104,7 +102,8 @@ void setDetaultVETable(engine_configuration_s *engineConfiguration) { afrMap.setAll(14.7); } -void initSpeedDensity(engine_configuration_s *engineConfiguration) { - veMap.init(engineConfiguration->veTable); - afrMap.init(engineConfiguration->afrTable); +void initSpeedDensity(engine_configuration_s *e) { + veMap.init(e->veTable, e->veLoadBins, e->veRpmBins); + veMap.init(e->ve2Table, e->ve2LoadBins, e->ve2RpmBins); + afrMap.init(e->afrTable, e->afrLoadBins, e->afrRpmBins); }