Saurav Kumar · Follow
4 min read · Apr 12, 2020
--
As I was working on an upcoming project, I realised I needed a servo motor capable of rotating 360 degrees. The motor that I had bought was a standard 120 degree motor and while continuous servo motors exist online, they are often expensive. To make do with what I had I decided to hack my motor to work with 360 degree motion.
The servo motor that I will be modding is a FT90M 120 degree motor with metal gears. The first step is to unscrew and remove the base and all tge contents the device. This includes the circuit board, motor and most importantly the potentiometer. Removing the top of the device reveals the gears used to turn the motor head. Make sure to take note of the position of the gears as we will need to reassemble them later.
In order to properly modify the servo motor, it is important to understand how it works. A servo motor is limited to an average rotation of 180 degrees because of the potentiometer used. A potentiometer acts as a variable resistor ranging from 0–5 K Ohm which rotates along with the servo motor head. As the motor rotates, the potentiometer also rotates which changes the resistance applied to the 5 V input source. The circuit board can then determine whether the motor should continue to spin in the appropriate direction, until the desired angle is achieved.
Since the potentiometer has a rotation limit of around 180 degrees and the motor is directly attached to the knob, the servo motor must also be limited to that range. The key to creating a servo motor with continuous rotation is to remove the potentiometer and replacing it with a voltage divider.
A voltage divider is a passive circuit that outputs a fraction of the input voltage. the output voltage of a voltage divider is given by the following:
By changing R2 and R1, the output voltage changes which when processed by the circuit board, communicates the motor position. By fixing the output voltage, the MCU on the motor will assume the position of the motor is constant. This means that when a PWM signal is sent to the motor the MCU will constantly rotate the head and is unable to stop since the required output voltage from the voltage divider will never be reached since it is constant.
Since the maximum value of the potentiometer was measured to be 5 K Ohm, R1 and R2 should be as close as possible to 2.5 K Ohm in order to achieve a 2.5 V output. In my case, the closest resistors I had with me was 2 K Ohms. I then replaced the potentiometer and with the voltage divider, making sure that the centre signal wire was in between both R1 and R2.
At this point the motor can be reassembled. Pay close attention to the gear assembly as if it incorrect, the motor will not spin. In some motors, a mechanical hard stop exists that must be removed with an angle grinder. This particular motor did not have such an extrusion. While each motors gear assembly is different depending on the torque required, it should looks something like this when reassembled.
Once reassembled, the motor will now act as continuous motor. If R1 and R2 is very close to 2.5 K Ohms, the motor will be stationary at 90 degrees. If they don’t equal 2.5 K Ohms the stationary angle will differ and can be found by slowly increasing the angle of the motor until the motor stops. It should be noted that the motor is truly stationary when no noise is created from the device. In my case I used 2 K Ohm resistor and my stationary angle was 92 degrees.
If an angle between 0 to 90 degrees is written, the motor will spin clockwise. If an angle between 90 to 180 is used, the motor will spin anti-clockwise. The following code will rotate the motor clockwise for 5 seconds, stop briefly and rotate anti-clockwise for another 5 seconds.
And just like that you have modified a servo motor to be continuous! You should find that you motor is able to spin well past the 180 degree limitations it came with.
This modification was needed for an upcoming IOT project using ESP8266 and RF Communication between multiple Arduino boards. Stay tuned for more!
GITHUB: https://github.com/sauravkumar173/
LinkedIn: https://www.linkedin.com/in/saurav-kumar-756406181/