Il PWM spiegato: come controllare velocita' dei motori e luminosita' dei LED
Un pin di un microcontrollore puo' essere solo completamente acceso (5V) o spento (0V). Allora come fai a far girare un motore a meta' velocita'? La risposta e' il PWM: Pulse Width Modulation (modulazione di larghezza d'impulso).
L'idea
Accendi e spegni il pin centinaia o migliaia di volte al secondo. Se e' acceso il 50% del tempo, il motore o il LED si comporta come se ricevesse circa meta' tensione. La percentuale di tempo "acceso" si chiama duty cycle.
- 0% duty: spento.
- 50% duty: meta' potenza.
- 100% duty: acceso pieno.
Nel codice
Su Arduino usi analogWrite su un pin PWM (col simbolo ~). Il valore va da 0 a 255:
analogWrite(9, 128); // circa 50% di potenza
analogWrite(9, 255); // potenza pienaPerche' conta in robotica
- Velocita' motori: un driver motore riceve un segnale PWM e regola quanto girano le ruote. E' cosi' che un robot rallenta in curva e accelera sul rettilineo.
- Luminosita' LED / illuminazione: regoli le luci senza hardware extra.
- Controllo servo usa una forma speciale di PWM per impostare un angolo (di piu' nella lezione sui servo).
Un dettaglio
Il PWM controlla la potenza media, non direttamente la coppia. A duty molto bassi un motore puo' ronzare senza girare perche' non vince l'attrito. E' normale: i robot veri tengono una velocita' minima utile invece di strisciare al 5%.