I’m using a TowerPro SG90 Micro Servo and having trouble getting it powered through the Beaglebone Blue. I apologize for the wall of text, but i’ve tried quite a bit before coming here and want to make sure you all get everything I’ve found. I also apologize for the lack of pictures, i didn’t photo-document things, but I have tested everything multiple times.
Problem: When attempting to drive servo(s) from BBB’s powered servo rail, servo(s) just click and don’t move at all.
V+ : 4.8-6V
Connected to BBB by USB cable. Connected 14.4V (up to 60 Amp) power supply to DC in.
- When no servo’s are attached, powered rail is 6V (TRUE)
- When no servo’s are attached, signal rail has 50Hz (TRUE)
Add servo to setup
- Signal rail is still 50Hz (TRUE)
- Powered rail is still 6V…
4A) At (normalized) pulse of 0 (TRUE)
4B) At any other pulse width (FALSE) it varies between 1.2V and 5V
At this point the Voltage rail is fluctuating wildly. I decided to check if there was an induced signal in the voltage rail.
- Frequency on Voltage Rail at ALL non-zero (normalized) pulse widths is 4Hz
So i decide maybe the servo is bad.
- All above results duplicated across 3 known good servos
So, lets try pulling power from somewhere else.
Using a 5V bench power supply with SEPARATED ground from BBB
BBB Signal - signal in
Bench 5V Power - V+
Bench Ground - V-
Yes, bad design. Should use BBB Ground, or tie BBB ground to bench ground… but
- Servo runs as intended.
8A) Check V+ for induced signal (None found)
8B) Check V+ for voltage variation under load (none found, always 5.2V)
8C) I’m unable to measure the current with my setup, however specs say 550mA for this servo.
So… Now we fix some things up.
With Bench supply 14.4 V to BBB DC in this scenario the 5V is achieved by a DC-DC converter (10-15)V - 5V. So the ground is ultimately shared by all connected electronics.
- Repeat all test with same results.
Am I missing something? Does my BBB have a bad power supply for the Servo Rail? What else can I try? Software used to test this is the Robotics’ Cape test software http://strawsondesign.com/docs/librobotcontrol/rc_test_servos_8c-example.html
I’m having the same problem (also using rc_test_servos) and I think I figured out what it is, but haven’t had a chance to fully confirm.
I put a scope on the servo power rail and when the servo gets driven it drags the power rail down to 0V (or close). All I get is a “click” at the servo and not the expected motion. I also tried a different “beefier” power supply with the same results. And yes, tried multiple servos. Initially thought there was some kind of cross-talk, but later eliminated that possibility.
Subsequently, I connected a battery to the BBlue and the “clicking” servo now operates properly! My theory is the battery can supply the instantaneous power that the servo needs, where the power supply can not transition fast enough. That said, your results don’t seem to match this theory completely.
My application will always have a battery, so I’m probably OK. But I was thinking about putting a filter capacitor on the power supply to provide the instantaneous power needed. I’m pretty sure that will work. It is unfortunate, because I selected the BBlue with the expectation it could drive the servos properly without extra circuitry. But this appears to be true only for battery operation.
So my recommendation to you is to add a battery, or to try a filter capacitor on the power supply.
Experience the same, one or two servos work. Adding more and I see issues which look power related, jittering.
In this this Rubik’s Solver project there is a note in step 2 of the Software Preparation section where they make a change in ‘libraries/other/rc_pru.c’ of the Strawson Design Roboticscape software to set the “servo pulse from +/- 1.5 to +/- 2”
They seem to be able to run with 6 servos attached so perhaps this would help.
They also have a Li-Po battery connected.
I had a similar problem with a micromouse robot, turning on the motors would crowbar the power supply and reset the microcontroller. I solved this by a diode from the battery to a 100uF cap to the microcontroller power supply. I connected the motor driver as close to the battery as practical.
You need a good (low resistance) 0V between the microcontroller and the servo, and I would recommend a 1k ~ 10k resister in series with the control signal.