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 | × 1 | Amazon | |
| NEMA 23 stepper motor | × 1 | Amazon | |
| Arduino Uno Rev3 | × 1 | Amazon | |
| Power supply (24/36 V) | × 1 | Amazon | |
| Jumper wires | × 4 | Amazon | |
| USB cable type A/B | × 1 | Amazon |
Herramientas
| Wire stripper | Amazon | ||
| Small screwdriver | Amazon | ||
| 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
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ón | 9 – 42 V |
| Corriente máxima de salida | 4.5 A por fase, 5.0 A pico1 |
| Resolución de microstepping | completo, 1/2, 1/4, 1/8 y 1/162 |
| Protección | Apagado por bajo voltaje, protección contra sobrecalentamiento y sobrecorriente |
| Dimensiones | 96 x 72 x 28/36 mm |
| Separación de orificios | 88, ⌀ 5 mm |
| Costo | Check 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.
| TB6560 | TB6600 | |
|---|---|---|
| Voltaje de operación | 10 – 35 VDC, 24 VDC recomendado | 9 – 42 VDC, 36 VDC recomendado |
| Corriente máxima de salida | 3 A por fase, 3.5 A pico | 3.5 A por fase, 4 A pico |
| # Ajustes de corriente | 14 | 8 |
| Resolución de microstepping | completo, 1/2, 1/8 y 1/16 | completo, 1/2, 1/4, 1/8, 1/16 y 1/32* |
| Frecuencia de reloj | 15 kHz | 200 kHz |
| Costo | Check price | Check 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.

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
| TB6600 | Conexión |
|---|---|
| VCC | 9 – 42 VDC |
| GND | Tierra 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:
- Intenta girar el eje del motor paso a paso a mano y nota qué tan difícil es girarlo.
- Ahora toma un par de cables al azar del motor y toca las puntas peladas juntas.
- 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
| S1 | S2 | S3 | Resolución de microstep |
|---|---|---|---|
| ON | ON | ON | NC |
| ON | ON | OFF | Paso completo |
| ON | OFF | ON | Medio paso (1/2) |
| OFF | ON | ON | Medio paso (1/2) |
| ON | OFF | OFF | 1/4 paso |
| OFF | ON | OFF | 1/8 paso |
| OFF | OFF | ON | 1/16 paso |
| OFF | OFF | OFF | 1/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 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 |
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.

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

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:
- TB6560 Stepper Motor Driver with Arduino Tutorial
- How to control a stepper motor with A4988 driver and Arduino
- 28BYJ-48 Stepper Motor with ULN2003 Driver and Arduino Tutorial
- How to control a Stepper Motor with Arduino Motor Shield Rev3
- Control a Stepper Motor with an IR Remote
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.

