Jump to content

Config:Idle

From epicEFI Wiki

Idle settings

Configuration for engine idle: the target speed, the open- and closed-loop control that holds it, idle ignition timing, and the idle air hardware (IAC solenoid, stepper, or electronic throttle).

Idle settings

Core idle behaviour: how idle is controlled and the conditions under which the ECU decides the engine is idling.

Idle control mode

See also idleRpmPid

  • Open Loop + Closed Loop
  • Open Loop

TPS threshold

Below this throttle position, the engine is considered idling. If you have an electronic throttle, this checks accelerator pedal position instead of throttle position, and should be set to 1-2%.

Force idle below throttle threshold

Force idle STATE below DriveIntent threshold.

Force timing only below pedal threshold

Force idle ignition (delta target only) below DriverThreshold threshold, only for ignition timing

Idle force delayed by DFCO

Do not force idle ignition while DFCO is active for either of the above.

Delta target rpm smoothing factor

Smoothing factor for delta target rpm ignition adjustment

RPM upper limit

How far above idle speed do we consider idling, i.e. coasting detection threshold. For example, if target = 800, this param = 200, then anything below 1000 RPM is considered idle.

RPM deadzone

If the RPM closer to target than this value, disable closed loop idle correction to prevent oscillation

Max vehicle speed

Above this speed, disable closed loop idle control. Set to 0 to disable (allow closed loop idle at any speed).

Idle overrides

Optional tables and ramps that override normal idle fuel and timing: separate idle/coasting ignition and VE tables, return-to-idle target ramping, and cranking-taper handling.

Separate idle ignition table

This activates a separate ignition timing table for idle conditions, this can help idle stability by using ignition retard and advance either side of the desired idle speed. Extra advance at low idle speeds will prevent stalling and extra retard at high idle speeds can help reduce engine power and slow the idle speed.

Use idle ignition table while coasting

When enabled, the idle ignition table is also applied during coasting (overrun), not only at idle. Limited by Max RPM for idle advance while coasting.

Max RPM for idle advance while coasting

Maximum RPM for which idle advance while coasting is enabled

Separate idle VE table

This activates a separate fuel table for Idle, this allows fine tuning of the idle fuelling.

Override Idle VE table load axis

Allows you to change the default load axis used for the VE table, which is typically MAP (manifold absolute pressure).

  • None
  • MAP
  • TPS
  • PERCENT BARO

Ramp target RPM on return to idle

Ramp the idle target down from the entry threshold over N seconds when returning to idle. Helps prevent overshooting (below) the idle target while returning to idle from coasting.

  • no
  • yes

Ramp target duration

idle return target ramp duration

Separate idle tables for cranking taper

This uses separate ignition timing and VE tables not only for idle conditions, also during the postcranking-to-idle taper transition (See also afterCrankingIACtaperDuration).

Separate coasting idle table

Override the IAC position during overrun conditions to help reduce engine breaking, this can be helpful for large engines in light weight cars or engines that have trouble returning to idle.

Open Loop Idle

Open-loop idle adders. Each active accessory load (A/C, transmission in gear, fans, CAN idle-up) raises the base idle air and/or the target RPM so the engine does not sag when the load engages.

A/C adder

Additional idle % while A/C is active

A/C RPM target

Idle target speed when A/C is enabled. Some cars need the extra speed to keep the AC efficient while idling.

Transmission idle up adder

Additional idle % while transmission idle up is active

Transmission idle up RPM target

Idle target speed when transmission idle up is enabled. Some transmissions need extra idle speed when engaged.

Fan #1 adder

Additional idle % when fan #1 is active. In PWM mode this is scaled according to PWM %

Fan #1 RPM target

Idle RPM target adder when fan #1 is active. Raises the idle RPM target so the closed-loop PID does not fight the open-loop IAC adder.

Fan #2 adder

Additional idle % when fan #2 is active. In PWM mode this is scaled according to PWM %

Fan #2 RPM target

Idle RPM target adder when fan #2 is active. Raises the idle RPM target so the closed-loop PID does not fight the open-loop IAC adder.

CAN idle-up target RPM adder

can box idle up demand

CAN idle-up % adder

can box idle up demand %

Closed Loop Idle

Closed-loop idle PID. The ECU trims idle air (IAC duty or ETB angle) to hold the target RPM, working on top of the open-loop position. See https://content.epicefi.com/wiki/index.php/Guides:PID_Control for tuning the gains.

P gain

Proportional value. See https://content.epicefi.com/wiki/index.php/Guides:PID_Control

I gain

Integral value

See https://content.epicefi.com/wiki/index.php/Guides:PID_Control.

D gain

Derivative value

See https://content.epicefi.com/wiki/index.php/Guides:PID_Control.

Min

PID controller output minimum duty value.

Max

PID controller output maximum duty value.

iTerm Min

iTerm min value

iTerm Max

iTerm max value

PID Extra for low RPM

Increases PID reaction for RPM<target by adding extra percent to PID-error

Use PID output gain table

This flag allows to use a special 'PID Multiplier' table (0.0-1.0) to compensate for nonlinear nature of IAC-RPM controller

ETB idle settings

Idle settings specific to electronic throttle (ETB) cars, where idle air is metered by the throttle plate itself instead of a separate IAC valve.

ETB idle maximum angle

This sets the range of the idle control on the ETB. At 100% idle position, the value specified here sets the base ETB position.

Dashpot emulation

Dashpot (coasting-to-idle) emulation. Adds a temporary slug of idle air when dropping back to idle from a coast, then holds it and decays it away, softening the transition and preventing stall — emulating a mechanical throttle dashpot. Separate values are provided for when A/C is on.

Dashpot coasting-to-idle Initial idle Adder

This value is an added for base idle value. Idle Value added when coasting and transitioning into idle.

Dashpot coasting-to-idle Hold time

How long initial idle adder is held before starting to decay.

Dashpot coasting-to-idle Decay time

How long it takes to remove initial IAC adder to return to normal idle.

Dashpot coasting-to-idle Initial idle Adder(AC ON)

This value is an added for base idle value(AC ON). Idle Value added when coasting and transitioning into idle.

Dashpot coasting-to-idle Hold time(AC ON)

How long initial idle adder is held before starting to decay(AC ON).

Dashpot coasting-to-idle Decay time(AC ON)

How long it takes to remove initial IAC adder to return to normal idle(AC ON).

Ignition idle settings

Idle ignition timing. Lets idle be stabilised with spark as well as air — advancing to recover from a sag and retarding to bleed off speed, for faster correction than air alone.

Open loop idle timing (RPM-error)

Use Idle Target Error Delta timing curve

Include corrections in idle timing

If enabled, adds the result from the RPM-error curve to the corrected idle advance. If disabled, it discards all corrections (IAT, CLT, PID etc.) and uses the curve value directly.

Closed loop ignition timing (PID)

Closed-loop idle ignition timing: a fast PID that adjusts spark advance around the idle target for quick correction, working alongside the slower air-based idle PID.

Enable PID control

Gain is in degrees advance per rpm away from target, a good starting point is 0.1 = 10 deg per 100 rpm

P gain

Proportional value. See https://content.epicefi.com/wiki/index.php/Guides:PID_Control

I gain

Integral value

See https://content.epicefi.com/wiki/index.php/Guides:PID_Control.

D gain

Derivative value

See https://content.epicefi.com/wiki/index.php/Guides:PID_Control.

Min adjustment (retard)

PID controller output minimum duty value.

Max adjustment (advance)

PID controller output maximum duty value.

Soft entry time

When entering idle, and the PID settings are aggressive, it's good to make a soft entry upon entering closed loop

Idle hardware

Physical idle air hardware: the IAC solenoid or stepper outputs and their drive settings. Electronic-throttle cars meter idle air through the throttle plate instead — see ETB idle settings.

Solenoid

PWM idle air control (IAC) solenoid valve output(s). Supports a single valve or a Subaru/BMW-style double solenoid.

Idle Solenoid Primary output

Primary output pin driving the PWM idle air control (IAC) solenoid valve.

To find the actual value for your hardware, see Hardware.

Double Solenoid Mode

Subaru/BMW style where default valve position is somewhere in the middle. First solenoid opens it more while second can close it more than default position.

Idle Solenoid Secondary output

Second output pin for double-solenoid idle valves (some Subaru and Mazda), where one solenoid opens the valve further and the other closes it past the default position. Only used in Double Solenoid Mode.

To find the actual value for your hardware, see Hardware.

Idle Solenoid output(s) Mode

Output mode for the idle solenoid pin(s). See ECU output mode selection.

Idle Solenoid Frequency

PWM frequency for the idle air control solenoid output. Match it to your valve: too low buzzes audibly and meters air unevenly, too high and the valve cannot respond. Two-wire IAC solenoids are typically driven around 200–300 Hz.

Idle target RPM

Target idle RPM as a function of coolant temperature. A cold engine targets a higher idle, tapering down to the warm idle as it heats up.

Idle open loop position

Open-loop idle air position (IAC % or stepper steps) versus coolant temperature. This is the base feed-forward opening; closed-loop control trims around it.

Idle cranking position

Idle air position held while cranking, versus coolant temperature. Sets how far the valve opens to get the engine to fire, before the crank-to-run taper takes over.

ETB idle maximum angle

This sets the range of the idle control on the ETB. At 100% idle position, the value specified here sets the base ETB position.

Cranking Idle Valve Curve

2D curve — X: Coolant (-40 to 120), Y: Percent (0 to 100).

Idle after start (crank-to-run) taper

After the engine starts, the extra cranking idle air is tapered out over a number of engine cycles (versus coolant temperature) down to the running idle position.

Idle valve Crank-to-Run Taper

2D curve — X: Coolant (-40 to 120), Y: cycles (0 to 500).

Idle PID output gain

Optional PID output multiplier (0.0–1.0) versus RPM, used to compensate for the non-linear relationship between IAC position and RPM. Enabled by Use PID output gain table.

Idle PID error gain

Extra PID gain applied as a function of RPM error, letting the controller react harder the further idle is from target.

Coasting idle position override

Idle air position used during overrun/coasting (versus coolant temperature) when the separate coasting idle table is enabled, used to manage engine braking and return-to-idle.

Valve force close / stepper re-park

Gradually drives the idle valve closed and re-parks the stepper once the engine is clearly off-idle (above an RPM and TPS threshold). Prevents manifold pressure leaking through the valve at cruise and resets accumulated stepper step-loss without a full homing cycle.

Force close: RPM threshold

Gradually close the idle valve and re-park the stepper when RPM is above this value AND TPS is above idleValveForceCloseTps. Prevents manifold pressure leakage through the valve at cruise, and resets accumulated stepper step-loss errors. Set to 0 to disable.

Force close: delay (s)

Seconds to wait after RPM and TPS conditions are both met before beginning to close the idle valve. Prevents closing on brief throttle blips.

Force close: TPS taper start (%)

TPS at which the idle valve starts closing toward zero (taper start). Used together with idleValveForceCloseRpm and idleValveForceCloseTpsEnd.

Force close: TPS taper end (%)

TPS at which the idle valve reaches fully closed and the stepper is re-parked (taper end). Position is linearly interpolated from current to zero between idleValveForceCloseTps and this value. Should be greater than idleValveForceCloseTps.

Force close: re-park overstep (steps)

Number of extra steps to overstep toward closed when re-parking after force-close. Compensates for stepper drift without needing the full startup homing sequence. 5 is a good starting point.

Stepper acceleration profile

Complete theory explained by Texas Instruments: https://www.ti.com/lit/an/slyt482/slyt482.pdf?ts=1781468773748

The problem

An idle stepper IAC is open-loop: the ECU counts steps; it does not know if the motor actually moved. Commanding a high step rate from a standstill often causes lost steps, noise, or a valve that only works if you keep the rate unrealistically low.

The older logic used a single Stepper reaction time (ms) as a fixed delay between steps — safe, but slow on long moves.

Stepper acceleration profile ramps speed: start slow → accelerate → cruise → decelerate → stop soft. Long moves finish faster without demanding full rate from a standstill.

Mode How to get it Behavior
Constant speed (legacy) Set Starting speed, Target speed, Accel rate, or Decel rate to 0 Fixed pace from reaction time (old behavior)
Accel/decel profile Starting, Target, Accel, and Decel all > 0 Trapezoid on long moves; triangle on short moves

Stopping speed of 0 is treated as at least 1 step/s when the profile is enabled.

Parameters

Parameter Unit Role
Stepper reaction time ms Caps how fast the profile may run. Treat as: reactionTime = 1000 / (max steps/s). Also used for pauses (direction change, sleep, parking).
Stepper total steps count Full valve travel. Independent of the speed profile.
Starting speed steps/s Rate at the beginning of a move. 0 disables the profile.
Target speed steps/s Cruise / maximum rate on long moves.
Stopping speed steps/s Rate at the end of a move (soft stop).
Acceleration rate steps/s² Ramp from starting → target.
Deceleration rate steps/s² Ramp down toward stopping.

Firmware also keeps starting ≤ target and stopping ≤ starting, and clamps speeds that exceed what the hardware can achieve.

Reaction time and maximum speed

Reaction time limits the maximum speed the acceleration profile can reach.

(Strictly this ceiling is most important on H-bridge drive; for safety, configure it the same on every setup.)

Set reaction time from the motor’s maximum rated step rate:

reactionTime (ms) = 1000 / max_steps_per_second

Example: motor rated 500 steps/s → reaction time 2 ms.

If reaction time is left too large, the profile will never reach the target speed you configured, no matter how high target/accel are.

Starting from scratch

You can use this to get the stepper working. Tune the values according to how the stepper behaves. Faster target speed or acceleration/deceleration can be achieved if the motor doesn't skip steps. Meanwhile some motors might need slower starting and stopping speeds.

1. Set total steps, wiring, and parking so the valve homes correctly.

2. From the motor rating, set:

- Target speed = maximum rated steps/s

If the manufacturer gives step time at max speed (ms per step):

Target speed = 1000 / step_time_ms

- Reaction time = 1000 / Target speed

(same number as above, expressed as ms)

3. Initial profile values:

- Starting speed = Target speed / 10

- Stopping speed = Target speed / 10

- Acceleration rate = Target speed (numerically equal to target steps/s → reaches cruise in about 1 second from a low start)

- Deceleration rate = Target speed (same idea for the ramp-down)

4. Test large moves (parking, big IAC swings) and small corrections. If you lose steps or hear harsh buzz at the start/stop, lower starting/stopping further or soften accel/decel. If moves are clean but slow, raise accel/decel first; only push target if the motor rating allows it.

5. Keep reaction time matched to the rated max speed so it does not silently cap a correctly set target.

---

Migrating from fixed step time

If the old constant-speed tune (reaction time only) was not losing steps:

1. Use the old reaction time only to seed the soft ends of the move:

Starting speed = Stopping speed = 1000 / old_reaction_time

2. Set everything else as when starting from scratch:

- Target speed from the motor’s max rated speed (or 1000 / manufacturer_step_time)

- Reaction time = 1000 / Target speed

- Accel rate = Target

- Decel rate = Target

So migration reuses the proven old pace as a conservative start/stop rate, then adopts full rated cruise and the same 1-second ramp starting points as a new setup.

If the old tune was losing steps, do not use it for starting/stopping — go back to Target / 10 (or lower) and fix mechanical/electrical issues before chasing speed.

To keep pure legacy behavior instead, leave Starting / Target / Accel / Decel at 0.

Open loop ignition idle timing (RPM-error)

Open-loop idle timing curve: ignition advance/retard as a function of how far RPM is from the idle target. Enabled by Open loop idle timing (RPM-error).

Idle Target Error

2D curve — X: Delta (-500 to 500), Y: Deg (-30 to 30).

Idle fuel table

Separate VE/fuel table used at idle when Separate idle VE table is enabled, for fine control of idle fuelling independent of the main table.

Idle ignition table

Separate ignition timing table used at idle when Separate idle ignition table is enabled. Advance at low idle speed prevents stalling; retard at high idle speed bleeds off power to settle the idle.

Rotational idle

Rotational idle (a race/anti-lag-style lumpy idle): deliberately cuts spark and/or fuel in a rotating pattern at idle to produce a distinctive idle sound, with three accumulators that shift the pattern for different exhaust notes. Can be engaged manually by pin or automatically by TPS/CLT.

Enable

Enable rotational idle.

Pin

Switch input that activates rotational idle when held.

To find the actual value for your hardware, see Hardware.

Pin Mode

Input mode for the rotational idle pin. See ECU input mode selection.

Stop STFT for rotational idle (no fuel trim)

Zero STFT for rotational idle.

Rotational cut spark

Rotational cut spark.

Rotational cut fuel

Rotational cut fuel.

Enable automatic engagement for TPS

Enable automatic engagement of rotational idle.

Engage rotational idle below this Driver Intent(TPS/PPS)

Engage rotational idle under this Driver Intent.

Enable auto engage for CLT

Enable Rotational Idle Auto engage CLT.

Auto engage above this CLT

Rotational Idle Auto engage CLT.

Minimum CLT

Minimum CLT for the rotational idle.

Maximum TPS/PPS (0 to disable)

Disengage rotational idle above this Driver Intent.

Minimum RPM

Minimum RPM for the rotational idle.

Maximum RPM

Maximum RPM for the rotational idle.

Disable closed loop idle when rotational idle active

Disable closed loop idle control when rotational idle is active.

Add idle % idle output

Add air to the idle.

Add/Remove air percentage

Percentage of air to add/remove to the idle.

Override ETB Idle Authority (0 to disable override)

Override the ETB authority for the rotational idle.

Fuel Multiplier (1.5 = 150% , 0 to 2.5)

Rotational idle fuel multiplier

Rotational Absolute Timing (-30 = 30 ATDC, 0 = original timing, 10 - -100)

Rotational idle absolute ignition (-20 = atdc 20 degrees)

Old rotational idle logic (true = old, false = new) - see tooltip

Old rotational idle logic, New logic is based on global spark counter, the three layers of accumulators and adders run at the same time, offset shifts the pattern forward or backward with relation to each other, this should allow different sound patterns by combining different offsets;

Rotational Fuel Offset (should be 0, this shifts fuel cut in relation to ignition signal)

Rotational idle fuel offset (should be 0, this shifts fuel cut in relation to ignition signal). At 0, in sequential injection/ignition the fuel pulse is cut before the ignition pulse. so fuel is not wasted.

Accumulator Max 1

Max value for the rotational idle accumulator to skip

Accumulator Adder 1

Accumulator adder

Accumulator Offset 1

Rotational pattern shift #1

Accumulator Max 2

Max value for the rotational idle accumulator to skip

Accumulator Adder 2

Accumulator adder

Accumulator Offset 2

Rotational pattern shift #2

Accumulator Max 3

Max value for the rotational idle accumulator to skip

Accumulator Adder 3

Accumulator adder

Accumulator Offset 3

Rotational pattern shift #3

Transmission idle compensation

Raises idle air and/or target RPM when an automatic transmission is put in gear (switch input), so the engine does not sag under the torque-converter load.

Transmission idle up switch

Switch input that signals the transmission is in gear, activating transmission idle-up.

To find the actual value for your hardware, see Hardware.

Transmission idle up switch mode

Input mode for the transmission idle-up switch. See ECU input mode selection.

Transmission idle up adder

Additional idle % while transmission idle up is active

Transmission idle up RPM target

Idle target speed when transmission idle up is enabled. Some transmissions need extra idle speed when engaged.