I was completely new to the world of selecting a servo. How do I command it to turn? For my project I also needed to know the position. What servos exist that allows me to set the position or at least get the position back as a output. Turns out there are a lot of options.
I wanted a servo to control the hands of my Weasley Clock. I needed a servo that could continuously turn and cover the full 360°. I also wanted to be able to set the position within 3° because to a second hand on a clock travels at 6° per second.
So in my search I learned that there are two types of servos: one that you control the position and one that you control the speed. Both servo type require a Pulse Width Modulation (PWM) signal as input.
In the case of a position servo, the PWM represents the position to set to. Setting and holding the PWM value sets and holds the position. Most position servos have a limited range. The most common being able to turn from -90° to +90°. I have seen others that can do a variety of ranges but most are limited to between 0° and 270°. These are great for robotic application where full rotation is not needed but does not fit my requirements.
There are options for position servos that can do a full three and a half (3.5) turns. These are usually used for model sailboat wenches to lift and lower the sails. However, I though it would be weird having the hands of my clock, after turning and reaching that limit, having to reverse and spin backwards 3.5 turns.
Speed servos, or continuous rotation servos, the PWM represents the speed to set to. The servo will have some range where on one end of the range is that highest speed in one direction, at the mid-point (deadband range) it is stopped, and at the other extent it is the highest speed in the other direction.
This is great but I also want to know the position. Like the Heisenberg Uncertainty Principle of subatomic particles, it is hard to know both position and speed but unlike the principle, it is possible. I thought about adding my own sensors but realized if I wanted one at every second position, I would need 60 sensors per hand. That seemed like too much wiring and programming. Eventually I did find one servo that was a continuous rotation servo and had a built-in Hall Effect Sensor conntected to a feedback line. This is the Parallax 360° High Speed Servo and it is the one I selected for this project.
This servo fulfilled my requirements of having continuous rotation but also being able to get feedback of the position. It is bidirectional with a speed of -140 RPM to 140 RPM. Its PWM range has 1280μs to 1480μs for clockwise motion, 1480μs to 1520μs for stop, and 1520μs to 1720μs for counterclockwise motion. Its feedback line gives a PWM signal at 3.3V and 910Hz with a duty cycle minimum of 2.7% representing 0° to the duty cycle maximum of 97.1% representing 359°. (See the Parallax 360° High Speed Servo whitepaper here.)
It looks like it will do what I need. Now to learn how to control it with LabVIEW.