Electrical – TowerPro SG90 servo motor: adding analog feedback

analogarduinoservo

TL;DR: Where exactly did the Hexy guys connect the feedback cable?

I would like to:

  1. Remove the 180° limitation of those servos. Did that with an instructables tutorial (TL;DR: remove piece of plastic from gears and potentiometer to let it spin 360º).
  2. Read the actual position via some analog cue present in the servo board.

What I've tried is connecting a couple of pins from the servo's AA51880 to analog pins A0 and A1 of an arduino:

AA51880 chip view

Here's the result when plotting pins Rdb and Pot from AA51880:

nominal state plot

All screenshots are just with the default servo initialization as coded in johnny-five.io with Arduino's Firmata:

  var servo = new five.Servo({
    pin: 9,
    startAt: 90
  });

No sweeps nor movements are coded to drive this servo.

Then, when I perturb the servo manually, the servo spins a few times on its own (presumably the AA51880 correcting position) and the readings look like this:

enter image description here

And this in a different timepoint and position:

enter image description here

I also get spurious, uncontrolled spins of the motor when not actuating it at all. Is it possible I'm injecting noise to the board? Should I add a pullup resistor somewhere in my setup?

servo
servo_board_back
servo_board_front

The question is, given the above readings, is there are way to reliably read the voltage/position of those cheap servos using the arduino ADCs while removing the 180° limitation?

Best Answer

We attach the analog feedback wire directly to the middle pin on the potentiometer. This does mean that you need to watch out for the impedance of the reading input - we usually use an opamp voltage-follower to mitigate this.

Related Topic