Please enable JavaScript to view this site.

MaxxECU online help

Navigation: MTune Settings > VVT

VVT cam position inputs

Scroll Prev Top Next More

VVT is a very advanced function to control CAMs with advanced PID control, do not try this if you are not sure what your are doing.

For this setting page to be visible, please activate an output as VVT intake/exhaust cam solenoid.



CAM position sensor, intake/exhaust cam 1/2


Enable position sensor

Enable or disable position sensor for intake/exhaust cam 1 or 2. This must be enabled for the RealTime Data values to be shown and VVT control to function.



The source input to use as the position sensor.

Digital input - Dedicated sensor only for VVT position (sensor wired to a digital input).

Trigger CAM input - Sensor is shared with trigger system CAM/HOME sensor position.


Wheel type

Specifies the trigger pattern of the trigger wheel used on selected input.

Supported trigger patters:

Even teeth - Wheel with evenly spaces between.

Alfa Romeo Twin Spark 95 - 05.

AMG C63 V8 (CAM).

BMW 6 + 1extra - 6 teeth with an extra tooth between two of the others. BMW S50.

BMW M62.

BMW S65 (exhaust, rising).

Chrysler Hemi SRT.

Ferrari-Maserati F136

Ford BARRA (Intake CAM).

Ford Coyote 5.0 (V8).

Ford Duratec (CAM).

Ford ST170 (CAM).

Honda K20A2 (4+1 on exhaust).

Hyundai Kia G6DA.


8-1 missing tooth - Missing tooth system. 8 teeth and 1 removed.

N-1 missing tooth - Missing tooth system. N teeth and 1 removed. N teeth and 1 removed (like 4-1 and 8-1).

N-1 (alternative trigger position) - Missing tooth system. N teeth and 1 removed. Used where the missing gap on the cams would overlap the missing gap on the crankshaft.

N+1 extra tooth.

Nissan HR16DE.

Nissan VK45DE.

Nissan VQ35DE.

Renault K4M (CAM).

Volvo long-short - Two teeth per cam revolution, one long and one short.

Mazda MX5 NB (99-05).

Mazda MX5 NC.

Mitsubishi MIVEC.

Subaru 2-teeth cam/vvt trigger

Subaru MY06 - MY14 (WRX STI).

Subaru/Toyota FA20.

Suzuki Swift 2012 - 2017 K12B.

Suzuki Swift M15A 2005 - 2010.

Suzuki K15B.

Toyota 1UZ-FE

Toyota 2NR

Toyota 3UR-FE.

Volvo T5.

Volvo T6 - Four different length teeth per cam revolution.

Volvo B5244S.

VW 1.8T (CAM).

Porsche 996 2000 variocam M96/70.



Offset of the measured cam position to achieve a zero position for each cam's "Cam Position" value.

For single solenoid systems adjust the offset value to where the cam position is zero when no control signal is applied.

For dual direction control systems (one advance and one retard solenoid, like the BMW VANOS system), use the pulse test mode, control the cam to it's end position, and change offset value to achieve ~0 position of the cam.


Teeth count

Specifies number of teeth per CAM revolution with a variable number of teeth.


Filter level

Specifies how much filter should be applied to cam angle position values. Higher filter values slows the movement, but increase stability. 4-6 is good for most systems.

Note: Always start with filter "1" to see good readings of the position even on higher RPM.


allow missing gap overlap

When enabled, allows the VVT triggers teeth to pass the crank triggers missing gap/reference point.

This must be disabled while adjusting the offset. If the VVT angle(s) wraps around at 0, this setting can be enabled to correct this.


crank tooth offset

Moves the cam reference point a set number of crank teeth to avoid overlap problems.


Sensor direction

Normal - Increasing cam position values/targets means more advanced cam positions. Normally used...

Inverted -Increasing cam position values/targets means more retarded cam positions. Used if you prefer to tune the cam control on some cams backwards.




To make this control page to be visible in MTune, you must activate an output as a VVT intake/exhaust cam solenoid.



The VVT system in MaxxECU controls different types of variable-adjustable cams, called differently by car manufacturers (ex VANOS, VVTi), but in MaxxECU we just simply call it VVT. Up to 4 cams can be individually controlled in MaxxECU.

VVT is a highly advanced feature that should only be set by users who fully understand how the engine's VVT system works and how to set a PID-control.

CAM control with on/off state (2 different fixed positions) shall not be used with this this VVT control system. See User output.


Note: Make sure that all valves operates freely in all modes of your engine, serious damage may occur in the event of incorrect settings of VVT control parameters.



Cam position (required for VVT control)

The actual CAM position in relation to the crankshaft, measured by a pulse sensor. Each individual CAM intended to be controlled, must have it's own CAM sensor.

Usually, one of the CAMs uses the same sensor as the HOME trigger system and must be connected to the HOME/CAM input wire on the MaxxECU.

Position 0 in MaxxECU is the unaffected CAM position (normally fully retarded).




Important note: Most of our VVTi implementations do require the HOME SIGNAL to be used into the system, if you experience that sensor position on the cams might shift 360 degrees between start ups, most likely in this case is a missing home signal in the trigger system which is needed to keep track of engine phase.



Activating a CAM position sensor (using a shared sensor on HOME input)


Typical settings for VVT cam position inputs when the source sensor is shared with the trigger system.

Note: The VVT position input is just sharing the signal, the actual trigger system must be correctly configured both in trigger and VVT settings.


If two or more CAMs are about to being controlled, position sensors must be connected to available Digital/VR inputs.


Activating a secondary CAM position sensor


In the above example we have activated a CAM position sensor (for intake 1) on the Digital input channel 1.



Before moving on. Make sure all cam control solenoids are switched off and the engine can not start. Run the engine on the starter engine without spark plug and check the real-time values for the matched positions, such as "Intake cam 1 position".



Make sure you have a stable VVT position for the intended CAM.


1. Make sure the control is disabled.



2. Right click on the live-logger, select channels and add the relevant ones, in the above example we intend to control the intake cam on the Coyote 5.0 engine with in total of 4 VVTi solenoids.




3. Crank the engine with fuel and ignition disabled or start the engine if you are sure what you are doing, check the relevant cam position value. The value should be quite stable, if the value jumps more than 5-10 degrees, something is wrong.

Note: If you do not have a stable position here, and it moves more than a few degrees, there is something wrong with the supported VVTi trigger pattern. Use the built-in Diagnostic tool --> Trigger logger. (compare your trigger output with our database of implementations).




4. We assume you know which trigger pattern your engines has and selected the correct one. Adjust the offset value so that the position value in the logger is somewhere around 0 degrees when the control is deactivated. Values between -360 and 360 is preferred.

Note: Make sure the VVT control option is disabled as described above, and of cource the engine must be turning to verify the adjustments.



There are two types of when the most common is one solenoid per CAM (low PWM duty moves the CAM in one direction and high PWM duty in the other direction). The other type is using two solenoids per CAM, one for each direction.



Using the solenoid test and try to move the CAM


1. Activate the solenoid pulse test feature. Press the Start test button while checking the live-logger if something is happening.




2. During the above solenoid pulse test, check the RealTime Data values for the relevant CAM position and make sure the CAM is moving.

Note: with a dual solenoid setup on each cam, and the CAM is not moving while doing a -100 retard solenoid test, please try to shift the outputs in output config, the setting sensor direction will also affect what you see here during movement.




3. In the above example we use the solenoid pulse test with a positive value (+60% duty) and we can clearly see that the cam has moved to a 48.3 degree position (and the engine most likely run bad at this moment). This solenoid pulse test must also be used to find the Min and Max PWM duty below.



4. In this example, we found that around 50% duty, the cam started to make a movement, therefore we put the Min PWM duty to 36 (just a random example), and the Max duty to 90. Smaller control range = better and faster PID-control.

Note: in most cases a Min duty of 0 (or -100 depending on your setup) and a Max duty of 100% will be fine, but to fine tune, you can use this option.




5. The Min and Max controllable angle must also be set, this is also determined by using the above solenoid pulse test feature. This is needed for the MaxxECU to know in which range we actually can control the relevant CAM.

Note: Adjust the Min and Max angles to prevent the cam from hitting the mechanical stops.



Adding the control option and adjust PID


1. Input the correct PWM frequency for the relevant CAM solenoid and enable the VVT control.

Note: if PWM frequency is unknown for your solenoid, 125Hz is a good starting point, but you need to test different frequencies to make sure the best control options.




2. When the control is activated, the target position is used to move the CAM to the target, at idle, do a small adjustments here (like move it +10 degrees) and watch the output in the live-logger.




3. In this example, we commanded a 12.6degree CAM position and got 12.5, and you can clearly see the control duty required to move the CAM (blue line) and here we need to adjust the PID control to move the CAM a little smoother.


Note: Also remember that the oil temperature may affect the control options, so a good PID control at normal oil temperature may not work in cold conditions.