Different GPIO libraries approach PWM signal generation in different ways. Three common techniques are as follows:
- Software PWM: The frequency and duty cycle timing of a PWM signal are produced in code and can be made available on any GPIO pin. This is the least accurate method of creating PWM signals because the timing can be adversely affected by a busy Raspberry Pi CPU.
- Hardware-timed PWM: The PWM timing is performed using DMA and PWM/PCM hardware peripherals. It's highly accurate and is available on any GPIO pin.
- Hardware PWM: Hardware PWM is provided entirely via hardware and is the most accurate method of creating PWM signals. The Raspberry Pi has two dedicated hardware PWM channels, labeled PWM0 via GPIO pins 18 and 12 and PWM1 via GPIO pins 13 and 19 (refer to Figure 5.1).
It's not enough to just connect something to GPIOs 12, 13, 18, or 19 in order to get hardware PWM. These GPIOs are the BCM GPIOs that have PWM listed...