A modulação da largura de pulso ou PWM é uma técnica usada para picar o sinal digital para obter saída variável. A maioria dos microcontroladores tem um relógio interno que é usado para gerar um sinal PWM. Neste tutorial, abordaremos os pinos do PWM e como eles podem ser configurados no ESP32 usando o Arduino IDE.
Pinos PWM no ESP32
A placa ESP32 possui 16 canais independentes que podem gerar sinais de PWM. Quase todos os pinos GPIO que podem atuar como saída podem ser usados para gerar um sinal PWM. Os pinos GPIO 34,35,36,39 não podem ser usados como pinos PWM, pois são apenas pinos de entrada.
Na variante 36 pinos da placa ESP32, os seis pinos integrados SPI que não podem ser usados como geradores de sinal PWM também.
Como usar pinos PWM Esp32
PWM é uma técnica para controlar o dispositivo usando um sinal de pulso digital variável. PWM ajuda a controlar a velocidade do motor. Componente principal na geração de sinais PWM é o módulo interno do timer. O timer é controlado pela fonte do relógio do microcontrolador interno.
À medida que o tempo inicia, seu valor é comparado com dois comparadores e, uma vez atinge o valor do ciclo de trabalho definido, um sinal no pino PWM é acionado, que altera os estados do pino para baixo. Em seguida, o sinal do timer continua contando até atingir o valor do registro do período. Agora, novamente, o comparador gerará um novo gatilho e os pinos de PWM em mudança de estado de baixo para baixo para alto.
Para gerar um sinal PWM nos pinos do GPIO após quatro propriedades, precisam ser definidos:
Configure canais PWM de ESP32
Configurando o canal PWM em ESP32 é semelhante ao analogwrite () função na programação arduino. Mas aqui estaremos usando um conjunto dedicado de ledcsetup () Funções para configurar o PWM no ESP32. Praticamente tudo o que é necessário para um sinal PWM como canal, resolução e frequência pode ser facilmente configurável pelo usuário.
A seguir está o ledcsetup () função usada para configurar o sinal PWM ESP32:
ledcsetup (canal, frequência, resolução_bits);
Esta função contém três argumentos.
Canal: Como o ESP32 possui 16 canais PWM, o canal argumento dentro do ledcsetup () A função pode levar qualquer valor entre 0 e 15.
Frequência: Próximo no ledcsetup () Função Temos argumentos de frequência que podem ser definidos de acordo com requisitos como 1 kHz, 5 kHz, 8 kHz e 10 kHz. Por exemplo, a frequência PWM máxima com resolução de 10 bits no módulo PWM pode ser definida é 78.125kHz.
Resolução: A resolução do sinal PWM pode ser configurada entre uma resolução de 1 a 16 bits.
No ESP32, a frequência e a resolução do PWM são independentes da fonte do relógio e inversamente proporcionais.
A etapa final é definir um alfinete para PWM. Não atribua pinos já usados para comunicação, como pinos GPIO como UART, SPI, etc.
O LEDC (LED PWM Controller) foi projetado principalmente para sinais de controle LED PWM ESP32. No entanto, os sinais de PWM gerados aqui também podem ser usados para outras aplicações.
Aqui estão alguns pontos que é preciso ter em mente ao configurar o sinal PWM ESP32:
Controlando o brilho LED usando o sinal PWM no ESP32
Agora vamos controlar o brilho LED usando um sinal PWM. Conecte o LED ao pino esp32 GPIO 18.
A tabela mostra a conexão PIN para LEDs com ESP32.
PIN GPIO ESP32 | LIDERADO |
GPIO 18 | +eu tenho |
Gnd | -eu tenho |
Código para controle de brilho LED
O código fornecido abaixo fará com que o LED desapareça:
const int led = 18; /*É igual ao pino GPIO 18*/
const int freq = 5000; /*Frequência do sinal PWM*/
const int led_Channel = 0;
const int resolução = 8; /*Resolução PWM*/
Void Setup ()
LedCsetup (LED_CHANNEL, FREQ, Resolução); /*Sinal PWM definido*/
ledcattachpin (LED, LED_CHANNEL);
Void Loop ()
for (int dutycycle = 0; hutyCycle = 0; hutyCycle-) /*O brilho do LED diminui* /
ledcwrite (LED_CHANNEL, DutyCycle);
atraso (15);
Código iniciado definindo o número do PIN para LED, que é o GPIO 18. Em seguida, definimos as propriedades do sinal PWM que são frequência, resolução de sinal PWM e canal de LED.
Em seguida, usando o ledcsetup () função, configuramos o sinal PWM. Esta função aceita os três argumentos frequência, resolução e Canal de LED Nós definimos anteriormente.
Na parte do loop, variamos o ciclo de trabalho entre 0 e 255 para aumentar o brilho do LED. Depois disso novamente, usando o loop for diminui o brilho do LED de 255 para 0.
A modulação da largura de pulso transforma um sinal digital em um sinal analógico, alterando o tempo de quanto tempo ele fica ligado e desligado. O termo Ciclo de serviço é usado para descrever a porcentagem ou proporção de quanto tempo permanece em comparação com quando desligar.
Aqui, pegamos um canal de 8 bits, de acordo com os cálculos:
2^8 = 256 contendo valores de 0 a 255. No exemplo dado acima, o ciclo de trabalho é igual a 100%. Para 20% do ciclo de trabalho ou qualquer outro valor, podemos calculá -lo usando os cálculos abaixo:
Resolução do canal = 8 bits
Para 100% de ciclo de trabalho = 0 a 255 (2^8 = 256 valores)
Para 20% do ciclo de trabalho = 20% de 256 é 51
Portanto, um ciclo de trabalho de 20% de resolução de 8 bits será igual a valores de intervalo de 0 a 51.
Onde 0 = 0% e 51 = 100% do ciclo de trabalho de resolução de 8 bits.
Saída
No hardware, podemos ver o brilho do LED inteiro, isso significa que o sinal do ciclo de trabalho está em 255.
Agora podemos ver que o LED está completamente escuro, o que significa que o valor do ciclo de trabalho está em 0.
Controlamos com sucesso o brilho LED usando o sinal PWM.
Conclusão
Aqui neste artigo, discutimos os pinos PWM ESP32 e como eles podem ser usados para controlar vários periféricos como LED ou motor. Também discutimos o código para controlar LEDs únicos e múltiplos usando o mesmo canal PWM. Usando este guia, qualquer tipo de hardware pode ser controlado com a ajuda do sinal PWM.