Driver de motor de passo TB6600 com tutorial Arduino

Tempo de leitura: 13 minutes

Neste tutorial, você aprenderá a controlar um motor de estepe com o driver tb6600 microstepping e Arduino. Este driver é fácil de usar e pode controlar motores de estepe grandes como um 3 A NEMA 23.

Incluí um diagrama de ligação e 3 códigos de exemplo. No primeiro exemplo, vou mostrar como você pode usar este motorista de motor de estepe sem uma biblioteca Arduino. Este exemplo pode ser usado para deixar o motor girar continuamente. No segundo exemplo, vamos ver como você pode controlar a velocidade, o número de revoluções e a direção giratória do motor stepper. Finalmente, vamos dar uma olhada na biblioteca AccelStepper. Esta biblioteca é bastante fácil de usar e permite que você adicione aceleração e desaceleração ao movimento do motor do estepe.

Depois de cada exemplo, eu descrevo e explico como o código funciona, então você não deve ter problemas em modificá-lo para atender às suas necessidades.

Se você tiver alguma dúvida, por favor deixe um comentário abaixo.

Suprimentos

Componentes de hardware

Driver do motor de Stepper TB6600× 1
Motor de passo NEMA 23× 1
Arduino Uno Rev3× 1
Fonte de alimentação (24/36 V)× 1
Fios de jumper× 4
Cabo USB tipo A/B× 1

Ferramentas

Stripper de arame
Chave de fenda pequena
Alicate de auto-ajuste (recomendado)*
Sortimento de ferrulas de arame (recomendado)*

 

Sobre o driver

O driver de microstepping TB6600 é construído em torno do Toshiba TB6600HG IC e pode ser usado para acionar motores de passo bipolares de duas fases.

Com uma corrente máxima de 3,5 A contínuos, o driver TB6600 pode ser usado para controlar motores de passo muito grandes como um NEMA 23. Certifique-se de não conectar motores de passo com uma corrente nominal de mais de 3,5 A ao driver.

O driver possui várias funções de segurança integradas, como sobrecorrente, desligamento por subtensão e proteção contra superaquecimento.

Você pode encontrar mais especificações na tabela abaixo. Observe que as especificações e dimensões exatas podem diferir ligeiramente entre os fabricantes. Sempre dê uma olhada na folha de dados do seu driver específico, antes de conectar a energia.

 

TB6600 Especificações

Tensão operacional9 – 42 V
Corrente máxima de saída4,5 A por fase, 5,0 A pico1
Resolução de micropassoscompleto, 1/2, 1/4, 1/8 e 1/162
ProteçãoDesligamento por baixa tensão, superaquecimento e proteção contra sobrecorrente
Dimensão96 x 72 x 28/36 mm
espaçamento do furo88, ⌀ 5 mm
CustoVeja o preço aproximado.

1 Estas são as especificações para o IC TB6600HG, o próprio driver tem uma corrente máxima de 3,5 A e 4,0 A de pico.
2 Veja o comentário sobre drivers TB6600 falsos/atualizados abaixo.

Para mais informações, você pode conferir a ficha técnica e o manual abaixo:

TB6600-Manual

 

Drivers TB6600 falsos ou “atualizados”

Recentemente, desmontei um dos drivers TB6600 que pedi e descobri que ele não usava um chip TB6600HG. Em vez disso, usou um chip TB67S109AFTG muito menor, também fabricado pela Toshiba. O desempenho e as especificações desses chips são semelhantes, mas o TB6600HG tem uma classificação de corrente de pico mais alta (até 5 A) e é apenas um chip muito maior com melhor dissipador de calor em geral.

Existe uma maneira muito simples de verificar se o seu driver usa um chip TB6600HG ou um chip TB67S109AFTG, o TB6600HG suporta apenas até 1/16 microstepping (ver ficha técnica), enquanto o TB67S109AFTG vai para 1/32. A principal razão pela qual os fabricantes mudaram para este outro chip é provavelmente o preço. Abaixo, você pode encontrar links para os chips no LCSC.com, que mostra que o TB67S109AFTG é cerca de US$ 1,50 mais barato.

TB6600HG: https://lcsc.com/product-detail/Motor-Drivers_TOSHIBA_TB6600HG_TB6600HG_C66042.html
TB67S109AFTG: https://lcsc.com/product-detail/Motor-Drivers_TOSHIBA_TB67S109AFTG_TB67S109AFTG_C92125.html

Você pode comprar drivers TB6600 genuínos na Amazon, como esta placa de driver de 4 eixos, mas a maioria usa o chip TB67S109AFTG. Você pode dizer que ele usa o chip TB6600HG dos pinos saindo do PCB e também só vai até 1/16 microstepping.

Jim, do blog embedtronics, fez alguns testes nos drivers TB67S109AFTG e descobriu que os motores de passo funcionavam melhor do que com os drivers TB6600. Então, você deve optar por um TB6600 genuíno ou pelo ‘upgrade’? Eu diria que depende se você realmente precisa da saída de alta corrente ou se prefere até 1/32 microstepping.

Você pode encontrar a folha de dados do TB67S109AFTG abaixo.

TB67S109AFTG-Datasheet

Alternativas

Observe que o TB6600 é um driver analógico. Nos últimos anos, drivers digitais como o DM556 ou DM542 tornaram-se muito mais acessíveis. Os drivers digitais geralmente oferecem um desempenho muito melhor e uma operação mais silenciosa. Eles podem ser conectados e controlados da mesma forma que o TB6600, para que você possa atualizar facilmente seu sistema posteriormente.

Eu usei os drivers DM556 para o meu roteador CNC DIY e eles têm funcionado muito bem por vários anos.

TB6600 vs TB6560

Ao comprar um driver de motor de passo TB6600, você provavelmente também encontrará o driver TB6560 um pouco mais barato. Este driver pode ser controlado com o mesmo código/fiação, mas existem algumas diferenças importantes.

TB6560TB6600
Tensão operacional10 – 35 VDC, 24 VDC recomendado9 – 42 VDC, 36 VDC recomendado
Corrente máxima de saída3 A per phase, 3.5 A peak3.5 A per phase, 4 A peak
# Configurações atuais148
Resolução de micropassoscompleto, 1/2, 1/8 e 1/16completo, 1/2, 1/4, 1/8, 1/16 e 1/32*
Frequência do relógio15 kHz200 kHz

*Drivers usando chip TB67S109AFTG.

Portanto, as principais diferenças são a tensão máxima mais alta, a corrente máxima mais alta e até 1/32 microstepping. O TB6600 também possui um dissipador de calor melhor e um formato geral mais agradável. Se você deseja controlar motores de passo maiores ou precisa de uma resolução mais alta, recomendo usar o TB6600.

 

Ligação – Conectando o TB6600 ao motor de passo e Arduino

Conectar o driver do motor de passo TB6600 a um Arduino e motor de passo é bastante fácil. O diagrama de fiação abaixo mostra quais conexões você precisa fazer.

Neste tutorial, estaremos conectando o driver em uma configuração de cátodo comum. Isso significa que conectamos todos os lados negativos das conexões do sinal de controle ao terra.

As conexões também são dadas na tabela abaixo:

Conexões TB6600

TB6600Conexão
VCC9 – 42 VDC
GNDAterramento da fonte de alimentação
ENA-Não conectado
ENA+Não conectado
DIR-Arduino GND
DIR+Pino 2 Arduino
PUL-Arduino GND
PUL+Pino 3 Arduino
A-, A+Bobina 1 motor de passo
B-, B+Bobina 2 motor de passo

Observe que deixamos os pinos de habilitação (ENA- e ENA+) desconectados. Isso significa que o pino de habilitação está sempre em BAIXO e o driver está sempre habilitado.

 

Como determinar a ligação correta do motor de passo?

Se você não conseguir encontrar a folha de dados do seu motor de passo, pode ser difícil descobrir qual fio de cor vai para onde. Eu uso o seguinte truque para determinar como conectar motores de passo bipolares de 4 fios:

A única coisa que você precisa identificar são os dois pares de fios que estão conectados às duas bobinas do motor. Os fios de uma bobina são conectados a A- e A+ e os outros a B- e B+, a polaridade não importa.

Para encontrar os dois fios de uma bobina, faça o seguinte com o motor desconectado:

  1. Tente girar o eixo do motor de passo com a mão e observe como é difícil girar.
  2. Agora pegue um par aleatório de fios do motor e toque as extremidades desencapadas.
  3. Em seguida, enquanto segura as pontas juntas, tente girar o eixo do motor de passo novamente.

Se você sentir muita resistência, você encontrou um par de fios da mesma bobina. Se você ainda pode girar o eixo livremente, tente outro par de fios. Agora conecte as duas bobinas aos pinos mostrados no diagrama de ligação acima.

(Se ainda não estiver claro, por favor, deixe um comentário abaixo, mais informações também podem ser encontradas no wiki RepRap.org)

 

Configurações de micropasso TB6600

Os motores de passo normalmente têm um tamanho de passo de 1,8° ou 200 passos por revolução, isto se refere a passos completos. Um driver de microstepping como o TB6600 permite resoluções mais altas, permitindo locais de passo intermediários. Isto é conseguido energizando as bobinas com níveis de corrente intermediários.

Por exemplo, acionar um motor no modo de 1/2 passo dará ao motor de 200 passos por revolução 400 micropassos por revolução.

Você pode alterar as configurações de microstep do TB6600 ligando ou desligando as chaves DIP no driver. Consulte a tabela abaixo para obter detalhes. Certifique-se de que o driver não esteja conectado à energia ao ajustar as chaves DIP!

Observe que essas configurações são para os drivers de micropasso 1/32 com o chip TB67S109AFTG. Quase todos os drivers TB6600 que você pode comprar hoje em dia usam este chip. Normalmente, você também pode encontrar uma tabela com o microstep e as configurações atuais no corpo do driver.

 

Tabela de micropassos

S1S2S3Resolução de micropassos
ONONONNC
ONONOFFFull step
ONOFFON1/2 step
OFFONON1/2 step
ONOFFOFF1/4 step
OFFONOFF1/8 step
OFFOFFON1/16 step
OFFOFFOFF1/32 step

De um modo geral, uma configuração de micropasso menor resultará em uma operação mais suave e silenciosa. No entanto, limitará a velocidade máxima que você pode alcançar ao controlar o driver do motor de passo com um Arduino.

 

Configurações atuais do TB6600

Você pode ajustar a corrente que vai para o motor quando ele está funcionando ativando ou desativando as chaves DIP S4, S5 e S6. Eu recomendo começar com um nível de corrente de 1 A. Se o seu motor estiver faltando passos ou travando, você sempre pode aumentar o nível de corrente mais tarde.

Tabela de Corrente

Currente (A)Corrente de picoS4S5S6
0.50.7ONONON
1.01.2ONOFFON
1.51.7ONONOFF
2.02.2ONOFFOFF
2.52.7OFFONON
2.82.9OFFOFFON
3.03.2OFFONOFF
3.54.0OFFOFFOFF

TB6600 básico com código de exemplo Arduino

Com o sketch a seguir, você pode testar a funcionalidade do driver do motor de passo. Ele simplesmente permite que o motor gire a uma velocidade fixa.

Você pode fazer o upload do código para o seu Arduino usando o Arduino IDE. Para este exemplo específico, você não precisa instalar nenhuma biblioteca.

No próximo exemplo, veremos como controlar a velocidade, o número de revoluções e a direção de rotação do motor de passo.

Você pode copiar o código clicando no botão no canto superior direito do campo de código.

/* Sketch de exemplo para controlar um motor de passo com driver de motor de passo TB6600 e Arduino sem biblioteca: rotação contínua.*/

// Definir conexões do motor de passo:
#define dirPin 2
#define stepPin 3

void setup() {
  // Declare pins as output:
  pinMode(stepPin, OUTPUT);
  pinMode(dirPin, OUTPUT);

  // Defina a direção de rotação CW/CCW:
  digitalWrite(dirPin, HIGH);
}

void loop() {
  // Essas quatro linhas resultam em 1 passo:
  digitalWrite(stepPin, HIGH);
  delayMicroseconds(500);
  digitalWrite(stepPin, LOW);
  delayMicroseconds(500);
}

Como você pode ver, o código é muito curto e super simples. Você não precisa de muito para fazer um motor de passo girar!

 

Explicação do código

O sketch começa com a definição dos pinos de passo (PUL+) e de direção (DIR+). Eu os conectei aos pinos 3 e 2 do Arduino.

A declaração

#define

é usado para dar um nome a um valor constante. O compilador substituirá quaisquer referências a esta constante pelo valor definido quando o programa for compilado. Então em todos os lugares que você menciona

dirPin

o compilador irá substituí-lo pelo valor 2 quando o programa for compilado.

// Defina as conexões do motor de passo:
#define dirPin 2
#define stepPin 3

No

setup()

seção do código, todos os pinos de controle do motor são declarados como SAÍDA digital com a função

pinMode(pin, mode)

Também defino a direção de rotação do motor de passo definindo o pino de direção HIGH. Para isso usamos a função

digitalWrite(pin, value)
void setup() {
  // Declare os pinos como saída:
  pinMode(stepPin, OUTPUT);
  pinMode(dirPin, OUTPUT);

  // Defina a direção de rotação CW/CCW:
  digitalWrite(dirPin, HIGH);
}

No

loop()

seção do código, deixamos o driver executar uma etapa enviando um pulso para o pino da etapa. Como o código na seção de loop é repetido continuamente, o motor de passo começará a girar a uma velocidade fixa. No próximo exemplo, você verá como pode alterar a velocidade do motor.

void loop() {
  // Essas quatro linhas resultam em 1 passo:
  digitalWrite(stepPin, HIGH);
  delayMicroseconds(500);
  digitalWrite(stepPin, LOW);
  delayMicroseconds(500);
}

2. Código de exemplo para controlar a rotação, velocidade e direção

Este sketch controla a velocidade, o número de revoluções e a direção de rotação do motor de passo.

/* Sketch de exemplo para controlar um motor de passo com driver de motor de passo TB6600 e Arduino sem biblioteca: número de rotações, velocidade e direção. */

// Defina as conexões do motor de passo e os passos por revolução:
#define dirPin 2
#define stepPin 3
#define stepsPerRevolution 1600

void setup() {
  // Declare os pinos como saída:
  pinMode(stepPin, OUTPUT);
  pinMode(dirPin, OUTPUT);
}

void loop() {
  // Ajuste o sentido de rotação no sentido horário:
  digitalWrite(dirPin, HIGH);

  // Gire o motor de passo 1 volta lentamente:
  for (int i = 0; i < stepsPerRevolution; i++) {
    // Essas quatro linhas resultam em 1 passo:
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(2000);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(2000);
  }

  delay(1000);

  // Defina o sentido de rotação no sentido anti-horário:
  digitalWrite(dirPin, LOW);

  // Gire o motor de passo 1 volta rapidamente:
  for (int i = 0; i < stepsPerRevolution; i++) {
    // Essas quatro linhas resultam em 1 passo:
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(1000);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(1000);
  }

  delay(1000);

  // Ajuste o sentido de rotação no sentido horário:
  digitalWrite(dirPin, HIGH);

  // Gire o motor de passo 5 rotações rapidamente:
  for (int i = 0; i < 5 * stepsPerRevolution; i++) {
    // Essas quatro linhas resultam em 1 passo:
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(500);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(500);
  }

  delay(1000);

  // Defina o sentido de rotação no sentido anti-horário:
  digitalWrite(dirPin, LOW);

  // Gire o motor de passo 5 rotações rapidamente:
  for (int i = 0; i < 5 * stepsPerRevolution; i++) {
    // Essas quatro linhas resultam em 1 passo:
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(500);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(500);
  }

  delay(1000);
}

 

Como o código funciona:

Além de configurar as conexões do motor de passo, também defini um

stepsPerRevolution

constante. Como configurei o driver para o modo de micropasso de 1/8, configurei-o para 1600 passos por revolução (para um motor de passo padrão de 200 passos por revolução). Altere este valor se sua configuração for diferente.

// Defina as conexões do motor de passo e os passos por revolução:
#define dirPin 2
#define stepPin 3
#define stepsPerRevolution 1600

No

setup()

seção é a mesma de antes, só que não precisamos definir a direção de rotação ainda.

No

loop()

seção do código, deixamos o motor girar uma revolução lentamente na direção CW e uma revolução rapidamente na direção CCW. Em seguida, deixamos o motor girar 5 rotações em cada direção com alta velocidade. Então, como você controla a velocidade, a direção de rotação e o número de revoluções?

// Ajuste o sentido de rotação no sentido horário:
  digitalWrite(dirPin, HIGH);

  // Gire o motor de passo 1 volta lentamente:
  for(int i = 0; i < stepsPerRevolution; i++)
  {
    // Essas quatro linhas resultam em 1 passo:
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(2000);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(2000);
  }

 

Controle de direção de ligação:

Para controlar a direção de rotação do motor de passo, configuramos o pino DIR (direção) como HIGH ou LOW. Para isso usamos a função

digitalWrite()

Dependendo de como você conectou o motor de passo, definir o pino DIR alto permitirá que o motor gire no sentido horário ou anti-horário.

 

Controlar o número de passos ou revoluções:

Neste esboço de exemplo, os loops for controlam o número de etapas que o motor de passo dará. O código dentro do loop for resulta em 1 (micro)passo do motor de passo. Como o código no loop é executado 1600 vezes (stepsPerRevolution), isso resulta em 1 revolução. Nos dois últimos loops, o código dentro do loop for é executado 8.000 vezes, o que resulta em 8.000 (micro)passos ou 5 revoluções.

Observe que você pode alterar o segundo termo no loop for para qualquer número de etapas que desejar.

for(int i = 0; i < 800; i++)

resultaria em 800 passos ou meia revolução.

 

Velocidade de controle:

A velocidade do motor de passo é determinada pela frequência dos pulsos que enviamos ao pino STEP. Quanto maior a frequência, mais rápido o motor funciona. Você pode controlar a frequência dos pulsos alterando

delayMicroseconds()

no código. Quanto menor o atraso, quanto maior a frequência, mais rápido o motor funciona.

 

Instalando a biblioteca AccelStepper

A biblioteca AccelStepper escrita por Mike McCauley é uma biblioteca incrível para usar em seu projeto. Uma das vantagens é que ele suporta aceleração e desaceleração, mas também possui muitas outras funções interessantes.

Você pode baixar a versão mais recente desta biblioteca aqui ou clicar no botão abaixo.

<AccelStepper-1.59>

Você pode instalar a biblioteca indo em Sketch > Incluir Bliblioteca > Adicionar biblioteca .Zip… no Arduino IDE.

Outra opção é navegar até Ferramentas > Gerenciar Bibliotecas… ou digitar Ctrl + Shift + I no Windows. O Library Manager abrirá e atualizará a lista de bibliotecas instaladas.

Ou

3. Código de exemplo do AccelStepper

Com o sketch a seguir, você pode adicionar aceleração e desaceleração aos movimentos do motor de passo, sem nenhuma codificação complicada. No exemplo a seguir, o motor funcionará para frente e para trás com uma velocidade de 1.000 passos por segundo e uma aceleração de 500 passos por segundo ao quadrado.

Observe que ainda estou usando o driver no modo de micropasso de 1/8. Se você estiver usando uma configuração diferente, brinque com as configurações de velocidade e aceleração.

/* Sketch de exemplo para controlar um motor de passo com driver de motor de passo TB6600, biblioteca AccelStepper e Arduino: aceleração e desaceleração. */

// Include the AccelStepper library:
#include <AccelStepper.h>

// Defina as conexões do motor de passo e o tipo de interface do motor. O tipo de interface do motor deve ser definido como 1 ao usar um driver:
#define dirPin 2
#define stepPin 3
#define motorInterfaceType 1

// Crie uma nova instância da classe AccelStepper:
AccelStepper stepper = AccelStepper(motorInterfaceType, stepPin, dirPin);

void setup() {
  // Defina a velocidade e aceleração máximas:
  stepper.setMaxSpeed(1000);
  stepper.setAcceleration(500);
}

void loop() {
  // Defina a posição alvo:
  stepper.moveTo(8000);
  // Corra para a posição alvo com velocidade e aceleração/desaceleração definidas:
  stepper.runToPosition();

  delay(1000);

  // Voltar para zero:
  stepper.moveTo(0);
  stepper.runToPosition();

  delay(1000);
}

 

Explicação do código:

O primeiro passo é incluir a biblioteca com

#include <AccelStepper.h>
// Inclua a biblioteca AccelStepper:
#include <AccelStepper.h>

O próximo passo é definir as conexões do TB6600 para o Arduino e o tipo de interface do motor. O tipo de interface do motor deve ser definido como 1 ao usar um driver de passo e direção. Você pode encontrar os outros tipos de interface aqui.

// Defina as conexões do motor de passo e o tipo de interface do motor. O tipo de interface do motor deve ser definido como 1 ao usar um driver:
#define dirPin 2
#define stepPin 3
#define motorInterfaceType 1

Em seguida, você precisa criar uma nova instância da classe AccelStepper com o tipo de interface do motor e conexões apropriados.

Neste caso, chamei o motor de passo de ‘stepper’, mas você também pode usar outros nomes, como ‘z_motor’ ou ‘liftmotor’ etc.

AccelStepper liftmotor = AccelStepper(motorInterfaceType, stepPin, dirPin);

. O nome que você der ao motor de passo será usado posteriormente para definir a velocidade, a posição e a aceleração desse motor específico. Você pode criar várias instâncias da classe AccelStepper com nomes e pinos diferentes. Isso permite que você controle facilmente 2 ou mais motores de passo ao mesmo tempo.

// Crie uma nova instância da classe AccelStepper:
AccelStepper stepper = AccelStepper(motorInterfaceType, stepPin, dirPin);

No setup(), além da velocidade máxima, precisamos definir a aceleração/desaceleração. Para isso usamos a função

setMaxSpeed()

e

setAcceleration()
void setup() {
  // Defina a velocidade e aceleração máximas:
  stepper.setMaxSpeed(1000);
  stepper.setAcceleration(500);
}

Na seção de loop do código, deixamos o motor girar um número predefinido de etapas. A função

stepper.moveTo()

é usado para definir a posição de destino (em etapas). A função

stepper.runToPostion()

move o motor (com aceleração/desaceleração) para a posição alvo e bloqueia até que esteja na posição alvo. Como essa função está bloqueando, você não deve usá-la quando precisar controlar outras coisas ao mesmo tempo.

// Defina a posição alvo:
stepper.moveTo(8000);
// Corra para a posição alvo com velocidade e aceleração/desaceleração definidas:
stepper.runToPosition();

 

 

Conclusão

Neste artigo, mostrei como controlar um motor de passo com o driver do motor de passo TB6600 e o Arduino. Espero que tenha achado útil e informativo. Se você gostou, compartilhe com um amigo que também gosta de eletrônicos e de fazer coisas!

Eu adoraria saber quais projetos você planeja construir (ou já construiu) com este driver. Se você tiver alguma dúvida, sugestão ou se achar que algo está faltando neste tutorial, deixe um comentário abaixo.