Arduino Nano - Motor paso a paso

Este tutorial te enseña cómo usar Arduino Nano para controlar un motor paso a paso con el controlador L298N. En detalle, aprenderemos:

El tutorial es aplicable a todo tipo de motores paso a paso bipolares con cuatro hilos. Se utilizará un motor paso a paso NEMA 17 como ejemplo.

Arduino Nano motor paso a paso controlador L298N

Si quieres controlar otro tipo de motor paso a paso, consulta este tutorial Arduino Nano - 28BYJ-48 Stepper Motor.

Hardware Requerido

1×Official Arduino Nano
1×Alternatively, DIYables ATMEGA328P Nano Development Board
1×Cable USB A a Mini-B
1×Stepper Motor Nema 17
1×Módulo Controlador de Motor L298N
1×Adaptador de Corriente 12V
1×Conector de Alimentación DC
1×Cables Puente
1×(Recomendado) Placa de Expansión de Terminales de Tornillo para Arduino Nano
1×(Recomendado) Placa de Expansión Breakout para Arduino Nano
1×(Recomendado) Divisor de Alimentación para Arduino Nano

Or you can buy the following kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)
Divulgación: Algunos de los enlaces proporcionados en esta sección son enlaces de afiliado de Amazon. Podemos recibir una comisión por las compras realizadas a través de estos enlaces sin costo adicional para usted. Apreciamos su apoyo.

Acerca del motor paso a paso

Existen dos tipos comunes de motores paso a paso:

  • bipolar: este motor tiene 4 cables
  • unipolar: este motor tiene entre 5 y 6 cables

Para un motor paso a paso unipolar de 6 hilos, podemos utilizar cuatro de los seis cables y controlarlo como si fuera un motor paso a paso bipolar.

Para un motor paso a paso unipolar de 5 hilos, consulte el tutorial Arduino Nano - controlar el motor paso a paso 28BYJ-48 usando el controlador ULN2003 para obtener más información.

El énfasis de este tutorial es exclusivamente en el motor paso a paso bipolar.

Pinout del motor paso a paso bipolar

El motor paso a paso bipolar tiene cuatro pines, y los nombres de estos pines varían según el fabricante. La tabla siguiente proporciona algunos de los nombres más utilizados:

PIN NO Naming 1 Naming 2 Naming 3
1 A+ A A
2 A- A C
3 B+ B B
4 B- B D
Pinout del motor paso a paso bipolar

La disposición de los pines, las etiquetas asignadas a los cables y los colores de los cables pueden variar entre fabricantes. Debes consultar la ficha técnica o el manual para saber cómo el color del cable se corresponde con el nombre del pin. La imagen de arriba también muestra las especificaciones de dos motores distintos con etiquetado de cables y colores diferentes.

Pasos por revolución

La especificación del motor especifica el valor DEG_PER_STEP. Dependiendo de la técnica de control, STEP_PER_REVOLUTION se puede determinar a partir de la siguiente tabla:

Control method Steps per Revolution Real degree per step
Full-step STEP_PER_REVOLUTION = 360 / DEG_PER_STEP DEG_PER_STEP
Half-step STEP_PER_REVOLUTION = (360 / DEG_PER_STEP) * 2 DEG_PER_STEP / 2
Micro-step (1/n) STEP_PER_REVOLUTION = (360 / DEG_PER_STEP) * n DEG_PER_STEP / n

Por ejemplo, si la hoja de datos del motor indica una medición de 1.8 grados por paso:

Control method Steps per Revolution Real degree per step
Full-step 200 steps/revolution 1.8°
Half-step 400 steps/revolution 0.9°
Micro-step (1/n) (200 * n) steps/revolution (1.8 / n)°

Cómo controlar un motor paso a paso con Arduino Nano

Arduino Nano puede generar señales para controlar el motor paso a paso; sin embargo, estas señales no tienen el voltaje y/o la corriente suficientes que requiere el motor paso a paso. Por lo tanto, se necesita un controlador de hardware entre Arduino Nano y el motor paso a paso. Este controlador tiene dos funciones:

  • Para amplificar las señales de control procedentes del Arduino Nano en términos de corriente y voltaje.
  • Para proteger al Arduino Nano de la alta corriente y el voltaje utilizados para alimentar el motor paso a paso.

Existen numerosos tipos de controladores de hardware que pueden usarse para gestionar motores paso a paso. Uno de los controladores de hardware más populares para controlar motores paso a paso es el controlador L298N.

Acerca del controlador L298N

Un controlador L298N se puede usar para controlar dos motores de corriente continua o un motor paso a paso. Este tutorial explica cómo usarlo para controlar el motor paso a paso.

Disposición de pines del controlador L298N

Pinout del controlador L298N

El controlador L298N tiene 11 pines y tres jumpers:

  • Pin VCC: Este proporciona energía para el motor y puede estar entre 5 y 35V.
  • Pin GND: Este es un pin de tierra común y debe conectarse a GND (0V).
  • Pin 5V: Este proporciona energía para el módulo L298N y puede ser alimentado por 5V del Arduino Nano.
  • Pines IN1, IN2, IN3, IN4: Estos se conectan a los pines de Arduino para recibir la señal de control que controla el motor paso a paso.
  • Pines OUT1, OUT2, OUT3, OUT4: Estos se conectan al motor paso a paso.
  • Jumpers ENA, ENB: Se usan para habilitar el motor paso a paso y ambos jumpers ENA y ENB deben estar en su lugar.
  • Jumpers 5V-EN: Si se mantiene en su lugar, la alimentación para el módulo L298N proviene de VCC y no es necesario conectar nada al pin 5V. Si se retira, la alimentación debe suministrarse al módulo L298N mediante un pin de 5V.

El controlador L298N tiene dos fuentes de alimentación de entrada:

  • Uno para el motor paso a paso (pines VCC y GND): que va de 5 a 35 V.
  • Uno para el funcionamiento interno del módulo L298N (pines 5V y GND): que va de 5 a 7 V. Si se mantiene puesto el jumper 5V-EN, no es necesario realizar ninguna conexión a este pin.

Diagrama de Cableado

Diagrama de cableado de Arduino Nano para motor paso a paso con controlador L298N

This image is created using Fritzing. Click to enlarge image

Ver La mejor forma de alimentar Arduino Nano y otros componentes.

※ Nota:

  • Mantenga los tres jumpers en el módulo L298N en sus posiciones actuales si la fuente de alimentación del motor es de 12 V o menos.
  • La disposición de pines en los motores paso a paso puede variar entre fabricantes. Por favor, consulte la tabla a continuación para el cableado correcto.

Tabla de cableado entre Arduino Nano y el controlador L298N

Arduino Nano pins L298N pins
7 IN1
6 IN2
5 IN3
4 IN4

Tabla de cableado entre el controlador L298N y el motor paso a paso

¡Importante!: No preste atención al orden de los cables en el motor paso a paso en el diagrama de arriba. Solo es una ilustración. La disposición de los pines en los motores paso a paso puede diferir entre fabricantes. Asegúrese de que su cableado siga la tabla que se encuentra a continuación.

L298N pins Stepper motor pins Or Or
OUT1 A+ A A
OUT2 A- A C
OUT3 B+ B B
OUT4 B- B D

Antes de comprar un motor paso a paso, se recomienda revisar la hoja de datos, las especificaciones o el manual del motor paso a paso. Asegúrese de que la información contenga la correspondencia entre el color de los pines y su nombre. Por ejemplo, este motor paso a paso proporciona la correspondencia tal como se ve en la siguiente imagen:

Codificación de colores de las bobinas de un motor paso a paso

Usando el mapeo, la tabla de cableado es:

L298N pins stepper motor pins wire color
OUT1 A black wire
OUT2 C green wire
OUT3 B red wire
OUT4 D blue wire

※ Nota:

En todas las tablas de cableado presentadas arriba entre el motor paso a paso y el controlador L298N, es posible intercambiar OUT1 con OUT2 y OUT3 con OUT4. En consecuencia, hay más formas de realizar el cableado. Sin embargo, si se realiza el intercambio, la dirección de giro de los motores podría verse alterada (de horario a antihorario, y viceversa).

Cómo controlar un motor paso a paso usando un controlador L298N.

Controlar un motor paso a paso puede ser una tarea desafiante, especialmente cuando necesitamos hacerlo sin bloquear. Afortunadamente, la biblioteca AccelStepper lo facilita mucho.

El IDE de Arduino contiene una biblioteca integrada Stepper. No obstante, no recomendamos que utilice esta biblioteca debido a las siguientes razones:

  • La biblioteca ofrece una característica bloqueante. Esto implica que el Arduino Nano queda impedido de ejecutar otras tareas mientras controla el motor paso a paso.
  • No dispone de funciones adecuadas.

En cambio, sugerimos usar la biblioteca AccelStepper. Esta biblioteca ofrece:

  • Aceleración
  • Desaceleración
  • Conducción en modo paso completo y medio paso
  • La capacidad de controlar múltiples motores paso a paso simultáneamente, con avance concurrente individual para cada motor
  • Desventaja: NO proporciona conducción de micro-pasos.

Cómo controlar la posición de un motor paso a paso mediante el controlador L298N

Podemos lograr nuestro objetivo de mover el motor paso a paso a la posición deseada utilizando:

stepper.moveTo(desiredPosition); // move motor one revolution

※ Nota:

La función stepper.moveTo() no bloquea, lo cual es una gran ventaja de la biblioteca. Sin embargo, al usar esta función, hay algunos puntos a tener en cuenta:

  • Asegúrate de llamar a 'stepper.run()' tan a menudo como sea posible, preferiblemente en la función void loop().
  • Evita usar la función delay() mientras el motor está en movimiento.
  • No uses las funciones Serial.print() y Serial.println() mientras el motor está funcionando, ya que esto ralentizará el motor paso a paso.

Cómo controlar la velocidad del motor paso a paso mediante el controlador L298N

Podemos regular no solo la velocidad, sino también la aceleración y la desaceleración, mediante el uso de algunas funciones básicas.

stepper.setAcceleration(50.0); // set acceleration/deceleration stepper.setSpeed(200); // set desired speed

Cómo controlar la dirección del motor paso a paso mediante el controlador L298N

Si conectas el motor como se indica, girará en:

  • Dirección en sentido horario: al controlar el motor desde una posición inferior a una posición superior (Incremento de posición)
  • Dirección en sentido antihorario: al controlar el motor desde una posición superior a una posición inferior (Decremento de posición)

Para ejemplos:

  • Cuando la posición actual es 100 y el motor está dirigido a 200, gira en sentido horario
  • Si la posición actual es -200 y el motor está controlado a -100, gira en sentido horario
  • Si la posición actual es 200 y el motor está regulado a 100, gira en sentido antihorario
  • Si la posición actual es -100 y el motor está manejado a -200, gira en sentido antihorario

※ Nota:

Como se indicó anteriormente, si intercambias OUT1 con OUT2, o OUT3 con OUT4, el aumento de la posición podría ser en sentido antihorario y la disminución de la posición podría ser en sentido horario.

Cómo detener un motor paso a paso

  • El motor paso a paso se detendrá cuando alcance la posición deseada.
  • También es posible detenerlo de inmediato utilizando la función stepper.stop().

Código de Arduino Nano - Código de motor paso a paso

El siguiente código:

  • Hace que el motor gire una revolución en sentido horario
  • Pausa el motor durante 5 segundos
  • Hace que el motor gire una revolución en sentido antihorario
  • Detiene el motor durante 5 segundos
  • Repite el proceso una y otra vez
/* * Este código de Arduino Nano fue desarrollado por es.newbiely.com * Este código de Arduino Nano se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino-nano/arduino-nano-stepper-motor */ #include <AccelStepper.h> #define DEG_PER_STEP 1.8 #define STEP_PER_REVOLUTION (360 / DEG_PER_STEP) AccelStepper stepper(AccelStepper::FULL4WIRE, A3, A2, A1, A0); long moveToPosition = STEP_PER_REVOLUTION; void setup() { Serial.begin(9600); stepper.setAcceleration(200.0); // set acceleration stepper.setSpeed(200); // set initial speed stepper.setCurrentPosition(0); // set position to 0 stepper.moveTo(STEP_PER_REVOLUTION); // move motor one revolution, in clockwise direction Serial.println("Motor moving in clockwise direction"); } void loop() { if (stepper.distanceToGo() == 0) { Serial.println("Motor is stopped"); delay(5000); // stop 5 seconds stepper.setCurrentPosition(0); // reset position to 0 moveToPosition = -1 * moveToPosition; // reverse direction stepper.moveTo(moveToPosition); // move motor one revolution if (stepper.distanceToGo() > 0) Serial.println("Motor moving in clockwise direction"); else if (stepper.distanceToGo() < 0) Serial.println("Motor moving in anticlockwise direction"); } // Serial.print(F("position: ")); // Serial.println(stepper.currentPosition()); stepper.run(); // MUST be called as frequently as possible }

Pasos R\u00e1pidos

  • Haz clic en el icono de Bibliotecas en la barra izquierda del IDE de Arduino.
  • Busca “AccelStepper” y localiza la biblioteca AccelStepper creada por Mike McCauley.
  • Presiona el botón Instalar para completar la instalación de la biblioteca AccelStepper.
Biblioteca AccelStepper para Arduino Nano
  • Copia el código y ábrelo en el IDE de Arduino.
  • Haz clic en el botón Subir para subir el código al Arduino Nano.
  • El motor paso a paso realizará una revolución en sentido horario, se detendrá durante 5 segundos, girará de nuevo una revolución en sentido antihorario, se detendrá otros 5 segundos y repetirá este proceso.
  • Consulta el resultado en el Monitor Serial.
COM6
Send
Motor moving in clockwise direction Motor is stopped Motor moving in anticlockwise direction Motor is stopped Motor moving in clockwise direction Motor is stopped Motor moving in anticlockwise direction Motor is stopped Motor moving in clockwise direction Motor is stopped Motor moving in anticlockwise direction Motor is stopped
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Explicación del código

¡Consulta la explicación línea por línea contenida en los comentarios del código fuente!

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.

※ 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!