OS-specific joystick drift

controllers

The problem:
X and Y axis drift on Windows 7. Severe drift! 50% range Y, 20% range X. Strong visible noise.

Recalibration does not help, DXTweaker does not help, because center point is swinging over a very wide range during a very short time span (during 1 minute it could float 25% up or down). Also it doesn't get better over time.

When I'm hooking this joystick up to a Linux machine and using jstest, it's rock solid! Perfectly centered along all axes, zero noise.

Joystick model is Saitek Cyborg Evo. Tried drivers both standard Windows 7 and proprietary, same behavior.

I suppose some auto-tuning feature in Windows goes bananas, but how to kill it?

Added:
Looks like I've jumped to conclusions too quickly and it is a hardware issue after all.

I took an active USB hub, hooked up a joystick before plugging it into the PC to boot up it's internal controller. I'm a bit used to making devices and had a guess that giving a cleaner voltage supply to the ADC during it's self-calibration stage could help stabilize it.

Seems like it worked. After plugging the hub (with a joystick already connected and powered up) to a PC, the joystick readings are stable.

However, after a few hours a subtle drift starts to kick in and is becoming worse over time. Repeating the steps for a clean boot does cure this problem, but the solution is not good enough. Will check this PC's USB line for electrical problems and maybe use a capacitor to stabilize the joystick's input voltage.

Solution:
After numerous measurements and ideas (tried front USB, shielded USB card with filtered power) I think the problem is found:

solution

Inside the joystick there was a damaged wire touching the board (red arrow). This wire is powering the LEDs under buttons at the base. I disconnected both LED assemblies from the PCB (green arrows) and insulated the damaged wire.

After a few hours of… ehm… testing 😀 no drift or jitter appeared.

Best Answer

My experience with joystick drift has almost always been due to unshielded USB cables, an issue with voltage, or grounding problems.

If there are using the back USB ports try swapping to the front (if there are any) or vice versa. The problem is likely hardware related.