PWM Motor Controller Interface

From Embedded Systems Learning Academy
Revision as of 02:15, 22 November 2012 by Preet (talk | contribs) (PWM for LPC17xx)

Jump to: navigation, search

What is PWM

PWM stands for Pulse Width Modulation. A signal duty cycle is controlled to produce the pulse width.

Application

The application of a PWM is usually in motor controls. If a motor is attached to your PWM signal, you could control the motor's speed using the PWM. Imagine that the PWM you produce lasts for one second (1 Hz). Now, imagine that the PWM is high 10% of the time and LOW 90% of the time. What you will end up doing is turning on the motor only 1/10th of a second, hence controlling the motor speed.

   Example PWM that is ~ 25% HIGH, 75% LOW
       __          __          __
      |  |        |  |        |  |
   ___|  |________|  |________|  |_________
   Example PWM that is ~ 90% HIGH, 10% LOW
       _________   _________   _________
      |         | |         | |
   ___|         |_|         |_|


Now imagine that this 1Hz signal is changed to 1000 Hz. You will no longer hear the motor turn on just for 1/10th of a second. The motor will instead produce a high frequency noise as it is being switched on and off at a very fast rate. This will yield very smooth operation of the motor and hence you can control digitally.

PWM for LPC17xx

Steps to use a pin for a PWM :

  • Please grab the PWM from my SourceForge repository.
  • Locate a "PWM" pin on your board.
    On SJ-One Board, you should see PWM1-2, PWM1-4, and PWM1-5.
    PWM1-2 is PWM2, PWM1-4 is PWM4, and PWM1-5 is PWM5
  • Use the sample code below.


int main(void)
{
    // Let's initialize the PWM signal on PWM1-2
    PWM pwm(PWM::pwm2, 1000);

    // Set PWM to 50%
    pwm.set(50);

    return 0;
}

Motor Wiring Example

TO DO