Tutorial · Iniciante · 18 min de leitura
Controle de motores CC com PWM e uma ponte H
Aprenda a controlar um motor CC com escovas usando PWM e uma ponte H: direção, frenagem, limites de corrente, ligação e seleção segura do driver de motor.
Um pino de microcontrolador pode descrever como um motor deve se mover, mas não pode fornecer com segurança a corrente desse motor. Um motor CC com escovas pode consumir várias vezes sua corrente normal durante a partida ou quando está travado. Um driver de motor com ponte H fica entre o controlador e o motor, comuta essa corrente a partir de uma fonte separada e permite que o controlador escolha velocidade e direção.
Este tutorial constrói o estágio de motor usado por seguidores de linha, robôs de labirinto e pequenas plataformas de desvio de obstáculos. Os nomes exatos dos pinos variam conforme o driver de motor, mas as decisões elétricas permanecem as mesmas.
Entenda o que a ponte H muda
Um motor CC inverte quando a corrente através dele inverte. Uma ponte H usa quatro chaves eletrônicas ao redor do motor. Um par diagonal conduz a corrente para a frente; o outro inverte o sentido. As placas de driver de motor expõem essa comutação por pinos lógicos como IN1 e IN2:
| IN1 | IN2 | Estado do motor |
|---|---|---|
| Baixo | Baixo | Marcha livre ou frenagem, dependendo do driver de motor |
| Alto | Baixo | Avanço |
| Baixo | Alto | Ré |
| Alto | Alto | Frenagem ou marcha livre, dependendo do driver de motor |
Não presuma o que significam dois baixos ou dois altos. Leia a tabela de verdade do driver de motor específico. Alguns chips também têm um pino ENABLE, STANDBY ou SLEEP que precisa ser ativado antes que as saídas funcionem.
A modulação por largura de pulso (PWM) controla a tensão média ligando e desligando rapidamente o acionamento. Um ciclo de trabalho de 25% fica ligado por um quarto de cada período; isso não garante um quarto da velocidade do eixo, porque o resultado também depende da carga, da tensão de alimentação, do atrito e da força contraeletromotriz do motor.
Escolha o driver de motor pela corrente, não pelo tamanho do motor
Determine a tensão nominal, a corrente em vazio e a corrente de travamento do motor. A corrente de travamento é o valor mais importante para dimensionar o driver de motor, porque é o que o motor pede quando o eixo não consegue girar. Se a folha de dados não estiver disponível, meça a resistência da bobina com o motor desconectado e estime stall current = supply voltage / winding resistance. A resistência dos fios da sonda torna isso apenas uma estimativa.
Escolha um driver de motor cuja faixa de tensão inclua a alimentação e cuja corrente de pico suporte a partida. Depois verifique a corrente contínua e as condições térmicas. Uma placa anunciada com uma grande corrente de pico pode suportá-la apenas por pouco tempo ou com resfriamento robusto.
Considere também a queda de tensão. Drivers antigos com transistores bipolares podem sofrer uma queda de tensão significativa dentro da ponte; drivers modernos com MOSFET normalmente dissipam menos potência. Em um robô alimentado por bateria, essa diferença afeta o torque e o tempo de operação.
Ligue um motor com segurança
Use esta ordem antes de energizar o sistema:
- Conecte a fonte de alimentação do motor à entrada de alimentação do driver de motor e à massa.
- Conecte o motor às duas saídas do driver de motor, não a um pino do microcontrolador.
- Conecte a massa do controlador à massa do driver de motor para que os sinais lógicos compartilhem uma referência.
- Conecte
IN1,IN2e qualquer pino de habilitação a pinos digitais adequados. - Mantenha a ligação do motor curta e afaste-a dos fios dos sensores analógicos.
- Confirme os requisitos de tensão lógica do driver de motor antes de conectar um ESP32 ou Raspberry Pi de 3,3 V.
Use um fusível ou uma fonte de bancada com limite de corrente durante a primeira alimentação. Adicione a desacoplagem local da fonte conforme a folha de dados do driver de motor recomenda. Nunca alimente um motor carregado pelo regulador de 5 V do Arduino ou pelo conector USB — essa é a queda de tensão que aparece como uma falha de software.
Escreva uma pequena função de motor
A interface mais limpa aceita um comando com sinal: positivo é avanço, negativo é ré e zero é parada. Em uma placa compatível com Arduino, uma implementação mínima fica assim:
const int IN1 = 7;
const int IN2 = 8;
const int PWM_PIN = 5;
void setMotor(int command) {
command = constrain(command, -255, 255);
digitalWrite(IN1, command >= 0 ? HIGH : LOW);
digitalWrite(IN2, command >= 0 ? LOW : HIGH);
analogWrite(PWM_PIN, abs(command));
}
Este exemplo pressupõe um driver com uma entrada separada para PWM/habilitação. Um driver de duas entradas pode esperar PWM em uma entrada enquanto a outra mantém o estado de direção. Siga a tabela de verdade em vez de copiar a lógica dos pinos às cegas.
Ao reverter o sentido, comande zero brevemente antes de mudar a direção. Uma inversão instantânea na velocidade máxima produz um grande transitório de corrente e um choque mecânico. Uma rampa simples também melhora a aderência:
for (int command = 0; command <= 180; command += 5) {
setMotor(command);
delay(15);
}
Em um laço de controle real, faça essa rampa depender do tempo, em vez de usar chamadas bloqueantes de delay().
Teste direção, velocidade, marcha livre e frenagem
Erga as rodas da mesa para o primeiro teste. Comece com um ciclo de trabalho baixo, confirme a direção comandada e depois aumente-o gradualmente. Registre o menor comando que inicia o motor de forma confiável. O atrito estático cria uma zona morta, então comandos abaixo desse limiar podem zumbir sem mover.
Em seguida, compare os modos de parada. Na marcha livre, a ponte é desconectada ou liberada e a inércia rotacional desacelerá o motor. A frenagem dinâmica faz curto-circuito nos terminais do motor pela ponte, para que o motor girando dissipe energia e pare mais rápido. A frenagem produz mais esforço elétrico e mecânico, portanto use-a de forma deliberada.
Por fim, coloque o robô no chão e repita. Um motor que gira sem carga pode causar queda de tensão no controlador sob carga real. Observe a tensão de alimentação durante a partida e verifique se o driver de motor não está superaquecendo.
Diagnose as falhas comuns
- O controlador reinicia quando o motor inicia: a tensão da alimentação cai ou o ruído do motor chega ao trilho lógico. Use corrente de bateria adequada, desacoplagem local, uma conexão de massa limpa e regulação separada para a lógica quando apropriado.
- O motor só funciona em uma direção: verifique as duas entradas lógicas no driver de motor e confirme que STANDBY ou ENABLE está ativado.
- A velocidade mal muda com o PWM: verifique se o pino escolhido realmente oferece suporte a PWM e se o driver de motor aceita PWM nessa entrada.
- O driver de motor esquenta: compare a carga e a corrente de travamento com a corrente contínua nominal, verifique a queda de tensão e procure um sistema de transmissão mecanicamente travado.
- Os sensores ficam ruidosos: separe a ligação do motor e dos sensores, adicione a supressão recomendada pelo fabricante do motor e do driver de motor e filtre as medições somente depois de corrigir o circuito elétrico.
Depois que um motor funcionar de forma previsível, duplique o canal para um robô de tração diferencial. O Simulador de Seguidor de Linha mostra como dois comandos de roda com sinal se transformam em direção, enquanto o Simulador de Controlador PID mostra como a realimentação pode regular a velocidade em vez de depender apenas do ciclo de trabalho bruto.
Mantenha os ajustes de calibração
Dois motores nominalmente idênticos quase nunca produzem a mesma velocidade. Mantenha um fator de escala por roda e o comando mínimo de partida no software. Meça, em vez de esconder a diferença com um deslocamento fixo inexplicado. Mais adiante, encoders em quadratura podem fechar o laço de realimentação e corrigir a velocidade conforme a tensão da bateria e a carga mudam.
Explore o grafo
Faz parte destas montagens
Projetos e caminhos de aprendizagem que incluem este tutorial.
- ProjetoConstrua um carro-robô para celular via Bluetooth ou Wi-Fi
- ProjetoConstrua um robô com desvio de obstáculos
- ProjetoConstrua um robô seguidor de linha com um microcontrolador 8051
- ProjetoConstrua um robô seguidor de linha: do simulador à pista real
- Caminho de aprendizagemControle de motores para robôs: roteiro de aprendizagem
Leitura complementar