35 float duty = PERCENT_TO_DUTY(position);
37#if EFI_ELECTRONIC_THROTTLE_BODY
51#if EFI_SHAFT_POSITION_INPUT
63 float idle_range = 0.98;
65 float idle_open = 0.01 + idle_range *
duty;
66 float idle_close = 0.01 + idle_range * (1.0 -
duty);
77 return isConfigurationChanged(stepperEnablePin) ||
78 isConfigurationChanged(stepperEnablePinMode) ||
79 isConfigurationChanged(idle.stepperStepPin) ||
80 isConfigurationChanged(idle.solenoidFrequency) ||
81 isConfigurationChanged(useStepperIdle) ||
82 isConfigurationChanged(idle.solenoidPin) ||
83 isConfigurationChanged(secondSolenoidPin) ||
84 isConfigurationChanged(useRawOutputToDriveIdleStepper) ||
85 isConfigurationChanged(stepper_raw_output[0]) ||
86 isConfigurationChanged(stepper_raw_output[1]) ||
87 isConfigurationChanged(stepper_raw_output[2]) ||
88 isConfigurationChanged(stepper_raw_output[3]);
96 return iacMotor.isBusy();
159 criticalError(
"Second idle pin should be configured for double solenoid mode.");
void initialize(DcMotor *motorPhaseA, DcMotor *motorPhaseB, float reactionTime)
TriggerCentral triggerCentral
SingleTimerExecutor scheduler
efitimeus_t timeToStopIdleTest
RegisteredOutputPin secondIdleSolenoidPin
RegisteredOutputPin idleSolenoidPin
void setSimplePwmDutyCycle(float dutyCycle) override
void initialize(brain_pin_e stepPin, brain_pin_e directionPin, pin_output_mode_e directionPinMode, float reactionTime, brain_pin_e enablePin, pin_output_mode_e enablePinMode)
bool engineMovedRecently(efitick_t nowNt) const
DcMotor * initDcMotor(const char *disPinMsg, const dc_io &io, size_t index, bool useTwoWires)
void setEtbIdlePosition(percent_t pos)
static EngineAccessor engine
static constexpr persistent_config_s * config
static constexpr engine_configuration_s * engineConfiguration
static DualHBridgeStepper iacHbridgeHw
static StepDirectionStepper iacStepperHw
void applyIACposition(percent_t position)
static SimplePwm idleSolenoidClose("idle close")
StepperMotor iacMotor CCM_OPTIONAL
static SimplePwm idleSolenoidOpen("idle open")
Idle Air Control valve hardware.
bool isIdleHardwareRestartNeeded()
bool isBrainPinValid(brain_pin_e brainPin)
void startSimplePwm(SimplePwm *state, const char *msg, Scheduler *executor, OutputPin *output, float frequency, float dutyCycle, pwm_gen_callback *callback)
bool isDoubleSolenoidIdle
output_pin_e stepper_raw_output[4]
bool useRawOutputToDriveIdleStepper
float idleStepperReactionTime
dc_io stepperDcIo[DC_PER_STEPPER]
output_pin_e secondSolenoidPin
bool useHbridgesToDriveIdleStepper
pin_output_mode_e stepperEnablePinMode
bool stepper_dc_use_two_wires
pin_output_mode_e stepperDirectionPinMode
int idleStepperTotalSteps
float cltIdleCorrTable[CLT_IDLE_TABLE_RPM_SIZE][CLT_IDLE_TABLE_CLT_SIZE]