From 981e8f5047f541e7e929a6869f5c8b5b0ddbbf24 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Wed, 2 Jun 2021 14:50:07 -0700 Subject: [PATCH] defaults cleanup: base engine & fuel (#2790) * build * fuel and base * fix build * cleanup * extern * tps/tps * alternator * tps * iat timing * cranking RPM Co-authored-by: Matthew Kennedy --- firmware/config/engines/mazda_miata_vvt.cpp | 24 -- firmware/config/engines/mazda_miata_vvt.h | 1 - .../actuators/alternator_controller.cpp | 10 - .../actuators/alternator_controller.h | 1 - firmware/controllers/algo/algo.mk | 2 + .../algo/defaults/default_base_engine.cpp | 70 ++++++ .../algo/defaults/default_fuel.cpp | 234 ++++++++++++++++++ firmware/controllers/algo/defaults/defaults.h | 4 + .../controllers/algo/engine_configuration.cpp | 233 +---------------- firmware/controllers/controllers.mk | 1 + firmware/controllers/math/speed_density.cpp | 21 -- firmware/controllers/math/speed_density.h | 1 - 12 files changed, 317 insertions(+), 285 deletions(-) create mode 100644 firmware/controllers/algo/defaults/default_base_engine.cpp create mode 100644 firmware/controllers/algo/defaults/default_fuel.cpp create mode 100644 firmware/controllers/algo/defaults/defaults.h diff --git a/firmware/config/engines/mazda_miata_vvt.cpp b/firmware/config/engines/mazda_miata_vvt.cpp index b80d7a1c2f..46bcf8f459 100644 --- a/firmware/config/engines/mazda_miata_vvt.cpp +++ b/firmware/config/engines/mazda_miata_vvt.cpp @@ -86,22 +86,6 @@ static const uint8_t fsio_table_vvt_target[FSIO_TABLE_8][FSIO_TABLE_8] = { {/* 7 85 *//* 0 700.0*/17, /* 1 1000.0*/28, /* 2 2000.0*/33, /* 3 3000.0*/28, /* 4 3500.0*/30, /* 5 4500.0*/28, /* 6 5500.0*/11, /* 7 6500.0*/5, }, }; -static const float tpsTspSame[TPS_TPS_ACCEL_TABLE] = -{0.0, 10.0, 20.0, 35.0, 50.0, 65.0, 80.0, 100.0}; - -static const uint8_t tpsTpsTable[TPS_TPS_ACCEL_TABLE][TPS_TPS_ACCEL_TABLE] = { -/* Generated by TS2C on Tue Apr 18 21:29:16 EDT 2017*/ -{/* 0 0 *//* 0 0.0*/0, /* 1 10.0*/0, /* 2 20.0*/0, /* 3 35.0*/0, /* 4 50.0*/0, /* 5 65.0*/0, /* 6 80.0*/0, /* 7 100.0*/0, }, -{/* 1 10 *//* 0 0.0*/10, /* 1 10.0*/0, /* 2 20.0*/0, /* 3 35.0*/0, /* 4 50.0*/0, /* 5 65.0*/0, /* 6 80.0*/0, /* 7 100.0*/0, }, -{/* 2 20 *//* 0 0.0*/17, /* 1 10.0*/10, /* 2 20.0*/0, /* 3 35.0*/0, /* 4 50.0*/0, /* 5 65.0*/0, /* 6 80.0*/0, /* 7 100.0*/0, }, -{/* 3 35 *//* 0 0.0*/23, /* 1 10.0*/17, /* 2 20.0*/10, /* 3 35.0*/0, /* 4 50.0*/0, /* 5 65.0*/0, /* 6 80.0*/0, /* 7 100.0*/0, }, -{/* 4 50 *//* 0 0.0*/28, /* 1 10.0*/23, /* 2 20.0*/17, /* 3 35.0*/10, /* 4 50.0*/0, /* 5 65.0*/0, /* 6 80.0*/0, /* 7 100.0*/0, }, -{/* 5 65 *//* 0 0.0*/32, /* 1 10.0*/28, /* 2 20.0*/23, /* 3 35.0*/17, /* 4 50.0*/10, /* 5 65.0*/0, /* 6 80.0*/0, /* 7 100.0*/0, }, -{/* 6 80 *//* 0 0.0*/35, /* 1 10.0*/32, /* 2 20.0*/28, /* 3 35.0*/23, /* 4 50.0*/17, /* 5 65.0*/10, /* 6 80.0*/0, /* 7 100.0*/0, }, -{/* 7 100 *//* 0 0.0*/37, /* 1 10.0*/35, /* 2 20.0*/32, /* 3 35.0*/28, /* 4 50.0*/23, /* 5 65.0*/17, /* 6 80.0*/10, /* 7 100.0*/0, }, -}; - - const float mazda_miata_nb2_RpmBins[FUEL_RPM_COUNT] = {700.0, 820.0, 950.0, 1100.0, 1300.0, 1550.0, 1800.0, 2150.0, 2500.0, 3000.0, 3500.0, 4150.0, @@ -240,12 +224,6 @@ static void setMAFTransferFunction(DECLARE_CONFIG_PARAMETER_SIGNATURE) { } } -void setMazdaMiataNbTpsTps(DECLARE_CONFIG_PARAMETER_SIGNATURE) { - copyArray(config->tpsTpsAccelFromRpmBins, tpsTspSame); - copyArray(config->tpsTpsAccelFromRpmBins, tpsTspSame); - copyTable(config->tpsTpsAccelTable, tpsTpsTable); -} - void setMazdaMiataNbInjectorLag(DECLARE_CONFIG_PARAMETER_SIGNATURE) { copyArray(engineConfiguration->injector.battLagCorr, injectorLagCorrection); copyArray(engineConfiguration->injector.battLagCorrBins, injectorLagBins); @@ -352,8 +330,6 @@ static void setMazdaMiataEngineNB2Defaults(DECLARE_CONFIG_PARAMETER_SIGNATURE) { // enable cylinder_cleanup engineConfiguration->isCylinderCleanupEnabled = true; - setMazdaMiataNbTpsTps(PASS_CONFIG_PARAMETER_SIGNATURE); - // set_whole_ve_map 80 setMazdaMiataNbInjectorLag(PASS_CONFIG_PARAMETER_SIGNATURE); diff --git a/firmware/config/engines/mazda_miata_vvt.h b/firmware/config/engines/mazda_miata_vvt.h index d0848d4d15..7a31a289b4 100644 --- a/firmware/config/engines/mazda_miata_vvt.h +++ b/firmware/config/engines/mazda_miata_vvt.h @@ -12,7 +12,6 @@ #include "engine_configuration.h" void setMazdaMiataNbInjectorLag(DECLARE_CONFIG_PARAMETER_SIGNATURE); -void setMazdaMiataNbTpsTps(DECLARE_CONFIG_PARAMETER_SIGNATURE); void setMazdaNB2VVTSettings(DECLARE_CONFIG_PARAMETER_SIGNATURE); /** diff --git a/firmware/controllers/actuators/alternator_controller.cpp b/firmware/controllers/actuators/alternator_controller.cpp index 5c37058723..98ac944dd4 100644 --- a/firmware/controllers/actuators/alternator_controller.cpp +++ b/firmware/controllers/actuators/alternator_controller.cpp @@ -138,16 +138,6 @@ void setAltPFactor(float p) { showAltInfo(); } -void setDefaultAlternatorParameters(DECLARE_CONFIG_PARAMETER_SIGNATURE) { - engineConfiguration->alternatorOffAboveTps = 120; - - engineConfiguration->targetVBatt = 14; - - engineConfiguration->alternatorControl.offset = 0; - engineConfiguration->alternatorControl.pFactor = 30; - engineConfiguration->alternatorControl.periodMs = 100; -} - void onConfigurationChangeAlternatorCallback(engine_configuration_s *previousConfiguration) { shouldResetPid = !alternatorPid.isSame(&previousConfiguration->alternatorControl); } diff --git a/firmware/controllers/actuators/alternator_controller.h b/firmware/controllers/actuators/alternator_controller.h index b91457adab..4c018c5375 100644 --- a/firmware/controllers/actuators/alternator_controller.h +++ b/firmware/controllers/actuators/alternator_controller.h @@ -18,6 +18,5 @@ void setAltPFactor(float p); void setAltIFactor(float p); void setAltDFactor(float p); void showAltInfo(void); -void setDefaultAlternatorParameters(DECLARE_CONFIG_PARAMETER_SIGNATURE); void onConfigurationChangeAlternatorCallback(engine_configuration_s *previousConfiguration); diff --git a/firmware/controllers/algo/algo.mk b/firmware/controllers/algo/algo.mk index 9f91889a94..38caa41a6d 100644 --- a/firmware/controllers/algo/algo.mk +++ b/firmware/controllers/algo/algo.mk @@ -21,3 +21,5 @@ CONTROLLERS_ALGO_SRC_CPP = $(PROJECT_DIR)/controllers/algo/advance_map.cpp \ $(PROJECT_DIR)/controllers/algo/fuel/fuel_computer.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_fuel.cpp \ diff --git a/firmware/controllers/algo/defaults/default_base_engine.cpp b/firmware/controllers/algo/defaults/default_base_engine.cpp new file mode 100644 index 0000000000..03e9e68361 --- /dev/null +++ b/firmware/controllers/algo/defaults/default_base_engine.cpp @@ -0,0 +1,70 @@ +#include "defaults.h" +#include "engine_configuration.h" + +EXTERN_CONFIG; + +static void setDefaultAlternatorParameters(DECLARE_CONFIG_PARAMETER_SIGNATURE) { + engineConfiguration->alternatorOffAboveTps = 120; + + engineConfiguration->targetVBatt = 14; + + engineConfiguration->alternatorControl.offset = 0; + engineConfiguration->alternatorControl.pFactor = 30; + engineConfiguration->alternatorControl.periodMs = 100; +} + +void setDefaultBaseEngine(DECLARE_CONFIG_PARAMETER_SIGNATURE) { + // Base Engine Settings + engineConfiguration->specs.cylindersCount = 4; + engineConfiguration->specs.displacement = 2; + engineConfiguration->specs.firingOrder = FO_1_3_4_2; + + CONFIG(compressionRatio) = 9; + + // Limits and Fallbacks + engineConfiguration->rpmHardLimit = 7000; + engineConfiguration->cutFuelOnHardLimit = true; + engineConfiguration->cutSparkOnHardLimit = true; + + engineConfiguration->failedMapFallback = 60; + engineConfiguration->enableMapEstimationTableFallback = false; + + // Trigger + engineConfiguration->trigger.type = TT_TOOTHED_WHEEL_60_2; + setOperationMode(engineConfiguration, FOUR_STROKE_CAM_SENSOR); + engineConfiguration->useOnlyRisingEdgeForTrigger = false; + + engineConfiguration->globalTriggerAngleOffset = 0; + + // Default this to on - if you want to diagnose, turn it off. + engineConfiguration->silentTriggerError = true; + + // Advanced Trigger + + // Battery and alternator + engineConfiguration->vbattDividerCoeff = ((float) (15 + 65)) / 15; + +#if EFI_ALTERNATOR_CONTROL + setDefaultAlternatorParameters(PASS_CONFIG_PARAMETER_SIGNATURE); +#endif /* EFI_ALTERNATOR_CONTROL */ + + // Fuel pump + engineConfiguration->startUpFuelPumpDuration = 4; + + // Fan + engineConfiguration->fanOnTemperature = 95; + engineConfiguration->fanOffTemperature = 91; + + // Tachometer + // 50% duty cycle is the default for tach signal + CONFIG(tachPulseDurationAsDutyCycle) = true; + CONFIG(tachPulseDuractionMs) = 0.5; + CONFIG(tachPulsePerRev) = 1; + + // Check engine light +#if EFI_PROD_CODE + engineConfiguration->warningPeriod = 10; +#else + engineConfiguration->warningPeriod = 0; +#endif /* EFI_PROD_CODE */ +} diff --git a/firmware/controllers/algo/defaults/default_fuel.cpp b/firmware/controllers/algo/defaults/default_fuel.cpp new file mode 100644 index 0000000000..37dd1493b1 --- /dev/null +++ b/firmware/controllers/algo/defaults/default_fuel.cpp @@ -0,0 +1,234 @@ +#include "defaults.h" +#include "engine_configuration.h" +#include "table_helper.h" +#include "mazda_miata_vvt.h" + +EXTERN_CONFIG; + +static void setBosch02880155868(DECLARE_CONFIG_PARAMETER_SIGNATURE) { + // http://www.boschdealer.com/specsheets/0280155868cs.jpg + engineConfiguration->injector.battLagCorrBins[0] = 6; + engineConfiguration->injector.battLagCorr[0] = 3.371; + + engineConfiguration->injector.battLagCorrBins[1] = 8; + engineConfiguration->injector.battLagCorr[1] = 1.974; + + engineConfiguration->injector.battLagCorrBins[2] = 10; + engineConfiguration->injector.battLagCorr[2] = 1.383; + + engineConfiguration->injector.battLagCorrBins[3] = 11; + engineConfiguration->injector.battLagCorr[3] = 1.194; + + engineConfiguration->injector.battLagCorrBins[4] = 12; + engineConfiguration->injector.battLagCorr[4] = 1.04; + + engineConfiguration->injector.battLagCorrBins[5] = 13; + engineConfiguration->injector.battLagCorr[5] = 0.914; + + engineConfiguration->injector.battLagCorrBins[6] = 14; + engineConfiguration->injector.battLagCorr[6] = 0.797; + + engineConfiguration->injector.battLagCorrBins[7] = 15; + engineConfiguration->injector.battLagCorr[7] = 0.726; +} + +static void setDefaultWarmupFuelEnrichment(DECLARE_CONFIG_PARAMETER_SIGNATURE) { + static const float bins[] = + { + -40, + -30, + -20, + -10, + 0, + 10, + 20, + 30, + 40, + 50, + 60, + 70, + 80, + 90, + 100, + 110 + }; + + copyArray(config->cltFuelCorrBins, bins); + + static const float values[] = + { + 1.50, + 1.50, + 1.42, + 1.36, + 1.28, + 1.19, + 1.12, + 1.10, + 1.06, + 1.06, + 1.03, + 1.01, + 1, + 1, + 1, + 1 + }; + + copyArray(config->cltFuelCorr, values); +} + +static void setDefaultVETable(DECLARE_CONFIG_PARAMETER_SIGNATURE) { + setRpmTableBin(config->veRpmBins, FUEL_RPM_COUNT); + setTable(config->veTable, 80); + +// setRpmTableBin(engineConfiguration->ve2RpmBins, FUEL_RPM_COUNT); +// setLinearCurve(engineConfiguration->ve2LoadBins, 10, 300, 1); +// ve2Map.setAll(0.81); + + setRpmTableBin(config->lambdaRpmBins, FUEL_RPM_COUNT); + setTable(config->lambdaTable, 1); + + setRpmTableBin(engineConfiguration->baroCorrRpmBins, BARO_CORR_SIZE); + setLinearCurve(engineConfiguration->baroCorrPressureBins, 75, 105, 1); + for (int i = 0; i < BARO_CORR_SIZE;i++) { + for (int j = 0; j < BARO_CORR_SIZE;j++) { + // Default baro table is all 1.0, we can't recommend a reasonable default here + engineConfiguration->baroCorrTable[i][j] = 1; + } + } +} + +static void setDefaultFuelCutParameters(DECLARE_CONFIG_PARAMETER_SIGNATURE) { + engineConfiguration->coastingFuelCutEnabled = false; + engineConfiguration->coastingFuelCutRpmLow = 1300; + engineConfiguration->coastingFuelCutRpmHigh = 1500; + engineConfiguration->coastingFuelCutTps = 2; + engineConfiguration->coastingFuelCutMap = 30; + engineConfiguration->coastingFuelCutClt = 30; +} + +static void setDefaultStftSettings(DECLARE_CONFIG_PARAMETER_SIGNATURE) { + auto& cfg = CONFIG(stft); + + // Default to disabled + CONFIG(fuelClosedLoopCorrectionEnabled) = false; + + // Default to proportional mode (for wideband sensors) + CONFIG(stftIgnoreErrorMagnitude) = false; + + // 60 second startup delay - some O2 sensors are slow to warm up. + cfg.startupDelay = 60; + + // Only correct in [12.0, 17.0] + cfg.minAfr = 120; + cfg.maxAfr = 170; + + // Above 60 deg C + cfg.minClt = 60; + + // 0.5% deadband + cfg.deadband = 5; + + // Sensible region defaults + cfg.maxIdleRegionRpm = 1000 / RPM_1_BYTE_PACKING_MULT; + cfg.maxOverrunLoad = 35; + cfg.minPowerLoad = 85; + + // Sensible cell defaults + for (size_t i = 0; i < efi::size(cfg.cellCfgs); i++) { + // 30 second time constant - nice and slow + cfg.cellCfgs[i].timeConstant = 30 * 10; + + /// Allow +-5% + cfg.cellCfgs[i].maxAdd = 5; + cfg.cellCfgs[i].maxRemove = -5; + } +} + +static const uint8_t tpsTpsTable[TPS_TPS_ACCEL_TABLE][TPS_TPS_ACCEL_TABLE] = { +/* Generated by TS2C on Tue Apr 18 21:29:16 EDT 2017*/ +{/* 0 0 *//* 0 0.0*/0, /* 1 10.0*/0, /* 2 20.0*/0, /* 3 35.0*/0, /* 4 50.0*/0, /* 5 65.0*/0, /* 6 80.0*/0, /* 7 100.0*/0, }, +{/* 1 10 *//* 0 0.0*/10, /* 1 10.0*/0, /* 2 20.0*/0, /* 3 35.0*/0, /* 4 50.0*/0, /* 5 65.0*/0, /* 6 80.0*/0, /* 7 100.0*/0, }, +{/* 2 20 *//* 0 0.0*/17, /* 1 10.0*/10, /* 2 20.0*/0, /* 3 35.0*/0, /* 4 50.0*/0, /* 5 65.0*/0, /* 6 80.0*/0, /* 7 100.0*/0, }, +{/* 3 35 *//* 0 0.0*/23, /* 1 10.0*/17, /* 2 20.0*/10, /* 3 35.0*/0, /* 4 50.0*/0, /* 5 65.0*/0, /* 6 80.0*/0, /* 7 100.0*/0, }, +{/* 4 50 *//* 0 0.0*/28, /* 1 10.0*/23, /* 2 20.0*/17, /* 3 35.0*/10, /* 4 50.0*/0, /* 5 65.0*/0, /* 6 80.0*/0, /* 7 100.0*/0, }, +{/* 5 65 *//* 0 0.0*/32, /* 1 10.0*/28, /* 2 20.0*/23, /* 3 35.0*/17, /* 4 50.0*/10, /* 5 65.0*/0, /* 6 80.0*/0, /* 7 100.0*/0, }, +{/* 6 80 *//* 0 0.0*/35, /* 1 10.0*/32, /* 2 20.0*/28, /* 3 35.0*/23, /* 4 50.0*/17, /* 5 65.0*/10, /* 6 80.0*/0, /* 7 100.0*/0, }, +{/* 7 100 *//* 0 0.0*/37, /* 1 10.0*/35, /* 2 20.0*/32, /* 3 35.0*/28, /* 4 50.0*/23, /* 5 65.0*/17, /* 6 80.0*/10, /* 7 100.0*/0, }, +}; + +static void setMazdaMiataNbTpsTps(DECLARE_CONFIG_PARAMETER_SIGNATURE) { + setLinearCurve(config->tpsTpsAccelFromRpmBins, 0, 100, 10); + setLinearCurve(config->tpsTpsAccelToRpmBins, 0, 100, 10); + copyTable(config->tpsTpsAccelTable, tpsTpsTable); +} + +void setDefaultFuel(DECLARE_CONFIG_PARAMETER_SIGNATURE) { + // Base injection configuration + engineConfiguration->isInjectionEnabled = true; + engineConfiguration->injectionMode = IM_SEQUENTIAL; + + /** + * By the way http://users.erols.com/srweiss/tableifc.htm has a LOT of data + */ + engineConfiguration->injector.flow = 200; + engineConfiguration->stoichRatioPrimary = STOICH_RATIO * PACK_MULT_AFR_CFG; + + // 9.0 = E100 pure ethanol + engineConfiguration->stoichRatioSecondary = 9.0f * PACK_MULT_AFR_CFG; + + // Injector deadtime + setBosch02880155868(PASS_CONFIG_PARAMETER_SIGNATURE); + + // Tables + setFuelTablesLoadBin(10, 160 PASS_CONFIG_PARAMETER_SUFFIX); + setRpmTableBin(config->injPhaseRpmBins, FUEL_RPM_COUNT); + setDefaultVETable(PASS_CONFIG_PARAMETER_SIGNATURE); + setTable(config->injectionPhase, -180.0f); + + // Charge temperature estimation + engineConfiguration->tChargeMinRpmMinTps = 0.25; + engineConfiguration->tChargeMinRpmMaxTps = 0.25; + engineConfiguration->tChargeMaxRpmMinTps = 0.25; + engineConfiguration->tChargeMaxRpmMaxTps = 0.9; + engineConfiguration->tChargeMode = TCHARGE_MODE_RPM_TPS; + engineConfiguration->tChargeAirCoefMin = 0.098f; + engineConfiguration->tChargeAirCoefMax = 0.902f; + engineConfiguration->tChargeAirFlowMax = 153.6f; + engineConfiguration->tChargeAirIncrLimit = 1.0f; + engineConfiguration->tChargeAirDecrLimit = 12.5f; + + // CLT correction table + setDefaultWarmupFuelEnrichment(PASS_CONFIG_PARAMETER_SIGNATURE); + + // IAT correction table + // TODO + + // Closed loop fuel correction + setDefaultStftSettings(PASS_CONFIG_PARAMETER_SIGNATURE); + + // Decel fuel cut + setDefaultFuelCutParameters(PASS_CONFIG_PARAMETER_SIGNATURE); + + // Accel Enrich + engineConfiguration->engineLoadAccelLength = 6; + engineConfiguration->engineLoadAccelEnrichmentThreshold = 5; // kPa + engineConfiguration->engineLoadAccelEnrichmentMultiplier = 0; // todo: improve implementation and re-enable by default + + engineConfiguration->tpsAccelLength = 12; + engineConfiguration->tpsAccelEnrichmentThreshold = 40; // TPS % change, per engine cycle + +#if !EFI_UNIT_TEST + // todo: this is a reasonable default for what kinds of engines exactly? + engineConfiguration->wwaeTau = 0.3; + engineConfiguration->wwaeBeta = 0.3; +#endif // EFI_UNIT_TEST + + // TPS/TPS AE curve + setMazdaMiataNbTpsTps(PASS_CONFIG_PARAMETER_SIGNATURE); + + // AE load taper + setLinearCurve(engineConfiguration->mapAccelTaperBins, 0, 32, 4); + setArrayValues(engineConfiguration->mapAccelTaperMult, 1.0f); +} \ No newline at end of file diff --git a/firmware/controllers/algo/defaults/defaults.h b/firmware/controllers/algo/defaults/defaults.h new file mode 100644 index 0000000000..1bf80cbce8 --- /dev/null +++ b/firmware/controllers/algo/defaults/defaults.h @@ -0,0 +1,4 @@ +#include "engine_ptr.h" + +void setDefaultBaseEngine(DECLARE_CONFIG_PARAMETER_SIGNATURE); +void setDefaultFuel(DECLARE_CONFIG_PARAMETER_SIGNATURE); diff --git a/firmware/controllers/algo/engine_configuration.cpp b/firmware/controllers/algo/engine_configuration.cpp index d0d11f3eb2..7b703b09be 100644 --- a/firmware/controllers/algo/engine_configuration.cpp +++ b/firmware/controllers/algo/engine_configuration.cpp @@ -38,6 +38,7 @@ #include "accelerometer.h" #endif +#include "defaults.h" #include "custom_engine.h" #include "engine_template.h" #include "bmw_m73.h" @@ -219,7 +220,6 @@ void setConstantDwell(floatms_t dwellMs DECLARE_CONFIG_PARAMETER_SUFFIX) { } void setWholeIgnitionIatCorr(float value DECLARE_CONFIG_PARAMETER_SUFFIX) { - // todo: make setMap a template setTable(config->ignitionIatCorrTable, value); } @@ -309,36 +309,6 @@ void setDefaultSdCardParameters(DECLARE_CONFIG_PARAMETER_SIGNATURE) { #endif /* EFI_PROD_CODE */ } - -// todo: move injector calibration somewhere else? -// todo: add a enum? if we have enough data? -static void setBosch02880155868(DECLARE_ENGINE_PARAMETER_SIGNATURE) { - // http://www.boschdealer.com/specsheets/0280155868cs.jpg - engineConfiguration->injector.battLagCorrBins[0] = 6; - engineConfiguration->injector.battLagCorr[0] = 3.371; - - engineConfiguration->injector.battLagCorrBins[1] = 8; - engineConfiguration->injector.battLagCorr[1] = 1.974; - - engineConfiguration->injector.battLagCorrBins[2] = 10; - engineConfiguration->injector.battLagCorr[2] = 1.383; - - engineConfiguration->injector.battLagCorrBins[3] = 11; - engineConfiguration->injector.battLagCorr[3] = 1.194; - - engineConfiguration->injector.battLagCorrBins[4] = 12; - engineConfiguration->injector.battLagCorr[4] = 1.04; - - engineConfiguration->injector.battLagCorrBins[5] = 13; - engineConfiguration->injector.battLagCorr[5] = 0.914; - - engineConfiguration->injector.battLagCorrBins[6] = 14; - engineConfiguration->injector.battLagCorr[6] = 0.797; - - engineConfiguration->injector.battLagCorrBins[7] = 15; - engineConfiguration->injector.battLagCorr[7] = 0.726; -} - static void setDefaultWarmupIdleCorrection(DECLARE_CONFIG_PARAMETER_SIGNATURE) { initTemperatureCurve(CLT_MANUAL_IDLE_CORRECTION, 1.0); @@ -358,61 +328,6 @@ static void setDefaultWarmupIdleCorrection(DECLARE_CONFIG_PARAMETER_SIGNATURE) { setCurveValue(CLT_MANUAL_IDLE_CORRECTION, 70, 33.0 / baseIdle); } -static void setDefaultWarmupFuelEnrichment(DECLARE_ENGINE_PARAMETER_SIGNATURE) { - static const float bins[] = - { - -40, - -30, - -20, - -10, - 0, - 10, - 20, - 30, - 40, - 50, - 60, - 70, - 80, - 90, - 100, - 110 - }; - - copyArray(config->cltFuelCorrBins, bins); - - static const float values[] = - { - 1.50, - 1.50, - 1.42, - 1.36, - 1.28, - 1.19, - 1.12, - 1.10, - 1.06, - 1.06, - 1.03, - 1.01, - 1, - 1, - 1, - 1 - }; - - copyArray(config->cltFuelCorr, values); -} - -static void setDefaultFuelCutParameters(DECLARE_ENGINE_PARAMETER_SIGNATURE) { - engineConfiguration->coastingFuelCutEnabled = false; - engineConfiguration->coastingFuelCutRpmLow = 1300; - engineConfiguration->coastingFuelCutRpmHigh = 1500; - engineConfiguration->coastingFuelCutTps = 2; - engineConfiguration->coastingFuelCutMap = 30; - engineConfiguration->coastingFuelCutClt = 30; -} - static void setDefaultCrankingSettings(DECLARE_ENGINE_PARAMETER_SIGNATURE) { CONFIG(useTLE8888_cranking_hack) = true; @@ -521,7 +436,7 @@ void setTargetRpmCurve(int rpm DECLARE_CONFIG_PARAMETER_SUFFIX) { setLinearCurve(engineConfiguration->cltIdleRpm, rpm, rpm, 10); } -void setDefaultMultisparkParameters(DECLARE_ENGINE_PARAMETER_SIGNATURE) { +static void setDefaultMultisparkParameters(DECLARE_ENGINE_PARAMETER_SIGNATURE) { // 1ms spark + 2ms dwell engineConfiguration->multisparkSparkDuration = 1000; engineConfiguration->multisparkDwell = 2000; @@ -532,44 +447,6 @@ void setDefaultMultisparkParameters(DECLARE_ENGINE_PARAMETER_SIGNATURE) { engineConfiguration->multisparkMaxSparkingAngle = 30; } -void setDefaultStftSettings(DECLARE_ENGINE_PARAMETER_SIGNATURE) { - auto& cfg = CONFIG(stft); - - // Default to disabled - CONFIG(fuelClosedLoopCorrectionEnabled) = false; - - // Default to proportional mode (for wideband sensors) - CONFIG(stftIgnoreErrorMagnitude) = false; - - // 60 second startup delay - some O2 sensors are slow to warm up. - cfg.startupDelay = 60; - - // Only correct in [12.0, 17.0] - cfg.minAfr = 120; - cfg.maxAfr = 170; - - // Above 60 deg C - cfg.minClt = 60; - - // 0.5% deadband - cfg.deadband = 5; - - // Sensible region defaults - cfg.maxIdleRegionRpm = 1000 / RPM_1_BYTE_PACKING_MULT; - cfg.maxOverrunLoad = 35; - cfg.minPowerLoad = 85; - - // Sensible cell defaults - for (size_t i = 0; i < efi::size(cfg.cellCfgs); i++) { - // 30 second time constant - nice and slow - cfg.cellCfgs[i].timeConstant = 30 * 10; - - /// Allow +-5% - cfg.cellCfgs[i].maxAdd = 5; - cfg.cellCfgs[i].maxRemove = -5; - } -} - void setDefaultGppwmParameters(DECLARE_ENGINE_PARAMETER_SIGNATURE) { // Same config for all channels for (size_t i = 0; i < efi::size(CONFIG(gppwm)); i++) { @@ -669,20 +546,13 @@ static void setDefaultEngineConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE) { #endif prepareVoidConfiguration(engineConfiguration); -#if EFI_ALTERNATOR_CONTROL - setDefaultAlternatorParameters(PASS_CONFIG_PARAMETER_SIGNATURE); -#endif /* EFI_ALTERNATOR_CONTROL */ + setDefaultBaseEngine(PASS_CONFIG_PARAMETER_SIGNATURE); + setDefaultFuel(PASS_CONFIG_PARAMETER_SIGNATURE); #if EFI_IDLE_CONTROL setDefaultIdleParameters(PASS_CONFIG_PARAMETER_SIGNATURE); #endif /* EFI_IDLE_CONTROL */ -#if !EFI_UNIT_TEST - // todo: this is a reasonable default for what kinds of engines exactly? - engineConfiguration->wwaeTau = 0.3; - engineConfiguration->wwaeBeta = 0.3; -#endif // EFI_UNIT_TEST - #if EFI_ELECTRONIC_THROTTLE_BODY setDefaultEtbParameters(PASS_CONFIG_PARAMETER_SIGNATURE); setDefaultEtbBiasCurve(PASS_CONFIG_PARAMETER_SIGNATURE); @@ -691,9 +561,7 @@ static void setDefaultEngineConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE) { setDefaultBoostParameters(PASS_CONFIG_PARAMETER_SIGNATURE); #endif - engineConfiguration->afterCrankingIACtaperDuration = 35; - - CONFIG(tachPulsePerRev) = 1; + engineConfiguration->afterCrankingIACtaperDuration = 35; // OBD-II default rate is 500kbps CONFIG(canBaudRate) = B500KBPS; @@ -701,8 +569,6 @@ static void setDefaultEngineConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE) { CONFIG(mafSensorType) = Bosch0280218037; setBosch0280218037(config); - setBosch02880155868(PASS_ENGINE_PARAMETER_SIGNATURE); - engineConfiguration->canSleepPeriodMs = 50; engineConfiguration->canReadEnabled = true; engineConfiguration->canWriteEnabled = true; @@ -718,23 +584,15 @@ static void setDefaultEngineConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE) { } CONFIG(mapMinBufferLength) = 1; - - // 50% duty cycle is the default for tach signal - CONFIG(tachPulseDurationAsDutyCycle) = true; - CONFIG(tachPulseDuractionMs) = 0.5; - + CONFIG(startCrankingDuration) = 3; - CONFIG(compressionRatio) = 9; - engineConfiguration->idlePidRpmDeadZone = 50; engineConfiguration->startOfCrankingPrimingPulse = 0; engineConfiguration->acCutoffLowRpm = 700; engineConfiguration->acCutoffHighRpm = 5000; - engineConfiguration->postCrankingDurationSec = 2; - initTemperatureCurve(IAT_FUEL_CORRECTION_CURVE, 1); engineConfiguration->auxPid[0].minValue = 10; @@ -758,12 +616,6 @@ static void setDefaultEngineConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE) { #if EFI_ENGINE_CONTROL setDefaultWarmupIdleCorrection(PASS_CONFIG_PARAMETER_SIGNATURE); - setDefaultWarmupFuelEnrichment(PASS_ENGINE_PARAMETER_SIGNATURE); - - setDefaultFuelCutParameters(PASS_ENGINE_PARAMETER_SIGNATURE); - - setMazdaMiataNbTpsTps(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 @@ -784,24 +636,8 @@ static void setDefaultEngineConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE) { setLinearCurve(engineConfiguration->map.samplingWindowBins, 800, 7000, 1); setLinearCurve(engineConfiguration->map.samplingWindow, 50, 50, 1); - setTable(config->lambdaTable, 1.0f); - engineConfiguration->stoichRatioPrimary = STOICH_RATIO * PACK_MULT_AFR_CFG; - engineConfiguration->stoichRatioSecondary = 9.0f * PACK_MULT_AFR_CFG; - - setDefaultVETable(PASS_ENGINE_PARAMETER_SIGNATURE); - - setTable(config->injectionPhase, -180.0f); - - setRpmTableBin(config->injPhaseRpmBins, FUEL_RPM_COUNT); - setFuelTablesLoadBin(10, 160 PASS_CONFIG_PARAMETER_SUFFIX); setDefaultIatTimingCorrection(PASS_ENGINE_PARAMETER_SIGNATURE); - setLinearCurve(engineConfiguration->mapAccelTaperBins, 0, 32, 4); - setLinearCurve(engineConfiguration->mapAccelTaperMult, 1, 1, 1); - - setLinearCurve(config->tpsTpsAccelFromRpmBins, 0, 100, 10); - setLinearCurve(config->tpsTpsAccelToRpmBins, 0, 100, 10); - setLinearCurve(config->vvtTable1LoadBins, 20, 120, 10); setRpmTableBin(config->vvtTable1RpmBins, FSIO_TABLE_8); setLinearCurve(config->vvtTable2LoadBins, 20, 120, 10); @@ -822,12 +658,6 @@ static void setDefaultEngineConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE) { // todo: this value is way off! I am pretty sure temp coeffs are off also engineConfiguration->iat.config = {32, 75, 120, 9500, 2100, 1000, 2700}; -#if EFI_PROD_CODE - engineConfiguration->warningPeriod = 10; -#else - engineConfiguration->warningPeriod = 0; -#endif /* EFI_PROD_CODE */ - engineConfiguration->launchRpm = 3000; engineConfiguration->launchTimingRetard = 10; engineConfiguration->launchTimingRpmRange = 500; @@ -838,29 +668,12 @@ static void setDefaultEngineConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE) { engineConfiguration->slowAdcAlpha = 0.33333; engineConfiguration->engineSnifferRpmThreshold = 2500; engineConfiguration->sensorSnifferRpmThreshold = 2500; - engineConfiguration->rpmHardLimit = 7000; engineConfiguration->cranking.rpm = 550; - engineConfiguration->cutFuelOnHardLimit = true; - engineConfiguration->cutSparkOnHardLimit = true; - engineConfiguration->failedMapFallback = 60; - - engineConfiguration->tChargeMinRpmMinTps = 0.25; - engineConfiguration->tChargeMinRpmMaxTps = 0.25; - engineConfiguration->tChargeMaxRpmMinTps = 0.25; - engineConfiguration->tChargeMaxRpmMaxTps = 0.9; - engineConfiguration->tChargeMode = TCHARGE_MODE_RPM_TPS; - engineConfiguration->tChargeAirCoefMin = 0.098f; - engineConfiguration->tChargeAirCoefMax = 0.902f; - engineConfiguration->tChargeAirFlowMax = 153.6f; - engineConfiguration->tChargeAirIncrLimit = 1.0f; - engineConfiguration->tChargeAirDecrLimit = 12.5f; engineConfiguration->noAccelAfterHardLimitPeriodSecs = 3; setDefaultCrankingSettings(PASS_ENGINE_PARAMETER_SIGNATURE); - setDefaultStftSettings(PASS_ENGINE_PARAMETER_SIGNATURE); - /** * Idle control defaults */ @@ -888,7 +701,6 @@ static void setDefaultEngineConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE) { /** * Cranking defaults */ - engineConfiguration->startUpFuelPumpDuration = 4; engineConfiguration->cranking.baseFuel = 27; engineConfiguration->crankingChargeAngle = 70; @@ -907,21 +719,11 @@ static void setDefaultEngineConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE) { // performance optimization engineConfiguration->sensorChartMode = SC_OFF; - engineConfiguration->specs.firingOrder = FO_1_3_4_2; - engineConfiguration->crankingInjectionMode = IM_SIMULTANEOUS; - engineConfiguration->injectionMode = IM_SEQUENTIAL; - engineConfiguration->ignitionMode = IM_ONE_COIL; - engineConfiguration->globalTriggerAngleOffset = 0; engineConfiguration->extraInjectionOffset = 0; engineConfiguration->fuelAlgorithm = LM_SPEED_DENSITY; - engineConfiguration->vbattDividerCoeff = ((float) (15 + 65)) / 15; - - engineConfiguration->fanOnTemperature = 95; - engineConfiguration->fanOffTemperature = 91; - engineConfiguration->tpsMin = convertVoltageTo10bitADC(0); engineConfiguration->tpsMax = convertVoltageTo10bitADC(5); engineConfiguration->tps1SecondaryMin = convertVoltageTo10bitADC(0); @@ -942,22 +744,12 @@ static void setDefaultEngineConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE) { engineConfiguration->oilPressure.value1 = 0; engineConfiguration->oilPressure.value2 = 689.476f; // 100psi = 689.476kPa - setOperationMode(engineConfiguration, FOUR_STROKE_CAM_SENSOR); - engineConfiguration->specs.cylindersCount = 4; - engineConfiguration->specs.displacement = 2; - /** - * By the way http://users.erols.com/srweiss/tableifc.htm has a LOT of data - */ - engineConfiguration->injector.flow = 200; - engineConfiguration->mapLowValueVoltage = 0; // todo: start using this for custom MAP engineConfiguration->mapHighValueVoltage = 5; engineConfiguration->logFormat = LF_NATIVE; - engineConfiguration->trigger.type = TT_TOOTHED_WHEEL_60_2; - engineConfiguration->HD44780width = 20; engineConfiguration->HD44780height = 4; @@ -976,10 +768,6 @@ static void setDefaultEngineConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE) { engineConfiguration->isEngineChartEnabled = true; - engineConfiguration->useOnlyRisingEdgeForTrigger = false; - // Default this to on - if you want to diagnose, turn it off. - engineConfiguration->silentTriggerError = true; - #if EFI_PROD_CODE engineConfiguration->engineChartSize = 300; #else @@ -989,9 +777,7 @@ static void setDefaultEngineConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE) { engineConfiguration->primingSquirtDurationMs = 5; - engineConfiguration->isInjectionEnabled = true; engineConfiguration->isIgnitionEnabled = true; - engineConfiguration->isCylinderCleanupEnabled = false; // this feature is evil if one does not have TPS, better turn off by default engineConfiguration->isMapAveragingEnabled = true; engineConfiguration->isWaveAnalyzerEnabled = true; @@ -1031,13 +817,6 @@ static void setDefaultEngineConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE) { engineConfiguration->hip9011Gain = 1; engineConfiguration->isEngineControlEnabled = true; - - engineConfiguration->engineLoadAccelLength = 6; - engineConfiguration->engineLoadAccelEnrichmentThreshold = 5; // kPa - engineConfiguration->engineLoadAccelEnrichmentMultiplier = 0; // todo: improve implementation and re-enable by default - - engineConfiguration->tpsAccelLength = 12; - engineConfiguration->tpsAccelEnrichmentThreshold = 40; // TPS % change, per engine cycle #endif // EFI_ENGINE_CONTROL #if EFI_FSIO /** diff --git a/firmware/controllers/controllers.mk b/firmware/controllers/controllers.mk index 54ca37cb3b..4e1b6255d0 100644 --- a/firmware/controllers/controllers.mk +++ b/firmware/controllers/controllers.mk @@ -65,6 +65,7 @@ CONTROLLERS_INC=\ $(CONTROLLERS_DIR)/system/timer \ $(CONTROLLERS_DIR)/algo \ $(CONTROLLERS_DIR)/algo/airmass \ + $(CONTROLLERS_DIR)/algo/defaults \ $(CONTROLLERS_DIR)/algo/fuel \ $(CONTROLLERS_DIR)/engine_cycle \ $(CONTROLLERS_DIR)/trigger/decoders \ diff --git a/firmware/controllers/math/speed_density.cpp b/firmware/controllers/math/speed_density.cpp index c02a3c2870..c886dc62f5 100644 --- a/firmware/controllers/math/speed_density.cpp +++ b/firmware/controllers/math/speed_density.cpp @@ -112,27 +112,6 @@ temperature_t getTCharge(int rpm, float tps DECLARE_ENGINE_PARAMETER_SUFFIX) { return Tcharge; } -void setDefaultVETable(DECLARE_ENGINE_PARAMETER_SIGNATURE) { - setRpmTableBin(config->veRpmBins, FUEL_RPM_COUNT); - setTable(config->veTable, 80); - -// setRpmTableBin(engineConfiguration->ve2RpmBins, FUEL_RPM_COUNT); -// setLinearCurve(engineConfiguration->ve2LoadBins, 10, 300, 1); -// ve2Map.setAll(0.81); - - setRpmTableBin(config->lambdaRpmBins, FUEL_RPM_COUNT); - setTable(config->lambdaTable, 1); - - setRpmTableBin(engineConfiguration->baroCorrRpmBins, BARO_CORR_SIZE); - setLinearCurve(engineConfiguration->baroCorrPressureBins, 75, 105, 1); - for (int i = 0; i < BARO_CORR_SIZE;i++) { - for (int j = 0; j < BARO_CORR_SIZE;j++) { - // Default baro table is all 1.0, we can't recommend a reasonable default here - engineConfiguration->baroCorrTable[i][j] = 1; - } - } -} - void initSpeedDensity(DECLARE_ENGINE_PARAMETER_SIGNATURE) { veMap.init(config->veTable, config->veLoadBins, config->veRpmBins); // ve2Map.init(engineConfiguration->ve2Table, engineConfiguration->ve2LoadBins, engineConfiguration->ve2RpmBins); diff --git a/firmware/controllers/math/speed_density.h b/firmware/controllers/math/speed_density.h index 8933df5233..5654314f53 100644 --- a/firmware/controllers/math/speed_density.h +++ b/firmware/controllers/math/speed_density.h @@ -16,5 +16,4 @@ temperature_t getTCharge(int rpm, float tps DECLARE_ENGINE_PARAMETER_SUFFIX); -void setDefaultVETable(DECLARE_ENGINE_PARAMETER_SIGNATURE); void initSpeedDensity(DECLARE_ENGINE_PARAMETER_SIGNATURE);