Encoder Front Page
SRS Home | Front Page | Monthly Issue | Index
Search WWW Search seattlerobotics.org

Variable Speed Control Modification
to the Futaba S3003 RC Servo

Lee Buse (c) August 2000  (Edited by Steven D. Kaehler)

Note: Making the physical and electrical modifications described in this article to a RC servo will void its manufacturer's warranty.  The author makes no guarantees regarding the success or suitability of this modification for any particular application or purpose.  The reader takes full responsibility for the success or failure of the servo to perform as indicated or described.  In other words, perform this procedure at your own risk.

The Radio Controlled (RC) servo is an ingenious device that allows remote, proportional actuation of mechanisms by the simple movement of a lever on a controller or the software of a robot.  For hobby robotics, this enables scanning sensors, walking machines, animatronic devices, and a host of other interesting moving machines.  With a simple hack, these servos can be converted from proportional actuators to drive motors.  This is especially nice since they come complete with interface electronics, and can be directly connected to and controlled by a microcontroller's I/O port.  Unfortunately, one limitation of these wonderful little gadgets has been speed control when used as drive motors.  By design, servos drive to their commanded position fairly rapidly.  So the command input normally provides only full forward, stop, and full reverse control of the drive motor, with nothing in between.  This article will describe in detail how you can modify a commonly available servo (Futaba S3003) such that good variable speed control will not only be possible, but very practical.  With proper technical data (or dumb luck), this technique can be applied to many different brands of servos.

RC model servos are fairly sophisticated devices that incorporate both position and speed feedback with a goal to provide precise position control.  In normal use they compare the 1-2 ms, 50 hertz (50 Hz, 5-10% duty cycle) input pulse signal with an internal linear pulse generator controlled by the feedback servo position potentiometer (pot.) and by the motor back-EMF (voltage generated between power pulses) which is used as a speed sensor.  See Figure 1.  The difference in pulse width (the error signal) is then "amplified" with a pulse stretcher.  This circuit provides the servo control gain.  The pulse stretcher output drives the servomotor through an H-bridge circuit to close the servo loop.  The speed sensor feedback is normally used only to stabilize the position of the servo so the servo drives quickly to its commanded position with minimal  overshoot.  Figure 1 shows the S3003 circuit diagram along with the circuit functions believed to be in the BA6688.

fig1.gif (38480 bytes)
Figure 1 - The inside of the S3003 RC servo and the speed control modifications

The Technical Details
When the servo is hacked by replacing the feedback position pot. with fixed equal value resistors, only the speed control response remains in the feedback path.  The servo now drives the motor forward or reverse when it see pulse widths less or greater than 1.5 mS.  Unfortunately, the hacked servo circuit has a very narrow input control range and is difficult to impossible to speed control accurately, though it has adequate speed and torque. The main cause of this problem is that while the existing speed control feedback level is adequate for normal position servo stabilization, it is insufficient to match the 1 mS (1-2 mS) input pulse width variation when the servo is used as a drive motor.  The result is that the motor is just driven to maximum speed most of the time.

A fix to this problem is to increase the scale factor (gain) of the speed control feedback so that the maximum motor speed range corresponds to the full 1 mS range (1-2 mS) of the input signal. Since this increases the total servo loop gain by the same factor, the servo will tend to become unstable. That problem can be solved by decreasing the pulse stretcher gain by a similar factor. The result is a well-behaved speed-controlled servo drive with full-range speed control, good torque, and stable operation.

The Modifications
So far, I have made these modifications to a Futaba S3003 (the replacement for the S148), a popular, inexpensive, currently available servo.  They can be purchased from Tower Hobbies among others.  The S3003 uses BA6688 and BAL6686 integrated circuits for which I have been unable to obtain data sheets.  Tests indicate that the BA6688 contains the servo control circuits with the BAL6686 as a separate H-bridge motor drive circuit.  Earlier RC servo designs combined these functions within a single chip (i.e. NE544 and M51660L).

Figure 2 shows the 330K 1/4-watt resistor attached between the motor terminal and pin 10 of the BA6688.  This resistor causes am increase in the speed control feedback. Use insulation on the resistor wire and keep it down close to the board.  If you are skilled at surface mount techniques, just replace the 910K resistor (just to the left of 330K, "914") with a 220K-240K surface mount resistor.  The round silver button to the right of the 330K resistor is the bottom of the motor.

Figure 2 - The bottom of the RC servo circuit board with the 330K shunt resistor installed.

Figure 3 shows the 0.1 uF 10% ceramic capacitor (yellow component next to motor), which replaced the 0.47 uF capacitor originally installed. This capacitor causes a  decrease in the pulse stretcher gain. You can also see the 22-turn 5K trimpot (gray "box" with brass screw on top) in this photo.  The two black brick-like objects between the motor and the trimpot are the servo chips.

Figure 3 - View of the insides of the RC servo showing the new trimpot (gray) and capacitor (yellow).

Components Needed for Hack
1 ea - 5K miniature multi-turn trim pot.
1 ea - 1/4W or 1/8W, 220K-240K surface mount or 330K shunt resistor

1 ea - Short length (~1") of insulating sleeving for resistor lead

1 ea - 0.1 uF <50V ceramic capacitor (good quality)

You will need a low-power soldering iron with a very small tip to complete these changes without damaging the board.  Make you connections quickly minimizing the board and component heating.  Use solder wick to remove unwanted solder if you accidentally create a bridge.

Tools Needed for Hack
Very fine-tipped soldering iron
Electronic solder (60% lead, 40% tin)
Small tip phillips screwdriver
Small blade screwdriver for pot. adjustment
Needle nose pliers
Diagonal cutters

Pulse generator or Servo driver

The following steps should be followed to convert the RC servo into a high quality, speed controlled, gear-motor drive:

  1. Disassemble the servo.  General instructions for doing this are covered in the continuous rotation hack.  If you intend to do both hacks to a servo, do only the mechanical modifications mentioned in the above article, then continue below.
  2. Replace the 5K servo position feedback pot. with either fixed (2.2K) resistors (poor to OK) or a 5K trim pot (recommended).
    (I chose to use a trimpot.  There is some shift of the zero-speed pulse width with this change and the trim pot. provides a convenient adjustment for this though the motor can also be stopped by not pulsing it.)
  3. Either replace the 910K surface mount resistor in the speed control feedback path with a 220K-240K resistor (cleanest) or add a 330K (orange,orange,yellow) shunt resistor (easiest) around it.  Be sure to insulate the longer lead to prevent contact with any intermediate pads on the bottom of the circuit board.  (I chose to add a 1/4W 330K shunt resistor since I'm not into surface mount soldering yet. This resistor increases the speed sensor feedback by a factor of about four, which provides full-range speed control.)
  4. Replace the 0.47 uF capacitor in the pulse stretcher circuit with a 0.1 uF 10% ceramic capacitor.
    (This capacitor decreases the gain of the error circuit by a factor of about four in order to balance the effect of the previous mod and maintain servo stability.  Don't use a low quality –20/+80% capacitor here or you may have unpredictable results.)
  5. Connect the servo to a servo driver (or pulse function generator), apply power, set the input pulse width to 1.5 ms (50 Hz, 7.5% duty cycle), and adjust the new trimpot until the motor stops.  If this does not work, check the component values, wiring and solder connections.
  6. Reassemble the servo case and gears in the reverse order of disassembly, being careful not to pinch any wires between the case sections.  (Don't forget to remove the limit-stop bump on the output gear per the other hack if you haven't already done so).

Once you have completed the specified modifications you are ready to test your servo.  A great tool to have is a test circuit that generates the servo pulses.  The servo driver circuit mentioned above is a simple one-IC project based on the 555 timer, and can be built on a small protoboard.  It generates a manually-controllable 1-2 mS pulse 50 times a second (50 Hz, 5-10% duty cycle) capable of driving a servo directly.  Build it into a box with a mating connectors for your servos, and you have a handy tool for working with RC servos now and in the future.

With your servo connected to the servo driver or pulse function generator, you should be able to operate the servo from complete stop to full speed in either direction smoothly and easilty over the 1-1.5 mS and 1.5-2 mS (5-7.5% and 7.5-10% duty cycle) range.  You are now ready to put it to work in your next mini robot.

I hope you find this modification useful for your purposes.  The modified servo has excellent full range control and very good low speed torque.  The high speed torque however, is not so wonderful, but tolerable.  The modified servo tends to behave more like a voltage regulator than a well-tuned servo since the speed error will now be proportional to speed and load.  There are limits to what can be done to a RC servo without a major circuit redesign.  This modification accomplishes its goal, though not perfectly.

When subjected to this continuous rotation mod, the innocuous RC servo becomes a moderately priced, full function wheel drive system for small robots, with a simple and easy microcontroller interface that can give your robot the ability to move about with great dexterity.  Since the general operating characteristics of most RC servos are the same, this modification can probably be adapted to most RC servos with some adjustment of the component values.

If you are interested in further reading on what makes RC servos tick, the following link provides more  technical information on other chips (the NE544 {older} and the M51660L) that are also used.  Also an Internet search using "RC servo" will produce an abundance of interesting and sometimes useful links.