Curso Arduino y robótica: Motores Paso a Paso – L298N Driver

En el tutorial anterior ya hemos explicado en que se basa el funcionamiento de nuestros motores paso a paso NEMA. Ahora mismo vamos a desarrollar la programación que nos permite controlar este tipo de motores con un Driver L298N.

¿Que necesitamos?

Para este tutorial requeriremos de:

  • Placa Arduino
  • Motor NEMA
  • Driver de control motor paso a paso. (Driver L298N )
  • Fuente de alimentación

¿Como funciona un L298N?

El driver L298N es en realidad un doble puente H, lo que nos permite controlar dos motores DC, o un motor de pasos. En este caso lo usaremos para el control de un motor de pasos NEMA.

El driver dispone de 4 entradas que controlan las 4 salidas a las que vamos a conectar nuestro motor NEMA.

Con el controlador L298N podemos controlar un solo motor paso a paso, ya que se necesitarán las 4 entradas para gobernar las 4 salidas que se dirigen al motor.

La fuente de alimentación está representada por unas pilas, pero estas deberían dar 12V o estar conectadas directamente a la red con un adaptador o fuente de 12 V.

Los cables que van de la placa Arduino a los pines de control, deben controlar cada una de las bobinas por parejas independientemente del orden que se conecten. Es decir, que los pines 5 y 6 controlarán una de las bobinas  y los pines 9 y 10 la segunda bobina. Si invertimos los cables de la bobina el motor funcionará, pero en sentido inverso.

A veces el motor y el driver se calientan bastante, ya que este driver no posee un control de intensidad y trabaja con el voltaje nominal. En cambio, existen otros Drivers que poseen un potenciómetro y que podemos regular la intensidad que circulan por ellos para no saturarlos.

Librería Stepper

Para el control de este tipo de motores, Arduino ya dispone de una librería llamada Stepper. Podriamos controlar nuestro motor definiendo todo el orden de las señales como hemos comentado en el tutorial anterior. Pero en lugar de eso vamos a simplificar el proceso, usando esta librería.

La librería Stepper solamente contiene 3 métodos, que son:

  • Constructor Stepper  – Hay que definir el número de pasos, y los pines a los que se conecta.
  • step() – Determina cuantos pasos se desplaza en cada momento
  • setSpeed() – Establece la velocidad de movimiento

Un aspecto muy importante a tener en cuenta, es que el movimiento no dispone una referencia absoluta. Esto quiere decir que necesitaremos programar a mano el algoritmo en el que el motor alcanza las posiciones desde una referencia cero. El método step() realiza un movimiento relativo de pasos con respecto a su posición anterior.

Es muy importante definir bien el numero de pasos por vuelta ( 200 pasos usualmente) del motor correctamente en el constructor, ya que tendrán que coincidir, el movimiento de 200 pasos en una vuelta completa.

 

#include <Stepper.h>

int actual_pos;
int dir;
int steps;
int position;

Stepper motor(200, 5, 6, 9, 10);

void setup() {
  Serial.begin(9600);
  motor.setSpeed(100);

  actual_pos = (int)(0);
  dir = (int)(1);
  steps = (int)(5);
  position = (int)(600);

}

void loop() {
  actual_pos = actual_pos + dir * steps;
  motor.step((dir * steps));
  Serial.println(actual_pos);
  if (actual_pos == position) {
    dir = -dir;
    position = -position;
    Serial.println("Change Direction");
    Serial.println(dir);
  }

}

 

Para que nuestro programa no sea constante, vamos a usar el monitor serie para mandar información y ejecutar instrucciones de movimiento desde el monitor.

En este aspecto, nos podremos dar cuenta, de que no necesitamos revisar la posición manualmente como haciamos anteriormente en cada iteración del bucle. Aunque hemos perdido la referencia absoluta, podemos añadir variables que definan esa referencia con el movimiento.

#include <Stepper.h>

const int stepsPerRevolution = 200;  // change this to fit the number of steps per revolution
// for your motor

// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 5, 6, 9, 10);

void setup() {
  Serial.begin(9600);
  // set the speed at 60 rpm:
  myStepper.setSpeed(60);
  // initialize the serial port:
  Serial.begin(9600);
}

void loop() {
  if (Serial.available()){
    int serialData = Serial.read();
    if( serialData== 'U'){
      int val = Serial.readString().toInt();
      myStepper.step(val);
    }
    if( serialData== 'D'){
      int val = Serial.readString().toInt();
      myStepper.step(-val);
    }

    if( serialData== 'V'){
      int val = Serial.readString().toInt();
      myStepper.setSpeed(val);
    }
  }
  
}

Si nos damos cuenta, este ejercicio es muy parecido al que desarrollamos en la clase anterior de comunicación Bluetooth, por lo que aplicando el mismo contenido, podríamos desarrollar un control remoto de motores paso a paso.

La velocidad suele saturar aproximadamente en un valor de 300, ya que mecanicamente el motor no le dará tiempo a responder a las variaciones de señal en frecuencia. Aunque los motores paso a paso no son tan rápidos como los motores de corriente continua, es suficiente para muchas aplicaciones; pero lo que más interesa de estos motores es la precisión en posición para llegar a un punto determinado.

Movimiento angular vs Movimiento lineal

En el caso de querer construir una máquina que se mueva en una dirección con un motor paso a paso, deberemos definir una conversión de unidad angular a lineal.

La transmisión de movimiento ha de quedar definida con una relación de transmisión que dependerá de los diámetros utilizados en el mecanismo utilizado.

La transmisión más utilizada para este tipo de motores es la transmisión por correas o con un tornillo sinfin o guias dentadas.

Podemos encontrar muchas aplicaciones online que realizan este tipo de conversión para determinar el ratio de movimiento y que tienen en cuenta aspectos como los dientes de correa más utilizados o los pasos de un tornillo sin fin.

 


Para finalizar, podemos añadir que la librería Stepper aunque ya tiene integrado toda la programación para lo básico, a veces no es suficiente. En el siguiente tutorial avanzaremos con la librería AccelStepper que nos permite añadir un control de velocidad y aceleraciones y nos permite controlar una referencia absoluta.

 

Hemos añadido en el repositorio un ejemplo para controlar los motores sin librerías y que podréis modificar para hacer pruebas.


Una vez completado este tutorial, puedes acceder al siguiente nivel.

 

Los ejercicios de código, proyectos y recursos que desarrollaremos durante el curso se pueden consultar a través de nuestro Github.

Documentacion ZaragozaMakerSpace Github

Un comentario sobre “Curso Arduino y robótica: Motores Paso a Paso – L298N Driver

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

9 − ocho =

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.