Trabalhando com Sinais PWM na ESP32 com MicroPython
Resumo
Use
machine.PWMpara controlar o brilho de LEDs ou a velocidade de motores em um ESP32. Defina o pino, a frequência e o ciclo de trabalho (0-1023, onde 0 é desligado e 1023 é totalmente ligado). Exemplo:pwm = PWM(Pin(2, Pin.OUT)); pwm.freq(1000); pwm.duty(512)para ciclo de trabalho de 50% no pino 2.
Usar PWM (Modulação por Largura de Pulso) no ESP32 com MicroPython permite controlar a tensão média entregue a um componente como um LED ou um motor, ligando e desligando rapidamente a saída. A proporção do tempo ligado para o tempo desligado (o ciclo de trabalho) determina a tensão média.
Aqui está um detalhamento de como usar PWM com MicroPython no ESP32:
from machine import Pin, PWM
import time
# Define o pino conectado ao componente que você deseja controlar
led_pin = Pin(2, Pin.OUT) # Substitua 2 pelo pino desejado
# Cria um objeto PWM associado ao pino
pwm = PWM(led_pin)
# Define a frequência (em Hz). Valores comuns estão entre 50Hz e 1kHz para LEDs, e mais altos para motores.
pwm.freq(1000) # 1kHz
# Define o ciclo de trabalho (0-1023). 0 é desligado, 1023 é totalmente ligado.
pwm.duty(512) # Ciclo de trabalho de 50% (metade do brilho para um LED)
# Exemplo: Fazer um LED acender e apagar gradualmente
while True:
for duty in range(0, 1024, 16): # Aumenta o ciclo de trabalho
pwm.duty(duty)
time.sleep_ms(10)
for duty in range(1023, -1, -16): # Diminui o ciclo de trabalho
pwm.duty(duty)
time.sleep_ms(10)
# Para parar o sinal PWM:
# pwm.deinit()Explicação:
from machine import Pin, PWM: Importa as classes necessárias.Piné para controlar os pinos GPIO, ePWMé para criar objetos PWM.led_pin = Pin(2, Pin.OUT): Cria um objetoPinrepresentando o pino GPIO conectado ao seu componente. Substitua2pelo número do pino real que você está usando.Pin.OUTconfigura o pino como uma saída.pwm = PWM(led_pin): Cria um objetoPWMassociado ao pino especificado.pwm.freq(1000): Define a frequência PWM para 1kHz. Ajuste este valor conforme necessário. Frequências mais altas são geralmente melhores para um controle mais suave e menos cintilação de LEDs, mas podem não ser adequadas para todas as aplicações.pwm.duty(512): Define o ciclo de trabalho para 512, que é 50% (512/1023). Isso significa que a saída estará ligada por metade do ciclo e desligada pela outra metade. Para LEDs, isso corresponde a aproximadamente metade do brilho.- Exemplo de Fade: O loop
while Truedemonstra como alterar o ciclo de trabalho dinamicamente para criar um efeito de fade. Os loopsforincrementam e decrementam o ciclo de trabalho, criando um fade suave de entrada e saída. pwm.deinit(): Para o sinal PWM no pino. Isso é importante se você quiser usar o pino para um propósito diferente mais tarde.
Considerações Chave:
- Escolha do Pino: Nem todos os pinos do ESP32 suportam PWM. Consulte o diagrama de pinagem do ESP32 para sua placa específica para identificar pinos capazes de PWM.
- Frequência: A frequência apropriada depende da sua aplicação. Para LEDs, uma frequência acima de 100Hz geralmente é suficiente para evitar cintilação visível. Para motores, frequências mais altas podem ser necessárias para um controle mais suave.
- Resolução do Ciclo de Trabalho: O PWM do ESP32 tipicamente tem uma resolução de 10 bits (0-1023). Isso significa que você pode definir o ciclo de trabalho com 1024 valores diferentes.
- Limitações de Canal: O ESP32 possui um número limitado de canais PWM. Se você precisar controlar muitos dispositivos simultaneamente, pode ser necessário usar técnicas como multiplexação.