I’m working on a project that requires a couple of fast servos. I bought a few different types to try and I’m seeing some strange behavior with the Power HD 3688HB servo - which is the only “digital” servo in the group. The others are a couple different sizes of Radio Shack servos and a Power HD 1160A. I’m using an Arduino Uno to test the motors. I’m using the Arduino standard sketch examples that use the servo.h library and all the analog servos work fine, but the 3688HB seems to have a long delay between taking actions. This isn’t my video but it’s showing the exact symptoms I get:
Is this because it is a digital servo and needs a different update frequency? I can’t find any other threads about the Arduino libraries failing to work with this or other digital servos… so I’m starting here hoping that maybe some other people bought this motor and are using it with an Arduino/library. How are pople controlling this unit?
I’m sorry to hear you are having trouble with your servo. Can you tell me more about your specific setup? How are you supplying power to the Uno and the servo? Can you post the simplest version of your code that should work, but does not?
Sure! Yes, both are powered… 12v into the Arduino, 5v from the Arduino to the servos. All servos are wired the same way. All move at normal speeds with normal torque - when the 3688HB does move it moves faster than the others.
Here is one of the Arduino examples that works with all servos except the 3688HB:
Controlling a servo position using a potentiometer (variable resistor)
by Michal Rinott http://people.interaction-ivrea.it/m.rinott
modified on 8 Nov 2013
by Scott Fitzgerald
Servo myservo; // create servo object to control a servo
int potpin = 0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
myservo.attach(9); // attaches the servo on pin 9 to the servo object
val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)
val = map(val, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180)
myservo.write(val); // sets the servo position according to the scaled value
delay(6); // waits for the servo to get there
The analog servos react to pot movement immediately and track smoothly. The 3688HB fails to react consistently and moves in “chunks”. It also doesn’t hold position like the others do and I can usually move the arm easily (sometimes it fights me and tries to hold position as it should) though it does ultimately return to the same position each time I move it… but it hesitates before moving like in the video.
I should mention that the delay line at the end of the main loop is a value I’ve experimented with from 1ms to 200ms
I have a second 3688HB and it behaves the same as the first. I also now have a a couple of Goteck GS-D9257 Digital servos and they work perfectly with the same wiring and program that my analog servos work with, and that the Power HD units fail to work with. So, my question about if this is an analog/digital issue seems to be answered but whether or not this particular model number of Power HD has problem - or specific requirement that isn’t documented - needs to be resolved. Maybe I just got two defective units?
I suspect that the Arduino might not be providing enough power to the Power HD 3688HB through the onboard regulator. The stall current for that servo when supplied 5V is about 1A and the motor will draw that much briefly at the start of its movement. You should try running the 3688HB off of a higher current 5V supply to see if the problem goes away.
That might have been it. I wired up a 5 amp supply and the reaction times seem normal now. I’ll spend more time with it soon to be sure. I guess I was just thrown by the other units acting fine using the Arduino supply line.