Idle Control

Elite Software Programmer › ESP - Main setup › FunctionsUpdated Sep 2026

A clean, steady idle is one of the things customers notice first, and it is one of the fussier parts of a Haltech Elite tune. Here's how we approach Idle Control in ESP: picking the right control method, getting the base table close, then letting closed loop, long term trim and the idle-up offsets do the fine work.

What idle control is really doing

With your foot off the pedal, the throttle blade is closed and the engine is living on whatever air sneaks past it. Idle control gives the ECU a way to meter a little extra air on purpose. More air means more torque, and more torque holds the engine speed up against loads like the alternator, the A/C compressor or a cold, stiff engine. Less air lets the speed come back down. The Elite does this with one of several devices, and everything else in the function is about deciding how much air to add at any moment.

Step 1: pick the control method

On the Wiring tab, the Control Method tells the Elite what hardware it is driving. Choose the one that matches what is physically on the engine:

Control methodHardwareHow the ECU moves air
DBWAn electronic throttle already set up in the DBW functionCracks the main throttle open a little
BAC Two WireA single bypass air solenoidPulses it like an injector. Low duty is near closed, high duty is near fully open
BAC Three WireA valve with two coils sharing a 12V feedOne coil pushes airflow up and the other pulls it down from a mid position
Stepper Motor (Absolute)A four-wire stepper, like our screw-in idle air control motorLearns its position at key-on, then follows the base tables
Stepper Motor (Relative)A four-wire stepperJust steps open or closed based on whether RPM is under or over target. No base tables, no long term trim
Ignition OnlyNothing extraFor engines with no DBW throttle and no idle valve. Timing is the only tool

A couple of notes from the shop. A three-wire BAC valve with nothing connected usually sits around half open, so if you have the two outputs swapped, the valve simply works backwards. The engine will run away when it should come down. Swap the output assignment rather than rewiring. For stepper motors, the "duty" you see in ESP is really a percentage of the stepper's full travel, and the four dedicated stepper outputs are selected for you on the Connections section. If you're building a new loom, grab the matching plug and pins for the screw-in motor or the two-screw style, and see our stepper outputs article for the wiring side.

Step 2: open or closed loop

In Open Loop the ECU outputs exactly what the base table says, and you do all the correcting yourself. In Closed Loop the ECU watches RPM against the Target RPM table and trims the output to close the gap. We start every car in open loop, get the base table close enough that it idles on its own, and only then switch to closed loop. A closed loop controller that has to make up for a bad base table will hunt, overshoot and occasionally stall the car.

The Idle Control tab settings

SettingWhat it doesOur advice
BAC TypeThree-wire valves only. Uni-Directional drives both outputs with equal duty, Complementary inverts the second (25% on one means 75% on the other), Bi Directional splits the range so each coil covers halfMatch the valve's design. If you're not sure, ask us before guessing
FrequencyPulse rate for two- and three-wire BAC valves (300 by default)Leave it unless the valve maker specifies something else
DBW Max PositionHow far the throttle opens when idle control commands 100% (default 10)Keep it just large enough to cover cold start and heavy loads
Output MaxA ceiling on the idle output (default 100)Lower it if the engine can overshoot badly at full output
Stall OffsetIf RPM falls this far under target, output jumps to 100% to rescue the engine (default 400)A good safety net. Tighten it only if it triggers on normal dips
Close Idle Valve On BoostForces 0% output under positive boostTurn it on if the valve's inlet isn't plumbed back into the pressurized intake ahead of the throttle, or it becomes a boost leak
PID ScalerScales all three PID tables at once, 100% is normalHandy for quick experiments. Put it back to 100% and fix the tables properly
RPM Rate Lower / Upper LimitClosed loop only corrects while RPM is changing slower than these rates (defaults -300 and 300)Closer to zero waits for a calmer idle before correcting
Max Vehicle SpeedClosed loop only runs below this speed, when a speed sensor is set up (default 10 km/h, about 6 mph)Strongly recommended. It stops the controller "idling" while you roll to a stop
Decel Offset and Decay TimeAdds extra output when the throttle closes, then fades it out (defaults 10 and 2.50)Your main tool for stopping the RPM dip when you come off the pedal
Decel Fuel Cut RestoreKeeps decel cut from working within this many RPM of the idle target (default 200)Leave a sensible gap so decel cut never fights the idle

The decel fuel cut restore setting is easy to overlook. With a target of 800 rpm and the default 200, the decel cut system can't be told to cut anywhere below 1000 rpm, whatever your decel tables say. That protects you from a decel map that accidentally overlaps the idle. More on that side of things in our Decel article.

Stepper calibration direction

An absolute stepper finds its position at key-on by driving to one end of travel. Normal Calibration drives it closed, so an engine started mid-calibration will idle low at first. Reverse Calibration drives it open, so an early start idles high. Most people prefer a slightly high first idle to a stall, but either works if the driver waits a moment before cranking.

The tables that do the work

  • Target RPM: the idle speed you want, usually against coolant temperature, up to 3D.
  • Post Start Target Offset and Post Start Base Offset: extra RPM target and extra output straight after start-up, mapped to fade to zero over run time.
  • Base: the output that should hold the engine on target with no help from closed loop. This is the table that matters most.
  • Min Output: a floor the output can never go under, whatever the other tables say.
  • Proportional, Integral and Derivative Gain: how hard and how fast closed loop reacts. Our PID tuning article covers the method.
  • Ign Corr: adds timing when RPM is low and pulls it when RPM is high. Spark reacts far faster than air, so this is what makes an idle feel locked in.

Long term trim

Long term trim (enabled by default) lets the Elite learn how much it has had to correct and store that in its own table, which uses the same axes as the base table. Long Term Trim Gain sets how fast it learns. Too high and it can start oscillating, too low and it takes forever. Once the car has been driven in a range of conditions, Apply To Base Table folds what it learned into the base table and zeros the trim. Reset throws the learning away, which is what you want after a hardware change.

Idle-up: telling the ECU a load is coming

An idle controller that waits for RPM to drop is always a step behind. Idle-up offsets add output (and optionally raise the target) the instant a known load switches on:

  • Air conditioning: base and RPM offsets when the Air Conditioner Control output is on (defaults 5 and 50).
  • Power steering and electrical load: the same pair of offsets, triggered by their switch inputs. Think headlights or a fan kicking on.
  • Air pump: an idle delay so the idle can settle before the pump loads the engine.
  • Generic Idle Up 1-4: any input set up as a generic sensor can add base output.

Cooling fans can add their own idle offsets too, set in the Thermofan function.

Throttle follower (dashpot)

Snap the throttle shut at speed and a plain idle controller has nothing extra ready, so RPM can crash past the target. The throttle follower fixes that. Tick Throttle Follower (Dashpot) Enable and two tables appear: Throttle Follower Target, normally RPM against pedal position, and Throttle Follower Decay, which sets how quickly that extra output fades once the pedal starts closing. On a DBW car, the target is a percentage of DBW Max Position and the result is a throttle that closes gently behind the pedal. On a cable throttle car, it is the idle valve that eases back to normal.

Keep the zero-pedal cells honest

The follower target is live whenever the feature is on. Around idle with the pedal at zero, those cells must be 0 or the engine won't come back down to its target. At higher RPM with zero pedal you can carry a small value. Tune the rest by feel, and a road drive tells you more than the dyno.

Troubleshooting idle control

SymptomUsually
Idle surges up and downBase table too far off, P or I gain too high, or RPM rate limits too wide
RPM dips and nearly stalls coming to a stopDecel offset too small or decays too fast, or no vehicle speed input
Idle hangs high after lifting offThrottle follower cells not zero at idle, or decay too slow
Idle goes the wrong way when correctedThree-wire BAC outputs swapped
Boost leak or erratic boost on a turbo carIdle valve inlet not fed from the pressurized pipe ahead of the throttle, and Close Idle Valve On Boost is off
Engine drops when the A/C or fans switch onIdle-up offsets missing or too small

Idle control FAQ

Should I use closed loop idle on a race car?

Usually yes, but keep it gentle. A good base table and ignition correction do most of the work, and closed loop just tidies up. Cars with no idle valve and no DBW throttle can still use Ignition Only, where timing does the work.

Why does my idle change after a few drives?

That's long term trim learning. Once it has settled, apply it to the base table so the car starts from a better place next time.

Can the Elite control an idle valve and DBW at the same time?

Pick one control method. If the car has a DBW throttle, we normally use DBW idle and remove or block the old valve.

If your idle still won't behave, check the idle control tuning guide, or book a free 30-minute consultation and we'll look over a log with you.