Driver de motor de passo TB6600 com tutorial Arduino
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.
Conteudo
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 operacional | 9 – 42 V |
Corrente máxima de saída | 4,5 A por fase, 5,0 A pico1 |
Resolução de micropassos | completo, 1/2, 1/4, 1/8 e 1/162 |
Proteção | Desligamento por baixa tensão, superaquecimento e proteção contra sobrecorrente |
Dimensão | 96 x 72 x 28/36 mm |
espaçamento do furo | 88, ⌀ 5 mm |
Custo | Veja 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:
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.
*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
TB6600 | Conexão |
---|---|
VCC | 9 – 42 VDC |
GND | Aterramento 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:
- Tente girar o eixo do motor de passo com a mão e observe como é difícil girar.
- Agora pegue um par aleatório de fios do motor e toque as extremidades desencapadas.
- 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
S1 | S2 | S3 | Resolução de micropassos |
---|---|---|---|
ON | ON | ON | NC |
ON | ON | OFF | Full step |
ON | OFF | ON | 1/2 step |
OFF | ON | ON | 1/2 step |
ON | OFF | OFF | 1/4 step |
OFF | ON | OFF | 1/8 step |
OFF | OFF | ON | 1/16 step |
OFF | OFF | OFF | 1/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 pico | S4 | S5 | S6 |
---|---|---|---|---|
0.5 | 0.7 | ON | ON | ON |
1.0 | 1.2 | ON | OFF | ON |
1.5 | 1.7 | ON | ON | OFF |
2.0 | 2.2 | ON | OFF | OFF |
2.5 | 2.7 | OFF | ON | ON |
2.8 | 2.9 | OFF | OFF | ON |
3.0 | 3.2 | OFF | ON | OFF |
3.5 | 4.0 | OFF | OFF | OFF |
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.
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.