41 #if EFI_SHAFT_POSITION_INPUT
116 #if EFI_ANTILAG_SYSTEM
123 float tpsForTaper = tps.value_or(0);
129 if (tpsForTaper <= engineConfiguration->idlePidDeactivationTpsThreshold) {
131 float timeSinceRunningPhaseSecs = (nowUs -
lastTimeRunningUs + 1) / US_PER_SECOND_F;
156 return clampPercentValue(
running);
167 return crankingValvePosition;
271 if (rpm < targetRpm) {
284 errorAmpCoef =
interpolateClamped(0, 0, MS2US(1000), errorAmpCoef, timeSincePidResetUs);
286 idlePid->setErrorAmplification(errorAmpCoef);
288 percent_t newValue = idlePid->getOutput(targetRpm, rpm, SLOW_CALLBACK_PERIOD_MS / 1000.0f);
297 float multCoef = interpolate3d(
317 #if EFI_SHAFT_POSITION_INPUT
345 auto phase =
determinePhase(rpm, targetRpm, tps, vehicleSpeed, crankingTaper);
365 auto closedLoop =
getClosedLoop(phase, tps.Value, rpm, targetRpm);
367 iacPosition += closedLoop;
370 iacPosition = clampPercentValue(iacPosition);
373 #if EFI_TUNER_STUDIO && (EFI_PROD_CODE || EFI_SIMULATOR)
394 #if EFI_SHAFT_POSITION_INPUT
FuelComputer fuelComputer
TriggerCentral triggerCentral
efitimeus_t timeToStopBlip
RpmCalculator rpmCalculator
constexpr auto & module()
AntilagSystemBase antilagController
percent_t blipIdlePosition
efitimeus_t timeToStopIdleTest
TunerStudioOutputChannels outputChannels
RegisteredOutputPin fanRelay
RegisteredOutputPin fanRelay2
PidIndustrial industrialWithOverrideIdlePid
void onConfigurationChange(engine_configuration_s const *previousConfig) final
float getClosedLoop(IIdleController::Phase phase, float tpsPos, int rpm, int targetRpm) override
int getTargetRpm(float clt) override
Phase determinePhase(int rpm, int targetRpm, SensorResult tps, float vss, float crankingTaperFraction) override
float m_idleTimingSoftEntryEndTime
float getCrankingTaperFraction() const override
float m_lastAutomaticPosition
float getIdlePosition(float rpm)
float getIdleTimingAdjustment(int rpm) override
efitimeus_t restoreAfterPidResetTimeUs
percent_t getOpenLoop(Phase phase, float rpm, float clt, SensorResult tps, float crankingTaperFraction) override
void onSlowCallback() final
efitimeus_t lastTimeRunningUs
percent_t getCrankingOpenLoop(float clt) const override
float m_crankTaperEndTime
percent_t getRunningOpenLoop(IIdleController::Phase phase, float rpm, float clt, SensorResult tps) override
float getInstantRpm() const
bool getLogicValue() const
bool isSame(const pid_s *parameters) const
void setErrorAmplification(float coef)
void postState(pid_status_s &pidStatus) const
void initPidClass(pid_s *parameters)
float getOutput(float target, float input)
float derivativeFilterLoss
uint32_t getRevolutionCounterSinceStart(void) const
virtual SensorResult get() const =0
static float getOrZero(SensorType type)
float getTargetPosition() const
InstantRpmCalculator instantRpm
float interpolateClamped(float x1, float y1, float x2, float y2, float x)
efitimeus_t getTimeNowUs()
void applyIACposition(percent_t position)
Idle Air Control valve hardware.
static void finishIdleTestIfNeeded()
static void undoIdleBlipIfNeeded()
Idle Valve Control thread.
static CCM_OPTIONAL FunctionalSensor clt(SensorType::Clt, MS2NT(10))
persistent_config_s * config
engine_configuration_s * engineConfiguration
expected< float > SensorResult
running("running", SensorCategory.SENSOR_INPUTS, FieldType.INT, 836, 1.0, -1.0, -1.0, "")
int acSwitchLastChangeTimeMs
float idle_derivativeFilterLoss
int16_t idlePidRpmUpperLimit
int16_t idlePidRpmDeadZone
float idleTimingSoftEntryTime
bool overrideCrankingIacSetting
bool useIdleTimingPidControl
int16_t idlerpmpid_iTermMax
scaled_channel< uint8_t, 10, 1 > iacByTpsHoldTime
int16_t idlerpmpid_iTermMin
uint8_t acIdleExtraOffset
int16_t afterCrankingIACtaperDuration
float idle_antiwindupFreq
bool useIacTableForCoasting
scaled_channel< uint8_t, 10, 1 > iacByTpsDecayTime
int16_t idlePidDeactivationTpsThreshold
int16_t pidExtraForLowRpm
percent_t currentIdlePosition
bool looksLikeCrankToIdle
bool isIacTableForCoasting
percent_t baseIdlePosition
uint8_t idleStepperTargetPosition
uint8_t iacPidMultLoadBins[IAC_PID_MULT_SIZE]
scaled_channel< uint8_t, 1, 100 > iacCoastingRpmBins[CLT_CURVE_SIZE]
float cltCrankingCorr[CLT_CRANKING_CURVE_SIZE]
scaled_channel< uint8_t, 20, 1 > iacPidMultTable[IAC_PID_MULT_SIZE][IAC_PID_MULT_SIZE]
scaled_channel< uint8_t, 1, 10 > iacPidMultRpmBins[IAC_PID_MULT_SIZE]
scaled_channel< int8_t, 1, 2 > cltIdleRpmBins[CLT_CURVE_SIZE]
float cltIdleCorrBins[CLT_CURVE_SIZE]
float cltCrankingCorrBins[CLT_CRANKING_CURVE_SIZE]
scaled_channel< uint8_t, 2, 1 > iacCoasting[CLT_CURVE_SIZE]
scaled_channel< uint8_t, 1, 20 > cltIdleRpm[CLT_CURVE_SIZE]
float cltIdleCorr[CLT_CURVE_SIZE]
float timeSinceCrankingInSecs