PWM é uma técnica essencial para controlar brilho de LEDs, velocidade de motores, sinais sonoros e vários dispositivos ligados ao ESP32. Neste guia para iniciantes, você vai entender o que é PWM, como funciona o duty cycle e como usar o recurso LEDC do ESP32 na prática.
🎓 ArcadeMakerBR Academy
ESP32 Essentials • Aula 08
Nível: 🟢 Iniciante
Tempo de leitura: 18 a 25 minutos
Projeto sugerido: controle de brilho de LED e velocidade de motor
O que você vai aprender
- O que é PWM.
- O que significa duty cycle.
- Como frequência influencia o resultado.
- Como o ESP32 gera PWM usando LEDC.
- Como controlar brilho de LED.
- Como controlar motores, buzzers e servos.
- Erros comuns ao usar PWM no ESP32.
Índice
- Por que PWM é importante?
- O que é PWM?
- Duty Cycle explicado
- Frequência PWM
- PWM no ESP32 com LEDC
- Código: brilho de LED
- PWM em motores e buzzers
- PWM e servo motor
- Erros comuns
- FAQ
Por que PWM é importante?
Imagine que você quer controlar o brilho de uma fita de LED, a velocidade de uma ventoinha, o som de um buzzer ou a posição de um servo. Em muitos casos, simplesmente ligar e desligar um pino não é suficiente.
Com GPIO digital comum, o pino tem basicamente dois estados: ligado ou desligado. Mas no mundo real queremos muito mais do que isso. Queremos meia luz, velocidade baixa, velocidade média, efeito fade, sinal pulsado, controle gradual.
É aí que entra o PWM.
PWM significa Pulse Width Modulation, ou modulação por largura de pulso. Parece complicado, mas a ideia é simples: o ESP32 liga e desliga um sinal muito rapidamente. Alterando o tempo em que o sinal fica ligado, conseguimos simular níveis intermediários.
Dica do Maker: PWM não cria uma tensão analógica real. Ele cria pulsos digitais rápidos que muitos dispositivos interpretam como uma intensidade média.
O que é PWM?
PWM é uma técnica onde um sinal digital alterna entre HIGH e LOW em alta velocidade. O segredo está na proporção entre o tempo ligado e o tempo desligado.
Se o sinal fica ligado metade do tempo e desligado metade do tempo, dizemos que o duty cycle é de 50%. Para um LED, isso costuma parecer como brilho médio. Para um motor DC com driver adequado, pode parecer como velocidade reduzida.
Duty Cycle explicado
Duty cycle é a porcentagem do tempo em que o sinal fica ligado dentro de cada ciclo.
- 0%: sempre desligado.
- 25%: ligado por um quarto do tempo.
- 50%: ligado metade do tempo.
- 75%: ligado por três quartos do tempo.
- 100%: sempre ligado.
Para controlar um LED, um duty cycle maior geralmente significa mais brilho. Para um motor DC com driver adequado, pode significar mais velocidade. Para um buzzer passivo, a frequência do sinal influencia o som produzido.
Frequência PWM
A frequência indica quantas vezes o ciclo PWM se repete por segundo. Ela é medida em hertz (Hz).
Uma frequência muito baixa pode fazer um LED piscar visivelmente. Uma frequência mais alta deixa o efeito mais suave. Para motores, a frequência pode influenciar ruído, torque e aquecimento do driver.
| Aplicação | Frequência típica | Observação |
|---|---|---|
| LED comum | 500 Hz a alguns kHz | Evita piscadas visíveis. |
| Motor DC | 1 kHz a 20 kHz | Depende do driver e do motor. |
| Buzzer passivo | Frequência do tom | Define o som gerado. |
| Servo hobby | Geralmente 50 Hz | Usa pulsos específicos, não controle comum de brilho. |
PWM no ESP32 com LEDC
No ESP32, o PWM normalmente é controlado pelo periférico chamado LEDC. Ele permite configurar canais PWM com frequência, resolução e pino de saída.
Em versões recentes do core Arduino para ESP32, a API pode variar conforme a versão instalada. Por isso, vale sempre conferir a documentação da versão que você está usando. Mesmo assim, a lógica geral continua a mesma:
- Definir o pino.
- Definir a frequência.
- Definir a resolução.
- Escrever o duty cycle.
Resolução
A resolução define quantos níveis diferentes o PWM pode ter. Por exemplo, com 8 bits, os valores vão de 0 a 255. Com 10 bits, vão de 0 a 1023.
Código exemplo: controlar brilho de LED
O exemplo abaixo cria um efeito de fade em um LED usando PWM.
// Exemplo: Controle de brilho com PWM no ESP32
// ArcadeMakerBR Academy
#define LED_PIN 2
const int frequencia = 5000;
const int resolucao = 8; // 8 bits: valores de 0 a 255
void setup() {
// Em versões recentes do Arduino ESP32:
ledcAttach(LED_PIN, frequencia, resolucao);
}
void loop() {
// Aumenta o brilho
for (int duty = 0; duty <= 255; duty++) {
ledcWrite(LED_PIN, duty);
delay(10);
}
// Diminui o brilho
for (int duty = 255; duty >= 0; duty--) {
ledcWrite(LED_PIN, duty);
delay(10);
}
}
Se você usa uma versão mais antiga do core Arduino ESP32, pode encontrar exemplos com ledcSetup() e ledcAttachPin(). O conceito é o mesmo, mas a sintaxe pode mudar.
Dica do Maker: se um exemplo de PWM não compilar, confira a versão do pacote ESP32 instalado no Arduino IDE. A API LEDC mudou em versões recentes.
PWM em motores DC
PWM é muito usado para controlar velocidade de motores DC. Mas existe um detalhe muito importante: você não deve ligar um motor diretamente no GPIO do ESP32.
O motor precisa de mais corrente do que o pino pode fornecer. Além disso, motores geram ruído elétrico e picos de tensão. O correto é usar um driver, transistor, MOSFET ou ponte H.
Exemplos de módulos usados com motores:
- L298N.
- TB6612FNG.
- DRV8833.
- MOSFET logic level para cargas simples.
PWM em buzzers
Com buzzer passivo, o PWM pode gerar sons em diferentes frequências. Nesse caso, a frequência define o tom. Um sinal de 1000 Hz gera um som diferente de um sinal de 2000 Hz.
Já buzzers ativos normalmente só precisam de HIGH ou LOW, porque o oscilador interno já produz o som.
PWM e servo motor
Servos hobby também usam pulsos, mas o controle é diferente do controle comum de brilho de LED. Em geral, um servo espera um sinal por volta de 50 Hz, com pulsos entre aproximadamente 1 ms e 2 ms para definir a posição.
Na prática, para controlar servos no ESP32, muitas vezes é melhor usar uma biblioteca específica para servo compatível com ESP32.
Atenção: servo motor deve ter alimentação adequada. Não alimente servo diretamente pelo 3.3V do ESP32.
Comparação: PWM, DAC e digital comum
| Recurso | Tipo de sinal | Uso comum |
|---|---|---|
| GPIO digital | HIGH ou LOW | Ligar/desligar LED, botão, relé. |
| PWM | Pulsos digitais rápidos | Brilho, motor, buzzer, controle gradual. |
| DAC | Tensão analógica real em pinos específicos | Sinais analógicos simples, áudio básico, referência. |
Projeto Maker: dimmer de LED com ESP32
Um projeto simples para praticar PWM é criar um dimmer de LED.
- Ligar um LED com resistor em um pino PWM.
- Criar um efeito fade automático.
- Depois adicionar um botão para mudar o brilho.
- Depois evoluir para controle via MQTT ou página web.
Erros comuns com PWM no ESP32
1. Ligar motor direto no GPIO
O GPIO não suporta alimentar motor. Use driver ou MOSFET adequado.
2. Escolher frequência errada
Frequência baixa pode causar flicker em LED. Frequência inadequada pode causar ruído em motor.
3. Não considerar a resolução
Com baixa resolução, o controle pode ficar pouco suave. Com resolução alta demais, pode limitar a frequência.
4. Usar exemplo antigo com API nova
A API LEDC no Arduino ESP32 mudou em algumas versões. Se o código não compilar, verifique a versão do core.
5. Alimentar servo pelo ESP32
Servo deve ter fonte adequada. O ESP32 deve enviar apenas o sinal de controle.
Boas práticas
- Use resistor em LEDs.
- Use driver para motores.
- Teste frequência e resolução conforme a aplicação.
- Evite usar pinos problemáticos no boot.
- Separe alimentação de motores e lógica quando necessário.
- Use GND comum entre ESP32 e drivers externos.
FAQ sobre PWM no ESP32
PWM é sinal analógico?
Não. PWM é um sinal digital pulsado. Ele pode parecer analógico para alguns dispositivos, mas tecnicamente continua alternando entre HIGH e LOW.
Posso usar PWM em qualquer pino do ESP32?
O ESP32 permite PWM em muitos GPIOs, mas você deve evitar pinos especiais, pinos usados no boot e pinos da flash. Consulte o pinout da sua placa.
Qual frequência devo usar para LED?
Para LEDs comuns, frequências na faixa de centenas de Hz a alguns kHz costumam funcionar bem. Se houver flicker, aumente a frequência.
PWM controla servo?
Sim, mas servos usam um padrão específico de pulsos. Para iniciantes, uma biblioteca de servo compatível com ESP32 facilita bastante.
Por que meu código LEDC não compila?
Provavelmente por diferença de versão do pacote ESP32 no Arduino IDE. Verifique se o exemplo usa a API compatível com sua versão.
Resumo final
PWM é uma das técnicas mais úteis no ESP32. Com ela, você consegue controlar brilho, velocidade, sons e sinais pulsados usando pinos digitais.
Para iniciantes, o melhor caminho é começar com LED e efeito fade. Depois, avance para motores com driver, buzzers e servos. Esse conhecimento será essencial em projetos de robótica, automação, iluminação e IoT.
📚 Continue aprendendo
- Tudo sobre ESP32
- Tudo sobre GPIO no ESP32
- Tudo sobre ADC no ESP32
- Tudo sobre DAC no ESP32
- Tudo sobre MQTT
Kit de publicação
Título SEO: Tudo sobre PWM no ESP32 – Guia Completo para Iniciantes
Slug: tudo-sobre-pwm-esp32
Meta Description: Aprenda tudo sobre PWM no ESP32: duty cycle, frequência, LEDC, controle de brilho, motores, servos, buzzers e exemplos práticos.
Tags: ESP32, PWM, ESP32 PWM, LEDC, Arduino, Arduino IDE, Duty Cycle, Frequência PWM, Motor DC, Servo Motor, LED, Buzzer, IoT, Maker, Eletrônica, Microcontroladores, Automação
Categoria: ESP32 Academy
ALT da capa: Tudo sobre PWM no ESP32 - Guia Completo ArcadeMakerBR Academy
