# TLDR
>[!TLDR] Resumo
>Use `machine.PWM` para 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.
# Informações
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 [[Diodo emissor de luz|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]]:
```python
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:**
1. **`from machine import Pin, PWM`**: Importa as classes necessárias. `Pin` é para controlar os pinos GPIO, e `PWM` é para criar objetos PWM.
2. **`led_pin = Pin(2, Pin.OUT)`**: Cria um objeto `Pin` representando o pino GPIO conectado ao seu componente. Substitua `2` pelo número do pino real que você está usando. `Pin.OUT` configura o pino como uma saída.
3. **`pwm = PWM(led_pin)`**: Cria um objeto `PWM` associado ao pino especificado.
4. **`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.
5. **`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.
6. **Exemplo de Fade**: O loop `while True` demonstra como alterar o ciclo de trabalho dinamicamente para criar um efeito de fade. Os loops `for` incrementam e decrementam o ciclo de trabalho, criando um fade suave de entrada e saída.
7. **`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.