Motor paso a paso: integración con Arduino

Motor paso a paso

Los motores eléctricos son cada vez más demandados, de entre ellos quizás destacan los que funcionan con corriente continua, de los más populares dentro de los proyectos de los makers con Arduino, ya que aportan movilidad. Entre ellos, destacar los motores paso a paso que se usan para múltiples aplicaciones, especialmente para la robótica, como actuadores, etc.

Coches eléctricos, pequeños robots autónomos, aplicaciones industriales para la automatización, aparatos de repetición de movimientos, etc. El motivo de que los servomotores y motores paso a paso sean tan buenos para estas aplicaciones es que pueden realizar movimientos lentos o rápidos, pero sobre todo controlados. Además, los accionamientos son continuos para aplicaciones en las que se requieren muchas paradas y arranques con mucha precisión.

Tipos de motores eléctricos

Dentro de los motores eléctricos se pueden destacar los siguientes tipos:

  • Motor DC o CC: los motores de corriente continua funcionan con este tipo de corriente, como su propio nombre indica. Pueden ir desde unos mW de potencia hasta algunos MW en los más potentes y grandes, que se usan para aplicaciones industriales, vehículos, ascensores, cintas transportadoras, ventiladores, etc. Se puede regular su velocidad de giro (RPM) y par de fuerza aplicada según los alimentes.
  • Motor AC o CA (asincrono y de rotor bobinado): funcionan con corriente alterna, con un rotor muy específico que funciona gracias a las fases que aporta este tipo de corriente para generar el giro mediante repulsión magnética del electroimán de forma similar a como lo hacen los de CC. Son muy baratos y llegan hasta varios kW. Se pueden regular en velocidad de giro, pero los elementos de regulación son más caros que los de CC. Estos se suelen usar para electrodomésticos.
  • Motor paso a paso: también conocidos como steppers, son similares en muchos sentidos a los de CC, pero con velocidades de giro y potencias bajas. Aquí lo que destaca es el posicionamiento del eje, es decir, la precisión para ponerlos en una posición concreta. Se puede controlar mucho su ángulo de giro y velocidad, por lo que se solían usar en disqueteras, en discos duros (HDD), robots, automatización de procesos, etc.
  • Servomotor: se puede decir que es una evolución del motor paso a paso, trabajando con pequeñas potencias y velocidades que van hasta los 7000 RPM en algunos casos. Este motor incorpora una caja reductora de engranajes y un circuito de control. Tienen la misma precisión para colocarse en una posición como los paso a paso y son muy estables en cuando al par de fuerza aplicados, lo que los hace ideales para algunos robots y aplicaciones industriales.

Motores paso a paso y servomotores

rotor y estator

Ya sabes qué son estos dos tipos de motor electrónico, pero me gustaría decir algo más sobre los steppers. El giro que realizan no lo hacen de forma continua, sino en pequeños pasos, de ahí su nombre. El rotor (parte que gira), tiene forma de rueda dentada, mientras que el estator (parte que no gira) se compone de electroimanes polarizados de forma intercalada. De esa forma, cuando uno se “activa” los de sus lados no lo están, lo que atrae al diente del rotor hacia él, permitiendo el avance preciso por el que se caracterizan.

Artículo relacionado:
DRV8825: el driver para motores paso a paso

Dependiendo de los dientes del rotor, se podrá avanzar más o menos en el giro. Si tienes más dientes, más pasos se necesitan para completar una vuelta, pero los pasos serán más cortos, por lo que será un motor más preciso. Si tienes pocos dientes, los pasos serán saltos más bruscos, sin tanta precisión. Por tanto, los pasos que tendrá que dar un motor paso a paso para completar una vuelta, dependerá de los pasos angulares.

Esos pasos angulares están estandarizados, aunque puedes encontrar algunos motores que tienen paso no estándar. Los ángulos suelen ser: 1.8º, 5.625º, 7.5º, 11.25º, 18º, 45º, y 90º. Para calcular cuántos pasos necesita un motor paso a paso para completar un giro completo o vuelta (360º), solo tienes que dividir. Por ejemplo, si tienes un motor paso a paso de 45º, tendrías 8 pasos (360/45=8).

giro con polarización (fase)

Dentro de estos motores tienes los unipolares (más populares), con 5 o 6 cables, o los bipolares, con 4 cables. Según esto, se realizarán unas u otras secuencias de polarizacion haciendo pasar corriente por sus bobinas:

  • Polarización para los bipolares:
Paso Terminal A Terminal B Terminal C Terminal D
1 +V -V +V -V
2 +V -V -V +V
3 -V +V -V +V
4 -V +V +V -V
  • Para los unipolares:
Paso Bobina A Bobina B Bobina C Bobina D
1 +V +V 0 0
2 0 +V +V 0
3 0 0 +V +V
4 +V 0 0 +V

El funcionamiento en ambos casos es igual, ir polarizando las bobinas para ir atrayendo al rotor a donde quieres que se posicione el eje. Si quieres mantenerlo en una posición, deberás mantener la polarización para dicha posición y listo. Y si quieres que avance, polarizas al siguiente imán y dará otro paso, y así sucesivamente…

Si usas un servomotor, ya sabes que básicamente es un motor paso a paso, por lo tanto, todo lo dicho funciona también para ellos. Lo único que incluye esos engranajes reductores para obtener muchos más pasos por giro y así tener una precisión mucho mayor. Por ejemplo, puedes encontrar un motor de 8 pasos por giro que si tuviera una reductora de 1:64, pues quiere decir que cada paso de esos ocho se subdivide en 64 pasos más pequeños, lo que daría un máximo de 512 pasos por vuelta. Es decir, cada paso sería de unos 0.7º.

Artículo relacionado:
L298N: módulo para controlar motores para Arduino

Agregar también que deberías usar algún controlador con el que controlar la polarización, velocidad, etc., con, por ejemplo, H-Bridge. Algunos modelos son los L293, ULN2003, ULQ2003, etc.

Dónde comprar

Puedes comprarlo en varios sitios online o en tiendas de electrónica especializadas. Además, si eres principiante, puedes usar kits en los que se incluye todo lo necesario e incluso la placa Arduino UNO y manual para comenzar a experimentar y crear tus proyectos. En esos kits se incluye todo lo necesario, desde el propio motor, los controladores, placas, protoboard, etc.

Ejemplo de motor paso a paso con Arduino

Arduino con motor paso a paso y controlador

Para terminar, mostrar un ejemplo práctico con Arduino, usando un controlador ULN2003 y un motor paso a paso 28BYJ-48. Es muy sencillo, pero será suficiente para que comiences a familiarizarte con el funcionamiento para que comiences a hacer algunas pruebas y ver cómo se comporta…

Como se aprecia en el esquema de conexionado, las bobinas A (IN1), B (IN2), C (IN3) y D (IN4) del motor se han asignado a las conexiones 8, 9, 10, y 11 respectivamente de la placa Arduino. Por otro lado, la placa del driver o controlador la debes alimentar en sus pines de 5-12V (al GND y 5V de Arduino) con el voltaje adecuado para que ésta a su vez alimente al motor conectado en el conector de plástico blanco que tiene este driver o controlador.

Este motor 28BYJ-48 es un motor paso a paso de tipo unipolar con cuatro bobinas. Por tanto, para que te hagas una idea de cómo trabaja, puedes enviar desde la placa Arduino valores HIGH (1) o LOW (0) a las bobinas de la siguiente manera para los pasos:

Paso Bobina A Bobina B Bobina C Bobina D
1 HIGH HIGH LOW LOW
2 LOW HIGH HIGH LOW
3 LOW LOW HIGH HIGH
4 HIGH LOW LOW HIGH

En cuanto al sketch o código necesario para programar su movimiento, pues sería el siguiente usando Arduino IDE (modifícalo y experimenta para probar cómo se altera el movimiento):


// Definir pines conectados a las bobinas del driver
#define IN1  8
#define IN2  9
#define IN3  10
#define IN4  11

// Secuencia de pasos a par máximo del motor. Realmente es una matriz que representa la tabla del unipolar que he mostrado antes
int paso [4][4] =
{
  {1, 1, 0, 0},
  {0, 1, 1, 0},
  {0, 0, 1, 1},
  {1, 0, 0, 1}
};

void setup()
{
  // Todos los pines se configuran como salida, ya que el motor no enviará señal a Arduino
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
}

// Bucle para hacerlo girar
void loop()
{ 
    for (int i = 0; i < 4; i++)
    {
      digitalWrite(IN1, paso[i][0]);
      digitalWrite(IN2, paso[i][1]);
      digitalWrite(IN3, paso[i][2]);
      digitalWrite(IN4, paso[i][3]);
      delay(10);
    }
}

Sé el primero en comentar

Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.