How can you increase the range of a servo without losing the positioning feedback system?

I am trying to use them for the joints of a robotic arm. I have the Towerpro mg996r servo. Also the servo won't attain full ranged that can be reached when turning it by hand. By hand I can turn it about 240 degrees but through a micro-controller (arduino mega 2560) it only turns about 180 degrees. If it can get the range that I can get by hand that would also be enough. I might be using the incorrect code or something, not sure exactly what the problem is. I would greatly appreciate any help or ideas.  

sort by: active | newest | oldest

if you have access to an oscilloscope, then check the duty cycle of your signal. It should be between 2...20msec

Science102 (author)  steveastrouk2 years ago

No, I do not have an oscilloscope. Nice idea though. Is there any other way to increase servo range past 180 degrees without losing the position feedback system?

It looks to me like there is a scaling issue with the internal electronics, but without knowing what they are using, its hard to say what to do next.

Take a look at the internal feedback pot in the servo. You MIGHT be able to change the range with a potential divider between the pot and the servo circuit, designed such that it delivers 2/3rds of the input volts from the pot. This may play merry hell with the servo performance though.

Science102 (author) 2 years ago

I have heard that you can remove the mechanical stop found on one of the gears of the servo and that alone will provide additional range. However that still does not explain why my servo will not travel the full distance I can turn it by hand (240 degrees by hand vs. 180 degrees by arduino). These are the servos that I am using:


Help or ideas on what?
If you would provide all details there might be a chance but otherwise we would have to guess your code...
By the way: The servo libraries on the Arduino pages contain not also good code examples - in my case all servos always did their full range of movement on an Arduino.

Science102 (author)  Downunder35m2 years ago

Well help or ideas on solving this problem that I am facing (about the servo not travelling the full length I can turn it by hand). As for the code, I am simply entering the angular position for the servo to conform with using the ".write(angle position)". I was simply testing out my servos since I am new to this servo and micro-controller business. Also is there any other way to increase servo range without losing the position feedback system. My project is a robot arm with a master-slave control system and the servos are to be used in the joints of the robotic arm.

I would opt for servo motors instead, geared if you need more torque.
If it is just a small scale project you can also use index disks.
They were quite common in old printers and the ball mouse for the PC.
Mount one on the servo arm and use the sensor that came along with it for the reading.

Science102 (author)  Downunder35m2 years ago

The servos that I am using are digital servo motors. They are the Towerpro mg996r. They have metal gears in them.

Mine on a stamp.

rickharris2 years ago

You may not be able to get more then 90 to 120 deg of operation from a standard servo. A lot depends on the type and construction. Read the wiki article link above it will help you.

The arduino supplies the square wave to control the servo, nominally 1.5 msec is center. The width of the square wave controls the position.