I'm trying to read a throttle position sensor with my Arduino Mega. This is the schematic for a normal TPS. It's a basic potentiometer.

(source: autolabscopediagnostics.com)

However, this particular TPS only has 2 pins coming out. There's no ground, there's just the 5 volt reference and the signal return. I have one pin hooked up to the 5Volts on my Arduino and the other hooked up to an analog pin, which I am reading with analogRead. I'm getting strange readings at different positions. At position zero, it jumps around at around 300. As soon as I turn the sensor at all, it automatically jumps to 1023 and stays there.

What is the point of the ground in that diagram? What am I missing here, and how does that tie in to the odd TPS readings?

  • 1
    \$\begingroup\$ Datasheet says? \$\endgroup\$ Oct 18, 2016 at 0:09
  • \$\begingroup\$ Which datasheet? @IgnacioVazquez-Abrams \$\endgroup\$ Oct 18, 2016 at 0:12
  • \$\begingroup\$ @IgnacioVazquezAbrams I doubt that a public datasheet is available for some random car part. \$\endgroup\$
    – jms
    Oct 18, 2016 at 0:17
  • 2
    \$\begingroup\$ Are you sure that the case isn't the ground for this sensor? \$\endgroup\$
    – user39382
    Oct 18, 2016 at 0:22
  • 2
    \$\begingroup\$ The ground connection provides a zero volt reference for one end of the sensor potentiometer. With the ends of the sensor pot connected to zero/ground and +5 volts, the sensor can output a voltage between 0 and 5 volts proportional to the throttle position. \$\endgroup\$ Oct 18, 2016 at 0:23

3 Answers 3


A proper 3-terminal TPS is a potentiometer. It produces some proportional voltage between ground and the reference voltage at the top (5V or whatever) A linear pot will output a voltage proportional to the distance between ground and the top.

But if you have only two terminals, then you only have a variable resistance (or you could call it a rheostat). You could kludge a way to read your rheostat by first measuring the total resistance of the rheostat, and then selecting a "pull-down" resistor to "work against" the variable resistance in your rheostat TPS. You must know the TPS resistance in order to select an appropriate value for a pull-down resistor.


As @duskwuff comments, it is possible that it is a 3-terminal part, with the three terminals being the 2 pins and the case. Some metal component of the case may have a screw hole with an ground marking nearby.

Simple resistance measurements will tell you if this is true : if there is a fixed resistance from the "+V" terminal to this ground point, and a variable resistance between the wiper and gnd, then you just need a wire from the Gnd terminal to your Arduino's 0V.


It could be a 3 pin TPS or more likely a mistaken logic diagram for a 2 pin TPS unless case grounded.

My educated guess is a 2 pin TPS will have a fixed load R to ground so that a bridge voltage can be measured relative to some stable Vref. But there is NO STD.

I believe loss of contact is zero throttle and internal short is full throttle !!

Take a look at some defective TPS waveforms here and notice the 0 throttle voltage above ground. http://autolabscopediagnostics.com/tps.html


simulate this circuit – Schematic created using CircuitLab

  • \$\begingroup\$ Either that or whatever box the TPS connects to has a current source which feeds a constant current to the TPS, and the voltage drop over the (variable) resistance is then sensed. \$\endgroup\$
    – jms
    Oct 18, 2016 at 0:48
  • \$\begingroup\$ there may be many ways to do it, but the real examples shown are not very linear or consistent. \$\endgroup\$ Oct 18, 2016 at 2:07

Your Answer

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

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