Controlando motores de paso utilizando Arduino y C++ para proyectos de robótica

Controlando motores de paso utilizando Arduino y C++ para proyectos de robótica

En los últimos años, el campo de la robótica ha experimentado un crecimiento significativo, impulsado por la combinación de avances tecnológicos y la disponibilidad de herramientas de prototipado a un costo accesible. En este contexto, los motores de paso se han destacado como componentes fundamentales para el control preciso del movimiento, estando presentes en proyectos como impresoras 3D, máquinas CNC, brazos robóticos y mucho más. A lo largo de este artículo, vamos a discutir sobre los diferentes motores, drivers y cómo hacer la programación utilizando la placa Arduino y el lenguaje C++.

¿Qué son los motores de paso y cómo funcionan?

Los motores de paso son dispositivos electromecánicos que convierten pulsos eléctricos discretos en movimientos mecánicos precisos. A diferencia de otros tipos de motores, como los de corriente continua (DC) o alterna (AC), los motores de paso no requieren retroalimentación continua para controlar su posición. En su lugar, avanzan una cantidad fija de pasos en respuesta a cada pulso eléctrico recibido, permitiendo un control altamente preciso de la posición angular del motor.

Están compuestos básicamente por un rotor y bobinas electromagnéticas generalmente dispuestas en pares en el estator, dentro del motor. Cuando una corriente eléctrica fluye por las bobinas, se genera un campo magnético que interactúa con imanes permanentes o dientes polares, dependiendo del diseño del motor. Este arreglo crea fuerzas de atracción y repulsión que hacen que el rotor (o eje) del motor gire. En el ejemplo de la imagen anterior, tenemos la representación más simple que es un eje con dos polos y cuatro bobinas conectadas en pares, donde a cada paso (que es el movimiento incremental del eje de una posición a otra) gira 90 grados. Esta precisión puede mejorarse aumentando la cantidad de bobinas y polos en el rotor.

Tipos de motores de paso

Existen tres tipos principales de motores de paso: los unipolares, bipolares y los híbridos. Los motores de paso unipolares tienen dos bobinas en cada fase (que es el conjunto de bobinas responsable de un segmento específico del movimiento del motor) y una de ellas es común a ambas fases. Este motor es relativamente simple de controlar ya que cada bobina puede ser accionada por separado. Los bipolares tienen dos bobinas separadas en cada fase, no compartiendo una central como en los unipolares. Esto hace que su control sea más complejo, requiriendo el uso de drivers. Los híbridos combinan aspectos de ambos, tienen más de dos bobinas por fase, lo que permite operarlos tanto como unipolares o bipolares.

Los unipolares son adecuados para aplicaciones que no requieren altos torques y velocidades, los bipolares generalmente ofrecen más torque y eficiencia siendo adecuados para aplicaciones que necesitan mejor rendimiento, mientras que los híbridos ofrecen una mayor versatilidad. Los motores pueden tener 4, 5, 6 u 8 cables. El de 5 cables es unipolar, los otros son bipolares y puedes identificar qué cable pertenece a qué bobina midiendo la resistencia entre dos cables, si no hay resistencia, significa que el circuito está abierto y no forman parte de la misma bobina; de lo contrario, pertenecen a la misma bobina.

¿Qué son los drivers y cómo usarlos?

Simplemente conectar los motores a una fuente de energía no hará que giren continuamente, siendo necesario enviar pulsos eléctricos a las fases en orden. Por esta razón necesitamos drivers para controlar los motores de paso. Existen diferentes tipos y tamaños de drivers que corresponden a diferentes tipos y tamaños de motores. Los más populares son el A4988, el DRV8825 y TMC2208, que se utilizan para controlar motores como el nema 17, que están presentes en la mayoría de las impresoras 3D y máquinas CNC de entrada.

Estos drivers también se llaman puente H, esta nomenclatura está relacionada con su funcionamiento que permite invertir la dirección de rotación del motor. Para hacer esta inversión, solo es necesario invertir la polaridad del motor, es decir, cambiar el positivo por el negativo. Un puente H está compuesto por 4 interruptores, que se abren en lados opuestos para dejar que la corriente fluya a través del motor. Para cambiar la dirección, basta con cerrar los interruptores abiertos y abrir los que están cerrados, como se demuestra en la ilustración a continuación:

Otra función de los drivers es regular la tensión que llega al motor. A diferencia de otros componentes electrónicos como LEDs o sensores que podemos conectar directamente a los microcontroladores como el Arduino, los motores necesitan una fuente de energía externa, como baterías o fuentes que convierten la energía de la toma de corriente en forma de corriente alterna (AC) a corriente continua (DC).

Motores de paso comunes como el nema 17 tienen 50 puntos de parada (o pasos) en el rotor y el estator puede tener varias bobinas organizadas en 2 fases, lo que resulta en 4 diferentes campos magnéticos. Multiplicando los 50 pasos por los 4 campos obtenemos un total de 200 pasos por rotación. Sabiendo que una rotación completa tiene 360°, dividiendo por el número de pasos llegamos al resultado de 1.8° por paso. Esta es la precisión que el motor puede alcanzar por sí solo. Sin embargo, es posible lograr una precisión aún mayor a través de los drivers, ya que tienen una función llamada micropasos, donde las bobinas son energizadas en niveles de corriente intermedios. Entonces seleccionando, por ejemplo, el modo 1/16 para un motor que tiene 200 pasos, obtenemos un total de 3200 pasos por rotación, o 0.1125° por paso.

Programando un motor de paso utilizando el Arduino Mega

La programación de cómo los motores de paso van a actuar se realiza utilizando microcontroladores. En la imagen de abajo puedes visualizar cómo se hacen las conexiones del motor con el driver (L293D) y del driver con el Arduino Mega. Esta imagen fue hecha en el software de simulación de circuitos eléctricos Proteus:

Este driver utilizado tiene como función convertir la señal digital que viene del Arduino en movimiento para el motor. Cada driver tiene sus particularidades y ajustes que deben hacerse siguiendo la hoja de datos (que puedes encontrar en línea buscando el nombre del componente seguido de la palabra "datasheet"), pero el principio de funcionamiento es el mismo. Necesitan recibir energía de una fuente externa, que generalmente es de 12 voltios, para controlar el motor. Entonces, se necesitan 2 pines en el driver para la fuente, uno es el positivo (VCC) y el otro el negativo (GND). Para que el driver funcione, puede ser necesario conectar el GND y el 5V del Arduino en él, entonces son 2 pines de conexión adicionales (algunos drivers pueden utilizar parte de la energía de la fuente para su propio funcionamiento, no siendo necesarias estas conexiones).

Otros 4 pines del driver serán destinados a la conexión con el motor (2 pines para cada fase), y el resto de las conexiones serán lógicas, es decir, determinarán cómo se comporta el driver. En la imagen, los pines del driver nombrados como OUT1, OUT2, OUT3 y OUT4 son las conexiones con el motor. El VSS y VS son las entradas de los 12 voltios, EN1 y EN2 son responsables de activar o no el puente H. Si están en 5V estarán encendidos, si están en 0 estarán apagados. Finalmente, los terminales IN1, IN2, IN3 e IN4 controlarán el motor, se conectaron en los puertos 8, 9, 10 y 11 del Arduino, respectivamente.

El driver A4988, por ejemplo, tiene los pines MS1, MS2 y MS3 que sirven para configurar los micropasos para aumentar o disminuir la precisión del movimiento del motor. Por defecto, vienen apagados, lo que significa que el motor operará en modo full step, es decir, con la cantidad de pasos para los que fue diseñado, pero conectando estos terminales en puertos lógicos del Arduino, puedes activarlos para definir los micropasos.

El código en sí es bastante simple, ya que además de los drivers que ayudan en la parte de hardware, existen diversas bibliotecas disponibles en línea que facilitan la parte del software. El ejemplo a continuación fue el que utilicé para controlar el motor, fue escrito en C++ en el IDE de Arduino:

#include <Stepper.h>
const int spr=4;
Stepper steper (spr,8,9,10,11);
void setup() {
  steper.setSpeed(40);
  Serial.begin (9600);
}
void loop() {
  steper.step(-60);
  delay (100);
  steper.step(-40);
  delay (100);
}

Básicamente, se importa la biblioteca Stepper que va a abstraer la secuencia de señales digitales que serán enviadas del Arduino al driver, luego se define en una variable la cantidad de pasos por revolución. Entonces, se crea una instancia de la clase Stepper pasando la cantidad de pasos y los pines digitales que están conectados al driver en secuencia. En la función setup se configura la velocidad del motor con la función setSpeed y en el loop se realiza el movimiento con la función step de la clase Stepper. Si los valores son positivos, el motor girará en sentido horario y si son negativos, girará en sentido antihorario. El delay es necesario entre cada comando, ya que es el tiempo para que el motor llegue a la posición deseada.

Conclusión

Utilizando drivers conectados a microcontroladores podemos fácilmente controlar motores con alta precisión, que junto con impresoras 3D pueden ser utilizados para construir robots que automaticen tareas en el mundo físico. En este artículo, discutimos los aspectos generales de la utilización de motores de paso, sus tipos y también los programamos utilizando el Arduino. Para conectar múltiples motores al microcontrolador, basta con conectar otro driver al motor y conectar el driver a otros puertos lógicos del Arduino.

Conforme seguimos presenciando el continuo avance de la tecnología, los motores de paso continuarán desempeñando un papel crucial en el impulso de la robótica y la automatización. Con este conocimiento, ya puedes empezar a explorar la utilización de diferentes microcontroladores o incluso microprocesadores para controlar los motores. Dependiendo de lo que los motores vayan a mover y de los algoritmos que utilices para complementar el sistema, tecnologías muy interesantes e innovadoras pueden surgir en este proceso.

Por ejemplo, controlar una cámara que utiliza algoritmos de machine learning y visión computacional para detectar un determinado objeto y, a partir de esta detección, un brazo robótico puede ser utilizado para mover el objeto a diferentes cintas transportadoras, donde interactuará con otros brazos robóticos que manipularán el objeto de diferentes maneras, formando una especie de línea de producción. Las posibilidades del uso de la tecnología son innumerables y al explorar estas posibilidades, abrimos camino hacia un futuro donde la robótica avanzada se volverá cada vez más accesible, creativa y capaz de transformar nuestra forma de interactuar con el mundo a nuestro alrededor.

💡
Las opiniones y comentarios emitidos en este artículo son propiedad única de su autor y no necesariamente representan el punto de vista de Listopro.

Listopro Community da la bienvenida a todas las razas, etnias, nacionalidades, credos, géneros, orientaciones, puntos de vista e ideologías, siempre y cuando promuevan la diversidad, la equidad, la inclusión y el crecimiento profesional de los profesionales en tecnología.