11.3. Idle Air Control

11.3.1. Operation

"Idle Control Valve" An idle air valve is a valve which is usually located between either the intake manifold and the outside world, or the Throttle Body Injection Unit and the outside world. Its task is to regulate a certain amount of extra airflow (outside of the InTake/ThrottlePlates) to control the idle RPM. The fuel injection system simply sees this extra air and adjusts fuel accordingly so it doesn't specifically need to know this air is coming from a bypass valve.

A valve is usually an open-close type of switch known as a solenoid, and will usually want to be either open or closed. This is the simplest form of control for idle air and works well for most applications and is the easiest to setup. For mor information on this type of idle control see Genboard/Manual/Config/IdleControl.

In theory, with some valves you could regulate how far the valve opens by regulating the current, i.e. the valve is fighting the spring with the current-turned-into-magnetism. Limiting is usually done using pulse width modulation(PWM). Duty cycle of the PWM control determines how strongly the valve is resisting closing and thus how much it is opened. Note that most idle air bypass valves are open-closed, i.e. either one. It's virtually impossible to get them to hover somewhere in between. For more information on this type of idle control see Genboard/Manual/Config/IdleControl

There are other types of idle control valves that can be modulated to multiple positions so that idle air may be more strictly controlled. This type of valve is known as a stepper motor. This type of valve can be "stepped" to many different positions since it moves one small incriment for every "step" or signal that it recieves. For more information on this type of idle control see Genboard/Manual/Config/IdleControl.

Idle control is a strategy to keep the engine in a reasonable RPM range while your foot is not on the throttle (engine.tps andlt;= config.iac_tps_threshold, see fuelcalc.c).

This works by controlling the air entering the engine with an appropriate valve and a slightly improved version of the PID algorithm. There is also an ignition advance based adjustment option that improves the idlecontrol to smoothness that is not possible with just by idle-air valve control.

There is also an overrun-fuelcut feature, which is not real idlecontrol (rather a fuel saver), but can prevent idling at readline if air leaks into the engine somehow without throttle pressed (so effectively regulates RPM, though noticably roughly). Skipped event would also be possible, but would be hard to tune for a custom setup.

The air-valve can be

  • IdleControl/IdleValvePWM solenoid actuated idle (ON/OFF type also explained there !)
  • IdleControl/IdleValveStepper

    The PWM style is simpler, because if you apply x% PWM, you know where the valve is. Unfortunately for the stepper you do not know where it is located, so you have to control with unknown positions or make sure to step it to one end-location, after which you know where it is. But that takes some time (appr. 0.3sec before every startup).

  • IdleControl/HardwareFaq

An idle air stepper is an idle air bypass system. It allows extra air into the intake manifold independantly of the InTake/ThrottlePlates, with the purpose of controlling the idle RPM.

Let's say an engine is idling at 800 RPM, and you turn on the high beams, woofer, etc. The extra load on the alternator will slow the engine down, in which case the ECU will open the idle air bypass system a little bit to raise the idle back to 800. It is also used to implement different idle speeds depending on for example engine temperature.

The stepper system is common on General Motors TbInjected. A stepper motor moves a pintle in and out, opening and closing a path for extra air.

The General Motors TbInjected Unit's use Bipolar Stepper Motors.

The Genboard has the necessary parts to operate an IAC bipolarstepper.

See ActuatorsNServos for general knowledge about actuators and servos (in many applications).

11.3.2. Installation

Big actuator If you have a bigger idlevalve (whatever type), CruiseControl or AntiLagSystem becomes possible.

-----

Wiring IAC actuator

The two types of idle valve will require a different wiring.

  • STEPn outputs is used for the Stepper idle valve (theoretically they could drive up to 4 small PWM-idlevalves, but currently not programmed that way).
  • IDL (NPN's output) is best for PWM type idle valve on the Genboard v2.2 DB37 connector. Almost any free output on v3 (yes, 15A is possible with a free FET, or even 14A and 350V with a free IGBT).

11.3.3. Wiring

11.3.4. Configuration

" Idle Control Configuration "

There are a few types of configuration options related to idle (mostly air) control:

  • target RPM (in function of coolant temperature and afterstart)
  • control parameters (PID)
  • actuation type (stepper, on/off or PWM solenoid)
  • actuation parameters (solenoid output, stepper number of steps, etc...)
  • ignition advance based fine adjustment

    Configuration options and example

    Don't worry, even if there are many options, it is not too hard to get a good idle (the I-term in PID and the ignition advance helps a lot). When setting idle-configuration for 1st time, it is recommended to

  • make the best config one can,
  • comment it (describing setup with words)
  • add TODO: comments for any values that really need review (iac_conf, iac_pid_conf and iac_sol_channel change behaviour drastically)
  • link it from own MembersPage

    iac_step_seq=D8

    1. iac_conf=62 // (for stepper based?)
    2. PWM based ? iac_conf=18
    3. for stepper motor check spec (eg. 46); max commanded output for solenoid (FF = 5V) iac_max_steps=CC
    4. iac is only active when engine.tps is below this 0x10 = 1/16 opened if tps_low and tps_high are set properly) iac_tps_thres=10
    5. temp (in Fahrenheit +40) for which iac_cold_rpm is applied iac_cold_idle_temp=BF
    6. temp (in Fahrenheit +40) for which iac_warm_rpm is applied iac_warm_idle_temp=C2
    7. target [10 RPM] at iac_cold_idle_temp iac_cold_rpm=78
    8. target [10 RPM] at iac_warm_idle_temp iac_warm_rpm=5A
    9. iac, cranking actuation position at -40 F iac_cold_start_pos=75
    10. iac, crank actuation position at 170 F iac_warm_start_pos=73
    11. intentional overshoot (added to idle RPM) after startup [10 RPM] iac_afterstart_rpm=0F
    12. duration for overshoot [0.1 sec] iac_afterstart_duration=32
    13. hint before control takes over: steps per 160 rpm iac_afterstart_steps=0C
    14. PID parameters:
    15. Note the implicite asymetric behavior: faster actuation if actual RPM is below target than if RPM is above target iac_kp=25 iac_ki=17 iac_kd=A0 iac_integral_speed=40 iac_integral_limit_dec=10 iac_integral_limit_inc=20 iac_integral_deadband=14 iac_deadband=0A
    16. TODO: iac_pid_conf=01 iac_overclose_interval=0A
    17. reference position hint in function of CLT (check warmup_clt_range[]). The PID command will be added to the interpolated value. iac_ref_pos[0]=88 iac_ref_pos[1]=86 iac_ref_pos[2]=84 iac_ref_pos[3]=82 iac_ref_pos[4]=7E iac_ref_pos[5]=7C iac_ref_pos[6]=7A iac_ref_pos[7]=78 iac_ref_pos[8]=75 iac_ref_pos[9]=72
    18. solenoid output channel, eg. 70. Set it to FF (DISABLE_f) for a stepper setup iac_sol_channel=FF
    19. ignition advance based fine-adjust. lowRPM slope iac_ign_advance_change=10 // iac, ignition advance [0.25deg/256rpm]
    20. ignition advance based fine-adjust. highRPM slope iac_ign_retard_change=20 // iac, ignition retard [0.25deg/256rpm]
    21. advance max 4 degrees when trying to increase RPM: iac_ign_advance_limit=10 // iac, ignition advance limit [0.25deg]
    22. retard max 8 degrees when trying to decrease RPM: iac_ign_retard_limit=20 // iac, ignition retard limit [0.25deg]
    23. Don't touch idle-air-valve if less than N degrees of ignadv change is sufficient to reach idle-RPM-target.
    24. For PWM solenoid I see no reason to set it higher than 01.
    25. For stepper based idle setting this to more than 1..2 degrees decreases stepper activity. iac_ign_threshold=10 // iac, threshold for activating air control [0.25deg]

This page explains how to set up the system for PWM or ON/OFF idle air solenoid (instead of IdleControl/IdleValveStepper stepper motor).

Disable the stepper

Set (config.iac_conf and _BV(stepper_iac)) false.

  • "config.iac_conf bit2 = 0"

    Decide if your solenoid is ON/OFF or PWM

    Set "(config.iac_conf and _BV(precise_idle))" accordingly. This is checked in "iac.c idle_solenoid()" function.

  • "config.iac_conf bit3=0" for ON/OFF type. This algorithm is very simple, a 2-liner. Basically "engine.coolant andlt; config" fastidle, except a little hysteresis is applied. You need to set "config.fastidle" obviously.
  • "config.iac_conf bit3=1" for PWM type. This uses a powerful PID based idle controller (many variables), the same as used for stepper. The idle-controller setup (most often PID is used) is elsewhere: see Genboard/Manual/IdleControl for more information.

The output selection applies to both types, read below. Q.How can i send out the solenoid output signal to one of the FETs or a P259 channel or .... ?

The solenoid is actuated by "digitalout(config.iac_sol_channel, state);" in iac.c , so this allows huge flexibility. Select the output channel as iac_sol_channel=P259_4 See Genboard/Manual/DigitalOut for channel selection.

Note: the old method was IDLE_PWM_SOFT defined in my_make. Now it is configurable runtime as written above, IDLE_PWM_SOFT makes no difference.

Q.How can I set selenoid output signal to the pin 3 on EC_36 ? What do I need to set on iac_sol_channel=.... ?

Look at the schematic: EC36 pin 3 which is labeled as IDL is connected to P259 Q4, so it means "iac_sol_channel=P259_4".

  • Note that the output called IDL does not have onboard pullup
  • it can only drive towards GND! you need to connect the other end of whatever you have (solenoid, relay ?) to +14V
  • it can drive 500..800mA unless the other P259 outputs are loaded heavily: than 350mA. The P259 is better suited for dashboard indicator lights, relays than idle solenoid.
  • an available FET can drive much higher load.

11.3.5. Tuning

11.3.6. Testing and Monitoring