6.111 Motors
Many of you will want to use motors in your project.
Projects are much more appealing if they do something other than sit
and blink lights. Motion is eye catching, whether it be a moving car,
a pointing device, a robot, or something else.
Often, it is easy to move something; we simply generate a force in
the desired direction. However, it is hard to control the actual
amount moved or the velocity of movement. For the moment, we will
concentrate on controlling position, though a similar approach can be
used for controlling velocity, etc.
The use of negative feedback is a powerful method for controlling a
variable. We measure the variable and subtract it from the desired
value and use the resulting difference as an error signal to drive the
system towards the desired value.
We see a block diagram of a negative feedback servo system along with
its transfer function. To be useful, we require the transfer function
to be stable. That is, the zeros of the denominator must be in the
left half plane. If some zeros are on the j omega axis, the system
will oscillate. If they are close to the j omega axis, then there will
be a lot of ringing for a step change in the input position, x. We
design such a servo system by controlling the position of the dominant
poles and zeros, that is, those closest to the j omega axis.
A desirable characteristic of this negative feedback system is that the
output, y, settles down to the input, x, after a little while. This
design goal is reached by putting an integrator into H(s).
Perhaps unfortunately, we do not have control of all parts of the
servo. The system dynamics, resulting from the masses, springs, and
losses of the system, are often beyond our control. Some people
actually tune these parameters, such as changing the springs or shock
absorbers used in a car, but most of us digital designers are stuck
with what we get.
We can, however, control the characteristics of a large amount of the
servo system as indicated by the dotted area of the block diagram.
Earlier, analog circuits (and even mechanical systems) were used to
implement servo systems. We will implement our servo systems
digitally within our FPGA. We must be aware of the fact that digital
implementations can have significant delays; indeed, these delays can
sometimes be stochastic.
There are many different ways to measure the position of something.
There are two main analog ways to measure position.
A variable resistor can be used. This resistor can be linear or
rotary and it can vary linearly or logarithmically with position.
This is a very simple method. The accuracy is determined by the
potentiometer. The noise of the resulting signal is influenced by the
power supply noise. Naturally, one should include a calibration step.
Another method is termed a resolver. Two sinusoidal signals are
produced and are used as input to a system which then calculates the
position. The resolver cosine and sine signals can be realized
magnetically. This puts little load on the system being measured.
Resolvers are not often used in 6.111 projects.
A common digital way of measuring position is to use an LED, a
photo sensor, and a sensing ring.
When the transparent part of the sensing ring allows the light from
the source (usually an LED), the photo sensor detects the light.
The accuracy of the angular position determination depends on the
extent of the transparent sector. This arrangement is only good for
determining a small number of positions, usually one.
To measure many absolute positions, we can use a number of sensing
rings in parallel. Notice that the clear
area of each sensor occupies half the angular rotation. These are
arranged so that the sensing photo sensor outputs form a binary number
in a Gray code. Small amounts of noise or jitter in angular position
only result in a single bit change.
We usually think of the resolution of the encoder, which for N bits
requires the log to the base 2 of N. However, we could multiply
this by an appropriate gear ratio.
A two-phase encoder is a scheme to have a high resolution with only
two rings. Each ring has equal bands of transparent and opaque
sectors. The two photo sensor outputs count in a Gray code. This
count is either up or down depending on the direction of rotation.
Here is a circuit used with a two-phase encoder. The clock for the
up/down counter is the AND of the two photo sensor outputs, and the
latch determines whether the counter counts UP or DOWN.
Waveforms for the circuit are shown on this slide. The counter
operates on the positive (or rising) edge. Which edge is determined
by the direction of rotation. This rotation direction also determines
when the up/down control signal is set or reset so that this control
signal changes on the falling edge of the clock.
Another way of making a two-phase encoder is to use a single ring but
have two photo sensors displaced from each other by half a band.
Another ring can be added to the wheel along with a sensor to
determine the "home" position.
A DC motor is common, largely because it is simple and cheap. It is
the drive motor used with remote control cars, etc. A simple model of
a resistor in series with a voltage source is quite adequate. The
voltage source is proportional to the rotational speed. The torque is
given by the same proportionality coefficient times the current.
We can specify the amount of torque by setting the current. Then
the speed can be measured and negative feedback can be used to attain
the desired speed.
Alternately we could use the strategy "full speed ahead" and apply
a current and stop when reaching the desired position.
Stepper motors can behave "digitally" so they are very popular with us
digital designers. They almost always have a permanent magnet rotor
and rotate a fixed amount per "step".
There are two styles of windings for the stator or stationary part.
The unipolar or bifilar winding is easier to drive than the bipolar
winding but it is less efficient. Efficiency usually doesn't matter much
for 6.111 projects.
Here is a circuit for driving bipolar windings. Note that driving
the upper transistors is a bit tricky. Don't forget diodes are
required when driving inductive loads!
You need only half as many transistors for driving a bifilar winding.
This is even easier as we can use stepper motor drivers which have
four transistors in a single package. It is easier to drive the
individual transistors. Again, don't forget the diodes and, yes, the
amount of current drive required for most stepper motors is large.
Don't use your 5 volt digital power supply - use a separate power
supply to produce the stepper motor drive currents.
A nice thing about stepper motors is that they can run in either
direction. (So can most other motors.) Here are strategies for
driving either bipolar or unipolar windings.
Stepper motor dynamics are important. A motor won't step if the load
is too big. The time taken per step is a function of the
rotational speed. The longest time per step is when the motor is
stationary. To go at the maximum speed, we can start slowly and ramp
up the step rate as the speed increases and then ramp down the step
rate before we get to the stopping place.
Repeating an earlier admonition,
don't use your 5 volt digital power supply - use a separate power
supply to produce the stepper motor drive currents.
You really don't want the motor drive noise coupled into your digital
circuit.