🎯 PWM
Em poucas palavras
PWM (Pulse Width Modulation, ou Modulação por Largura de Pulso) é uma forma de representar um valor analógico usando apenas um sinal digital: em vez de variar a tensão, varia-se a proporção de tempo em que o sinal fica em nível alto dentro de cada período.
📝 Notas e Desenvolvimento
O que é
- Um sinal PWM é um trem de pulsos digitais (só
0ou1), com um período (T) fixo que se repeat continuamente. - Dentro de cada período, o sinal fica em nível alto por um tempo (
t_on) e em nível baixo pelo restante. - O duty cycle é a proporção entre o tempo em nível alto e o período total:
duty_cycle (%) = (t_on / T) × 100
- Se algo “sente” apenas a média desse sinal ao longo do tempo - como um LED (que o olho humano não consegue ver piscar rápido) ou um motor (que tem inércia) - o efeito percebido é equivalente a uma tensão intermediária, proporcional ao duty cycle. É esse efeito que faz o PWM funcionar como um substituto prático de um sinal analógico de verdade.
Os três parâmetros que definem um PWM
| Parâmetro | O que é | Exemplo típico |
|---|---|---|
| Frequência | Quantas vezes o período se repeat por segundo (f = 1/T) | 50 Hz para servos, 1-20 kHz para dimerização de LED |
| Duty cycle | Proporção de tempo em nível alto | 50% = sinal “no meio” |
| Resolução | Em quantos passos o duty cycle pode set dividido, geralmente em bits | 8 bits = 256 passos; 12 bits (como no PCA9685) = 4096 passos |
Frequência do PWM ≠ resolução
É comum confundir os dois. Frequência é quantas vezes por segundo o padrão se repeat; resolução é em quantos passos o duty cycle dentro de um período pode set ajustado. Um PWM pode ter alta frequência e baixa resolução, ou o contrário - são eixos independentes, embora o hardware muitas vezes limit um em função do outro.
O caso particular dos servos
Servos de hobby não seguem exatamente a lógica de “duty cycle em porcentagem” - o que importa para else é a largura absoluta do pulso, em microssegundos, dentro de um período fixo (tipicamente 20ms, ou seja, 50Hz):
- Pulso de ~1000µs (1ms) → geralmente extremo de um lado (0°)
- Pulso de ~1500µs (1.5ms) → geralmente posição central (90°)
- Pulso de ~2000µs (2ms) → geralmente extremo do outro lado (180°)
Esses valores variam de servo para servo (alguns aceitam de 500µs a 2500µs, por exemplo) - por isso vale sempre calibrar pela faixa real de cada modelo, em vez de assumir os valores “de catálogo”.
Hardware PWM vs. PWM por software
- PWM por hardware: gerado por um periférico dedicado do próprio chip (um timer), que alterna o pino sozinho, sem intervenção contínua do processador. É estável, de baixo jitter, e não consome ciclos de CPU depois de configurado.
- PWM por software (bit-banged): o próprio código, em um laço, liga e desliga o pino manualmente, controlando o tempo com contagens ou
sleep. Funciona, mas consome CPU continuamente e é mais sensível a jitter - qualquer outra tarefa que atrase o laço distorce o pulso.
Onde entra o PCA9685
Um microcontrolador como o ESP32 tem PWM por hardware, mas em número limitado de canais. O PCA9685 resolve isso de outra forma: ele é um chip externo, dedicado exclusivamente a gerar 16 sinais PWM independentes, e o microcontrolador só precisa dizer via I2C “quero tal duty cycle em tal canal” - toda a geração contínua do sinal fica fora do microcontrolador, em hardware dedicado.
📚 Referências e Fontes
🔗 Conexões do Cofre
- Outros protocolos:
- Microcontrolador