Se você já tentou controlar a velocidade de um motor em um projeto de robótica, provavelmente esbarrou com três letras muito importantes: PWM.
Nesse post, você vai aprender o que é PWM, como ele funciona e por que ele é tão usado no controle de motores em robótica.
O que é PWM?
PWM significa Pulse Width Modulation, ou modulação por largura de pulso. É uma técnica usada para simular uma saída analógica usando um sinal digital.
Como assim?
Em vez de enviar uma tensão analógica contínua, o PWM envia pulsos digitais (ligado/desligado) em alta velocidade. A proporção de tempo em que o sinal fica “ligado” em relação ao tempo total do ciclo é chamada de duty cycle. Quanto maior esse tempo ligado, maior será a tensão média percebida pelo componente.
Por exemplo:
- 100% de duty cycle → o sinal fica sempre ligado (tensão total)
- 50% de duty cycle → metade do tempo ligado, metade desligado (meia tensão)
- 0% de duty cycle → sempre desligado (sem tensão)
Por que PWM é essencial na robótica?
Na robótica, precisamos de controle preciso sobre atuadores, especialmente motores. O PWM permite:
- Controlar a velocidade de motores dc de forma eficiente
- Diminuir o consumo de energia, já que o sinal digital é menos dissipativo que um controle resistivo
- Gerar movimentos suaves em servos, enviando sinais de largura específica
Além disso, o PWM está presente em quase todos os microcontroladores modernos: Arduino, ESP32, Raspberry Pi Pico, STM32 e muitos outros oferecem suporte nativo.
Aplicações práticas: como usar PWM com Motor DC
Vamos ao que interessa: como aplicar PWM na prática para controlar um motor. Atente-se às especificações por porta:
Saída 5V a 20mA – 40mA (Máximo)
Saída 3.3V a 50mA(Máximo)
Sistema total ~200mA(Máximo)
Exemplo com Arduino
Imagine que você quer controlar a velocidade de um Motor DC com Arduino. Usando a função analogWrite(), você consegue gerar um sinal PWM com facilidade.
int motorPin = 9;
void setup() {
pinMode(motorPin, OUTPUT);
}
void loop() {
analogWrite(motorPin, 128); // 50% de duty cycle
delay(1000);
analogWrite(motorPin, 255); // 100% de duty cycle (máxima velocidade)
delay(1000);
}
Exemplo com ESP32 (com precisão maior)
O ESP32 permite controle PWM com frequência e resolução personalizáveis, ideal para motores mais sensíveis:
const int pwmPin = 18;
const int freq = 5000;
const int pwmChannel = 0;
const int resolution = 8;
void setup(){
ledcSetup(pwmChannel, freq, resolution);
ledcAttachPin(pwmPin, pwmChannel);
ledcWrite(pwmChannel, 128); // 50% de duty cycle
}
void loop() {}
Desafios comuns no uso de pwm
Apesar de ser poderoso, o PWM apresenta alguns desafios:
- Ruído eletromagnético, especialmente em motores de alta corrente
- Aquecimento de drivers, se o controle não for bem dimensionado
- Resposta lenta, caso a frequência do PWM seja muito baixa
A dica é usar drivers apropriados para motores, com diodos de flyback e filtros quando necessário.
PWM também é usado em servos
Servomotores são um caso especial: eles usam pwm não para controlar potência, mas posição angular. A largura do pulso (geralmente entre 1 ms e 2 ms) define o ângulo do braço do servo.
#include <Servo.h>
Servo meuServo;
void setup() {
meuServo.attach(9);
}
void loop() {
meuServo.write(90); // Vai para 90 graus
delay(1000);
meuServo.write(180); // Vai para 180 graus
delay(1000);
meuServo.write(90); // Volta para 90 graus
delay(1000);
meuServo.write(0); // Vai para 0 grau
delay(1000);
}
O PWM é uma ferramenta essencial para qualquer pessoa que trabalha com robótica. Entender como ele funciona é o primeiro passo para controlar motores com precisão, otimizar consumo de energia e criar sistemas robóticos mais eficientes.
Códigos revisados por Emanuel Sousa – Graduando em Engenharia Mecatrônica
Leitura complementar recomendada:
Se você gostou de aprender sobre PWM e controle de motores, vai curtir também nosso post sobre Automação para pequenos negócios com Arduino. Nele, mostramos como aplicar esses conceitos em soluções práticas e acessíveis para automatizar processos no dia a dia.
Quer compartilhar sua experiência com PWM?
Preencha o formulário abaixo e faça parte do nosso blog como autor voluntário. Vamos construir juntos uma comunidade maker cada vez mais forte!



Deixe um comentário