Servo tester works, Leonardo PWM doesn't

Hello everyone.

I have 3 small servos connected to the same genuine Arduino Leonardo pin. They are daisy chained from one to another in 10cm intervals meaning that servo-1 gets signal first, servo-2 is connected to servo-1 PCB and and servo-3 is furthest away from the controller, connected to servo-2 PCB. They are externally powered by a 6.6v RC car battery.

When I use a standalone RC servo tester, they all work perfect. Quick, operation is smooth etc. and behave like expected.

But when using Arduino, (f.x. Sweep sample project) the first one is fine, middle one is a bit stickier and the 3rd is an absolute mess.

Is it because the PWM signal from Arduino is weaker, to the point that it gets 'contaminated' by all the servos in between?
Why a cheapo servo tester does not have this issue, and how do I make them work with Arduino just as smooth as with the servo tester?

(The reason I'm controlling them from the same pin and daisychaining them from one to the other is to reduce wire clutter and they will perform the same exact motion in the project)

Make a clear drawing showing exactly how everything is connected and post a photo of the drawing.

Does the behaviour change if you swap the positions of the servos?


Is the battery - (negative) connected to Arduino GND?

I suspect the daisy chained data wire. As well as the daisy chained power and gnd lines.
But the whole idea of three servos sharing same data pin seems strange. Could they be one single servo with three times higher torque and some rods distributing the motion?

I will upload the drawing as soon as I can.

I'm certain it's the daisy chaining that's doing it.

Same servos behaved fine when connected with their original cables to the same power supply and data pin via breadboard. Soldering them in a line introduced this.

Question is - why a servo tester makes them work fine, but Arduino- doesn't?
It feels like the signal is just 'cleaner'. Hence the degraded performance further down the line with Arduino controlling them.

Is there a way to make the Arduino's signal as robust as a hardware servo tester's?

Is there a way to make the Arduino's signal as robust as a hardware servo tester's?

It might be worth feeding the signal through a Schmidt trigger chip. Or perhaps through a transistor. In either case be careful to ensure the output is not inverted.


As a side note, is there a guide somewhere with tips on how run wires for PWM controlled servos etc. to reduce signal degradation? I assume it's the magnetic fields from the power supply cables that interfere with it and distort it the most?

These servos are optimised for being connected one servo to one data pin. If you have three servos, use three data pins.

For those who are facing a similar issue:

It seems it's nothing to do with PWM signal strength or whatever.
Or what servos are 'optimized' for.
I connected all servos to the same pin on Arduino, but put the servo tester between them and the battery. So the PWM signal is going straight to servos, but electricity is going through the Servo tester.

I will have to look up schematics for it, but there's some decoupling or smoothing going on in it, and it makes the servos work just fine.

So it was a powering problem. Your servo provides a steady voltage for powering the servos. Whatever way you powered the servos from Arduino, you didn’t get a steady voltage.

Yep seems so.

I connected the power supply to the servos directly, and connected ground to Arduino, as you do.(this setup worked fine with the original servo wires- it’s only when I swapped them out servos stopped working with Arduino)

Now I have the battery’s + and ground connected to the servo tester, and only then to Arduino ground, and servos (still in parallel) + and ground.

I measured the voltage and it doesn’t reduce it, and the servo tester has not got any capacitors on the PCB so I’m not sure how it affects the power.