Componente · Driver

Driver de motor TB6612FNG

O TB6612FNG é uma ponte H dupla com MOSFET que aciona dois motores CC com quase nenhuma perda de tensão—a atualização eficiente do L298N.

O que é

O TB6612FNG é um driver de motor com ponte H dupla que faz o mesmo trabalho que um L298N—fica entre os pinos lógicos do microcontrolador e motores que exigem muito mais corrente—mas monta o estágio de saída com MOSFETs, em vez de transistores bipolares. Essa única mudança explica tudo: uma chave MOSFET perde alguns décimos de volt, enquanto o estágio do L298N perde cerca de dois.

Em uma bateria de 6 V alimentando motores de 6 V, essa diferença representa quase toda a velocidade. Também representa quase todo o calor: o L298N precisa de um dissipador em corrente contínua, enquanto uma placa adaptadora TB6612FNG do tamanho de um selo postal fica apenas morna.

Diagrama de blocos: uma matriz de refletância QTR-MD-08A envia dados a um Arduino Nano pelos pinos A0 a A7; o Nano aciona um TB6612FNG usando STBY, PWMA, PWMB e os quatro pinos de direção; as saídas do driver vão para os motores esquerdo e direito, e uma bateria separada para motores alimenta o pino VM do driver.
Toda a cadeia de acionamento de um robô de labirinto de linhas. Observe que a bateria dos motores chega somente a VM—os 5 V do Arduino alimentam a lógica, nunca a corrente dos motores. Baixar SVG

Como controlá-lo

Cada motor recebe três sinais, mais um pino compartilhado por todo o chip:

  • Dois pinos de direção (AIN1/AIN2 para o motor A, BIN1/BIN2 para o motor B) selecionam avanço, ré, frenagem ou movimento livre.
  • Um pino PWM (PWMA ou PWMB) define a velocidade. Diferente do L298N, em que o PWM é aplicado a um pino de habilitação, o TB6612FNG tem uma entrada PWM dedicada por canal que aceita até 100 kHz—frequência alta o suficiente para comutar acima da faixa audível e fazer o robô parar de chiar.
  • Um pino STBY, compartilhado. Mantenha-o em LOW e ambas as pontes ficarão desativadas, não importa o resto.

Vale repetir o detalhe do STBY, porque ele custa uma noite a iniciantes: um TB6612FNG corretamente conectado com STBY flutuante ou em LOW não faz absolutamente nada, silenciosamente e sem erro para ler.

Quando usar

Use o TB6612FNG quando seus motores forem pequenos e a bateria precisar ser preservada—o que descreve quase todos os seguidores de linha e robôs de labirinto de linhas. Robôs pequenos operam de 6–7,4 V, exatamente a faixa em que a perda de 2 V do L298N mais pesa, e usam uma bateria que você preferiria não desperdiçar em calor.

Fique com o L298N quando a tensão de alimentação dos motores exceder 13,5 V, valor que o TB6612FNG não aceita, ou quando precisar de mais de aproximadamente 1,2 A continuamente por canal.

Conexões e armadilhas

  • Leve STBY a HIGH. A primeira coisa que seu setup() deve fazer depois de pinMode.
  • Duas alimentações, uma massa. Bateria dos motores em VM, 5 V do Arduino em VCC e todas as massas conectadas juntas—Arduino, driver, matriz de sensores e negativo da bateria. A falta de massa comum deixa os sinais de controle sem referência, e a falha é silenciosa.
  • Respeite 13,5 V. Não há regulador integrado nem margem acima da tensão máxima de alimentação dos motores. Um conjunto de lítio 3S com tensão nominal de 12,6 V excederá o limite logo após uma carga completa.
  • Um motor girando ao contrário é um ajuste de dois segundos. Troque os dois fios de saída desse motor ou inverta sua lógica de direção no firmware. Faça isso antes de ajustar qualquer outra coisa, ou você perderá tempo com um defeito de controle que é, na verdade, de ligação.

Pinagem

Duas fileiras na placa adaptadora comum no estilo SparkFun: lógica de um lado, alimentação e motores do outro.

Lado Pino O que faz
Lógica VCC Tensão de alimentação da lógica, 2,7–5,5 V do microcontrolador
Lógica GND Massa. Todas as massas do robô são conectadas aqui
Lógica STBY Repouso, ativo em nível baixo. LOW = ambas as pontes desativadas, silenciosamente
Lógica AIN1, AIN2 Direção do motor A
Lógica PWMA Velocidade do motor A. Aceita até 100 kHz
Lógica BIN1, BIN2 Direção do motor B
Lógica PWMB Velocidade do motor B
Alimentação VM Tensão de alimentação dos motores, 2,5–13,5 V. Sem regulador e sem margem
Alimentação GND Massa dos motores
Motores AO1, AO2 Terminais do motor A
Motores AO1, AO2 Terminais do motor B (BO1, BO2)

A tabela-verdade

STBY IN1 IN2 PWM Resultado
LOW × × × Nada. Ambas as pontes desligadas, sem erro, sem pista
HIGH HIGH LOW PWM Avanço conforme o ciclo de trabalho
HIGH LOW HIGH PWM Ré conforme o ciclo de trabalho
HIGH HIGH HIGH × Frenagem curta
HIGH LOW LOW HIGH Parada (movimento livre)

A primeira linha é a que custa uma noite a muita gente. Uma placa perfeitamente conectada com STBY flutuante não faz absolutamente nada, e flutuante é o estado de um pino não acionado. Leve-o a HIGH no setup(), na primeira linha depois de pinMode.

Conexão com um Arduino

TB6612FNG Arduino Uno Observação
VCC 5 V Apenas lógica, alguns miliamperes
GND GND E ao negativo da bateria e à massa de todos os sensores
STBY Pino 12 Ou conecte a 5 V por um resistor de 10 kΩ se nunca quiser desabilitá-lo
PWMA Pino 9 Precisa ter capacidade PWM
AIN1 Pino 8
AIN2 Pino 7
PWMB Pino 3 Precisa ter capacidade PWM
BIN1 Pino 5
BIN2 Pino 4
VM + da bateria dos motores 2,5–13,5 V—verifique a tensão real de um conjunto recém-carregado

Código mínimo funcional

const int STBY = 12;
const int PWMA = 9, AIN1 = 8, AIN2 = 7;
const int PWMB = 3, BIN1 = 5, BIN2 = 4;

void setup() {
  for (int p : {STBY, PWMA, AIN1, AIN2, PWMB, BIN1, BIN2}) pinMode(p, OUTPUT);
  digitalWrite(STBY, HIGH);          // without this, nothing happens at all
}

// speed: -255..255
void driveA(int speed) {
  speed = constrain(speed, -255, 255);
  digitalWrite(AIN1, speed > 0);
  digitalWrite(AIN2, speed < 0);
  analogWrite(PWMA, abs(speed));
}

void brakeA() {                       // short brake: both direction pins high
  digitalWrite(AIN1, HIGH);
  digitalWrite(AIN2, HIGH);
}

void loop() {
  driveA(200); delay(1000);
  brakeA();    delay(300);
  driveA(-200); delay(1000);
  brakeA();    delay(300);
}

Eliminando o zumbido

Esta é a grande vantagem do TB6612FNG: ele permite eliminar o zumbido, algo que quase ninguém aproveita. O driver aceita PWM de até 100 kHz, mas o analogWrite de um Arduino Uno opera a 490 Hz na maioria dos pinos e a 980 Hz nos pinos 5 e 6—bem dentro da faixa audível, e é por isso que um robô canta enquanto se move.

A audição humana termina em torno de 20 kHz. Leve o PWM acima disso e o ruído desaparece completamente. Em um Uno, os pinos 9 e 10 são controlados pelo Temporizador 1, que pode ser reprogramado:

void setup() {
  // Timer1 (pins 9, 10): phase-correct PWM, no prescaler -> ~31.4 kHz
  TCCR1B = (TCCR1B & 0b11111000) | 0x01;
}

Essa única linha leva a frequência de comutação para cerca de 31 kHz—inaudível e ainda bem dentro do limite do driver. O custo é que o Temporizador 1 também é usado pela biblioteca Servo, portanto você não pode usar os dois no mesmo temporizador.

Um L298N não consegue acompanhar essa frequência; seu estágio bipolar comuta devagar demais e as perdas aumentam bruscamente com a frequência. Essa é uma vantagem prática real do estágio MOSFET, além dos números de eficiência.

O que 0,5 V em vez de 2 V realmente compra

Tensão de alimentação O L298N fornece O TB6612FNG fornece Ganho disponível
6 V (4×AA) ~4,0 V ~5,5 V +38%
7,4 V (2S íon-lítio) ~5,4 V ~6,9 V +28%
12 V ~10,0 V ~11,5 V +15%

Quanto menor a tensão de alimentação, maior a importância da diferença—exatamente ao contrário do que as pessoas esperam, e exatamente o motivo pelo qual a troca transforma robôs pequenos.

Há também uma consequência térmica. A 1 A por canal, o L298N dissipa cerca de 2 W por canal; o TB6612FNG dissipa cerca de 0,5 W na soma dos dois canais. Essa é a diferença entre uma peça que precisa de dissipador e ventilação e outra que pode ficar escondida sob uma placa do chassi.

Solução de problemas

Sintoma Causa provável Solução
Nada acontece STBY flutuante ou LOW Leve-o a HIGH—esta é a primeira coisa a verificar, sempre
Nada acontece, com STBY em HIGH Não há massa comum Conecte o driver, a placa, os sensores e o negativo da bateria
Um motor gira ao contrário Fios ou lógica invertidos Troque os dois fios de saída desse motor ou inverta sua lógica
A velocidade funciona apenas como ligada/desligada O pino PWM não tem capacidade PWM Use 3, 5, 6, 9, 10 ou 11 em um Uno
Zumbido alto durante o movimento PWM dentro da faixa audível Aumente a frequência do temporizador para acima de ~20 kHz
O driver aqueceu e parou de funcionar VM acima de 13,5 V Um conjunto 3S recém-carregado tem 12,6 V e sobe; verifique durante a carga
Os motores falham sob carga A alimentação sofre queda de tensão ou o consumo excede 1,2 A continuamente Use um conjunto maior ou ligue os dois canais em paralelo para um motor
Funciona na bancada, mas falha no tapete Corrente contínua acima da especificação O tapete aumenta a carga; meça a corrente com um multímetro em condições reais

Os dois canais podem ser ligados em paralelo para um único motor—conecte AIN1 a BIN1, AIN2 a BIN2, PWMA a PWMB e as saídas entre si—para cerca de 2,4 A contínuos. A folha de dados permite essa configuração, e ela é a resposta padrão quando um motor está apenas um pouco acima do limite.

Quando o TB6612FNG é a escolha errada

Ele é a opção padrão para robôs pequenos, mas há três casos claros em que não é a melhor escolha.

Acima de 13,5 V. Não há margem nem regulador. Um conjunto 4S está fora de questão, e um conjunto 3S precisa ser verificado logo após uma carga completa.

Acima de ~1,2 A continuamente por canal, quando o paralelamento dos canais não resolve. Um L298N fornece 2 A por canal com dissipador, e um BTS7960 chega a 43 A para motores realmente grandes.

Quando você precisa de medição ou limitação de corrente. O DRV8833 é muito próximo do TB6612FNG em todos os outros aspectos e acrescenta limitação de corrente, o que permite ao driver se proteger contra travamentos sem depender de seu código para perceber o problema.

Explore o grafo

Usado nestas montagens

Projetos, caminhos de aprendizagem e simuladores que incluem Driver de motor TB6612FNG.

Comparar

Alternativas

Perguntas

Perguntas frequentes sobre Driver de motor TB6612FNG

O que é o driver de motor TB6612FNG?

O TB6612FNG é um driver de motor com ponte H dupla formado por MOSFETs, e não pelos transistores bipolares mais antigos. Ele recebe sinais de direção e PWM de baixa potência do microcontrolador e comuta uma alimentação separada dos motores para acionar dois motores CC de forma independente, fornecendo 1,2 A continuamente por canal e picos de 3,2 A.

O TB6612FNG é melhor que o L298N?

Para motores pequenos de robô, sim. O estágio de saída de transistores do L298N perde cerca de 2 V antes de o motor receber tensão; portanto, um motor de 6 V em um conjunto de 6 V funciona fraco, e o chip precisa de um dissipador. O estágio MOSFET do TB6612FNG perde alguns décimos de volt, dissipa pouco calor sem necessidade de dissipador e é muito menor. O L298N ainda ganha quando você precisa de uma tensão de alimentação dos motores superior a 13,5 V, valor que o TB6612FNG não aceita.

Como conecto um TB6612FNG a um Arduino?

Conecte o positivo da bateria dos motores a VM, os 5 V do Arduino a VCC e todas as massas juntas—Arduino, driver, sensores e o negativo da bateria. Depois conecte STBY a um pino digital e, por motor, dois pinos de direção (AIN1/AIN2 ou BIN1/BIN2) mais um pino PWM (PWMA ou PWMB). Conecte os motores aos terminais AO1/AO2 e BO1/BO2.

O que faz o pino STBY de um TB6612FNG?

STBY é uma habilitação de repouso para todo o chip. Mantido em LOW, ambas as pontes ficam desabilitadas e os motores giram livremente, independentemente do estado dos demais pinos. Você deve levá-lo a HIGH antes de qualquer movimento—esquecê-lo é o motivo mais comum para um TB6612FNG recém-conectado não fazer absolutamente nada.

Que corrente um TB6612FNG pode fornecer?

1,2 A continuamente por canal, com picos curtos de até 3,2 A. Isso cobre com folga os pequenos motorredutores amarelos e motores N20 usados em seguidores de linha e robôs de labirinto. Motores maiores que entram em travamento acima de 1,2 A acionarão seu desligamento térmico; nesse caso, use um driver como o DRV8871 ou um ESC para motores com escovas.

Leitura complementar

Referências