martes, 4 de julio de 2023

Motor paso a paso 28BYJ-48

El 28BYJ-48 es un motor paso a paso unipolar de 5 hilos que funciona con 5V o 12V y proporciona un par de 34,3 mN.m a una velocidad de rotación de 15 RPM.

Esta distribución de pines del motor se corresponde con el siguiente esquema de sus cuatro bobinas. Estos esquemas están sacados de Last Minute Engineers.

El cable rojo siempre tiene tensión positiva, por lo que cuando cualquiera de los otros cuatro cables se conecta al polo negativo, pasa la corriente por la bobina correspondiente. El motor paso a paso gira solo cuando las bobinas se activan en una secuencia determinada. 

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

Además, el motor cuenta con un conjunto de engranajes reductores de 1/64 (en realidad, es 1/63,68395, pero 1/64 es una aproximación lo suficientemente buena para la mayoría de los propósitos). Esto significa que de hecho hay 2038 pasos (32*63,68395 pasos por revolución = 2037,8864 aproximadamente 2038 pasos).

El 28BYJ-48 consume alrededor de 240 mA. Debido a que el motor consume una cantidad significativa de energía, es preferible alimentarlo directamente desde una fuente de alimentación externa de 5V en lugar de Arduino. Vale la pena señalar que el motor consume energía incluso cuando está en reposo para mantener su posición.

Para controlar el motor, se utiliza un controlador como el ULN2003 que consta de una matriz de siete pares de transistores Darlington, cada uno de los cuales puede controlar una carga de hasta 500 mA y 50 V. Para controlar el motor paso a paso solo se utilizan cuatro de los siete pares de transistores.

El cableado del motor, la placa controladora y Arduino queda de la forma siguiente.

Se han de conectar IN1, IN2, IN3 e IN4 de la placa del controlador a los pines digitales Arduino 8, 9, 10 y 11, respectivamente. Luego se conecta el motor paso a paso al controlador ULN2003, mediante su conector. En el caso de utilizar una fuente de alimentación externa para la placa controladora, se debe unir el negativo de Arduino y la placa controladora.

Los ejemplos de programas para Arduino son de Programar Fácil. Se pueden crear progermas para mover el motor por pasos o por medios pasos. También se puede accionar el motor con movimiento por ola, o con movimiento normal, que proporciona más par.

El siguiente programa corresponde a un movimiento normal por pasos. Con el se consigue que el motor gire continuamente en el sentido de las agujas del reloj.

#define IN1  8

#define IN2  9

#define IN3  10

#define IN4  11

// Secuencia de pasos (par máximo)

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 en modo salida

  pinMode(IN1, OUTPUT);

  pinMode(IN2, OUTPUT);

  pinMode(IN3, OUTPUT);

  pinMode(IN4, OUTPUT);

}

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

    }

}

Para conseguir que el motor gire en sentido contrario se ha de cambiar la secuencia de pasos de la matriz paso [4][4].

#define IN1  8

#define IN2  9

#define IN3  10

#define IN4  11

// Secuencia de pasos (par máximo)

int paso [4][4] =

{

  {1, 1, 0, 0},

  {1, 0, 0, 1},

  {0, 0, 1, 1},

  {0, 1, 1, 0},

};

void setup()

{

  // Todos los pines en modo salida

  pinMode(IN1, OUTPUT);

  pinMode(IN2, OUTPUT);

  pinMode(IN3, OUTPUT);

  pinMode(IN4, OUTPUT);

}

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

    }

}

Para mover el motor paso a paso con Arduino también se puede utilizar la librería <Stepper.h>. En el siguiente programa se hace girar el motor una vuelta en el sentido de las agujas del reloj a 5 RPM y después en sentido contrario a 10 RPM.

//Incluye la librería de Arduino Stepper
#include <Stepper.h>
// Se define el número de pasos por vuelta
const int stepsPerRevolution = 2038;
// Se crea un objeto de la clase stepper llamado myStepper
// Se introducen los pines conectados a IN1-IN3-IN2-IN4 y el número de pasos a girar, definido por la variable stepsPerRevolution
Stepper myStepper = Stepper(stepsPerRevolution, 8, 10, 9, 11); 
void setup() {
    // Utilizando la librería Stepper no es necesario configurar los pines 8, 9, 10 y 11 como OUTPUT
}
void loop() {
// Giro lento de una vuelta en el sentido de las agujas del reloj a una velocidad de 5 RPM
myStepper.setSpeed(5);
myStepper.step(stepsPerRevolution);
delay(1000);
// Giro rápido de una vuelta en sentido contrario al de las agujas del reloj a una velocidad de 10 RPM
myStepper.setSpeed(10);
myStepper.step(-stepsPerRevolution);
delay(1000);

En Prometec también podemos encontrar un tutorial sobre este motor.









No hay comentarios: