PWM In Arduino
PWM
The Fading example demonstrates the use of analog output (PWM) to
fade an LED. It is available in the
File->Sketchbook->Examples->Analog menu of the Arduino
software.
Pulse Width Modulation, or PWM, is a technique
for getting analog results with digital means. Digital control is used
to create a square wave, a signal switched between on and off. This
on-off pattern can simulate voltages in between full on (5 Volts) and
off (0 Volts) by changing the portion of the time the signal spends on
versus the time that the signal spends off. The duration of "on time" is
called the pulse width. To get varying analog values, you change, or
modulate, that pulse width. If you repeat this on-off pattern fast
enough with an LED for example, the result is as if the signal is a
steady voltage between 0 and 5v controlling the brightness of the LED.
In the graphic below, the green lines represent
a regular time period. This duration or period is the inverse of the
PWM frequency. In other words, with Arduino's PWM frequency at about
500Hz, the green lines would measure 2 milliseconds each. A call to analogWrite()
is on a scale of 0 - 255, such that analogWrite(255) requests a 100%
duty cycle (always on), and analogWrite(127) is a 50% duty cycle (on
half the time) for example.
Once you get this example running, grab your
arduino and shake it back and forth. What you are doing here is
essentially mapping time across the space. To our eyes, the movement
blurs each LED blink into a line. As the LED fades in and out, those
little lines will grow and shrink in length. Now you are seeing the
pulse width.