TUTORIAL MOTOR DE PASOS 28BYJ-48

Paso #1 Descripción

Este motor es un motor de pasos del tipo bipolar, útil para aplicaciones que requieran de precisión y alta repetitividad.  El motor además cuenta con un engrane de reducción acoplado al eje de salida. Este engrane nos permite tener un mayor torque de salida y tiene una relación de 1:64; es decir, el engrane tiene que dar 64 revoluciones para que el eje de 1 revolución. Observando la hoja de datos este motor tiene un ángulo de paso de 5.625°. Esto quiere decir que para que el engrane gire 1 revolución requiere dar 360°/5.625° = 64 pasos. Pero como se tiene una relación de 1:64 (1 vuelta el eje; 64 vueltas el engrane); entonces para que el eje del motor gire 1 revolución son necesarios 64*64 pasos, es decir 4096 pasos.

Por lo tanto el eje requiere de 64 vueltas de 64 pasos = 4096 pasosEl engrane tiene que dar 64 vuelta para que el eje de 1

El engrane requiere 64 pasos para 1 vuelta

Es importante saber que este valor que se indica es cuando se opera el motor en Paso Medio (Half Step). Si se trabaja en Paso Completo (Full Step) entonces solo se requieren 2048 pasos.

Paso #2 Características

  • Voltaje Nominal: 5VDC
  • Numero de Fases: 4
  • Relación de Velocidad: 1/64
  • Angulo de Paso: 625°
  • Frecuencia: 100Hz
  • Resistencia DC 50Ω±7%(25℃)
  • Torque >34.3mN.m(120Hz)

Paso #3 Componentes

  • Arduino Uno
  • BYJ48 Motor de Pasos 5v
  • ULN2003 Motor driver Module
  • 5v fuente de poder externa mayor de 300Ma
  • Cable Jumper

Paso #4 Descripción del Tutorial

La actividad a realizar es controlar la velocidad de un motor de pasos con velocidad mediante un potenciómetro conectado al puerto análogo A0 del Arduino.

Paso #5 PinOut

Pines de Tarjeta ULN2003

Descripción

1N1

Fase 1 Azul

1N2

Fase 2 Rosa

1N3

Fase 3 Amarillo

1N4

Fase 4 Naranja

GND

+

5V Fuente externa

 

Paso #6 Hardware

 

Paso #7 Librerías

Existen muchas maneras de controlar los motores de pasos, afortunadamente existe una librería ya incluida en el ambiente de programación de Arduino que utilizaremos para hacernos la vida más fácil. Para esto es necesario únicamente inicializar correctamente el motor con la siguiente función:

Stepper (steps, pin1, pin2, pin3, pin4)

Esta función está especificada en Paso Completo (Full Step) por lo que indicamos el número de pasos completos para dar 1 revolución. En el caso de nuestro motor estos son 2048 pasos. Los siguientes parámetros son los 4 pines a los que tenemos conectados cada uno de las 4 fases de nuestro motor.

Observando la conexión de nuestro motor se conectaron todos los cables en el mismo orden en que vienen del conector. Siguiendo esta configuración el pin2 y pin3 están invertidos, pero los podemos invertir desde el código.

A continuación se especifica la velocidad del motor en RPM con la función, la cual debe ser siempre positiva.

setSpeed(rpms)

Y finalmente se mueve el motor con la siguiente función:

step(steps)

Es importante notar que esta función bloquea la ejecución del programa, es decir, no se podrá hacer ninguna otra operación mientras el motor se esté moviendo, lo cual puede ser importante dependiendo de la aplicación que estemos implementando. Lo que podemos hacer es mover el motor pocos pasos a la vez y mandar llamar esta función continuamente para así poder ejecutar operaciones mientras se mueve el motor.

Si deseamos que el motor gire en sentido contrario simplemente enviamos un número negativo de steps en la función step. No se permite definir una velocidad negativa.

La tarjeta contiene un Circuito Integrado ULN2003 contiene 7 pares de Arreglos Darlington, que simplemente son 2 transistores conectados en cascada con el propósito de permitirnos controlar una corriente más alta con corriente baja. Es decir con la baja corriente del Arduino podemos controlar la alta corriente que exige el motor.

La tarjeta además incluye unos LEDs para saber en qué paso se encuentra el motor.

 

Paso #8 Software


#include <Stepper.h>
const int stepsPerRevolution = 2048;
Stepper myStepper(stepsPerRevolution, 8, 10, 9, 11);
int stepCount = 0;  // numero de pasos el motor a dado

void setup() {
Serial.begin(9600);
}

void loop() {
// Lee el valor del sensor:
int sensorReading = analogRead(A0);
int motorSpeed = map(sensorReading, 0, 1023, 0, 20);
Serial.println(motorSpeed);
if (motorSpeed > 0) {
myStepper.setSpeed(motorSpeed);
myStepper.step(stepsPerRevolution / 1000);
}
}

Paso #9 Video

Si gustan ver una explicación MUY detallada pueden observar este video. https://www.youtube.com/watch?v=B86nqDRskVU