- Componenti richiesti
- Generazione PWM
- Spiegazione del codice per ESP32 PWM
- Test dei segnali PWM ESP32
Pulse Width Modulation (PWM) è una tecnica che varia l'ampiezza di un impulso mantenendo costante la frequenza dell'onda. La tecnica PWM principalmente utilizzata per controllare la luminosità del LED, la velocità del motore DC, il controllo di un servomotore o in altri casi, dove devono generare un segnale analogico utilizzando una sorgente digitale. Abbiamo spiegato in dettaglio il PWM nell'articolo precedente.
In questo tutorial parleremo dei pin PWM (pulse width modulation) della scheda di sviluppo ESP32. Tutti i pin GPIO della scheda di sviluppo ESP32 (eccetto Power, GND, Tx, Rx e EN) possono essere utilizzati per ottenere il segnale PWM. Come esempio PWM ESP32, costruiremo un semplice circuito che cambia la luminosità del LED in base ai segnali PWM.
Componenti richiesti
- ESP32
- GUIDATO
- Resistore da 330 Ω
- 10k Pot
- Breadboard
Generazione PWM
Prima di spiegare la generazione PWM su ESP32, discutiamo alcuni termini associati a PWM.
TON (On Time): la durata del tempo in cui il segnale è alto.
TOFF (Off Time): la durata del tempo in cui il segnale è basso.
Periodo: è la somma del tempo di accensione e del tempo di spegnimento del segnale PWM.
TotalPeriod = T ON + T OFF
Duty Cycle: la percentuale di tempo in cui il segnale era alto durante il periodo del segnale PWM.
Ciclo di lavoro = T ON / T totale * 100
Ad esempio, se un impulso con un periodo totale di 10 ms rimane ON (alto) per 5 ms. Quindi, il ciclo di lavoro sarà:
Ciclo di lavoro = 5/10 * 100 = Ciclo di lavoro del 50%
Il circuito contiene un singolo LED, un resistore e un potenziometro da 10K. Il pin negativo del LED è collegato al GND di ESP32 tramite una resistenza da 330 Ω. È possibile utilizzare qualsiasi valore di resistenza compreso tra 230 Ω e 500 Ω. Collegare il pin positivo del LED a GPIO 16 e il pin del segnale di Pot al pin ADC1 (VP) di ESP32.
Spiegazione del codice per ESP32 PWM
Il codice completo è riportato alla fine della pagina.
Questo codice non richiede alcuna libreria, quindi avvia il codice definendo il pin a cui è collegato il LED. Nel mio caso, ho usato GPIO 16 per collegare il LED.
const int ledPin = 16; // 16 corrisponde a GPIO16
Dopodiché, imposta le proprietà del segnale PWM nelle righe successive. Ho impostato la frequenza PWM su 9000 e la risoluzione su 10, puoi cambiarla per generare diversi segnali PWM. Le schede ESP32 supportano la risoluzione PWM da 1 bit a 16 bit. Devi anche scegliere un canale PWM. ESP32 ha un totale di 16 (da 0 a 15) canali PWM.
const int freq = 9000; const int ledChannel = 0; const int risoluzione = 10;
Ora all'interno della funzione void setup () , configura il LED PWM con le proprietà che hai impostato in precedenza utilizzando la funzione ledcSetup () . Nella riga successiva, definire il pin GPIO a cui è collegato il LED. La funzione ledcAttachPin () viene utilizzata per definire il pin GPIO e il canale che sta generando il segnale. Nel mio caso, ho usato il ledPin che è GPIO 16 e ledChannel che corrisponde al canale 0.
void setup () {Serial.begin (9600); ledcSetup (ledChannel, freq, risoluzione); ledcAttachPin (ledPin, ledChannel); }
Nel loop void, leggi il pin analogico a cui è collegato il Pot e memorizza la lettura in una variabile chiamata "dutyCycle" . La luminosità del LED aumenterà o diminuirà in base alla rotazione del potenziometro. Il ledcWrite () è molto simile a analogWrite ().
void loop () {dutyCycle = analogRead (A0); ledcWrite (ledChannel, dutyCycle); ritardo (15); }
Test dei segnali PWM ESP32
Per testare i segnali PWM dell'ESP32, collega il LED e il potenziometro secondo lo schema del circuito e carica il codice sul tuo ESP32. Assicurati di aver selezionato la scheda e la porta COM corrette. Ora ruota il potenziometro per aumentare o diminuire la luminosità del LED.
Il funzionamento completo è mostrato nel video riportato di seguito. Inoltre, controlla altri progetti basati su ESP32 seguendo il collegamento.