Arduino - Controla el motor paso a paso 28BYJ-48 utilizando el controlador ULN2003

En este tutorial, vamos a aprender:

Motor paso a paso 28BYJ-48 ULN2003 para Arduino

Los motores paso a paso son excelentes motores para el control de posición. Los motores paso a paso dividen una revolución completa en un número de pasos iguales. Se utilizan en muchos dispositivos, como una impresora, una impresora 3D, máquinas CNC y en la automatización industrial.

Una de las formas más económicas de aprender sobre motores paso a paso es usar motores paso a paso 28BYJ-48. Por lo general, vienen con una placa de controlador basada en ULN2003, lo que los hace muy fáciles de usar.

Acerca del motor paso a paso 28BYJ-48

Según la hoja de datos, cuando el motor 28BYJ-48 funciona en modo de paso completo, cada paso corresponde a una rotación de 11,25°. Eso significa que hay 32 pasos por revolución (360°/11,25° = 32).

Además, el motor tiene un conjunto de engranajes de reducción de 1/64. Lo que significa que en realidad tiene 32 × 64 = 2048 pasos. Cada paso equivale a 360°/2048 = 0,1758°.

Conclusión: si el motor realiza 2048 pasos (en modo de paso completo), el motor da una revolución

Distribución de pines

El motor paso a paso 28BYJ-48 incluye 5 pines. No necesitamos preocuparnos por los detalles de estos pines. Solo necesitamos conectarlo al conector del controlador ULN2003.

motor paso a paso 28BYJ-48

Acerca del Módulo Controlador de Motor Paso a Paso ULN2003

El ULN2003 es uno de los módulos de control de motor más comunes para motores paso a paso.

  • El módulo tiene cuatro LEDs que muestran la actividad de cuatro líneas de entrada de control (para indicar el estado de paso). Proporcionan un efecto impresionante al avanzar en pasos.
  • El módulo también viene con un jumper de encendido/apagado para aislar la alimentación del motor paso a paso.

Disposición de pines de ULN2003

Diagrama de pines del controlador de motor paso a paso ULN2003

El módulo ULN2003 incluye 6 pines y un conector hembra:

  • Pin IN1: se utiliza para accionar el motor. Conéctalo a un pin de salida en Arduino.
  • Pin IN2: se utiliza para accionar el motor. Conéctalo a un pin de salida en Arduino.
  • Pin IN3: se utiliza para accionar el motor. Conéctalo a un pin de salida en Arduino.
  • Pin IN4: se utiliza para accionar el motor. Conéctalo a un pin de salida en Arduino.
  • Pin GND: es un pin de tierra común. DEBE conectarse a ambos GND del Arduino y de la fuente de alimentación externa.
  • Pin VDD: suministra energía para el motor. Conéctalo a la fuente de alimentación externa.
  • Conector del motor: aquí es donde se conecta el motor.

※ Nota:

  • El voltaje de la fuente de alimentación externa debe ser igual al voltaje del motor paso a paso. Por ejemplo, si un motor paso a paso funciona con 12 V de corriente continua, debemos usar una fuente de 12 V. En el caso del motor paso a paso 28BYJ-48, que funciona con 5 V de corriente continua, usaremos una fuente de 5 V.
  • Incluso si un motor paso a paso requiere una fuente de 5 V, por favor no conecte el pin VDD al pin de 5 V del Arduino. En su lugar, conéctelo a una fuente de 5 V externa. Eso se debe a que el motor paso a paso consume demasiada potencia.

Diagrama de Cableado

Diagrama de cableado de Arduino para motor paso a paso con el controlador ULN2003

This image is created using Fritzing. Click to enlarge image

Por favor, tenga en cuenta que no es necesario preocuparse por el color de los cables del motor paso a paso. Solo necesitamos conectar el conector macho (del motor paso a paso 28BYJ-48) al conector hembra (del controlador ULN2003).

Cómo programar para controlar un motor paso a paso

Hay tres métodos para controlar un motor paso a paso:

  • Paso completo
  • Medio paso
  • Micro-paso

Para aplicaciones simples, podemos usar el método de paso completo. Los detalles de los tres métodos se presentarán en la última parte de este tutorial. La programación de estos métodos es complicada. Afortunadamente, existen muchas bibliotecas que lo hacen por nosotros. Solo necesitamos usar una biblioteca.

El IDE de Arduino tiene una biblioteca integrada Stepper. Sin embargo, no recomendamos usar esta biblioteca porque:

  • La biblioteca es bloqueante. Significa que bloquea a Arduino para que no pueda realizar otras tareas mientras controla el motor paso a paso.
  • No dispone de suficientes funciones.

En su lugar, recomendamos usar la biblioteca AccelStepper. Esta biblioteca admite:

  • Aceleración
  • Desaceleración.
  • Conducción en paso completo y medio paso.
  • Múltiples motores paso a paso simultáneos, con avance concurrente independiente en cada motor paso a paso.
  • Desventaja: NO admite conducción por micropasos

Código de Arduino

/* * Este código de Arduino fue desarrollado por es.newbiely.com * Este código de Arduino se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino/arduino-controls-28byj-48-stepper-motor-using-uln2003-driver */ // Include the AccelStepper Library #include <AccelStepper.h> // define step constant #define FULLSTEP 4 #define STEP_PER_REVOLUTION 2048 // this value is from datasheet // Pins entered in sequence IN1-IN3-IN2-IN4 for proper step sequence AccelStepper stepper(FULLSTEP, 11, 9, 10, 8); void setup() { Serial.begin(9600); stepper.setMaxSpeed(1000.0); // set the maximum speed stepper.setAcceleration(50.0); // set acceleration stepper.setSpeed(200); // set initial speed stepper.setCurrentPosition(0); // set position stepper.moveTo(STEP_PER_REVOLUTION); // set target position: 64 steps <=> one revolution } void loop() { // change direction once the motor reaches target position if (stepper.distanceToGo() == 0) stepper.moveTo(-stepper.currentPosition()); stepper.run(); // MUST be called in loop() function Serial.print(F("Current Position: ")); Serial.println(stepper.currentPosition()); }

Pasos R\u00e1pidos

  • Navega hasta el icono Bibliotecas en la barra izquierda del IDE de Arduino.
  • Busca “AccelStepper”, luego localiza la biblioteca AccelStepper de Mike McCauley
  • Haz clic en el botón Instalar para instalar la biblioteca AccelStepper.
Biblioteca AccelStepper de Arduino
  • Copie el código anterior y ábralo con Arduino IDE
  • Haga clic en el botón Subir en Arduino IDE para cargar el código en Arduino
  • Observe que el motor está girando. Debería:
    • Gire una revolución en sentido horario, y luego
    • Gire dos revoluciones en sentido antihorario, y luego
    • Gire dos revoluciones en sentido horario.

    Ese proceso se repite infinitamente.

    • Ver el resultado en el Monitor Serial
    COM6
    Send
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

Cómo controlar varios motores paso a paso 28BYJ-48

Vamos a aprender a controlar dos motores paso a paso de forma independiente al mismo tiempo.

Esquema de cableado para dos motores paso a paso 28BYJ-48

Diagrama de cableado de Arduino para dos motores paso a paso con el controlador ULN2003

This image is created using Fritzing. Click to enlarge image

Código de Arduino para dos motores paso a paso 28BYJ-48

/* * Este código de Arduino fue desarrollado por es.newbiely.com * Este código de Arduino se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino/arduino-controls-28byj-48-stepper-motor-using-uln2003-driver */ // Include the AccelStepper Library #include <AccelStepper.h> // define step constant #define FULLSTEP 4 #define STEP_PER_REVOLUTION 2048 // this value is from datasheet // Pins entered in sequence IN1-IN3-IN2-IN4 for proper step sequence AccelStepper stepper_1(FULLSTEP, 11, 9, 10, 8); AccelStepper stepper_2(FULLSTEP, 7, 5, 6, 4); void setup() { Serial.begin(9600); stepper_1.setMaxSpeed(1000.0); // set the maximum speed stepper_1.setAcceleration(50.0); // set acceleration stepper_1.setSpeed(200); // set initial speed stepper_1.setCurrentPosition(0); // set position stepper_1.moveTo(STEP_PER_REVOLUTION); // set target position: 64 steps <=> one revolution stepper_2.setMaxSpeed(1000.0); // set the maximum speed stepper_2.setAcceleration(50.0); // set acceleration stepper_2.setSpeed(200); // set initial speed stepper_2.setCurrentPosition(0); // set position stepper_2.moveTo(STEP_PER_REVOLUTION); // set target position: 64 steps <=> one revolution } void loop() { // change direction once the motor reaches target position if (stepper_1.distanceToGo() == 0) stepper_1.moveTo(-stepper_1.currentPosition()); if (stepper_2.distanceToGo() == 0) stepper_2.moveTo(-stepper_2.currentPosition()); stepper_1.run(); // MUST be called in loop() function stepper_2.run(); // MUST be called in loop() function Serial.print(F("stepper_1# current position: ")); Serial.println(stepper_1.currentPosition()); Serial.print(F("stepper_2# current position: ")); Serial.println(stepper_2.currentPosition()); }

Conocimientos Adicionales

1. El motor paso a paso vibra mientras se mueve

No te preocupes si el motor paso a paso vibra mientras se mueve. Esta es una característica del motor paso a paso. Podemos reducir la vibración utilizando el método de control por micropasos.

Además, debido a esta característica, si lo controlamos correctamente, el motor paso a paso puede producir sonidos musicales como si fuera un instrumento musical. Puedes ver este proyecto en Arduino Project Hub.

2. Método de control de motores paso a paso

  • Paso completo: La unidad de movimiento es un paso, que equivale a un valor en grados especificado en la hoja de datos o en el manual del motor paso a paso.
  • Medio paso: Divide cada paso completo en dos pasos más pequeños. La unidad de movimiento es la mitad del paso completo. Este método permite que el motor se mueva con una resolución doble.
  • Micropaso: Divide cada paso completo en muchos pasos más pequeños. La unidad de movimiento es una fracción del paso completo. La fracción puede ser 1/4, 1/8, 1/16, 1/32 o incluso más. Este método permite al motor moverse con una mayor resolución. También hace que el movimiento del motor sea más suave a bajas velocidades. Cuanto mayor sea el denominador, mayor resolución y un movimiento más suave.

Por ejemplo, si la hoja de datos del motor especifica 1,8 grados por paso:

  • Paso completo: El motor puede moverse con 1.8 grados por paso <⇒ 200 pasos por revolución
  • Medio paso: El motor puede moverse con 0.9 grados por paso <⇒ 400 pasos por revolución
  • Micropaso: El motor puede moverse con 0.45, 0.225, 0.1125, 0.05625 grados por paso <⇒ 800, 1600, 3200, 6400... pasos por revolución

El código anterior utilizó el método de control de pasos completos.

3. Problema de resonancia

Estos son los usos avanzados. Los principiantes NO necesitan prestar atención a ello. Esto ocurre en un rango de velocidad, en el cual la tasa de pasos es igual a la frecuencia natural del motor. Puede haber un cambio audible en el ruido que emite el motor, así como un aumento en la vibración. En aplicaciones reales, el desarrollador DEBE prestar atención a este problema.

Video Tutorial

Estamos considerando crear tutoriales en video. Si considera que los tutoriales en video son importantes, suscríbase a nuestro canal de YouTube para motivarnos a crear los videos.

WARNING

Tenga en cuenta que este tutorial está incompleto. Publicaremos en nuestra página de Facebook cuando el tutorial esté completo. Déle like para mantenerse actualizado.

※ NUESTROS MENSAJES

  • No dude en compartir el enlace de este tutorial. Sin embargo, por favor no use nuestro contenido en otros sitios web. Hemos invertido mucho esfuerzo y tiempo en crear el contenido, ¡por favor respete nuestro trabajo!