What is pwm in arduino

Last updated: April 1, 2026

Quick Answer: PWM (Pulse Width Modulation) in Arduino is a technique that simulates analog output on digital pins by rapidly switching them between on and off states at varying duty cycles.

Key Facts

Overview

PWM (Pulse Width Modulation) is a fundamental technique used in Arduino to create analog-like control using digital pins. Since Arduino digital outputs can only be fully on or fully off, PWM simulates analog values by rapidly switching between these two states. The duration of the "on" state relative to the "off" state determines the effective output level.

How PWM Works

PWM works by rapidly cycling a digital pin between HIGH and LOW states. The proportion of time the pin spends in the HIGH state compared to the total cycle time is called the duty cycle. For example, a 50% duty cycle means the pin is HIGH half the time and LOW half the time. By varying the duty cycle, Arduino can effectively simulate different voltage levels without using true analog output pins.

PWM Pins on Arduino

Not all digital pins on Arduino support PWM. Pins capable of PWM are typically marked with a tilde (~) symbol next to their pin number. On an Arduino Uno, pins 3, 5, 6, 9, 10, and 11 support PWM. Different Arduino boards have different PWM-capable pins, so it's important to check your specific board's documentation.

Using PWM in Arduino Code

The Arduino IDE provides the analogWrite() function to control PWM output. This function takes two parameters: the pin number and a value from 0 to 255. A value of 0 means the pin is always off, 255 means it's always on, and values in between represent the duty cycle as a percentage. For example, analogWrite(pin, 128) sets a 50% duty cycle.

Practical Applications

PWM has numerous practical applications in Arduino projects:

Frequency Considerations

The frequency at which PWM cycles determines how fast the on/off switching occurs. Arduino Uno uses either 490 Hz or 980 Hz depending on the pin. Higher frequencies can reduce flickering in LEDs and audible noise in motors, while lower frequencies may be suitable for other applications.

Related Questions

How do I control LED brightness with Arduino?

Use the analogWrite() function on a PWM-capable pin with a value between 0-255. For example, analogWrite(3, 128) sets pin 3 to 50% brightness.

What is the difference between PWM and analog output?

True analog output produces variable voltages, while PWM simulates analog effects digitally by rapidly switching on and off. Arduino digital pins use PWM to achieve analog-like control.

Can I use PWM on any digital pin?

No, only pins marked with ~ symbol support PWM. On Arduino Uno, these are pins 3, 5, 6, 9, 10, and 11. Check your board's documentation for which pins support PWM.

Sources

  1. Arduino Reference - analogWrite() CC-BY-SA-4.0
  2. Wikipedia - Pulse-width modulation CC-BY-SA-4.0