It was explained in part 1 that absolute positions 1 to 82 give a linear rotation speed (from 0 to about 50Â°/s), and position 83 a high rotation speed (450Â°/s for z, 200Â°/s for rz).

Following chart gives the rotation speed for a given virtual position of z that goes from 0 to 645. That gives a linear speed from 0 to 450Â°/s. Virtual positions from 83 to 644 have to be created.

Blue dots are speeds that are achieved by real positions with a standard ps3 controller.

Red line is obtained with a simple linear regression.

Each mouse packet applies a rotation speed over a time that is the inverse of the mouse frequency (for ex 100Hz => 10ms).

A rotation speed for a virtual position between 83 and 644 may be generated “in average”.

For example, if a speed of 450Â°/s is applied (virtual position 645=real position 83) over 5ms, and 0Â°/s is applied (real position 0) over 5ms, the average speed that is obtained over 10ms is 225Â°/s (virtual position 321).

0+83 makes crappy movements, that technique actually works great with 82+83

I realized afterward that it is similar to PWM.

How did you measured that ?

Simple but painful: apply a stick position, count rounds, divide by the elapsed time.