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 <makenne@microsoft.com>
This commit is contained in:
Matthew Kennedy 2021-06-02 14:50:07 -07:00 committed by GitHub
parent fbbb99f50c
commit 981e8f5047
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 317 additions and 285 deletions

View File

@ -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);

View File

@ -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);
/**

View File

@ -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);
}

View File

@ -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);

View File

@ -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 \

View File

@ -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 */
}

View File

@ -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);
}

View File

@ -0,0 +1,4 @@
#include "engine_ptr.h"
void setDefaultBaseEngine(DECLARE_CONFIG_PARAMETER_SIGNATURE);
void setDefaultFuel(DECLARE_CONFIG_PARAMETER_SIGNATURE);

View File

@ -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
/**

View File

@ -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 \

View File

@ -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);

View File

@ -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);