Skip to Content

Tutorial del Driver de Motor Paso a Paso TB6600 con Arduino

Tutorial del Driver de Motor Paso a Paso TB6600 con Arduino

En este tutorial, aprenderás a controlar un motor paso a paso con el driver de microstepping TB6600 y Arduino. Este driver es fácil de usar y puede controlar motores paso a paso grandes como un 3 A NEMA 23.

He incluido un diagrama de conexiones y 3 códigos de ejemplo. En el primer ejemplo, te mostraré cómo usar este driver de motor paso a paso sin una librería de Arduino.

Este ejemplo se puede usar para que el motor gire de forma continua. En el segundo ejemplo, veremos cómo controlar la velocidad, el número de revoluciones y la dirección de giro del motor paso a paso.

Finalmente, echaremos un vistazo a la AccelStepper librería. Esta librería es bastante fácil de usar y te permite añadir aceleración y desaceleración al movimiento del motor paso a paso.

Después de cada ejemplo, desgloso y explico cómo funciona el código, así que no deberías tener problemas para modificarlo según tus necesidades.

Materiales

Componentes de hardware

TB6600 stepper motor driver× 1Amazon
Stepper MotorNEMA 23 stepper motor× 1Amazon
Arduino Uno Rev 3Arduino Uno Rev3× 1Amazon
Power supply (24/36 V)× 1Amazon
Jumper wires× 4Amazon
USB cable type A/B× 1Amazon

Herramientas

Wire stripperAmazon
Small screwdriverAmazon
Self-adjusting crimping pliers (recomendado)*Amazon
Wire ferrules assortment (recomendado)*Amazon

*Hackaday escribió un gran artículo sobre los beneficios de usar terminales de cable (también conocidos como manguitos de extremo).

Software

Arduino IDEArduino IDE

Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.

Acerca del driver

El TB6600 driver de microstepping está basado en el circuito integrado Toshiba TB6600HG y puede usarse para controlar motores paso a paso bipolares de dos fases.

Con una corriente máxima continua de 3.5 A, el driver TB6600 puede controlar motores paso a paso bastante grandes como un NEMA 23. Asegúrate de no conectar motores con una corriente nominal superior a 3.5 A al driver.

El driver incluye varias funciones de seguridad integradas como protección contra sobrecorriente, apagado por bajo voltaje y protección contra sobrecalentamiento.

Puedes encontrar más especificaciones en la tabla a continuación. Ten en cuenta que las especificaciones y dimensiones exactas pueden variar ligeramente entre fabricantes. Siempre revisa la hoja de datos de tu driver antes de conectar la alimentación.

Especificaciones del TB6600

Voltaje de operación9 – 42 V
Corriente máxima de salida4.5 A por fase, 5.0 A pico1
Resolución de microsteppingcompleto, 1/2, 1/4, 1/8 y 1/162
ProtecciónApagado por bajo voltaje, protección contra sobrecalentamiento y sobrecorriente
Dimensiones96 x 72 x 28/36 mm
Separación de orificios88, ⌀ 5 mm
CostoCheck price

1 Estas son las especificaciones para el CI TB6600HG, el driver en sí tiene una corriente máxima de 3.5 A y pico de 4.0 A.
2 Consulta el comentario sobre drivers TB6600 falsos o “mejorados” más abajo.

Para más información, puedes consultar la hoja de datos y el manual a continuación:

Drivers TB6600 falsos o ‘mejorados’

Recientemente desarmé uno de los drivers TB6600 que pedí y descubrí que en realidad no usaba un chip TB6600HG. En su lugar, usaba un chip mucho más pequeño TB67S109AFTG, también fabricado por Toshiba. El rendimiento y las especificaciones de estos chips son similares, pero el TB6600HG tiene una corriente pico más alta (hasta 5 A) y es un chip mucho más grande con mejor disipación de calor en general.

Hay una forma muy sencilla de comprobar si tu driver usa un chip TB6600HG o un TB67S109AFTG, el TB6600HG solo soporta hasta microstepping 1/16 (ver hoja de datos), mientras que el TB67S109AFTG llega hasta 1/32. La razón principal por la que los fabricantes cambiaron a este otro chip probablemente sea el precio. A continuación puedes encontrar enlaces a los chips en LCSC.com que muestra que el TB67S109AFTG es aproximadamente $1.50 más 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

Puedes comprar drivers TB6600 genuinos en Amazon, como este 4-axis driver board pero la mayoría usan el chip TB67S109AFTG. Puedes distinguir si usa el chip TB6600HG por los pines que sobresalen de la PCB y porque solo llega hasta microstepping 1/16.

Jim de embeddedtronicsblog hizo algunas pruebas con los drivers TB67S109AFTG y descubrió que los motores paso a paso funcionaban mejor que con los drivers TB6600. Entonces, ¿deberías elegir un TB6600 genuino o el ‘mejorado’? Yo diría que depende de si realmente necesitas la alta corriente de salida o prefieres hasta microstepping 1/32.

Puedes encontrar la hoja de datos del TB67S109AFTG a continuación.

Alternativas

Ten en cuenta que el TB6600 es un driver analógico. En los últimos años, drivers digitales como el DM556 o el DM542 se han vuelto mucho más asequibles. Los drivers digitales suelen ofrecer mejor rendimiento y funcionamiento más silencioso. Se pueden cablear y controlar de la misma forma que el TB6600, por lo que puedes actualizar tu sistema fácilmente más adelante.

He usado los drivers DM556 para mi router CNC DIY y han funcionado muy bien durante varios años.

TB6600 vs TB6560

Al buscar un driver TB6600 para motor paso a paso, probablemente también te encuentres con el driver TB6560 un poco más barato. Este driver puede controlarse con el mismo código y cableado, pero hay algunas diferencias clave.

TB6560TB6600
Voltaje de operación10 – 35 VDC, 24 VDC recomendado9 – 42 VDC, 36 VDC recomendado
Corriente máxima de salida3 A por fase, 3.5 A pico3.5 A por fase, 4 A pico
# Ajustes de corriente148
Resolución de microsteppingcompleto, 1/2, 1/8 y 1/16completo, 1/2, 1/4, 1/8, 1/16 y 1/32*
Frecuencia de reloj15 kHz200 kHz
CostoCheck priceCheck price

*Drivers que usan el chip TB67S109AFTG.

Así que las principales diferencias son el mayor voltaje máximo, mayor corriente máxima y hasta microstepping 1/32. El TB6600 también tiene un mejor disipador y un factor de forma más agradable. Si quieres controlar motores paso a paso más grandes o necesitas mayor resolución, te recomiendo el TB6600.

Cableado – Conectar TB6600 a motor paso a paso y Arduino

Conectar el driver TB6600 a un Arduino y motor paso a paso es bastante sencillo. El diagrama de cableado a continuación muestra las conexiones que debes hacer.

TB6600-stepper-motor-driver-with-Arduino-UNO-wiring-diagram-schematic
Diagrama de cableado del driver TB6600 con Arduino UNO y motor paso a paso

En este tutorial, conectaremos el driver en configuración de cátodo común. Esto significa que conectamos todos los lados negativos de las señales de control a tierra.

Las conexiones también se muestran en la tabla a continuación:

Conexiones TB6600

TB6600Conexión
VCC9 – 42 VDC
GNDTierra de la fuente de alimentación
ENA-No conectado
ENA+No conectado
DIR-GND Arduino
DIR+Pin 2 Arduino
PUL-GND Arduino
PUL+Pin 3 Arduino
A-, A+Bobina 1 motor paso a paso
B-, B+Bobina 2 motor paso a paso

Ten en cuenta que hemos dejado los pines de habilitación (ENA- y ENA+) desconectados. Esto significa que el pin de habilitación está siempre en LOW y el driver siempre está habilitado.

Cómo determinar el cableado correcto del motor paso a paso

Si no encuentras la hoja de datos de tu motor paso a paso, puede ser difícil saber qué color de cable va a dónde. Yo uso el siguiente truco para determinar cómo conectar motores bipolares de 4 cables:

Lo único que necesitas identificar son los dos pares de cables que están conectados a las dos bobinas del motor. Los cables de una bobina se conectan a A- y A+ y los de la otra a B- y B+, la polaridad no importa.

Para encontrar los dos cables de una bobina, haz lo siguiente con el motor desconectado:

  1. Intenta girar el eje del motor paso a paso a mano y nota qué tan difícil es girarlo.
  2. Ahora toma un par de cables al azar del motor y toca las puntas peladas juntas.
  3. Luego, mientras mantienes las puntas juntas, intenta girar el eje del motor paso a paso de nuevo.

Si sientes mucha resistencia, has encontrado un par de cables de la misma bobina. Si el eje gira libremente, prueba con otro par de cables. Ahora conecta las dos bobinas a los pines mostrados en el diagrama de cableado arriba.

Si aún no está claro, deja un comentario abajo, también puedes encontrar más información en la RepRap.org wiki

Configuración de microstepping TB6600

Los motores paso a paso típicamente tienen un paso de 1.8° o 200 pasos por revolución, esto se refiere a pasos completos. Un driver de microstepping como el TB6600 permite resoluciones más altas al permitir posiciones intermedias de paso. Esto se logra energizando las bobinas con niveles intermedios de corriente.

Por ejemplo, conducir un motor en modo de medio paso (1/2) dará al motor de 200 pasos por revolución 400 micro pasos por revolución.

Puedes cambiar la configuración de microstepping del TB6600 activando o desactivando los interruptores DIP en el driver. Consulta la tabla a continuación para más detalles. ¡Asegúrate de que el driver no esté conectado a la alimentación cuando ajustes los interruptores DIP!

Ten en cuenta que estas configuraciones son para los drivers de microstepping 1/32 con el chip TB67S109AFTG. Casi todos los drivers TB6600 que puedes comprar hoy en día usan este chip. Normalmente también puedes encontrar una tabla con las configuraciones de microstep y corriente en el cuerpo del driver.

Tabla de microstepping

S1S2S3Resolución de microstep
ONONONNC
ONONOFFPaso completo
ONOFFONMedio paso (1/2)
OFFONONMedio paso (1/2)
ONOFFOFF1/4 paso
OFFONOFF1/8 paso
OFFOFFON1/16 paso
OFFOFFOFF1/32 paso

En general, una configuración de microstep más pequeña resultará en un funcionamiento más suave y silencioso. Sin embargo, limitará la velocidad máxima que puedes alcanzar al controlar el driver con un Arduino.

Configuración de corriente TB6600

Puedes ajustar la corriente que llega al motor cuando está funcionando configurando los interruptores DIP S4, S5 y S6 en ON o OFF. Recomiendo comenzar con un nivel de corriente de 1 A. Si tu motor pierde pasos o se detiene, siempre puedes aumentar la corriente más adelante.

Tabla de corriente

Corriente (A)Corriente 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

Ejemplo básico de código TB6600 con Arduino

Con el siguiente sketch, puedes probar la funcionalidad del driver del motor paso a paso. Simplemente hace que el motor gire a una velocidad fija.

Puedes subir el código a tu Arduino usando el IDE de Arduino. Para este ejemplo específico, no necesitas instalar ninguna librería.

En el siguiente ejemplo veremos cómo controlar la velocidad, el número de revoluciones y la dirección de giro del motor paso a paso.

Puedes copiar el código haciendo clic en el botón en la esquina superior derecha del campo de código.

/* Example sketch to control a stepper motor with TB6600 stepper motor driver 
  and Arduino without a library: continuous rotation. 
  More info: https://www.makerguides.com */

// Define stepper motor connections:
#define dirPin 2
#define stepPin 3

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

  // Set the spinning direction CW/CCW:
  digitalWrite(dirPin, HIGH);
}

void loop() {
  // These four lines result in 1 step:
  digitalWrite(stepPin, HIGH);
  delayMicroseconds(500);
  digitalWrite(stepPin, LOW);
  delayMicroseconds(500);
}

Como puedes ver, el código es muy corto y simple. ¡No necesitas mucho para hacer girar un motor paso a paso!

Explicación del código

El sketch comienza definiendo los pines de paso (PUL+) y dirección (DIR+). Los conecté a los pines 3 y 2 del Arduino.

La instrucción #define se usa para dar un nombre a un valor constante. El compilador reemplazará cualquier referencia a esta constante con el valor definido cuando se compile el programa. Así que donde menciones dirPin, el compilador lo reemplazará con el valor 2 al compilar el programa.

// Define stepper motor connections:
#define dirPin 2
#define stepPin 3

En la setup() sección del código, todos los pines de control del motor se declaran como OUTPUT digital con la función pinMode(pin, mode). También establezco la dirección de giro del motor paso a paso poniendo el pin de dirección en HIGH. Para esto usamos la función digitalWrite(pin, value).

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

  // Set the spinning direction CW/CCW:
  digitalWrite(dirPin, HIGH);
}

En la loop() sección del código, hacemos que el driver ejecute un paso enviando un pulso al pin de paso. Como el código en la sección loop se repite continuamente, el motor paso a paso comenzará a girar a una velocidad fija.

void loop() {
  // These four lines result in 1 step:
  digitalWrite(stepPin, HIGH);
  delayMicroseconds(500);
  digitalWrite(stepPin, LOW);
  delayMicroseconds(500);
}

En el siguiente ejemplo, verás cómo puedes cambiar la velocidad del motor.

2. Código de ejemplo para controlar rotación, velocidad y dirección

El siguiente sketch controla la velocidad, el número de revoluciones y la dirección de giro del motor paso a paso.

/* Example sketch to control a stepper motor with TB6600 stepper motor driver 
   and Arduino without a library: number of revolutions, speed and direction. 
   More info: https://www.makerguides.com */

// Define stepper motor connections and steps per revolution:
#define dirPin 2
#define stepPin 3
#define stepsPerRevolution 1600

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

void loop() {
  // Set the spinning direction clockwise:
  digitalWrite(dirPin, HIGH);

  // Spin the stepper motor 1 revolution slowly:
  for (int i=0; i < stepsPerRevolution; i++) {
    // These four lines result in 1 step:
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(2000);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(2000);
  }

  delay(1000);

  // Set the spinning direction counterclockwise:
  digitalWrite(dirPin, LOW);

  // Spin the stepper motor 1 revolution quickly:
  for (int i=0; i < stepsPerRevolution; i++) {
    // These four lines result in 1 step:
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(1000);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(1000);
  }

  delay(1000);

  // Set the spinning direction clockwise:
  digitalWrite(dirPin, HIGH);

  // Spin the stepper motor 5 revolutions fast:
  for (int i=0; i < 5 * stepsPerRevolution; i++) {
    // These four lines result in 1 step:
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(500);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(500);
  }

  delay(1000);

  // Set the spinning direction counterclockwise:
  digitalWrite(dirPin, LOW);

  // Spin the stepper motor 5 revolutions fast:
  for (int i=0; i < 5 * stepsPerRevolution; i++) {
    // These four lines result in 1 step:
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(500);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(500);
  }

  delay(1000);
}

Cómo funciona el código

Además de configurar las conexiones del motor paso a paso, también definí una constante stepsPerRevolution . Como configuré el driver en modo microstepping 1/8, la puse en 1600 pasos por revolución (para un motor estándar de 200 pasos por revolución). Cambia este valor si tu configuración es diferente.

// Define stepper motor connections and steps per revolution:
#define dirPin 2
#define stepPin 3
#define stepsPerRevolution 1600

La setup() sección es igual que antes, solo que aún no definimos la dirección de giro.

En la loop() sección del código, hacemos que el motor gire una revolución lentamente en dirección CW y una revolución rápidamente en dirección CCW. Luego, hacemos que el motor gire 5 revoluciones en cada dirección a alta velocidad. ¿Cómo controlas la velocidad, dirección de giro y número de revoluciones?

  // Set the spinning direction clockwise:
  digitalWrite(dirPin, HIGH);

  // Spin the stepper motor 1 revolution slowly:
  for(int i=0; i < stepsPerRevolution; i++)
  {
    // These four lines result in 1 step:
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(2000);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(2000);
  }

Controlar dirección de giro

Para controlar la dirección de giro del motor paso a paso, ponemos el pin DIR (dirección) en HIGH o LOW. Para esto usamos la función digitalWrite(). Dependiendo de cómo conectaste el motor, poner el pin DIR en HIGH hará que el motor gire en sentido horario (CW) o antihorario (CCW).

Controlar número de pasos o revoluciones

En este sketch de ejemplo, el for loops controla el número de pasos que el motor dará. El código dentro del for loop resulta en 1 (micro)paso del motor. Como el código en el loop se ejecuta 1600 veces (stepsPerRevolution), esto resulta en 1 revolución. En los dos últimos loops, el código dentro del for se ejecuta 8000 veces, lo que resulta en 8000 (micro)pasos o 5 revoluciones.

Ten en cuenta que puedes cambiar el segundo término en el for loop al número de pasos que desees. for(int i=0; i<800; i++) resultaría en 800 pasos o media revolución.

Controlar velocidad

La velocidad del motor paso a paso está determinada por la frecuencia de los pulsos que enviamos al pin STEP. A mayor frecuencia, más rápido gira el motor. Puedes controlar la frecuencia de los pulsos cambiando delayMicroseconds() en el código. Cuanto más corto sea el delay, mayor será la frecuencia y más rápido girará el motor.

Instalando la librería AccelStepper

La librería AccelStepper escrita por Mike McCauley es una librería excelente para usar en tu proyecto. Una de sus ventajas es que soporta aceleración y desaceleración, pero también tiene muchas otras funciones útiles.

Puedes descargar la última versión de esta librería aquí:

Puedes instalar la librería yendo a Sketch > Include Library > Add .ZIP Library… en el IDE de Arduino.

Otra opción es navegar a Tools > Manage Libraries… o presionar Ctrl + Shift + I en Windows. Se abrirá el Library Manager y actualizará la lista de librerías instaladas.

Arduino IDE manage or install libraries
Instalar librería

Puedes buscar ‘accelstepper’ y buscar la librería de Mike McCauley. Selecciona la última versión y luego haz clic en Instalar.

Install AccelStepper library via Arduino IDE
Instalar librería AccelStepper

3. Código de ejemplo AccelStepper

Con el siguiente sketch, puedes añadir aceleración y desaceleración a los movimientos del motor paso a paso, sin necesidad de código complicado. En el siguiente ejemplo, el motor girará de un lado a otro con una velocidad de 1000 pasos por segundo y una aceleración de 500 pasos por segundo al cuadrado.

Ten en cuenta que sigo usando el driver en modo microstepping 1/8. Si usas una configuración diferente, ajusta la velocidad y aceleración según convenga.

/* Example sketch to control a stepper motor with TB6600 stepper motor driver, 
  AccelStepper library and Arduino: acceleration and deceleration. 
  More info: https://www.makerguides.com */

// Include the AccelStepper library:
#include "AccelStepper.h"

// Define stepper motor connections and motor interface type. 
// Motor interface type must be set to 1 when using a driver:
#define dirPin 2
#define stepPin 3
#define motorInterfaceType 1

// Create a new instance of the AccelStepper class:
AccelStepper stepper = AccelStepper(motorInterfaceType, stepPin, dirPin);

void setup() {
  // Set the maximum speed and acceleration:
  stepper.setMaxSpeed(1000);
  stepper.setAcceleration(500);
}

void loop() {
  // Set the target position:
  stepper.moveTo(8000);
  // Run to target position with set speed and acceleration/deceleration:
  stepper.runToPosition();

  delay(1000);

  // Move back to zero:
  stepper.moveTo(0);
  stepper.runToPosition();

  delay(1000);
}

Explicación del código

El primer paso es incluir la librería con #include <AccelStepper.h>.

// Include the AccelStepper library:
#include "AccelStepper.h"

El siguiente paso es definir las conexiones del TB6600 al Arduino y el tipo de interfaz del motor. El tipo de interfaz debe ser 1 cuando se usa un driver de paso y dirección. Puedes encontrar los otros tipos de interfaz here.

// Define stepper motor connections and motor interface type. Motor interface type must be set to 1 when using a driver:
#define dirPin 2
#define stepPin 3
#define motorInterfaceType 1

Luego, necesitas crear una nueva instancia de la clase AccelStepper con el tipo de interfaz y conexiones apropiadas.

En este caso, llamé al motor paso a paso ‘stepper’ pero puedes usar otros nombres como ‘z_motor’ o ‘liftmotor’, etc. AccelStepper liftmotor = AccelStepper(motorInterfaceType, stepPin, dirPin);. El nombre que le des al motor paso a paso se usará más adelante para configurar la velocidad, posición y aceleración de ese motor en particular. Puedes crear múltiples instancias de la clase AccelStepper con diferentes nombres y pines. Esto te permite controlar fácilmente 2 o más motores paso a paso al mismo tiempo.

// Create a new instance of the AccelStepper class:
AccelStepper stepper = AccelStepper(motorInterfaceType, stepPin, dirPin);

En el setup(), además de la velocidad máxima, necesitamos definir la aceleración/desaceleración. Para esto usamos la función setMaxSpeed() y setAcceleration().

void setup() {
  // Set the maximum speed and acceleration:
  stepper.setMaxSpeed(1000);
  stepper.setAcceleration(500);
}

En la sección loop del código, hacemos que el motor gire un número predefinido de pasos. La función stepper.moveTo() se usa para establecer la posición objetivo (en pasos). La función stepper.runToPostion() mueve el motor (con aceleración/desaceleración) a la posición objetivo y bloquea hasta que llega a ella. Como esta función es bloqueante, no deberías usarla si necesitas controlar otras cosas al mismo tiempo.

  // Set the target position:
  stepper.moveTo(8000);
  // Run to target position with set speed and acceleration/deceleration:
  stepper.runToPosition();

Si quieres ver más ejemplos para la librería AccelStepper, consulta mi tutorial sobre How to control a stepper motor with A4988 driver and Arduino.

Conclusión

En este artículo, te he mostrado cómo controlar un motor paso a paso con el driver TB6600 y Arduino. Espero que te haya resultado útil e informativo.

Si quieres aprender más sobre otros drivers para motores paso a paso, los artículos a continuación pueden ser útiles:

También tenemos un artículo sobre How To Use the TB6600 Stepper Motor Driver with ESP32 si quieres trabajar con un microcontrolador ESP32 en su lugar.

Si tienes alguna pregunta, por favor deja un comentario abajo.