Una de las formas más sencillas y económicas de controlar motores paso a paso es conectar el IC del controlador de motor L293D con Arduino. Puede controlar tanto la velocidad como la dirección de giro de cualquier motor paso a paso unipolar como 28BYJ-48 o motor paso a paso bipolar como NEMA 17.

Si desea aprender los conceptos básicos de L293D IC, el siguiente tutorial es invaluable. Considera leer (al menos hojear) este tutorial primero Controla motores de CC con controlador de motor L293D IC y Arduino

Control de un motor paso a paso con un puente H

Como el IC L293D tiene dos puentes H, cada puente H impulsará una de las bobinas electromagnéticas de un motor paso a paso.

Al energizar estas bobinas electromagnéticas en una secuencia específica, el eje de un motor paso a paso se puede mover hacia adelante o hacia atrás con precisión en pequeños pasos.

Sin embargo, la velocidad está determinada por la frecuencia con la que se activan estas bobinas.

La imagen de abajo ilustra la conducción paso a paso con un Puente-H.

Manejo de un motor paso a paso unipolar (28BYJ-48)

En nuestro primer experimento, estamos utilizando un motor paso a paso unipolar 28BYJ-48 clasificado en 5V. Ofrece 48 pasos por revolución.

Antes de comenzar a conectar el motor con el chip, deberás determinar los cables A+, A-, B+ y B- en el motor que planeas usar. La mejor manera de hacerlo es consultar la hoja de datos del motor. Para nuestro motor estos son naranja, rosa, azul y amarillo.

Ten en cuenta que no usaremos la conexión central común (Roja) en este experimento.

La conexión central se usa simplemente para energizar el lado izquierdo o derecho de la bobina y obtener el efecto de invertir el flujo de corriente sin tener que usar un circuito que pueda invertir la corriente.

Las conexiones son bastante simples. Comienza conectando la salida de 5V en Arduino a los pines Vcc2 y Vcc1. Conecta tierra a tierra.

También debes conectar los pines ENA y ENB a la salida de 5V para que el motor esté siempre habilitado.

Ahora, conecta los pines de entrada (IN1, IN2, IN3 e IN4) del IC L293D a cuatro pines de salida digital (12, 11, 10 y 9) en Arduino.

Finalmente, conecta los cables del motor paso a paso A+ (naranja), A- (rosa), B- (amarillo) y B+ (azul) a los pines de salida del L293D (Out4, Out3, Out2 y Out1) como se muestra en la siguiente ilustración.

Manejo de un motor paso a paso bipolar (NEMA 17)

En nuestro próximo experimento, utilizaremos un motor paso a paso bipolar NEMA 17 clasificado en 12V. Ofrece 200 pasos por revolución y puede operar a 60 RPM.

Antes de comenzar a conectar el motor con el chip, deberá determinar los cables A+, A-, B+ y B- en el motor que planea usar. La mejor manera de hacerlo es consultar la hoja de datos del motor. Para nuestro motor estos son rojo, verde, azul y amarillo.

Las conexiones son bastante simples. Comienza conectando la fuente de alimentación externa de 12V al pin Vcc2 y la salida de 5V en Arduino al pin Vcc1. Asegúrate de poner en común todos los terrenos del circuito.

También debes conectar los pines ENA y ENB a la salida de 5V para que el motor esté siempre habilitado.

Ahora, conecta los pines de entrada (IN1, IN2, IN3 e IN4) del IC L293D a cuatro pines de salida digital (12, 11, 10 y 9) en Arduino.

Finalmente, conecta los cables A+ (Rojo), A- (Verde), B+ (Azul) y B- (Amarillo) del motor paso a paso a los pines de salida del L293D (Out4, Out3, Out2 y Out1) como se muestra en la siguiente ilustración.

Código Arduino: control del motor paso a paso

El siguiente esquema brindará una comprensión completa de cómo controlar un motor paso a paso unipolar o bipolar con el chip L293D y es el mismo para ambos motores, excepto el parámetro stepsPerRevolution.

Cambia este parámetro según las especificaciones del motor antes de probar el programa. Por ejemplo, para un NEMA 17, configúralo en 200 y para 28BYJ-48 configúralo en 48.

// Include the Arduino Stepper Library
#include <Stepper.h>
// Number of steps per output rotation
const int stepsPerRevolution = 200;
// Create Instance of Stepper library
Stepper myStepper(stepsPerRevolution, 12, 11, 10, 9);

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

void loop() 
{
	// step one revolution in one direction:
	Serial.println("clockwise");
	myStepper.step(stepsPerRevolution);
	delay(500);

	// step one revolution in the other direction:
	Serial.println("counterclockwise");
	myStepper.step(-stepsPerRevolution);
	delay(500);
}

El sketch comienza con la inclusión de la libreria Arduino Stepper. La librería stepper viene incluida en el IDE de Arduino y se encarga de secuenciar los pulsos que enviaremos a nuestro motor paso a paso.

// Include the Arduino Stepper Library
#include <Stepper.h>

Después de incluir la biblioteca, definimos una variable llamada stepsPerRevolution. Como su nombre indica, es el número de pasos por revolución a los que está clasificado nuestro motor. Cambia este parámetro según las especificaciones del motor. Por ejemplo, para NEMA 17 configúralo en 200 y para 28BYJ-48 configúralo en 48.

// Number of steps per output rotation
const int stepsPerRevolution = 200;

A continuación, creamos una instancia de la biblioteca paso a paso. Toma los pasos por revolución del motor y las conexiones de pin Arduino como parámetro.

// Create Instance of Stepper library
Stepper myStepper(stepsPerRevolution, 12, 11, 10, 9);

En la sección de configuración del código, configuramos la velocidad del motor paso a paso llamando a la función setSpeed() e inicializamos la comunicación en serie.

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

En la sección de bucle del código, simplemente llamamos a la función step() que hace girar el motor un número específico de pasos a una velocidad determinada por la función setSpeed(). Pasar un número negativo a esta función invierte la dirección de giro del motor.

void loop() 
{
	// step one revolution in one direction:
	Serial.println("clockwise");
	myStepper.step(stepsPerRevolution);
	delay(500);

	// step one revolution in the other direction:
	Serial.println("counterclockwise");
	myStepper.step(-stepsPerRevolution);
	delay(500);
}

Control Stepper Motor with L293D Motor Driver IC & Arduino. Last Minute Engineers. https://lastminuteengineers.com/stepper-motor-l293d-arduino-tutorial/