From 05a6967c46591e59c396751b0b0cf96a0adc990e Mon Sep 17 00:00:00 2001 From: rusEfi Date: Wed, 11 Feb 2015 20:08:16 -0600 Subject: [PATCH] auto-sync --- firmware/controllers/algo/engine.cpp | 4 +-- firmware/controllers/algo/engine.h | 2 +- firmware/controllers/core/interpolation.cpp | 4 +-- firmware/controllers/core/table_helper.h | 2 +- firmware/controllers/math/engine_math.cpp | 2 +- firmware/controllers/sensors/maf.cpp | 29 ++++++++++++++++++++- firmware/controllers/sensors/maf.h | 1 + unit_tests/main.cpp | 1 + unit_tests/test_engine_math.cpp | 23 ++++++++++++++-- unit_tests/test_engine_math.h | 1 + 10 files changed, 59 insertions(+), 10 deletions(-) diff --git a/firmware/controllers/algo/engine.cpp b/firmware/controllers/algo/engine.cpp index a32a47d146..80a749be27 100644 --- a/firmware/controllers/algo/engine.cpp +++ b/firmware/controllers/algo/engine.cpp @@ -53,7 +53,7 @@ Engine::Engine() { isRunningPwmTest = false; } -void Engine::precalc(engine_configuration_s *engineConfiguration) { +void Engine::precalc() { sparkTable.preCalc(engineConfiguration->sparkDwellBins, engineConfiguration->sparkDwell); @@ -61,8 +61,8 @@ void Engine::precalc(engine_configuration_s *engineConfiguration) { float volts = i / MAF_DECODING_CACHE_MULT; float maf = interpolate2d(volts, engineConfiguration->mafDecodingBins, engineConfiguration->mafDecoding, MAF_DECODING_COUNT); + mafDecodingLookup[i] = maf; } - } void Engine::init() { diff --git a/firmware/controllers/algo/engine.h b/firmware/controllers/algo/engine.h index 26bc5118ad..11f70f04e7 100644 --- a/firmware/controllers/algo/engine.h +++ b/firmware/controllers/algo/engine.h @@ -169,7 +169,7 @@ public: */ float mafDecodingLookup[MAF_DECODING_CACHE_SIZE]; - void precalc(engine_configuration_s *engineConfiguration); + void precalc(); void updateSlowSensors(); void watchdog(); diff --git a/firmware/controllers/core/interpolation.cpp b/firmware/controllers/core/interpolation.cpp index 425b4f8599..125cf9f349 100644 --- a/firmware/controllers/core/interpolation.cpp +++ b/firmware/controllers/core/interpolation.cpp @@ -27,7 +27,7 @@ FastInterpolation::FastInterpolation(float x1, float y1, float x2, float y2) { void FastInterpolation::init(float x1, float y1, float x2, float y2) { if (x1 == x2) { - firmwareError("Same x1 and x2 in interpolate: %f/%f", x1, x2); + firmwareError("init: Same x1 and x2 in interpolate: %f/%f", x1, x2); return; } a = INTERPOLATION_A(x1, y1, x2, y2); @@ -52,7 +52,7 @@ float FastInterpolation::getValue(float x) { float interpolate(float x1, float y1, float x2, float y2, float x) { // todo: double comparison using EPS if (x1 == x2) { - firmwareError("Same x1 and x2 in interpolate: %f/%f", x1, x2); + firmwareError("interpolate: Same x1 and x2 in interpolate: %f/%f", x1, x2); return NAN; } diff --git a/firmware/controllers/core/table_helper.h b/firmware/controllers/core/table_helper.h index d9211555d7..5ab81ece10 100644 --- a/firmware/controllers/core/table_helper.h +++ b/firmware/controllers/core/table_helper.h @@ -41,7 +41,7 @@ void Table2D::preCalc(float *bin, float *values) { float x1 = bin[i]; float x2 = bin[i + 1]; if (x1 == x2) { - firmwareError("Same x1 and x2 in interpolate: %f/%f", x1, x2); + firmwareError("preCalc: Same x1 and x2 in interpolate: %f/%f", x1, x2); return; } diff --git a/firmware/controllers/math/engine_math.cpp b/firmware/controllers/math/engine_math.cpp index 160b23d62e..876963d469 100644 --- a/firmware/controllers/math/engine_math.cpp +++ b/firmware/controllers/math/engine_math.cpp @@ -73,7 +73,7 @@ float getEngineLoadT(DECLARE_ENGINE_PARAMETER_F) { void setSingleCoilDwell(engine_configuration_s *engineConfiguration) { for (int i = 0; i < DWELL_CURVE_SIZE; i++) { - engineConfiguration->sparkDwellBins[i] = 0; + engineConfiguration->sparkDwellBins[i] = -10 + i; engineConfiguration->sparkDwell[i] = -1; } diff --git a/firmware/controllers/sensors/maf.cpp b/firmware/controllers/sensors/maf.cpp index df60ddc5cc..a741bac106 100644 --- a/firmware/controllers/sensors/maf.cpp +++ b/firmware/controllers/sensors/maf.cpp @@ -3,8 +3,35 @@ #include "adc_inputs.h" #include "maf.h" -EXTERN_ENGINE; +EXTERN_ENGINE +; float getMaf(DECLARE_ENGINE_PARAMETER_F) { return getMafT(engineConfiguration); } + +void setBosch0280218037(engine_configuration_s *engineConfiguration) { + int i = 0; + engineConfiguration->mafDecoding[i] = -34.5; + engineConfiguration->mafDecodingBins[i++] = 0; + + engineConfiguration->mafDecoding[i] = -6; + engineConfiguration->mafDecodingBins[i++] = 0.78125; + + engineConfiguration->mafDecoding[i] = 10.5; + engineConfiguration->mafDecodingBins[i++] = 1.38671875; + + engineConfiguration->mafDecoding[i] = 105.3; + engineConfiguration->mafDecodingBins[i++] = 2.91015625; + + engineConfiguration->mafDecoding[i] = 387.5; + engineConfiguration->mafDecodingBins[i++] = 4.2578125; + + engineConfiguration->mafDecoding[i] = 738; + engineConfiguration->mafDecodingBins[i++] = 4.98046875; + + while (i < MAF_DECODING_COUNT) { + engineConfiguration->mafDecoding[i] = 738; + engineConfiguration->mafDecodingBins[i++] = 4.98046875 + i; + } +} diff --git a/firmware/controllers/sensors/maf.h b/firmware/controllers/sensors/maf.h index f1299611d2..2ea4c2896d 100644 --- a/firmware/controllers/sensors/maf.h +++ b/firmware/controllers/sensors/maf.h @@ -14,5 +14,6 @@ #define getMafT(ec) (getVoltageDivided(ec->mafAdcChannel)) float getMaf(void); +void setBosch0280218037(engine_configuration_s *engineConfiguration); #endif diff --git a/unit_tests/main.cpp b/unit_tests/main.cpp index 647f2763a6..1f3005cef4 100644 --- a/unit_tests/main.cpp +++ b/unit_tests/main.cpp @@ -142,6 +142,7 @@ int main(void) { testIdleController(); testMenuTree(); + testMafLookup(); // resizeMap(); printf("Success 20150207\r\n"); diff --git a/unit_tests/test_engine_math.cpp b/unit_tests/test_engine_math.cpp index bde12ade94..c05e832a00 100644 --- a/unit_tests/test_engine_math.cpp +++ b/unit_tests/test_engine_math.cpp @@ -12,6 +12,7 @@ #include "map.h" #include "speed_density.h" #include "engine_test_helper.h" +#include "maf.h" void testIgnitionPlanning(void) { printf("*************************************************** testIgnitionPlanning\r\n"); @@ -22,11 +23,13 @@ void testIgnitionPlanning(void) { assertEquals(IM_BATCH, engineConfiguration->injectionMode); } -extern engine_configuration_s *engineConfiguration; - void testEngineMath(void) { printf("*************************************************** testEngineMath\r\n"); + EngineTestHelper eth(FORD_ESCORT_GT); + Engine * engine = ð.engine; + engine_configuration_s *engineConfiguration = engine->engineConfiguration; + engineConfiguration->rpmMultiplier = 0.5; assertEqualsM("600 RPM", 50, getOneDegreeTimeMs(600) * 180); @@ -43,6 +46,22 @@ void testEngineMath(void) { assertEquals(327.6667, getTCharge(4000, 100, 300, 350)); } +void testMafLookup(void) { + printf("*************************************************** testMafLookup\r\n"); + + EngineTestHelper eth(FORD_ESCORT_GT); + Engine * engine = ð.engine; + engine_configuration_s *engineConfiguration = engine->engineConfiguration; + setBosch0280218037(engineConfiguration); + engine->precalc(); + + assertEqualsM("@0", -34.5000, engine->mafDecodingLookup[0]); + assertEqualsM("@1", -33.7875, engine->mafDecodingLookup[1]); + assertEqualsM("@2", -33.0750, engine->mafDecodingLookup[2]); + assertEqualsM("@200", 313.8826, engine->mafDecodingLookup[200]); + assertEqualsM("@255", 738, engine->mafDecodingLookup[255]); +} + float getMap(void) { return 0; } diff --git a/unit_tests/test_engine_math.h b/unit_tests/test_engine_math.h index f31e2be9eb..f507d17e19 100644 --- a/unit_tests/test_engine_math.h +++ b/unit_tests/test_engine_math.h @@ -10,5 +10,6 @@ void testEngineMath(void); void testIgnitionPlanning(void); +void testMafLookup(void); #endif /* TEST_ENGINE_MATH_H_ */