1
\$\begingroup\$

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

\$\endgroup\$
8
  • 3
    \$\begingroup\$ Just a heads up, a diagram or schematic of what is being discussed is generally perferred over a link to a video. \$\endgroup\$ Jun 3, 2021 at 19:39
  • \$\begingroup\$ Whatever you decide, the cheapest and most efficient way is to buy a new controller. \$\endgroup\$
    – user76844
    Jun 3, 2021 at 21:05
  • 1
    \$\begingroup\$ cheapest AND most efficient? That's definitely false, as it's possible to get replacement analog sticks and/or pots for around $2. \$\endgroup\$
    – Al Ro
    Jun 3, 2021 at 21:12
  • \$\begingroup\$ +1 for referring to your graph as a cartoon, I like that. \$\endgroup\$
    – Frog
    Jun 6, 2021 at 4:45
  • \$\begingroup\$ Your controller is worn out. Buy a new one, or replace the joystick with a high quality mechanism that has mechanical centering adjustment. \$\endgroup\$ Jun 6, 2021 at 7:19

1 Answer 1

1
\$\begingroup\$

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.

\$\endgroup\$
6
  • \$\begingroup\$ Thanks that's helpful. It seems that both methods are going to introduce nonlinearities. What I don't understand is why have (for instance) p_low in the circuit, if the issue is that you need to bias the pot wiper toward Vcc. Is that helping with the nonlinearities somehow?" With the demo I'm unable to reproduce the kind of non-linearity I saw with my single resistor solution. \$\endgroup\$
    – Al Ro
    Jun 3, 2021 at 21:06
  • \$\begingroup\$ The offset maybe either above or below the middle point. In my schematic and in the Demos simulation I assumed the offset was above so when midway the joystick would read lower. If the offset was on the lower leg then the joystick would seem higher than it was supposed to be. Having both P_low and P_hi allows you to compensate for either case. \$\endgroup\$
    – ErikR
    Jun 3, 2021 at 21:09
  • \$\begingroup\$ You'll see more of the non-linearity effect when P_low and P_high are smaller relative to the pot resistance (10K). Experiment with R_off = 600, P_low = 12K and adjust P_high to get things centered. \$\endgroup\$
    – ErikR
    Jun 3, 2021 at 21:14
  • \$\begingroup\$ That makes sense and was my hunch it was for flexibility - but since it's easy to measure the offset before soldering, two pots is kind of overkill unless it also somehow improves the nonlinearity, which the author of the video claims it does. \$\endgroup\$
    – Al Ro
    Jun 3, 2021 at 21:14
  • \$\begingroup\$ That interactive graph is great; I modified it so that it was possible to see what would happen with just one bias and with the desired target value to compare: desmos.com/calculator/s4ew5hntm4. And what I see doesn't look much like my problem, which is something like an s-curve where you get an extreme flattening, and perhaps even to the non-monotonic level. I'll see if I can post a photo. \$\endgroup\$
    – Al Ro
    Jun 3, 2021 at 21:31

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.