Electronic – can you re-center xbox one joystick potentiometer by reducing resistance between wiper and one of the pins

joystickpotentiometer

Modern game consoles are beset by "joystick drift" which is due to their potentiometer's readout being unbalanced when the pot is at its physical 50% point (that is, when no force is applied to the joystick). By unbalanced I mean the resistance from the wiper is no longer equal to the – and + pins.

It seems like this could be fixed by adding a resistor (or another pot, to make it adjustable) so that the wiper pin is electrically biased back toward being balanced. To give a concrete example, if a 10k pot reads a higher resistance to the + pin than it should at physical 50%, you could apply a 30k resistor between the wiper and + to reduce that resistance.

This works in the gross sense – I can find a resistor so that the physical 50% point is 50% between – and + electrically. But I find that it messes with the linearity of the joystick pot, such (for example) the physical 55-70% range maps to roughly the same joystick value when read out using a gaming console, with some non-monotonic parts of that range where pushing the stick to the left actually causes the joystick to report that it's been moved to the right a tiny amount. This could be noise in an electrical dead zone, but it's not a hardware defect – I've observed it multiple times with different xbox one analog joysticks. And if you push past that non-monotonic zone, the stick works right, so it's not (exactly) an issue of range reduction.

This fellow on youtube thinks he's solved it: https://www.youtube.com/watch?v=1yluzJre9D8&t=526s, but his solution makes no sense to me – he's hooking up two adjustment pots per analog stick axis, but it seems to me that electrically one should have the same effect as the sum of the two. Why (and if) that matters is where I'm stuck.

Below is a cartoon of what I observe. Purple line is ideal (x=y), blue is the distortion we expect from adding a resistor, and red is roughly what I actually get after adding that resistor. Looks a little like pot noise but it's consistent between controllers and only on one half the range, as diagrammed.

cartoon of what I'm seeing vs ideal

Here's a video of the odd behavior observed after adding the adjustment potentiometer: https://www.youtube.com/watch?v=0VSZVC4Xn2Y

Best Answer

The solution to "stick drift" that the video presents suggests adding adjustable resistors \$P_{\text{hi}}\$ and \$P_{\text{low}}\$ like below to compensate for the resistance \$R_{\text{offset}}\$.

The goal is to make the voltage at the pot wiper equal to exactly \$\frac{1}{2}V_{cc}\$ when the wiper is positioned halfway.

schematic

simulate this circuit – Schematic created using CircuitLab

This goal can be achieved, but you will introduce non-linearilities in the relationship between the pot's wiper position and output voltage.

This Desmos interactive graph is just one way of modelling the problem and demonstrates the non-linearity issue:

https://www.desmos.com/calculator/ux37xve7e0

There are sliders for controlling P_low, P_hi and R_off. Look at the graph for values of x between 0 and 1.

For a given value of R_off you can adjust P_hi and P_low to have the graph go through the point (0.5, 0.5), but it will also introduce some curvature in the response. Whether this is acceptable is up to you, of course.