rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
default_base_engine.cpp
Go to the documentation of this file.
1#include "pch.h"
2
3#include "defaults.h"
4#include "vr_pwm.h"
5#include "kline.h"
7#include <rusefi/manifest.h>
8#if HW_PROTEUS
9#include "proteus_meta.h"
10#endif // HW_PROTEUS
11
12#if EFI_ALTERNATOR_CONTROL
20#endif // EFI_ALTERNATOR_CONTROL
21
22void setHpfpLobeProfileAngle(int lobes) {
23#if HPFP_LOBE_PROFILE_SIZE == 16
24static const float hardCodedHpfpLobeProfileAnglesForThreeLobes[16] = {0.0, 7.5, 16.5, 24.0,
2532.0 , 40.0, 48.0, 56.0,
2664.0 , 72.0, 80.0, 88.0,
2796.0 , 103.5, 112.5, 120.0
28};
29
30 float multiplier = 3.0 / lobes;
31 for (size_t i = 0; i < HPFP_LOBE_PROFILE_SIZE; i++) {
32 config->hpfpLobeProfileAngle[i] = multiplier * hardCodedHpfpLobeProfileAnglesForThreeLobes[i];
33 }
34#endif // HPFP_LOBE_PROFILE_SIZE
35}
36
37static void setDefaultHPFP() {
38#if ! EFI_UNIT_TEST
39 // unit tests rely on 'hpfpCamLobes' for isGdiEngine() and we need not-GDI by default for unit tests
41#endif
42
43// todo: would be nice for unit tests to be happy about these defaults
44#if EFI_PROD_CODE || EFI_SIMULATOR
46#endif
53}
54
69
71#ifdef HW_HELLEN_8CHAN
73#endif
74
75 engineConfiguration->injectionMode = IM_SEQUENTIAL;
77 engineConfiguration->ignitionMode = IM_INDIVIDUAL_COILS;
78
80 // Use high pressure sensor
82 // Automatic compensation of injector flow based on rail pressure
83 engineConfiguration->injectorCompensationMode = ICM_SensedRailPressure;
84 // Reference rail pressure is 10 000 kPa = 100 bar
86 //setting "flat" 0.2 ms injector's lag time
88
92}
93
94/* Cylinder to bank mapping */
96 for (size_t i = 0; i < engineConfiguration->cylindersCount; i++) {
97 // zero-based index
99 }
100}
101
102static void mc33810defaults() {
104 engineConfiguration->mc33810maxDwellTimer = mc33810maxDwellTimer_e::DWELL_8MS;
106}
107
128
159
161 // Base Engine Settings
164#if MAX_CYLINDER_COUNT >= 4
165 setInline4();
166#else
167 // todo: invoke more complete one cylinder default?
169#endif
170
172
173 for (size_t i = 0; i < engineConfiguration->cylindersCount; i++) {
174 // one knock sensor by default. See also 'setLeftRightBanksNeedBetterName()'
175 // zero-based index
177 }
178
181
186
188
189#ifdef EFI_KLINE
190 engineConfiguration->kLinePeriodUs = 300 /* us*/;
192#endif
193
195
196 // it's useful to know what starting point is given tune based on
197 engineConfiguration->calibrationBirthday = compilationYear() * 10000 + compilationMonth() * 100 + compilationDay();
198
200
203
206
210
213
215
220
222
223 setLinearCurve(engineConfiguration->tractionControlSlipBins, /*from*/0.9, /*to*/1.2, 0.05);
225
227
229
232
233 engineConfiguration->fuelAlgorithm = engine_load_mode_e::LM_SPEED_DENSITY;
234 // let's have valid default while we still have the field
235 engineConfiguration->debugMode = DBG_EXECUTOR;
236
237
239 // this should not be below default rpm! maybe even make them equal?
241
242 // todo: this "2JZ" trigger is very powerful for many low tooth quantity applications
243 // todo: we might be getting closer to a re-name
244 // by the way 2GRFE intake likes position 160 / precision 20
245 // see also https://github.com/rusefi/rusefi/issues/7345
246 //
247 // 2JZ values
250
251 // Limits and Fallbacks
257
259
262
263 // CLT RPM limit table - just the X axis
264 copyArray(config->cltRevLimitRpmBins, { -20, 0, 40, 80 });
265
270// engineConfiguration->alsMinPps = 10;
274
276
281
282 // Trigger
284
285#if EFI_SIMULATOR
286 engineConfiguration->vvtMode[0] = VVT_SINGLE_TOOTH;
288 engineConfiguration->vvtPins[0] = Gpio::A0; // a random unused pin needed to unblock startSimplePwmExt()
289#endif // EFI_SIMULATOR
290
291#if EFI_SIMULATOR
292 // R
293 config->tcuSolenoidTable[0][0] = 99;
294 config->tcuSolenoidTable[0][1] = 1;
295 config->tcuSolenoidTable[0][2] = 2;
296 config->tcuSolenoidTable[0][3] = 3;
297 config->tcuSolenoidTable[0][4] = 4;
298 config->tcuSolenoidTable[0][5] = 5;
299 // P/N
300 config->tcuSolenoidTable[1][0] = 10;
301 config->tcuSolenoidTable[1][1] = 11;
302 config->tcuSolenoidTable[1][2] = 12;
303 config->tcuSolenoidTable[1][3] = 13;
304 config->tcuSolenoidTable[1][4] = 14;
305 config->tcuSolenoidTable[1][5] = 15;
306 config->tcuSolenoidTable[1][6] = 16;
307 config->tcuSolenoidTable[1][7] = 17;
308 config->tcuSolenoidTable[1][8] = 18;
309 config->tcuSolenoidTable[1][9] = 19;
310 // 1
311 config->tcuSolenoidTable[2][0] = 20;
312 config->tcuSolenoidTable[2][1] = 21;
313 config->tcuSolenoidTable[2][2] = 22;
314 // 2
315 config->tcuSolenoidTable[3][0] = 30;
316 config->tcuSolenoidTable[3][1] = 31;
317 config->tcuSolenoidTable[3][3] = 33;
318 // 3
319 config->tcuSolenoidTable[4][0] = 40;
320 config->tcuSolenoidTable[4][1] = 41;
321 config->tcuSolenoidTable[4][4] = 44;
322 // 4
323 config->tcuSolenoidTable[5][0] = 50;
324 config->tcuSolenoidTable[5][1] = 51;
325 config->tcuSolenoidTable[5][5] = 55;
326
327 // [tag:runNotSquareTest] huh why is this not a unit test?!
328 config->scriptTable4[0][0] = 140;
329 config->scriptTable4[0][1] = 141;
330 config->scriptTable4[0][2] = 142;
331 config->scriptTable4[0][3] = 143;
332 config->scriptTable4[0][4] = 144;
333 config->scriptTable4[0][5] = 145;
334
335 config->scriptTable4[1][0] = 240;
336 config->scriptTable4[1][1] = 241;
337 config->scriptTable4[1][2] = 242;
338 config->scriptTable4[1][3] = 243;
339 config->scriptTable4[1][4] = 244;
340 config->scriptTable4[1][5] = 245;
341
342 config->scriptTable4[4][0] = 40;
343 config->scriptTable4[4][2] = 41;
344 config->scriptTable4[4][3] = 42;
345 config->scriptTable4[4][4] = 43;
346 config->scriptTable4[4][5] = 44;
347 config->scriptTable4[4][5] = 45;
348
349 config->scriptTable4[5][0] = 50;
350 config->scriptTable4[5][1] = 51;
351 config->scriptTable4[5][2] = 52;
352 config->scriptTable4[5][3] = 53;
353 config->scriptTable4[5][4] = 54;
354 config->scriptTable4[5][5] = 55;
355
356#endif // EFI_SIMULATOR
357
359
360 // Default this to on - if you want to diagnose, turn it off.
362
367
368 engineConfiguration->etbSplit = MAX_TPS_PPS_DISCREPANCY;
369
370 // Advanced Trigger
371
372 // Battery and alternator
373 engineConfiguration->vbattDividerCoeff = ((float) (15 + 65)) / 15;
374
375#if EFI_ALTERNATOR_CONTROL
377#endif /* EFI_ALTERNATOR_CONTROL */
378
379 // Fuel pump
380 // todo: maybe change to 2s as default?
382
383 engineConfiguration->kLineBaudRate = KLINE_BAUD_RATE;
384
388
389
390 // Tachometer
391 // 50% duty cycle is the default for tach signal
395
398
401
402 //knock
403#ifdef KNOCK_SPECTROGRAM
408#endif
409
410 // Check engine light
411#if EFI_PROD_CODE
413#else
415#endif /* EFI_PROD_CODE */
416
418
419 // Oil pressure protection
423
424 engine->engineModules.apply_all([](auto & m) { m.setDefaultConfiguration(); });
425 // we invoke this last so that we can validate even defaults
427}
428
433
438
439void setTPS1Calibration(uint16_t tpsMin, uint16_t tpsMax) {
440 engineConfiguration->tpsMin = tpsMin;
441 engineConfiguration->tpsMax = tpsMax;
442}
443
444void setTPS1Calibration(uint16_t tpsMin, uint16_t tpsMax, uint16_t tps1SecondaryMin, uint16_t tps1SecondaryMax) {
445 setTPS1Calibration(tpsMin, tpsMax);
446
447
448 engineConfiguration->tps1SecondaryMin = tps1SecondaryMin;
449 engineConfiguration->tps1SecondaryMax = tps1SecondaryMax;
450}
451
452void setCustomMap(float lowValue, float mapLowValueVoltage, float highValue, float mapHighValueVoltage) {
453 engineConfiguration->map.sensor.type = MT_CUSTOM;
455 engineConfiguration->mapLowValueVoltage = mapLowValueVoltage;
457 engineConfiguration->mapHighValueVoltage = mapHighValueVoltage;
458}
459
460void setPPSCalibration(float primaryUp, float primaryDown, float secondaryUp, float secondaryDown) {
465}
466
467void setEtbPID(float p, float i, float d) {
471}
472
477
479#if HW_PROTEUS && EFI_PROD_CODE
480 engineConfiguration->tps1_2AdcChannel = PROTEUS_IN_TPS1_2;
481 setPPSInputs(PROTEUS_IN_PPS, PROTEUS_IN_PPS2);
482#endif // HW_PROTEUS
483}
484
485void setupTLE9201(Gpio controlPin, Gpio direction, Gpio disable, int dcIndex) {
486 // TLE9201 driver
487 // This chip has three control pins:
488 // DIR - sets direction of the motor
489 // PWM - pwm control (enable high, coast low)
490 // DIS - disables motor (enable low)
491
492 // PWM pin
493 engineConfiguration->etbIo[dcIndex].controlPin = controlPin;
494 // DIR pin
495 engineConfiguration->etbIo[dcIndex].directionPin1 = direction;
496 // Disable pin
498
499 // we only have pwm/dir, no dira/dirb
501}
502
503void setupTLE9201IncludingStepper(Gpio controlPin, Gpio direction, Gpio disable, int dcIndex) {
504 setupTLE9201(controlPin, direction, disable, dcIndex);
505
506 // on SBC style stepper IAC fully-extended valve shaft would give least idle air
507 // fully-retracted valve shaft would give most idle air
508 int stepperIndexWeirdness = 1 - dcIndex;
509 engineConfiguration->stepperDcIo[stepperIndexWeirdness].controlPin = controlPin;
510 engineConfiguration->stepperDcIo[stepperIndexWeirdness].directionPin1 = direction;
512 engineConfiguration->stepperDcIo[stepperIndexWeirdness].disablePin = disable;
513}
type_list< Mockable< InjectorModelPrimary >, Mockable< InjectorModelSecondary >,#if EFI_IDLE_CONTROL Mockable< IdleController >,#endif TriggerScheduler,#if EFI_HPFP &&EFI_ENGINE_CONTROL Mockable< HpfpController >,#endif #if EFI_ENGINE_CONTROL Mockable< ThrottleModel >,#endif #if EFI_ALTERNATOR_CONTROL AlternatorController,#endif MainRelayController, Mockable< IgnitionController >, Mockable< AcController >, PrimeController, DfcoController,#if EFI_HD_ACR HarleyAcr,#endif Mockable< WallFuelController >, KnockController, SensorChecker,#if EFI_ENGINE_CONTROL Mockable< LimpManager >,#endif #if EFI_VVT_PID VvtController1, VvtController2, VvtController3, VvtController4,#endif #if EFI_BOOST_CONTROL BoostController,#endif TpsAccelEnrichment,#if EFI_LAUNCH_CONTROL NitrousController,#endif #if EFI_LTFT_CONTROL LongTermFuelTrim,#endif ShortTermFuelTrim,#include "modules_list_generated.h" EngineModule > engineModules
Definition engine.h:194
@ Unassigned
void setHpfpLobeProfileAngle(int lobes)
void defaultsOrFixOnBurn()
void setTPS1Calibration(uint16_t tpsMin, uint16_t tpsMax)
void setCustomMap(float lowValue, float mapLowValueVoltage, float highValue, float mapHighValueVoltage)
void setGDIFueling()
void setProteusEtbIO()
static void mc33810defaults()
void setPPSInputs(adc_channel_e pps1, adc_channel_e pps2)
void setInline4()
static void setDefaultAlternatorParameters()
static void setGdiDefaults()
void setTPS1Inputs(adc_channel_e tps1, adc_channel_e tps2)
void setEtbPID(float p, float i, float d)
void setPPSCalibration(float primaryUp, float primaryDown, float secondaryUp, float secondaryDown)
void setupTLE9201IncludingStepper(Gpio controlPin, Gpio direction, Gpio disable, int dcIndex)
void setDynoDefaults()
static void setDefaultHPFP()
void setupTLE9201(Gpio controlPin, Gpio direction, Gpio disable, int dcIndex)
void setLeftRightBanksNeedBetterName()
void setDefaultBaseEngine()
void setGdiWallWetting()
static EngineAccessor engine
Definition engine.h:413
static constexpr persistent_config_s * config
static constexpr engine_configuration_s * engineConfiguration
static RedundantPair tps2(tps2p, tps2s, SensorType::Tps2)
static void disable(const char *param)
Definition settings.cpp:449
uint8_t tractionControlSpeedBins[TRACTION_CONTROL_ETB_DROP_SPEED_SIZE]
scaled_channel< uint16_t, 100, 1 > tractionControlSlipBins[TRACTION_CONTROL_ETB_DROP_SLIP_SIZE]
scaled_channel< int16_t, 100, 1 > battLagCorrTable[VBAT_INJECTOR_CURVE_PRESSURE_SIZE][VBAT_INJECTOR_CURVE_SIZE]
scaled_channel< uint16_t, 10, 1 > injectorFlowLinearizationPressureBins[FLOW_LINEARIZATION_PRESSURE_SIZE]
scaled_channel< uint8_t, 1, 100 > maximumOilPressureBins[4]
scaled_channel< uint16_t, 10, 1 > hpfpFuelMassCompensationFuelPressure[HPFP_FUEL_MASS_COMPENSATION_SIZE]
int16_t injectionPhase[INJ_PHASE_LOAD_COUNT][INJ_PHASE_RPM_COUNT]
uint8_t tcuSolenoidTable[TCU_SOLENOID_COUNT][TCU_GEAR_COUNT]
scaled_channel< uint8_t, 1, 50 > hpfpTargetRpmBins[HPFP_TARGET_SIZE]
scaled_channel< int16_t, 1, 1 > cltRevLimitRpmBins[CLT_LIMITER_CURVE_SIZE]
uint8_t scriptTable4[TABLE_4_LOAD_SIZE][TABLE_4_RPM_SIZE]
uint16_t hpfpTarget[HPFP_TARGET_SIZE][HPFP_TARGET_SIZE]
scaled_channel< uint16_t, 100, 1 > injectorFlowLinearizationFuelMassBins[FLOW_LINEARIZATION_MASS_SIZE]
scaled_channel< int16_t, 10, 1 > alternatorVoltageTargetTable[ALTERNATOR_VOLTAGE_TARGET_SIZE][ALTERNATOR_VOLTAGE_RPM_SIZE]
scaled_channel< uint16_t, 100, 1 > hpfpFuelMassCompensationFuelMass[HPFP_FUEL_MASS_COMPENSATION_SIZE]
scaled_channel< uint16_t, 10, 1 > hpfpTargetLoadBins[HPFP_TARGET_SIZE]
scaled_channel< uint8_t, 1, 100 > minimumOilPressureBins[8]
scaled_channel< uint8_t, 2, 1 > hpfpLobeProfileAngle[HPFP_LOBE_PROFILE_SIZE]
scaled_channel< uint16_t, 100, 1 > hpfpFuelMassCompensation[HPFP_FUEL_MASS_COMPENSATION_SIZE][HPFP_FUEL_MASS_COMPENSATION_SIZE]
constexpr void setTable(TElement(&dest)[N][M], const VElement value)
void setRpmTableBin(TValue(&array)[TSize])
void setLinearCurve(TValue(&array)[TSize], float from, float to, float precision=0.01f)
void setDefaultVrThresholds()
Definition vr_pwm.cpp:57