PWM

From Frotmail Projects
Jump to navigation Jump to search

PWM ofwel Pulse Width Modulation is een manier om digitaal de snelheid van een motor, of helderheid van een ledje/lampje aan te passen.


Stel we nemen een refresh van 100hz en een resolutie van 8 bits.


bij 255 is de led 100% aan

bij 127 is de led 50% aan

bij 0 is de led uit


Door de refresh van 100 hz te kiezen zien we de led niet knipperen (het menselijk oog haakt af tussen de 50-100 hz, en zal denken dat hij continu brandt)

peudo code:

functie pwm                  // Deze functie wordt door een timer aangeroepen
{
   teller++;                 // Bij iedere "run" wordt de teller 1 opgehoogd
   if teller == 0            // en na de 255 zal de teller weer bij 0 verdergaan
     poort_aan;              // Als de teller weer bij 0 is moet de poort weer aan
                             // dan begint namelijk een nieuwe pwm cyclus
   if teller == pwm_gewenst  // Als de teller gelijk is aan pwm_gewenst betekend dit 
     poort_uit;              // dat de poort nu precies `pwm_gewenst` tikken heeft aangestaan
                             // En dan mag de poort uit tot de volgende cyclus
}


Afbeelding:pwm.png

In deze afbeelding staat een voorbeeld van PWM. Iedere 256 kloktikken zal de teller weer bij 0 beginnen en dus de poort uitzetten, daarna blijft de poort net zolang aan als de waarde in pwm_gewenst (PWM in de tekening)

Wanneer we een PWM frequentie willen van 100 hz en een resolutie van 256 tikken, zullen we de cpu dus 100 x 256 keer per seconde, de bovenstaande pwm_functie aan moeten laten roepen.