Scopri come controllare la luminosità di un LED collegato a un Raspberry Pi utilizzando PWM.

Il PWM è qualcosa che tutti usiamo ogni giorno, anche se non lo sappiamo. È una tecnica semplice e incredibilmente utile in una vasta gamma di applicazioni. Meglio ancora, è qualcosa che il tuo Raspberry Pi può fare senza sudare. Come? Diamo un'occhiata.

Cos'è il PWM?

Come dice la terminologia, "Modulazione della larghezza dell'impulso" sembra piuttosto fantasioso. Ma in realtà tutto ciò di cui stiamo parlando è spegnere e riaccendere un segnale elettrico, in modo estremamente rapido. Perché potremmo volerlo fare? Semplicemente perché è un modo molto semplice per simulare un segnale analogico variabile, senza ricorrere a HAT Raspberry Pi, componenti aggiuntivio circuiti aggiuntivi. Per alcune applicazioni, come il riscaldamento di una stufa, l'azionamento di un motore o la regolazione di un LED, un segnale PWM è letteralmente indistinguibile da una tensione analogica "reale".

Cicli di lavoro

Quindi, abbiamo una serie di impulsi che vengono immessi in un carico (la cosa che stiamo guidando). Questo da solo non è poi così utile, finché non iniziamo a cambiare (o modulare) l'ampiezza di quegli impulsi. La fase "on" di un dato periodo on-off può occupare dallo 0 al 100% del ciclo totale. Chiamiamo questa percentuale il

instagram viewer
ciclo di lavoro.

Ad esempio, supponiamo di avere un segnale PWM da 3 V con un ciclo di lavoro del 50%. La quantità media di potenza che passa attraverso il LED sarebbe equivalente a un segnale sempre attivo di 1,5 V. Aumenta il ciclo di lavoro e il LED diventa più luminoso; comporlo e il LED si attenua. Possiamo generare audio utilizzando lo stesso metodo, motivo per cui l'audio in uscita sul tuo Raspberry Pi potrebbe smettere di funzionare se utilizzi PWM per altre cose.

PWM sul Raspberry Pi

Puoi utilizzare il software PWM su ogni pin GPIO del Raspberry Pi. Ma il PWM hardware è disponibile solo su GPIO12, GPIO13, GPIO18, E GPIO19.

Qual è la differenza? Bene, se utilizzerai un software per generare il segnale, consumerai cicli della CPU. Tuttavia, la tua CPU potrebbe avere di meglio da fare che dire a un LED di spegnersi e accendersi diverse centinaia di volte al secondo. In effetti, potrebbe essere distratto e impantanato da altre attività, il che può compromettere seriamente i tempi PWM.

Di conseguenza, spesso è un'idea migliore delegare il compito a circuiti specializzati. Nel caso del Raspberry Pi, questo circuito risiede all'interno il sistema su chip che ospita la CPU. La PWM hardware è spesso molto più precisa e conveniente e quindi è l'opzione preferita nella maggior parte dei casi. Se vuoi un'idea di cosa succede sotto il cofano del chip Broadcom BCM2711 del Raspberry Pi 4, puoi dare un'occhiata a la documentazione del BCM2711. Il capitolo 8 tratta gli aspetti PWM!

Dimmerare un LED

Per far funzionare il nostro LED con il nostro Raspberry Pi, dovremo fare un po' di breadboarding. Ciò significa due componenti: il LED stesso e un resistore limitatore di corrente, che collegheremo in serie ad esso. Senza il resistore, il LED rischia di spegnersi in uno sbuffo di fumo maleodorante se viene attraversato da troppa corrente.

Elaborazione del valore del resistore

Non importa a quale estremità del LED colleghi la resistenza. Ciò che conta è il valore del resistore. Il Raspberry Pi 4 può fornire circa 16 milliampere per pin. Quindi possiamo usa la legge di Ohm per calcolare il valore del resistore necessario.

Detta legge afferma che la resistenza dovrebbe essere uguale alla tensione rispetto alla corrente. Conosciamo la tensione in uscita dal pin GPIO del Pi (3,3 V) e sappiamo quale dovrebbe essere la corrente (16 milliampere o 0,016 amp). Se dividiamo il primo per il secondo otteniamo 206,25. Ora, poiché difficilmente troverai resistori di questo valore, optiamo invece per 220 ohm.

Collegare l'anodo del LED (gambo lungo) a GPIO18 (che è il pin fisico 12 sul Raspberry Pi). Collega il catodo (gambo corto) a uno qualsiasi dei pin di terra del Pi. Non dimenticare il resistore, da qualche parte lungo il percorso. Ora sei pronto per partire!

Implementazione PWM su Raspberry Pi

Per far funzionare il PWM hardware su Raspberry Pi, utilizzeremo il file libreria rpi-hardware-pwm di Cameron Davidson-Pilon, adattato da codice di Jeremy Impson. Questo è stato utilizzato in Pioreattore (un bioreattore basato su Pi), ma è abbastanza semplice per i nostri scopi.

Per prima cosa, andiamo modifica il file config.txtfile, che si trova nel file /boot directory. Dobbiamo solo aggiungere una riga: dtoverlay=pwm-2chan. Se volessimo utilizzare pin GPIO diversi da 18 e 19, potremmo aggiungere qui alcuni argomenti aggiuntivi. Per ora, manteniamo le cose semplici.

Riavvia il tuo Pi ed esegui:

lsmod | grep pwm

Questo comando elenca tutti i moduli caricati nella parte centrale del sistema operativo, chiamata kernel. Qui li stiamo filtrando per trovare solo il materiale PWM, utilizzando il file grep (che è il comando "stampa espressione regolare globale").

Se pwm_bcm2835 appare tra i moduli elencati, allora siamo sulla strada giusta. Abbiamo quasi finito di preparare! Non resta che installare la libreria vera e propria. Dal terminale esegui:

sudo pip3 install rpi-hardware-pwm

Ora siamo pronti per iniziare.

Codifica del circuito LED PWM

È ora di sporcarci le mani con un po' di codifica in Python. Avvia Thonny e copia il seguente codice. Quindi colpisci Correre.

from rpi_hardware_pwm import HardwarePWM
import time
pwm = HardwarePWM(pwm_channel=0, hz=60) # here's where we initialize the PWM
pwm.start(0) # start the PWM at zero – which means the LED is off
for i in range(101):
pwm.change_duty_cycle(i)
time.sleep(.1) # by introducing a small delay, we can make the effect visible.
pwm.stop()

Se tutto va bene, vedrai il LED diventare gradualmente più luminoso fino al io la variabile contatore raggiunge 100. Quindi si spegnerà. Cosa sta succedendo qui? Esaminiamolo.

Stiamo importando la parte rilevante della libreria PWM hardware (insieme al file tempo module) e dichiarando una nuova variabile. Possiamo impostare il pwm_canale a 0 o 1, che corrispondono rispettivamente ai pin GPIO 18 e 19 sul Pi.

IL hz valore che possiamo impostare su qualunque frequenza preferiamo (anche se alla fine siamo limitati dalla velocità di clock del Pi). A 60Hz non dovremmo vedere alcuno sfarfallio del PWM. Ma potrebbe essere una buona idea iniziare con un valore molto basso (come 10) e aumentare gradualmente le cose. Fallo e sarai effettivamente in grado di vedere gli impulsi accadere. Non limitarti a crederci sulla parola!

Lavoriamo secondo il nostro ciclo di lavoro (io) da 0 a 100 utilizzando un ciclo for di Python. Vale la pena notare che possiamo impostare il file tempo.di.sonno argomento per tutto il tempo che vogliamo: poiché il PWM viene gestito dall'hardware, funzionerà dietro le quinte, per quanto tempo diciamo al programma di attendere.

C'è altro da imparare con PWM

Congratulazioni! Hai scritto il tuo primo programma PWM. Ma, come spesso accade con il Raspberry Pi, c'è molto che puoi fare con queste cose, soprattutto se potenzia il tuo Raspberry Pi con il giusto HAT PWM. Quindi, non accontentarti di un piccolo LED. Puoi usare questo nuovo potere per controllare motori, codificare messaggi e generare toni di sintetizzatore. Un mondo di modulazione ti aspetta!