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.

drv8825
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º.

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


Comienza la conversación

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.