🎯 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ó 0 ou 1), 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âmetroO que éExemplo típico
FrequênciaQuantas vezes o período se repeat por segundo (f = 1/T)50 Hz para servos, 1-20 kHz para dimerização de LED
Duty cycleProporção de tempo em nível alto50% = sinal “no meio”
ResoluçãoEm quantos passos o duty cycle pode set dividido, geralmente em bits8 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

🌐 Referências Externas