Staged injection support; use two sets of injectors on the same engine #5247

This commit is contained in:
Matthew Kennedy 2024-01-07 21:20:45 -05:00 committed by rusefillc
parent 1302f780b2
commit 563950faa7
2 changed files with 14 additions and 3 deletions

View File

@ -141,10 +141,19 @@ void EngineState::periodicFastCallback() {
float untrimmedInjectionMass = getInjectionMass(rpm) * engine->engineState.lua.fuelMult + engine->engineState.lua.fuelAdd;
auto clResult = fuelClosedLoopCorrection();
// Store the pre-wall wetting injection duration for scheduling purposes only, not the actual injection duration
engine->engineState.injectionDuration = engine->module<InjectorModelPrimary>()->getInjectionDuration(untrimmedInjectionMass);
float fuelLoad = getFuelingLoad();
injectionStage2Fraction = getStage2InjectionFraction(rpm, fuelLoad);
float stage2InjectionMass = untrimmedInjectionMass * injectionStage2Fraction;
float stage1InjectionMass = untrimmedInjectionMass - stage2InjectionMass;
// Store the pre-wall wetting injection duration for scheduling purposes only, not the actual injection duration
engine->engineState.injectionDuration = engine->module<InjectorModelPrimary>()->getInjectionDuration(stage1InjectionMass);
engine->engineState.injectionDurationStage2 =
engineConfiguration->enableStagedInjection
? engine->module<InjectorModelSecondary>()->getInjectionDuration(stage2InjectionMass)
: 0;
injectionOffset = getInjectionOffset(rpm, fuelLoad);
engine->lambdaMonitor.update(rpm, fuelLoad);

View File

@ -28,6 +28,8 @@ float getCrankingFuel(float baseFuel);
float getCrankingFuel3(float baseFuel, uint32_t revolutionCounterSinceStart);
float getInjectionMass(int rpm);
percent_t getInjectorDutyCycle(int rpm);
percent_t getInjectorDutyCycleStage2(int rpm);
float getStage2InjectionFraction(int rpm, float fuelLoad);
float getStandardAirCharge();
float getCylinderFuelTrim(size_t cylinderNumber, int rpm, float fuelLoad);