V3 camshaft angle control

Subpage of Motorsport menu

Camshaft angle control (control intake and exhaust camshaft angle position)

  • When Camsync is enabled, the intake Cam (secondary) trigger position is measured and logged.
  • When Third trigger input is enabled, the exhaust (or Subaru boxer left intake) Cam trigger position is also measured, using the processor SDA pin, see below
  • The PWM output solenoid is controlled with a PID controller
  • Alternatively (dual Vanos) two outputs are used (eg.: configured ign2,3 ign2= advance / ign3= retard)
  • The control works above 450 RPM. Else (eg.: when engine stalled) output duty cycle=0.

Application on an engine with 4 controllable cams

Since Vems firmware currently supports upto 2 controllable cams per ecu, monitoring of 4 cam signals is not supported. When controlling two cam actuators from one cam measurement one can "divert" and end up at different position, therefore feedback for each cam is needed, but depending on the type of cam-actuator (if for instance 2 exhaust cams are switch only), it is possible to control 4 cams.

By monitoring 2 cams (which is currently as of 1.2.1x fw, the max number supported), 2 cams can be controlled (usually the 2 intake on a V8 or boxer).

  • Usable triggers:
    • Primary trigger:
      • missing tooth type, camsync: coil-type and third trigger:coil-type
      • OR (BMW dual Vanos) Primary trigger: missing tooth type camsync: extrapulse-type and third trigger: coil-type (last pulse measured)
      • OR Primary trigger: coil-type camsync: coil-type and third trigger: coil-type
      • OR (Honda) Primary trigger: extrapulse-type camsync: extrapulse-type and third trigger: coil-type (last pulse measured)
      • OR Primary trigger: Subaru 36-2-2-2 camsync: Subaru special and third trigger: Subaru special
      • OR Primary trigger: Suzuki 36-2-2-2 camsync: Suzuki special and third trigger: Suzuki special
      • Any other trigger combination is unsupported.
  • Measuring method:
    • In general, the "measure tooth" should be configured, so the sectrig (and third trig) position measures 5-35 degrees normally (that means appr 40-75 when fully advanced. For example 100 degrees is too high, just lower "measure tooth", and the target table should be lowered accordingly to match the measured values, of course),
    • Missing tooth type:
      • the Camshaft tooth measured to the Tooth count configured in the "Measuring at tooth_cnt" (first tooth (tooth_cnt = 0) is the first after the missing tooth)
      • for example cam angle = 345 degree, measuring at tooth_cnt = 0:
    • Missing tooth type with extrapulse cam (BMW dual Vanos):
      • the last camshaft tooth measured before the Tooth count configured in the "Measuring at tooth_cnt". (Tooth_cnt = 0 is the tooth right after missing tooth).
      • the 6+1 extra pulse (exhaust-cam) trigger must be connected to secondary trigger, the evenly-spaced 6 pulse (intake-cam) connected to third trigger input (so the "exhaust target" table is actually for the intake)
      • for example cam angle = 10 degree, measuring at tooth_cnt = 14 (this is just an example, measure tooth is usually lower, see above):
    • Coil type:
      • the Camshaft tooth measured to the Tooth count configured in the "Measuring at tooth_cnt", next primary tooth is Tooth count = 0,
      • so maximum angle difference can be measured is tooth width
      • for example cam angle = 345 degree(but it is bigger than 72 deg so 345 modulo 72 = 57), measuring at tooth_cnt = 0:

    • Coil type with extrapulse cam (Honda):
      • the Camshaft tooth measured to the Tooth chosen by "Measuring at tooth_cnt" variable. Tooth count = 0 is the primary pulse after the primary extrapulse after the valid sectrig sync pulse. With the actual triggerlog (different than this example-shot), good values are apparently measuring at tooth_cnt = 4,10,16 or 22 but rather 5,11,17 or 23.
      • the 4+1 extra pulse trigger must be connected to secondary; the evenly placed 4 pulses to third trigger input
      • Example: exhaust cam angle = 31 degree, cam angle=156 degree, measuring at tooth_cnt = 4:

    • Subaru 36-2-2-2 under fw 1.1.92:
      • the first Camshaft tooth (after the long gap) measured to the Tooth count = 0
      • for example cam angle = 345 degree:
    • Subaru 36-2-2-2 above fw 1.1.92:
    • Suzuki 36-2-2-2 above fw 1.1.92:
  • Configuring parameters:
    • The PID parameters, PWM period and Output type are common to exhaust and intake camshaft control.
    • The PWM period: 25Hz to 375Hz
    • The output channel and reference position can be set separately to each camshaft control (for single PWM only)
    • For exhaust control the third trigger input must enable and reboot ECU to enable position measurement.
    • The target can be set in the target tables (located in the menu under this dialog).
  • Dual Vanos Output type:
    • Two outputs used for intake and two (optional) for exhaust.
    • Use injector or ignition output (4ohm => 3A current)
    • Control method:
      • Under 450 RPM : OutputA and OutputB inactive
      • Measured = 0 ... target - 2 deg - PWM-ing range : OutputA active and OutputB inactive , Cam pulse too late
      • Measured = (target - 2 deg - PWM-ing range) ... (target - 2 deg) : OutputA active and OutputB PWM-ing (closer to target = PWM duty higher)
      • Measured = (target - 2 deg) .... (target + 2 deg): OutputA and OutputB both active
      • Measured = (target + 2 deg) .... (target + 2 deg + PWM-ing range): OutputA PWM-ing and OutputB active
      • Measured = (target + 2 deg + PWM-ing range) ... 360 deg: OutputA inactive and OutputB active (Cam pulse too early)
  • Third trigger input electrical specifications:
    • The third trigger is a processor input pin without any protection.
    • To set it up, use Pull-up resistor and protection Diode.


  • Firmware 1.1.81 uses a (slightly) different algoritm, see the details here
    .