Modulazione della larghezza dell'impulso o PWM è una tecnica utilizzata per tagliare il segnale digitale per ottenere un'uscita variabile. La maggior parte dei microcontroller ha un orologio interno che viene utilizzato per generare un segnale PWM. In questo tutorial copriremo i pin PWM e come possono essere configurati in ESP32 usando l'IDUino IDE.
Pin PWM in ESP32
La scheda ESP32 ha 16 canali indipendenti in grado di generare segnali PWM. Quasi tutti i pin GPIO che possono agire come output possono essere utilizzati per generare un segnale PWM. I pin GPIO 34,35,36,39 non possono essere usati come pin PWM in quanto sono solo pin di immissione.
Nella variante a 36 pin della scheda ESP32 i sei pin integrati SPI che non possono essere utilizzati anche come generatori di segnale PWM.
Come utilizzare i pin ESP32 PWM
PWM è una tecnica per controllare il dispositivo utilizzando un segnale di impulso digitale variabile. PWM aiuta a controllare la velocità del motore. Il componente principale nella generazione di segnali PWM è il modulo timer interno. Il timer è controllato dalla sorgente di clock del microcontrollore interno.
Con l'avvio del tempo, il suo valore viene confrontato con due comparatori e una volta raggiunto il valore del ciclo di lavoro definito viene attivato un segnale sul pin PWM che cambia gli stati del pin a basso. Successivamente il segnale del timer continua il conteggio fino a quando non raggiunge il valore del registro del periodo. Ora di nuovo il comparatore genererà un nuovo grilletto e PWM Pins Stato spostamento dal basso a alto.
Per generare un segnale PWM sui pin GPIO a seguito di quattro proprietà devono essere definiti:
Configurare i canali PWM di ESP32
Configurazione del canale PWM in ESP32 è simile a AnalogWrite () funzione nella programmazione Arduino. Ma qui useremo un set dedicato di LedCsetup () Funzioni per la configurazione di PWM in ESP32. Praticamente tutto ciò che è necessario per un segnale PWM come canale, risoluzione E frequenza può essere facilmente configurabile dall'utente.
Di seguito è il LedCsetup () funzione utilizzata per configurare il segnale PWM ESP32:
LedCsetup (canale, frequenza, risoluzione_bits);
Questa funzione contiene tre argomenti.
Canale: Poiché ESP32 ha 16 canali PWM, quindi il canale argomento all'interno del LedCsetup () La funzione può prendere qualsiasi valore tra 0 e 15.
Frequenza: Successivamente nel LedCsetup () Funzione Abbiamo argomenti di frequenza che possono essere impostati in base a requisiti come 1 kHz, 5 kHz, 8 kHz e 10 kHz. Ad esempio, è possibile impostare la massima frequenza PWM con risoluzione di 10 bit nel modulo PWM è 78.125kHz.
Risoluzione: La risoluzione del segnale PWM può essere configurata tra la risoluzione da 1 bit a 16 bit.
In ESP32 sia la frequenza e la risoluzione PWM sono indipendenti dalla sorgente di clock e inversamente proporzionali.
L'ultimo passo è definire un pin per PWM. Non assegnare pin già usati per una comunicazione come pin GPIO come UART, SPI, ecc.
Il LEDC (controller PWM LED) è progettato principalmente per i segnali di controllo LED PWM ESP32. Tuttavia, i segnali PWM generati qui possono essere utilizzati anche per altre applicazioni.
Ecco alcuni punti che bisogna tenere a mente durante la configurazione del segnale PWM ESP32:
Controllo della luminosità dei LED mediante il segnale PWM in ESP32
Ora controlleremo la luminosità dei LED usando un segnale PWM. Connetti LED con il pin GPIO ESP32.
La tabella mostra la connessione PIN per i LED con ESP32.
ESP32 PIN GPIO | GUIDATO |
GPIO 18 | +io ho |
GND | -io ho |
Codice per il controllo della luminosità a LED
Il codice indicato di seguito farà svanire il LED dentro e fuori:
const int led = 18; /*È uguale al pin GPIO 18*/
const int freq = 5000; /*Frequenza del segnale PWM*/
const int led_channel = 0;
const int risoluzione = 8; /*Risoluzione PWM*/
void setup ()
LEDCSetUp (LED_CHANNEL, FREQ, risoluzione); /*Segnale PWM definito*/
Ledcattachpin (LED, LED_Channel);
void loop ()
per (int dutyCycle = 0; dutyCycle = 0; dutyCycle-) /*LED LIGHTESS diminuisce* /
LEDCWRITE (LED_CHANNEL, DOVERCYCLE);
ritardo (15);
Codice avviato definendo il numero PIN per LED che è GPIO 18. Successivamente impostiamo le proprietà del segnale PWM che sono frequenza, risoluzione del segnale PWM e canale LED.
Poi usando il LedCsetup () Funzione Configuriamo il segnale PWM. Questa funzione accetta i tre argomenti frequenza, risoluzione E Canale a LED Abbiamo definito prima.
Nella parte del ciclo variamo il ciclo di lavoro tra 0 e 255 per aumentare la luminosità del LED. Successivamente l'uso del loop diminuisce la luminosità a LED da 255 a 0.
La modulazione della larghezza dell'impulso trasforma un segnale digitale in un segnale analogico modificando i tempi di quanto tempo rimane e spento. Il termine Ciclo di lavoro è usato per descrivere la percentuale o il rapporto tra quanto tempo rimane rispetto a quando si spegne.
Qui abbiamo preso un canale a 8 bit, quindi secondo i calcoli:
2^8 = 256 contenenti valori da 0 a 255. Nell'esempio sopra indicato il ciclo di lavoro è pari al 100%. Per un ciclo di lavoro del 20% o qualsiasi altro valore possiamo calcolarlo usando i calcoli seguenti:
Risoluzione del canale = 8 bit
Per ciclo di lavoro al 100% = Da 0 a 255 (2^8 = 256 valori)
Per il 20% del ciclo di lavoro = 20% di 256 è 51
Quindi un ciclo di lavoro del 20% di risoluzione a 8 bit sarà uguale a valori da 0 a 51.
Dove 0 = 0% e 51 = 100% del ciclo di lavoro con risoluzione a 8 bit.
Produzione
Sull'hardware possiamo vedere la luminosità del LED al massimo, questo significa che il segnale del ciclo di lavoro è a 255.
Ora possiamo vedere che il LED è completamente fioco, il che significa che il valore del ciclo di lavoro è a 0.
Abbiamo controllato con successo la luminosità dei LED usando il segnale PWM.
Conclusione
Qui in questo articolo, abbiamo discusso dei pin PWM ESP32 e come possono essere utilizzati per controllare più periferiche come LED o motore. Abbiamo anche discusso del codice per il controllo di LED singoli e multipli utilizzando lo stesso canale PWM. Utilizzando questa guida qualsiasi tipo di hardware può essere controllato con l'aiuto del segnale PWM.