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.
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 depinMode. - 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.
- ProjetoConstrua um micromouse para resolver labirintos
- ProjetoConstrua um robô autoequilibrador com MPU6050 e PID
- ProjetoConstrua um robô de cobertura que percorre todo o ambiente
- ProjetoConstrua um robô Mecanum que se desloca lateralmente
- ProjetoConstrua um robô mini sumo: preensão, cunha e detecção de borda
- ProjetoConstrua um robô ROS 2 que vê e segue até um marcador
- ProjetoConstrua um rover GPS de pontos de passagem que dirige sozinho
- ProjetoSolucionador de labirintos de linhas com memória de rota LSRB
- Caminho de aprendizagemControle de motores para robôs: roteiro de aprendizagem
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