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.

Três formas de onda quadradas empilhadas verticalmente, todas alternando entre zero e doze volts na mesma frequência, mas com tempos em que permanecem ligadas diferentes. A onda superior fica ligada por setenta e cinco por cento de cada período, com uma linha tracejada marcando sua média de nove volts; a do meio fica ligada quarenta por cento do tempo, com média de 4,8 volts; e a inferior fica ligada quinze por cento, com média de 1,8 volt.
A tensão de alimentação nunca muda. Muda apenas a fração do tempo em que ela permanece conectada, e a indutância do motor transforma essa fração em um valor médio. Baixar SVG

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:

  1. Conecte a fonte de alimentação do motor à entrada de alimentação do driver de motor e à massa.
  2. Conecte o motor às duas saídas do driver de motor, não a um pino do microcontrolador.
  3. Conecte a massa do controlador à massa do driver de motor para que os sinais lógicos compartilhem uma referência.
  4. Conecte IN1, IN2 e qualquer pino de habilitação a pinos digitais adequados.
  5. Mantenha a ligação do motor curta e afaste-a dos fios dos sensores analógicos.
  6. 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.

Leitura complementar

Referências