Microcontroller - A Beginners Guide - Introduction to Servos and Understanding Torque
There are so many types of servomechanisms (or servo for short) and the way they
must be interfaced to microcontrollers. But before we get into the details of programming
and connecting the servo to the microcontroller, let's delve into how they work
and the various types of servos.
Closed Loop Control
Ok, so you know what a loop is, right? Closed loop control is not too far off of
this concept. There are actually two main types of control: open loop control and
closed loop control. Open loop control is where you tell a "thing" to do a specific
task and hoping that the "thing" did what you told it. You are blind to what the
"thing" actually did.
Closed loop control is where you tell a "thing" to do a specific task and after
the "thing" did the task, the "thing" informs you of the status of the task. If the
status is exactly what you specified that the "thing" should have done, then the "thing" is ready
for the next task. If the status is not correct and the task did not complete, then
you tell the "thing" a new task in order for it to complete the previous task. This
happens as many times as it takes to complete the initial task.
In terms (or function) of servos, closed loop control happens like this: for hobby
servos, the microcontroller will give the command to the servo on the degree of
rotation (where to position the shaft of the servo). This degree of rotation is
actually in the form of a PWM signal (we get into much more detail on PWM here:
****). The PWM (Pulse width Modulation) is output to the servo. The width of the
pulse in the PWM signal defines the position of the servo shaft position. Frankly,
the microcontroller really doesn't care if the servo gets to the commanded position,
but fortunately for us, the servo does care and the motor inside the servo is informed
by it's own circuitry if the position is correct or not. If the position is not
correct, then the servo keeps commanding, backward (if the motor overshot the target)
and forward (if the motor didn't quite get to the comanded position).
So, inside the servo, there is a motor, and a potentiometer. These two devices are
mechanically linked. The output shaft of the motor is mechanically linked to the
shaft of the potentiometer, and if you read/watched my tutorial on potentiometers,
you will know that it can be used to show a varying voltage (or resistance) and
that very device will inform the circuitry if the motor is in the correct position.
Knowing that the servo uses a potentiometer, then you also know that most potentiometers
can only be turned to a certain range of degrees. This limits the overall rotation
of the servo and most hobby servos can only hit a range of 180 degrees. There is,
however, a way to modify these servos for continuous rotation and one method can
be seen here:
Other types of servos function slightly different. In many cases, the microcontroller
that you are programming will be involved with the operations of the closed loop
control. That is to say, the microcontroller will output a signal (or train of signals)
and it will expect a report back from the servo. Typically, the report will be a
pulse back from a device called an encoder. An encoder is a device that gives an
on and off signal as it turns (or slides with linear encoders). Encoders are very
much different from potentiometers found in hobby servos. An encoder typically use
light and a component that senses light and a wheel with slits (or plastic dics
with marks) to determine position. When the wheel (or disc) turns (turns with the
motor shaft), the light will be on one side of the wheel and the light sensor will
be on the other. When the light sensor can see the light, then the encoder sends
a pulse. As the wheel spins, multiple pulses will be output from the encoder. This
is very similar to a button press, or multiple button presses.
So, if the microcontroller outputs a signal to the servo, it will expect a signal
back from the servo. If no signal is returned, the microcontroller keeps trying
until the signal is returned. You're probably wondering... well, what if the signal
is never returned. This could be where the servo just doesn't have enough torque
to get to the position that is commanded by the microcontroller.
Torque is the amount of force that the motor can turn the shaft and is measured
by a weight and length. There are a couple of ways to think about torque. One of
these is how much weight it would take to turn a shaft, which is, sort of, the common
way to explain torque. However, I want to focus on how much motor power it would
take to move a weight, rather than how much weight it would take to turn the motor
shaft. If I didn't completely confuse you with that, then you are doing well.
So, imagine you have a motor and this motor has a shaft. The shaft will have a center
point (the center of the diameter of the shaft looking at the shaft from one end).
The torque is measured from this center point. Remember, I said that torque is a
measurement of a force and length. The length dimension is a length measured from
the centerpoint of the shaft and out, perpendicular to the shaft. The length would
typically be a single unit, like one foot, one inch, one centimeter, etc. An example
of a torque measurement would be something like foot-pounds, by which a car engine
might be measured. The foot represents the measurement from the center of the shaft
to one foot. The torque units can be any unit of weight and any unit of length put
together like: oz-in (ounce inch), ft-lb (foot pound), kg-m (kilogram-meter), Nm
(Newton Meter), etc.
The weight would be a specific amount hanging at that one foot measurement away
from the center of the shaft. This weight could be so large that when the motor
is at full power, the weight makes the engine turn in the reverse direction. For
instance, say, we have a brand new Tesla Electric Vehicle, and let's pretend that
the electric motor has 500 foot-pounds of torque. If we were to hang a 600 pound
weight exactly one foot from the center of the motor shaft, say, using a metal bar,
or something like that, then the motor will not be able to carry the weight and
the shaft will turn in the opposite direction. If we hung a 400 pound weight at
the one foot mark, then the motor would turn in the correct direction, but it would
struggle. If a 500 pound weight is placed at the one foot mark, then the motor would
not turn at all. This is sometimes called the holding torque.
We can also address this weight at different locations on the length measurement
coming from the center of the shaft. Say, we have the same 500 pounds on this bar
that is bolted onto the center of the shaft, but you place the 500 pounds at half
(1/2) of a foot instead of at the one foot mark, then the motor will have no problem
turning in the correct direction as this would essentiallycut your weight in half.
As the weight gets closer to the center of the shaft, the weight is proportionally
reduced. That is to say, if the 500 pounds is pressing against this bar at the 1/2
foot mark, then from the motors perspective, it's like there is only 250 pounds
pressing at the one foot mark. Ok, so lets referse this idea and place the 500 pounds
of force at the 2 foot mark, then from the motors perspective, there will seem like
there is 1000 pounds at the one foot mark.
It may sound like this torque discussion is not that important with respect to these
microcontroller tutorials, but when it comes to understanding servos, torque will
be crutial in the development of your overall project. Imagine you need this servo
to raise an object that has a weight of 100 ounces, and this servo is rated at 200
ounce-inch of torque, you would know that the 100 ounce object will need to be placed
somewhere within the length of 2 inches.