PWM

profilevhramu223

Your ultimate goal for this week's lab is to use SysTick system timer to create a periodic

interrupt which will then be used to implement two separate PWM signals (variable duty

cycle digital outputs) to control the left/right and up/down position of a small robotic arm.

By varying the duty cycle between limits, the robotic arm’s left/right and up/down angles

will be changed.

Here are the requirements for this solution (given a breadboard, single variable resistor,

wires, and 2 axis microservo robotic arm):


1. Implement a “manual” mode which you will be able to change the position of the

left/right servo and the up/down servo one at a time.

2. There must be a method to adjust the PWM (duty cycle) of each servo axis (one at a

time) using a single analog input from the user in real-time.

3. You must also implement an “automatic” mode which will automatically change the

servo position for both the left/right and up/down servo from one extreme position (-

90 degrees from neutral to 90 degrees from neutral) continuously until manual mode

is entered.

4. You must have a display indicator that gives an alphabetic label for the servo axis you

are currently adjusting (or last adjusted), i.e. l/r, u/d, or bth for left/right, up/down or

both. This must work in both manual and automatic modes.

5. You must have a way to latch each servo’s position (in degrees) from neutral and

continuously display it after it is set. This must work in both manual and automatic.

6. There should be no way to make your PWM'ed servos, display of the duty cycle, or

software malfunction just by switching the switches, or adjusting the variable resistor

at any time.

7. There must be at least 50 levels of PWM resolution from -90 degrees from neutral to

90 degrees from neutral. The servos don’t have to move exactly 180 total degrees

(they don’t) but they do have to move as far as they can judging by an oscilloscope

measuring the duty cycles of digital outputs going to the servos at -90 and +90

degrees.

8. NOTE: You may only write in C and use no assembly files except for functions

SetSysClock(), gpio_c_init(), gpio_d_init(), seg7_init(), seg7_put(), adc_start(),

adc_done, and adc_init. I suggest using your last week's lab main.c (and

makefile) and build on it from there.

  • 9 years ago
  • 20
Answer(0)