Driving the Servo Motor

Driving the servo motor using a function generator

A three-wire DC has three input wires: the red wire is usually
connected to the power supply, the black wire is usually connected to
the ground and the white/yellow wire is usually connected to the
controlling signal. One of the simplest way to test/drive a servo
motor is to generatea pulse using a function generator. The pulse can
be be generated using the square wave function of the function
generator. For the servo motor that we are using, Tower Hobbies STD
BB TS-69., the power supply is about 4.8 volts and so we can generate
a square wave using the TTL output of the function generator. You
should adjust the amplitude of the square wave such that it matches
the power supply of the servo motor.

Once you have adjusted the amplitude of the square wave pulse, you
can adjust the width of the pulse train by adjusting the frequency of
the signal. For the servo motor that we are using, the neutral point
(the pulse width at which the servo stays at 90 degrees) is about
1520 microseconds(us) or 1.52ms. Any pulse width narrower than 1.52
ms will cause the servo to move to a position less than 90 degrees
and vice versa. Note that servo only turns between 0 and 180 degrees
if it is not modified. This corresponds to about 0.8ms to 2.5ms of
pulse width. Make ensure the pulse width that you use is in within
this range.

For a servo motor modified to rotate continuously, the servo will
not turn at the neutral pulse width but it will turn clockwise
continuously if the pulse width is less than the neutral pulse width
and anticlockwise if the pulse width is larger than the neutral pulse
width. (the pulse width has to be within the range mentioned
above).

Driving the servo motor using the Handy Board

For most applications, it is impossible to drive the servo motor
using the function generator. One of the most convenient way to drive
the servo motors is to use the Handy Board. The Interactive C has a
library routine that allows control of a single servo motor, using
digital input 9, which is actually the 68HC11's Port A bit 7 (PA7), a
bidirectional control pin. This library routine can be loaded onto
the Handy Board by loading the binary file, servo.icb, first and then
the file servo.c (this means the file where you write your own C
program cannot be named as servo.c!).

Here are the library functions used to control the servo
motor:

void servo_on( ) : Enables PA7 servo output waveform.

void servo_off( ) : Disables PA7 servo output waveform.

int servo(int period) : Sets length of servo control pulse.
Value is the time in half-microseconds of the positive portion of a
rectangular wave that is generated on the PA7 pin for use in
controlling a servo motor. Minimum allowable value is 1400(i.e.
0.7ms); maximum is 4860 (2.43ms). The return value of the the
function is the actual period set by the driver software. When the
servo motor is not modified, the value of period is about 2950 at the
neutral point. When the servo motor is modified, the value of period
is about 2570 at the neutral point.

int servo_rad(float angle): Sets servo angle in
radians.

int servo_deg(float angle): Sets servo angle in
degrees.

Sample programs

The following code fragments illustrates how to use the above
library functions to drive the servo motor:

The above code fragment sets the servo motor into 70 degrees and
display the current position on the LCD display (in terms of
microseconds of the pulse).If the servo motor is modified to rotate
continuosly, the above code fragment cause the servo to rotate in
clockwise direction continuously.

The above code fragment will cause an unmodified servo motor to
turn in small increments until the mechanical stop is reached. The
motor should start again from the 0 degree position sometime after
the maximum allowable value of the 'period' is exceeded. The code
will cause a modified motor to turn clockwise and anticlockwise
alternatively. The value of the period is less than the neutral value
at first, so the motor will turn in the clockwise direction. After
the neutral value is exceeded, the motor will turn anticlockwise.
After the maximum allowable value of the period is exceeded, the
value of the period will start from 1400 again and thus it will turn
clockwise once again. This can be observed by looking at the LCD
display.