Tutorial del TB6600 , Driver de motor paso a paso con Arduino

Tutorial del TB6600

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

Hemos incluido un diagrama de cableado y 3 códigos de ejemplo. En el primer ejemplo, os mostraremos cómo podéis usar este motor paso a paso sin la biblioteca de Arduino. Este ejemplo puede ser usado para dejar que el motor gire continuamente. En el segundo ejemplo, veremos cómo se puede controlar la velocidad, el número de revoluciones y el sentido de giro del motor a pasos. Finalmente, echaremos un vistazo a la biblioteca AccelStepper. Esta biblioteca es bastante fácil de usar y permite añadir aceleración y desaceleración al movimiento del motor a pasos.

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

Lo que vas a necesitar

Componentes de hardware

Herramientas

Software

Qué es el TB6600

El controlador de micropasos TB6600 está construido alrededor del IC Toshiba TB6600HG y puede ser usado para manejar motores de paso bipolares de dos fases.

Con una corriente máxima de 3,5 A continuos, el controlador TB6600 puede ser usado para controlar motores paso a paso bastante grandes como el NEMA 23. Asegúrese de no conectar al controlador motores de paso con una corriente superior a 3,5 A.

El controlador tiene incorporadas varias funciones de seguridad como la protección contra sobrecorriente, la desconexión por bajo voltaje y el sobrecalentamiento.

Puedes encontrar más especificaciones en la siguiente tabla. Ten en cuenta que las especificaciones y dimensiones exactas pueden diferir ligeramente entre los fabricantes. Consulta siempre la hoja de datos de tu controlador en particular, antes de conectar la alimentación.

Especificaciones del TB6600

  • Tensión de funcionamiento 9 – 42 V
  • Corriente de salida máxima 4,5 A por fase, 5,0 A de pico
  • Resolución de micropasos completa, 1/2, 1/4, 1/8 y 1/16
  • Protección Apagado de baja tensión, sobrecalentamiento y protección de sobrecorriente
  • Dimensiones 96 x 72 x 28/36 mm
  • Espacio entre agujeros 88, ⌀ 5 mm

Estas son las especificaciones para el TB6600HG IC, el conductor en sí mismo tiene un índice de corriente máxima de 3,5 A y 4,0 A de pico.

Para obtener más información, puede consultar la hoja de datos y el manual.

TB6600 vs TB6560

Al comprar un motor paso a paso TB6600, probablemente también te encontrarás con el motor TB6560, un poco más barato. Este conductor puede ser controlado con el mismo código/cableado, pero hay algunas diferencias clave.

TB6560TB6600
Voltaje de funcionamiento10 – 35 VDC, 24 VDC recommended9 – 42 VDC, 36 VDC recommended
Corriente de salida máxima3 A per phase, 3.5 A peak3.5 A per phase, 4 A peak
# Ajustes de corriente148
Microstep resolutionfull, 1/2, 1/8 and 1/16full, 1/2, 1/4, 1/8, 1/16 and 1/32*
Frecuencia del reloj15 kHz200 kHz

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

Cableado. Conectando el TB6600 al motor paso a paso a Arduino

Conectar el motor de pasos TB6600 a un Arduino y un motor de pasos es bastante fácil. El siguiente diagrama de cableado le muestra las conexiones que necesita hacer.

cableado TB6600 con Arduino - Tutorial del TB6600 , Driver de motor paso a paso con Arduino
En este tutorial, conectaremos el controlador en una configuración de cátodo común. Esto significa que conectamos todos los lados negativos de las conexiones de la señal de control a tierra.

Las conexiones también se ven en la siguiente tabla:

Conexiones TB6600, Datasheet

TB6600Connection
VCC9 – 42 VDC
GNDFuente de alimentación a tierra
ENA-Sin conectar
ENA+Sin conectar
DIR-Arduino GND
DIR+Pin 2 Arduino
PUL-Arduino GND
PUL+Pin 3 Arduino
A-, A+Coil 1 stepper motor
B-, B+Coil 2 stepper motor

Date cuenta que hemos dejado los pines de habilitación (ENA- y ENA+) desconectados. Esto significa que el pin de habilitación siempre está BAJO y el controlador siempre está habilitado.

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

Si no puedes encontrar la hoja de datos de tu motor paso a paso, puede ser difícil averiguar qué color de cable va a dónde. Puedes usar el siguiente truco para determinar cómo conectar motores de paso 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 el otro 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 de pasos a mano y observa lo difícil que es de girar.
  • Ahora escoge un par de cables al azar del motor y toca los extremos desnudos.
  • A continuación, mientras mantienes los extremos unidos, intenta girar el eje del motor de pasos de nuevo.

Si sientes mucha resistencia, has encontrado un par de cables de la misma bobina. Si aún puedes girar el eje libremente, intenta con otro par de cables. Ahora conecta las dos bobinas a los pines que se muestran en el diagrama de cableado anterior. Si aún no está claro puedes encontrar más información en el wiki RepRap.org

Ajustes de micropasos TB6600

Los motores paso a paso suelen tener un tamaño de paso de 1,8° o 200 pasos por revolución, esto se refiere a pasos completos. Un motor de micro-pasos como el TB6600 permite resoluciones más altas al permitir ubicaciones de pasos intermedios. Esto se logra energizando las bobinas con niveles de corriente intermedios.

Por ejemplo, al impulsar un motor en el modo de 1/2 paso, el motor de 200 pasos por revolución dará 400 micropasos por revolución.

Se puede cambiar la configuración de los micropasos del TB6600 encendiendo o apagando los interruptores DIP del conductor. Consulte la tabla siguiente para obtener más detalles. Asegúrate de que el controlador no esté conectado a la corriente cuando ajuste los interruptores DIP.

Ten en cuenta que estos ajustes son para los controladores de micropasos de 1/32 con el chip TB67S109AFTG. Casi todos los controladores TB6600 que se pueden comprar hoy en día utilizan este chip. Normalmente también puedes encontrar una tabla con los ajustes de micropasos en el cuerpo del controlador.

Tabla de Micropasos

S1S2S3Microstep resolution
ONONONNC
ONONOFFPaso Completo
ONOFFON1/2 paso
OFFONON1/2 paso
ONOFFOFF1/4 paso
OFFONOFF1/8 paso
OFFOFFON1/16 paso
OFFOFFOFF1/32 paso

En términos generales, un ajuste de micropasos más pequeño resultará en un funcionamiento más suave y silencioso. Sin embargo, limitará la velocidad máxima que se puede alcanzar al controlar el motor de pasos con un Arduino.

Ajustes de corriente del TB6600

Puedes ajustar la corriente que va al motor cuando está en marcha, poniendo los interruptores DIP S4, S5, y S6 en marcha o apagados. Recomendamos comenzar con un nivel de corriente de 1 A. Si el motor no da pasos o se atasca, siempre puedes aumentar el nivel de corriente más tarde.

Corriente (A)Corriente máximaS4S5S6
0.50.7ONONON
1.01.2ONOFFON
1.51.7ONONOFF
2.02.2ONOFFOFF
2.52.7OFFONON
2.82.9OFFOFFON
3.03.2OFFONOFF
3.54.0OFFOFFOFF

Uso de TB6600 con código de ejemplo de Arduino básico

Con el siguiente código, puedes probar la funcionalidad del motor de pasos. Simplemente deja 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 biblioteca.

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

/* Example sketch to control a stepper motor with TB6600 stepper motor driver and Arduino without a library: continuous rotation. 

// 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 super simple. No se necesita mucho para hacer girar un motor de pasos.

Explicación del código

El código comienza con la definición de los pines de paso (PUL-) y dirección (DIR-). Los conectamos a los pines 3 y 2 de Arduino.

La frase #define se utiliza para dar un nombre a un valor constante. El compilador reemplazará cualquier referencia a esta constante con el valor definido cuando el programa sea compilado. Así que en cualquier lugar que mencione dirPin, el compilador lo reemplazará con el valor 2 cuando el programa sea compilado.

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

En la sección setup() del código, todos los pines de control del motor se declaran como OUTPUT digital con la función pinMode(pin, mode). También configuro el sentido de giro del motor paso a paso, ajustando el pin de dirección en HIGH. Para ello utilizamos 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 sección loop() del código, dejamos que el controlador ejecute un paso enviando un pulso al pin de paso. Como el código en la sección loop se repite continuamente, el motor de paso comenzará a girar a una velocidad fija. En el siguiente ejemplo, verás cómo puedes cambiar la velocidad del motor.

Ejemplo de código para controlar la rotación, la velocidad y la dirección

Este código controla tanto la velocidad, el número de revoluciones y la dirección de giro del motor de pasos.

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

// 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 establecer las conexiones del motor de pasos, también definimos una constante de pasos por revolución. Como pusimos el controlador en modo de micropasos de 1/8, lo puse a 1600 pasos por revolución (para un motor paso a paso estándar de 200 pasos por revolución). Cambia este valor si tu configuración es diferente.

// 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);
  }

Controla la dirección de giro

Para controlar el sentido de giro del motor de paso, ponemos el pin de dirección en ALTO o BAJO. Para ello utilizamos la función digitalWrite(). Dependiendo de cómo hayas conectado el motor de paso, al poner la clavija DIR en alto, el motor girará en CW o en CCW.

Controla el número de pasos o revoluciones

En este código de ejemplo, los bucles de for controlan el número de pasos que el motor de pasos dará. El código dentro del bucle for resulta en 1 (micro)paso del motor de pasos. Debido a que el código en el bucle se ejecuta 1600 veces (stepsPerRevolution), esto resulta en 1 revolución. En los dos últimos bucles, el código dentro del bucle para 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 bucle for por el número de pasos que quieras. for(int i = 0; i < 800; i++) resultaría en 800 pasos o media revolución.

Controla la velocidad

La velocidad del motor de pasos está determinada por la frecuencia de los pulsos que enviamos a la clavija STEP. Cuanto más alta es la frecuencia, más rápido funciona el motor. Puedes controlar la frecuencia de los pulsos cambiando delayMicroseconds() en el código. Cuanto más corto el retraso, más alta la frecuencia, más rápido funciona el motor.

Instalando la biblioteca AccelStepper

La biblioteca AccelStepper escrita por Mike McCauley es una biblioteca impresionante para usar en tu proyecto. Una de sus ventajas es que soporta la aceleración y la desaceleración, pero también tiene muchas otras buenas funciones.

Puede descargar la última versión de esta biblioteca aquí.

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

Otra opción es ir a Herramientas > Gestionar Bibliotecas… o escribir Ctrl + Shift + I en Windows. El Administrador de Bibliotecas abrirá y actualizará la lista de bibliotecas instaladas.

instalar libreria accelerate - Tutorial del TB6600 , Driver de motor paso a paso con Arduino
Puedes buscar “accelstepper” y buscar la biblioteca de Mike McCauley. Selecciona la última versión y haz clic en Instalar.
instalar libreria accelerate con Arduino IDE - Tutorial del TB6600 , Driver de motor paso a paso con Arduino

Código de ejemplo con AccelStepper

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

Obsérva que seguimos utilizando el motor en modo de micropasos de 1/8. Si estás usando un ajuste diferente, juega con los ajustes de velocidad y aceleración.

/* Example sketch to control a stepper motor with TB6600 stepper motor driver, AccelStepper library and Arduino: acceleration and deceleration. More info: https://descubrearduino.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 biblioteca con #include <AccelStepper.h>.

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

El siguiente paso es definir las conexiones TB6600 a Arduino y el tipo de interfaz del motor. El tipo de interfaz del motor debe estar configurado en 1 cuando se utiliza un controlador de paso y dirección. Puedes encontrar los otros tipos de interfaz aquí.

// 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

A continuación, hay que crear una nueva instancia de la clase AccelStepper con el tipo de interfaz de motor y las conexiones apropiadas.

En este caso, llamamos al motor paso a paso “stepper” pero también 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 establecer 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 ello utilizamos la función setMaxSpeed() y setAcceleration().

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

En la sección de bucle del código, dejamos que el motor gire un número predefinido de pasos. La función stepper.moveTo() se utiliza para establecer la posición del objetivo (en pasos). La función stepper.runToPostion() mueve el motor (con aceleración/desaceleración) a la posición objetivo y lo bloquea hasta que se encuentre en la posición objetivo. Debido a que esta función bloquea, no deberías usarla cuando necesites 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 de la biblioteca de AccelStepper, echa un vistazo a nuestro tutorial para el conductor del motor paso a paso A4988:

En este artículo, te hemos mostrado cómo controlar un motor de pasos con el motor de pasos TB6600 y Arduino. Esperamos que lo hayas encontrado útil e informativo. Si es así, por favor, compártelo con un amigo al que también le gusta la electrónica y hacer cosas con Arduino.

Última actualización el 2020-07-05 / Enlaces de afiliados / Imágenes de la API para Afiliados

Pin It on Pinterest

Shares