Convert your servo motor into a continuous rotation motor

This mod has been out there on the Interwebs for some time now but I have never tried it myself and decided to give it a go.  I'm glad I did- a motor that's controllable in this fashion is incredibly useful.  You can use it to drive gear trains, open/close blinds, and make the worl's slowest record player.  You young kids might need to Google what that is.

If you didn't already know. a servo motor is a motor that has a feedback sensor that tells it what position it's in.  Modifying it to become a continuous rotation motor allows the motor to turn any definite number of rotations.  This can be useful when turning wheels, lifting blinds or any other kind of motion that needs to not be restricted to a range of angles.

 

There are many kinds of servo motors and the steps will vary subtly based on their type, however the basic steps are as follows:

1. Remove the rotation limitation tab on the motor

2. Remove the rotational limitation tab on the position sensing potentiometer

3. Fool the position sensing circuitry into thinking that the servo motor is in the middle position using a volatage divider.  (With two resistors of equal value.)

At this point control of the servo motor becomes relative not absolute- that is, positional information that varies from the middle position is converted into velocity information.

Let me give you an example:

In the unmodified servo motor, telling the servo to go to 90° will place it in the middle position.  With a continuous rotation motor, telling the motor to go to 90° equates to telling it to not move at all.  Telling it to move to 91° equates to telling it to move clockwise by a small amount, and telling it to move to 89° equates to telling it to move anticlockwise by small amount.  

In general the formula is the difference between the specified angle of 90° equates to the velocity at which you wish your motor to turn. This is because in an unmodified servo motor, it 'wants' to get to its specified position as quickly as possible, so the bigger the difference, the faster it will get there.  It also means that it 'eases out', to use some animation parlance, and this means smoother motion.  You can have that in a continuous rotation motor too, but you'll need to manage that in the way you control it.

Here are the steps I followed to convert my Sanwa SRN-102.  If you have any questions about your particular servo motor, hit me up in the forums for help.  I'm happy to give it.

 

The Steps

Step 1: Disassemble the servo by removing the 4 long screws that hold the end cap on and the one screw that holds the horn on.  Yes, that's right it's called a horn.

 

Here's what you'll see.  No, that white stuff isn't cream, so don't eat it.  It's a lubricant and whilst it shouldn't stain your clothes or dissolve your hands, you might want to do this mod on top of a plastic underlay.

 

Turn the motor over and you'll see this:

 

Step 2:  You'll need to unsolder the two large blobs of solder.  They hold the motor in place.  I used a solder sucker, sucka.  You could also use a solder wick... er, friend.

 

Step 3: Prise the board off the motor's tabs with a flat head screwdriver.  Take note at this point which way the motor is oriented.  It's not super crucial in the sense that the motor won't fry if you get it wrong, but it will reverse the expected direction of turn if it's not replaced in the same orientation.

 

Step 4: cut the plastic tab from this gear.  It's the one that connects most directly to the horn.  That tab restricts the range of angles, so it has to go!  I used wire cutters to remove mine.

 

Step 5: Remove the position sensing potentiometer.  The shaft of this pot is inserted into the gear above in normal operation.

 

Step 6: Remove the backing of this pot by prising out the holding tabs.  Mine had three:

 

Step 7:  Flatten the stop tab inside the potentiomer.  This was harder than the previous tab removal step.  I used a hammer and a flat head screwdriver.  And a vise!

After doing this step the pot should turn freely in a continuous manner.  Next we need to convince the driver circuitry that the pot is in a single position.  We do this with a voltage divider.

 

Step 8: Twist together two 10K resistors and solder the twist to the middle wire that was connected to the middle solder pad of the pot.

 

Step 9: Solder the other two legs of the resistors to the outer two wires that were soldered to the pot.  Hold the camera perfectly still whilst you take the picture.

 

Step 10: Replace the gears and reassemble the servo.

 

Driving your new motor

Just remember that what were positional controls now become velocity controls.  Don't assume that if you tell the motor to turn to 90 degrees that this will necessarily represent the middle position in my case the value was 81.  I'm using the server library that comes with the Arduino installation.One useful tool to build yourself consists of a variable resistor connected to an a lot important that the value of this input to the angle of the servo you need to divide by constants and at a constant to do this for example:

// potval will be [0..1023]

int potval = analogRead(0);

 

// map it to [70..100]

int ang = map(potval,0,1023,70,100);

 

// Set the motor to this new angle

myServo.write(ang);

 

Have fun spinning right round like a record baby and make sure you tell us what you make in the forums.


Justin Clayden
Justin Clayden

Author