- Componentes necessários
- Geração PWM
- Explicação do código para ESP32 PWM
- Testando os Sinais PWM ESP32
A modulação por largura de pulso (PWM) é uma técnica que varia a largura de um pulso enquanto mantém a frequência da onda constante. A técnica PWM utilizada principalmente para controlar o brilho do LED, velocidade do motor DC, controlando um servo motor, ou em outros casos, onde tem que gerar um sinal analógico usando uma fonte digital. Explicamos o PWM em detalhes no artigo anterior.
Neste tutorial, vamos falar sobre pinos PWM (modulação por largura de pulso) da placa de desenvolvimento ESP32. Todos os pinos GPIO da placa de desenvolvimento ESP32 (exceto Power, GND, Tx, Rx e EN) podem ser usados para obter o sinal PWM. Como um exemplo ESP32 PWM, vamos construir um circuito simples que altera o brilho do LED de acordo com os sinais PWM.
Componentes necessários
- ESP32
- CONDUZIU
- 330 Ω Resistor
- 10k pot
- Tábua de pão
Geração PWM
Antes de explicar a geração do PWM no ESP32, vamos discutir alguns termos associados ao PWM.
TON (On Time): A duração de tempo quando o sinal está alto.
TOFF (Off Time): A duração de tempo quando o sinal está baixo.
Período: É a soma do tempo de ativação e desativação do sinal PWM.
Período Total = T ON + T OFF
Ciclo de trabalho: A porcentagem de tempo em que o sinal esteve alto durante o período do sinal PWM.
Ciclo de trabalho = T ON / T Total * 100
Por exemplo, se um pulso com um período total de 10ms permanece ON (alto) por 5ms. Então, o ciclo de trabalho será:
Ciclo de trabalho = 5/10 * 100 = 50% do ciclo de trabalho
O circuito contém um único LED, um resistor e um potenciômetro de 10K. O pino negativo do LED é conectado ao GND do ESP32 por meio de um resistor de 330 Ω. Você pode usar qualquer valor de resistor entre 230 Ω e 500 Ω. Conecte o pino positivo do LED ao GPIO 16 e o pino de sinal do Pot ao pino ADC1 (VP) do ESP32.
Explicação do código para ESP32 PWM
O código completo é fornecido no final da página.
Este código não requer nenhuma biblioteca, então comece seu código definindo o pino ao qual o LED está conectado. No meu caso, usei GPIO 16 para conectar o LED.
const int ledPin = 16; // 16 corresponde a GPIO16
Depois disso, defina as propriedades do sinal PWM nas próximas linhas. Eu defino a frequência PWM para 9000 e a resolução para 10, você pode alterá-la para gerar diferentes sinais PWM. As placas ESP32 suportam resolução PWM de 1 bit a 16 bits. Você também precisa escolher um canal PWM. ESP32 tem um total de 16 (0 a 15) canais PWM.
const int freq = 9000; const int ledChannel = 0; resolução int const = 10;
Agora, dentro da função void setup () , configure o LED PWM com as propriedades definidas anteriormente usando a função ledcSetup () . Na próxima linha, defina o pino GPIO onde o LED está conectado. A função ledcAttachPin () é usada para definir o pino GPIO e o canal que está gerando o sinal. No meu caso, usei o ledPin que é GPIO 16 e ledChannel que corresponde ao canal 0.
void setup () {Serial.begin (9600); ledcSetup (ledChannel, freq, resolução); ledcAttachPin (ledPin, ledChannel); }
No loop vazio, leia o pino analógico onde o Pot está conectado e armazene a leitura em uma variável chamada 'dutyCycle' . O brilho do LED aumentará ou diminuirá de acordo com a rotação do potenciômetro. O ledcWrite () é muito semelhante a analogWrite ().
loop vazio () {dutyCycle = analogRead (A0); ledcWrite (ledChannel, dutyCycle); atraso (15); }
Testando os Sinais PWM ESP32
Para testar os sinais do ESP32 PWM, conecte o LED e o potenciômetro conforme o diagrama de circuito e carregue o código para o ESP32. Certifique-se de ter selecionado a placa e a porta COM corretas. Agora gire o potenciômetro para aumentar ou diminuir o brilho do LED.
O trabalho completo é mostrado no vídeo abaixo. Além disso, verifique outros projetos baseados em ESP32 seguindo o link.