Exercise: Servo Sweep

Objective

Control a hobby servomotor module.

Servos are feedback-controlled motors which move an output shaft to a specified position. Internally they use a potentiometer to measure the actual position. The internal circuit compares the actual and commanded position and generates positive and negative motor current pulses to operate a tiny gearmotor. They are a very convenient modular way to create controlled physical motion. However, due to the limited motion of the internal potentiometer, the servo also has a limited movement range (usually 180 degrees)

The commanded position is specified using a specific format of PWM in which pulses with duration approximately 1-2 ms repeat at approximately 50 Hz. The different pulse widths correspond to different positions. Note that this a significantly different waveform than the motor PWM, since the duty cycle is always very low, i.e., the pulse on-time is always much shorter than the cycle time.

Steps and observations

  1. Load and run the Servo/Sweep sketch (Examples->Servo->sweep). This uses the Servo library, an included add-on to the base library.
  2. Observe the servo motion.
  3. Observe the PWM command signal on the oscilloscope.
  4. Try varying the numbers governing the motion limits.
  5. Try varying the delay to change the speed.
  6. Determine the maximum speed possible.

Comments

Note that trajectories and speed control are only possible by issuing position commands at intervals.

As a challenge, rewrite the program to avoid delay() and operate two servos simultanously on different trajectories.

Other Files

  1. servo-sweep.fzz