Control de motores a pasos con TB6600 y Arduino
Publicado por Victor Arrieta en
Los motores paso a paso son un conjunto consistente de una caja reductora y un motor DC con una distribución especial en sus bobinas. Esta distribución especial permite moverlos secuencialmente a medida que activamos y desactivamos cada bobina de una forma específica. Cada modelo de motor paso a paso requiere una cantidad específica de pasos para dar una vuelta completa, la cantidad puedes encontrarla en el datasheet del motor. Cabe destacar también que, a diferencia de los servomotores, un motor paso a paso no tiene un sistema de retroalimentación para su posición, de esta forma, si por ejemplo una fuerza externa lo mueve del de su set point, éste no será capaz de volver a tal posición.
Por otro lado, a la hora de conectar un motor paso a paso debemos identificar primero el tipo de motor, sea unipolar (más de 4 cables) o bipolar (4 cables). Una vez identifiques el tipo de motor, debes identificar las conexiones de las bobinas, esto puedes hacerlo con un multímetro, este proceso consiste simplemente en medir continuidad.
Finalmente, para mover un motor paso a paso, como ya se dijo, es necesario activar sus bobinas en una secuencia específica, por lo tanto se hace necesario programar en un microcontrolador la secuencia de pasos requerida. Sin embargo, existe una forma de simplificar esto, por medio del TB6600. Este es un circuito electrónico que es capaz de proveer la secuencia de pasos que necesita el motor dándole nosotros sólo 2 señales básicamente, la primera es una señal digital que indique la dirección del movimiento (izquierda o derecha, alto o bajo) y la segunda, un flanco de subida cada vez que deseemos que el motor de un paso.
Una vez identifiquemos el tipo de motor, debemos conectarlo al TB6600. Para este fin, a continuación listamos las conexiones más importantes del Easydriver por grupo.
Para conectar a nuestro microcontrolador tenemos:
+5V = Referencia de voltaje
CLK = Señal de avance, debemos enviar aquí un flanco de subida cada vez que queremos que el motor avance un paso.
CW = Señal de dirección, debemos poner aquí un alto o un bajo según si queremos que el motor avance en una dirección o otra.
EN = Señal para habilitar y deshabilitar el movimiento del motor, puede dejarse sin conectar
Para conectar a la fuente para el motor tenemos:
+32V = Positivo de la fuente, de 8 a 42 VDC
GND = Referencia negativa de la fuente
Para conectar a nuestro motor tenemos 4 conexiones, 2 marcadas como A y 2 marcadas como B, aquí debes conectar los extremos de las bobinas según se ha identificado previamente. Si es un motor bipolar, esta conexión es bastante obvia, sin embargo, si es un motor unipolar, deberás identificar cuales son los extremos de las bobinas (serán los cables con mayor resistencia entre sí) y dejar los demás cables sin conectar (sólo conectas 4).
También debes tener en cuenta el potenciómetro del TB6600, debes ubicar éste para que sea capaz de suplir toda la corriente que necesita tu motor paso a paso, el TB6600 es capaz de suplir hasta 4 A por fase. Por último, debes revisar los switches de modo paso, hay 4 sobre la placa, pero en realidad sólo el 1, el 2 y el 3 tienen conexión. A continuación te mostramos los modos de operación según la posición de estos switches:
M1 | M2 | M3 | Modo seleccionado |
OFF | OFF | OFF | STAND BY |
OFF | OFF | ON | FULL STEP |
OFF | ON | OFF | 1/2 STEP A |
OFF | ON | ON | 1/2 STEP B |
ON | OFF | OFF | 1/4 STEP |
ON | OFF | ON | 1/8 STEP |
ON | ON | OFF | 1/16 STEP |
ON | ON | ON | STAND BY |
Ejemplo de operación de motor paso a paso con TB6600
Al realizar el siguiente montaje y subir el código a tu Arduino, observarás al motor moverse en una dirección y luego en otra. Si el motor es de 200 o menos pasos por unidad, dará una vuelta completa teniendo al driver en modo FULLSTEP.
Empezamos mostrando un esquema de conexión con Arduino UNO:
Código Arduino
int Dir = 13; // definimos el pin de dirección CW
int Step = 12; // definimos el pin de comando de pasos CLK
boolean state = true;
void setup() {
pinMode(Step,OUTPUT); // seleccionamos ambos pines como salidas
pinMode(Dir,OUTPUT);
digitalWrite(Step, LOW); // escribimos valores iniciales
digitalWrite(Dir, LOW);
}
void loop() {
state = !state; // luego de cada ciclo, cambiamos el estado para cambiar la dirección
digitalWrite(Dir,state);
for (int i = 0; i < 200 ; i++) // en este ciclo damos 200 pasos
{
digitalWrite(Step, HIGH);
delay(10);
digitalWrite(Step, LOW);
delay(10);
}
}
FIN DE POST
FIN DE POST