Skip to Content

Cómo controlar un motor paso a paso con Arduino Motor Shield Rev3

Cómo controlar un motor paso a paso con Arduino Motor Shield Rev3

En este tutorial, aprenderás a controlar un motor paso a paso con el Arduino Motor Shield Rev3. He incluido un diagrama de cableado y muchos códigos de ejemplo.

Primero veremos un ejemplo que utiliza la librería Arduino Stepper. Esta librería es estupenda para el control básico de motores paso a paso, pero no tiene muchas características adicionales.

Recomiendo encarecidamente echar un vistazo a los códigos de ejemplo para la biblioteca AccelStepper al final de este tutorial. Esta biblioteca es bastante fácil de usar y puede mejorar en gran medida el rendimiento de su hardware.

Después de cada ejemplo, desgloso el código en secciones más pequeñas y explico cómo funciona. No deberías tener problemas para modificar el código para adaptarlo a tus necesidades, pero si tienes alguna duda, deja un comentario abajo.

Si quieres saber más sobre otros controladores (de micropasos) como el A4988, consulta los artículos que aparecen a continuación.

Otros tutoriales sobre motores paso a paso:

Suministros

Componentes de hardware

arduino-motor-shield-rev3Arduino Motor Shield Rev3× 1Amazon
Motor paso a pasoMotor paso a paso NEMA 17*.× 1Amazon
Arduino Uno Rev 3Arduino Uno Rev3× 1Amazon
Alimentación (5-12 V)× 1Amazon
Cable USB tipo A/B× 1Amazon

En este tutorial he utilizado un motor paso a paso bipolar de 4 hilos. Intenta encontrar un motor paso a paso que pueda funcionar a 5-12 V y que no exceda el límite de corriente de 2 A. Este de Adafruit funciona muy bien a 12 V y no consume demasiada corriente (350 mA).

Software

Arduino IDEArduino IDE

Makerguides.com is a participant in the Amazon Services LLC Associates Program, an affiliate advertising program designed to provide a means for sites to earn advertising fees by advertising and linking to products on Amazon.com. As an Amazon Associate we earn from qualifying purchases.

Información sobre el Arduino Motor Shield Rev3

El Arduino Motor Shield Rev3 está construido alrededor del driver de puente completo dual L298, fabricado por STMicroelectronics. Con el escudo, puede conducir motores de corriente continua, un motor paso a paso, relés y solenoides. Viene con dos canales separados, llamados A y B, que puede utilizar para conducir 2 motores de corriente continua, o 1 motor paso a paso cuando se combina.

Una cosa que es muy importante recordar es que el L298 es un controlador de tensión constante. Esto significa que el consumo de corriente depende de la relación entre la inductancia y la resistencia (L/R) del motor que se conecta a él.

Lo que esto significa para ti, es que tienes que tener cuidado al seleccionar el motor paso a paso y la fuente de alimentación a utilizar con este escudo. No todos los motores paso a paso funcionarán. El voltaje de funcionamiento del escudo está entre 5 y 12 voltios. Dado que el escudo puede suministrar un máximo de 2 amperios por canal, es necesario encontrar un motor paso a paso que se puede utilizar en este rango de voltaje y no excede la capacidad de corriente máxima. El motor que he utilizado para este tutorial consume alrededor de 1A a 5V. También encontré este motor paso a paso de Adafruit que funciona muy bien a 12V y sólo consume 350mA.

Si el motor que quieres accionar no funciona con esta shield, te recomiendo que utilices un driver chopper en su lugar. Escribí tutoriales para el controlador A4988 y DRV8825 que funcionan muy bien con muchos motores paso a paso.

Especificaciones del Arduino Motor Shield Rev3

Tensión de funcionamiento5 V a 12 V
Controlador del motorL298P, Acciona 2 motores de corriente continua o 1 motor paso a paso
Corriente máxima2 A por canal o 4 A como máximo (con fuente de alimentación externa)
Sensores de corriente1,65V/A
FuncionesMarcha libre, parada y freno
CosteComprobar el precio

Para más información, puede consultar las fichas técnicas aquí.

Entrada y salida

FunciónPines Canal AClavijas Canal B
DirecciónD12D13
PWMD3D11
FrenoD9D8
Sensores de corrienteA0A1

Cableado - Conexión de un motor paso a paso al Arduino Motor Shield Rev3

El diagrama/esquema de cableado de abajo muestra cómo conectar un motor paso a paso y una fuente de alimentación al escudo del motor Arduino.

Arduino-Motor-Shield-Rev3-con-Motor-Stepper-Diagrama-Cableado-Esquemático-Fritzing
Diagrama de cableado para Arduino Motor Shield Rev3 con motor paso a paso.

Las conexiones también se indican en la tabla siguiente.

Conexiones del Arduino Motor Shield Rev3

Arduino Motor Shield Rev3Conexión
Vin5 - 12 V
GNDTierra de la fuente de alimentación
A-Bobina 1 del motor paso a paso
A+Bobina 1 del motor paso a paso
B-Bobina 2 del motor paso a paso
B+Bobina 2 del motor paso a paso

Advertencia

Es posible alimentar directamente el escudo desde el Arduino, pero no es recomendable. Si el motor paso a paso consume demasiada corriente, puede dañar tanto el escudo como el Arduino. Por lo tanto, recomiendo utilizar una fuente de alimentación externa para los motores.

Para ello tienes que cortar el jumper Vin Connect de la parte trasera de la shield. Después de hacer esto puedes alimentar el Arduino por separado con un cable USB o a través de la toma de corriente de 5,5 mm DC.

Arduino-Motor-Shield-Rev3-Cortando el puente Vin-Connect
Cortar el puente Vin Connect.

¿Cómo determinar el cableado del motor paso a paso?

Si no puedes encontrar la hoja de datos de tu motor paso a paso, puede ser difícil averiguar qué color de cable va donde. Yo uso el siguiente truco para determinar cómo conectar motores paso a paso bipolares de 4 cables:

Lo único que tienes que identificar son los dos pares de cables que se conectan a las dos bobinas del motor. Los cables de una bobina se conectan a A- y A+ y el otro a B- y B+, la polaridad no importa.

Para encontrar los dos cables de una bobina, haga lo siguiente con el motor desconectado:

  1. Intenta hacer girar el eje del motor paso a paso con la mano y fíjate en lo difícil que es girar.
  2. Ahora escoge un par de cables al azar del motor y toca los extremos desnudos entre sí.
  3. A continuación, mientras mantiene los extremos juntos, intente hacer girar el eje del motor paso a paso de nuevo.

Si siente mucha resistencia, ha encontrado un par de cables de la misma bobina. Si todavía puede girar el eje libremente, pruebe con otro par de cables. Ahora conecte las dos bobinas a las clavijas mostradas en el diagrama de cableado anterior.

Código de ejemplo básico de Arduino para el motor paso a paso y Arduino Motor Shield con la biblioteca Stepper.h

Puedes cargar el siguiente código de ejemplo en tu Arduino utilizando el IDE de Arduino.

Este ejemplo utiliza la biblioteca Stepper.h, que debería venir preinstalada con el IDE de Arduino. Este sketch hace girar el motor paso a paso 1 revolución en una dirección, hace una pausa, y luego gira 1 revolución en la otra dirección.

/* Example sketch to control a stepper motor with 
  Arduino Motor Shield Rev3, Arduino UNO and Stepper.h library. 
  More info: https://www.makerguides.com */

#include "Stepper.h"

// Define number of steps per revolution:
const int stepsPerRevolution = 200;

// Give the motor control pins names:
#define pwmA 3
#define pwmB 11
#define brakeA 9
#define brakeB 8
#define dirA 12
#define dirB 13

// Initialize the stepper library on the motor shield:
Stepper myStepper = Stepper(stepsPerRevolution, dirA, dirB);

void setup() {
  // Set the PWM and brake pins so that the direction pins can be used to control the motor:
  pinMode(pwmA, OUTPUT);
  pinMode(pwmB, OUTPUT);
  pinMode(brakeA, OUTPUT);
  pinMode(brakeB, OUTPUT);

  digitalWrite(pwmA, HIGH);
  digitalWrite(pwmB, HIGH);
  digitalWrite(brakeA, LOW);
  digitalWrite(brakeB, LOW);

  // Set the motor speed (RPMs):
  myStepper.setSpeed(60);
}


void loop() {
  // Step one revolution in one direction:
  myStepper.step(200);

  delay(2000);

  //Step on revolution in the other direction:
  myStepper.step(-200);

  delay(2000);
}

Explicación del código:

El sketch comienza incluyendo la librería Arduino Stepper.h. Puedes encontrar más información sobre esta librería en la web de Arduino.

#include "Stepper.h"

A continuación definí cuántos pasos necesita el motor para girar 1 revolución. En este ejemplo vamos a utilizar el motor en modo de paso completo. Esto significa que tarda 200 pasos en girar 360 grados. Puedes cambiar este valor si quieres si estás usando un tipo diferente de motor paso a paso o una configuración diferente.

// Define number of steps per revolution:
const int stepsPerRevolution = 200;

A continuación, definimos las conexiones del motor (ver las especificaciones y el diagrama de cableado más arriba).

La declaración #define se utiliza para dar un nombre a un valor constante. El compilador sustituirá cualquier referencia a esta constante por el valor definido cuando se compile el programa. Por lo tanto, en todos los casos en los que se menciona pwmAel compilador lo sustituirá por el valor 3 al compilar el programa.

// Give the motor control pins names:
#define pwmA 3
#define pwmB 11
#define brakeA 9
#define brakeB 8
#define dirA 12
#define dirB 13

A continuación, hay que crear una nueva instancia de la clase Stepper, que representa un determinado motor paso a paso conectado al Arduino. Para ello utilizamos la función Stepper(steps, pin1, pin2) donde pasos es el número de pasos por revolución y pin1 y pin2 son los pines utilizados para conducir el motor paso a paso. En nuestro caso son dirA y dirB.

// Initialize the stepper library on the motor shield:
Stepper myStepper = Stepper(stepsPerRevolution, dirA, dirB);

En este caso he llamado al motor paso a paso 'myStepper', pero también puedes utilizar otros nombres, como 'z_motor' o 'liftmotor', etc. Stepper liftmotor = Stepper(stepsPerRevolution, dirA, dirB);.

En la configuración, comenzamos estableciendo los pines de freno y PWM como salida con la función pinMode(). Los pines PWM deben estar en HIGH y los pines de freno en LOW con la función digitalWrite().

  // Set the PWM and brake pins so that the direction pins can be used to control the motor:
  pinMode(pwmA, OUTPUT);
  pinMode(pwmB, OUTPUT);
  pinMode(brakeA, OUTPUT);
  pinMode(brakeB, OUTPUT);

  digitalWrite(pwmA, HIGH);
  digitalWrite(pwmB, HIGH);
  digitalWrite(brakeA, LOW);
  digitalWrite(brakeB, LOW);

Puede ajustar la velocidad del motor en rpm con la función setSpeed(rpm). Lo he puesto a 60, así que deberíamos ver 1 revolución por segundo.

  // Set the motor speed (RPMs):
  myStepper.setSpeed(60);

Loop

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

void loop() {
  // Step one revolution in one direction:
  myStepper.step(200);

  delay(2000);

  //Step on revolution in the other direction:
  myStepper.step(-200);

  delay(2000);
}

Tenga en cuenta que el step(steps) la función es bloqueandoesto significa que esperará hasta que el motor haya terminado de moverse para pasar el control a la siguiente línea de tu sketch.

Códigos de ejemplo para Arduino Motor Shield y la biblioteca AccelStepper

En los siguientes tres ejemplos te mostraré cómo puedes controlar tanto la velocidad como la dirección y el número de pasos que debe dar el motor paso a paso. En estos ejemplos, voy a utilizar la biblioteca AccelStepper.

La librería AccelStepper escrita por Mike McCauley es una librería impresionante para usar en tu proyecto. Una de las ventajas es que soporta la aceleración y la desaceleración, pero tiene un montón de otras funciones agradables también.

Puede descargar la última versión de esta biblioteca aquí o hacer clic en el botón de abajo.

Puedes instalar la librería yendo a Sketch > Incluir librería > Añadir librería .ZIP ... en el IDE de Arduino.

Otra opción es ir a Herramientas > Administrar Bibliotecas... o teclear Ctrl + Shift + I en Windows. El Administrador de Bibliotecas se abrirá y actualizará la lista de bibliotecas instaladas.

Instalar una librería Arduino paso 1 abrir Library Manager
Library Manager

Puedes buscar 'accelstepper' y buscar la biblioteca de Mike McCauley. Seleccione la última versión y luego haga clic en Instalar.

Instalación de una biblioteca Arduino paso 2 AccelStepper
Installing AccelStepper Library

1. Código de ejemplo de rotación continua

El siguiente esquema se puede utilizar para hacer funcionar uno o más motores paso a paso de forma continua a una velocidad constante. (No se utiliza ninguna aceleración o desaceleración).

Puede copiar el código haciendo clic en el botón de la esquina superior derecha del campo de código.

/* Example sketch to control a stepper motor with
   Arduino Motor Shield Rev3, Arduino UNO and AccelStepper.h library: 
   continuous rotation. More info: https://www.makerguides.com */

// Include the AccelStepper library:
#include "AccelStepper.h"

// Define number of steps per revolution:
const int stepsPerRevolution = 200;

// Give the motor control pins names:
#define pwmA 3
#define pwmB 11
#define brakeA 9
#define brakeB 8
#define dirA 12
#define dirB 13

// Define the AccelStepper interface type:
#define MotorInterfaceType 2

// Create a new instance of the AccelStepper class:
AccelStepper stepper = AccelStepper(MotorInterfaceType, dirA, dirB);

void setup() {
  // Set the PWM and brake pins so that the direction pins can be used to control the motor:
  pinMode(pwmA, OUTPUT);
  pinMode(pwmB, OUTPUT);
  pinMode(brakeA, OUTPUT);
  pinMode(brakeB, OUTPUT);

  digitalWrite(pwmA, HIGH);
  digitalWrite(pwmB, HIGH);
  digitalWrite(brakeA, LOW);
  digitalWrite(brakeB, LOW);

  // Set the maximum steps per second:
  stepper.setMaxSpeed(600);
}

void loop() {
  // Set the speed of the motor in steps per second:
  stepper.setSpeed(500);
  // Step the motor with constant speed as set by setSpeed():
  stepper.runSpeed();
}

Cómo funciona el código:

De nuevo, el primer paso es incluir la biblioteca con #include <AccelStepper.h>.

#include "AccelStepper.h"

Después de especificar las conexiones como antes, necesitamos definir el tipo de interfaz del motor para la biblioteca AccelStepper. En este caso vamos a conducir el motor paso a paso en modo de paso completo, con dos cables, por lo que establecemos el modo a 2. Puedes encontrar los otros tipos de interfaz aquí.

// Define the AccelStepper interface type:
#define MotorInterfaceType 2

A continuación, hay que crear una nueva instancia de la clase AccelStepper con el tipo de interfaz del motor y las conexiones adecuadas.

En este caso he llamado al motor paso a paso 'stepper', pero también puedes utilizar otros nombres, como 'z_motor' o 'liftmotor', etc. AccelStepper liftmotor = AccelStepper(MotorInterfaceType, dirA, dirB);.

// Create a new instance of the AccelStepper class:
AccelStepper stepper = AccelStepper(MotorInterfaceType, dirA, dirB);

La sección de configuración del código es mayormente la misma que la del ejemplo anterior, pero también definí la velocidad máxima en pasos/segundo. Las velocidades de más de 1000 pasos por segundo pueden ser poco fiables, por lo que la he fijado en 600 (tendrás que experimentar para ver cuál es la velocidad máxima para tu configuración). Ten en cuenta que especifico el nombre del motor paso a paso ('stepper'), para el que quiero definir la velocidad máxima.

  // Set the maximum steps per second:
  stepper.setMaxSpeed(600);

Loop

En la sección del bucle, primero establecemos la velocidad a la que queremos que funcione el motor con la función setSpeed(). (también puede colocar esto en la sección de configuración del código).

La función stepper.runSpeed() sondea el motor y cuando se debe dar un paso ejecuta 1 paso. Esto depende de la velocidad ajustada y del tiempo transcurrido desde el último paso. Si quieres cambiar la dirección del motor, puedes establecer una velocidad negativa: stepper.setSpeed(-400); gira el motor hacia el otro lado.

void loop() {
  // Set the speed of the motor in steps per second:
  stepper.setSpeed(500);
  // Step the motor with constant speed as set by setSpeed():
  stepper.runSpeed();
}

2. Esbozo para controlar el número de pasos o revoluciones

Con el siguiente sketch, puedes controlar tanto la velocidad, como la dirección y el número de pasos/revoluciones. No se utiliza la aceleración ni la desaceleración.

En este caso, el motor paso a paso gira 1 revolución en el sentido de las agujas del reloj con 400 pasos/seg, luego gira 1 revolución en sentido contrario a las agujas del reloj con 200 pasos/seg, y por último gira 3 revoluciones en el sentido de las agujas del reloj con 600 pasos/seg.

/* Example sketch to control a stepper motor with 
  Arduino Motor Shield Rev3, Arduino UNO and 
  AccelStepper.h library: number of steps or revolutions. 
  More info: https://www.makerguides.com */

#include "AccelStepper.h"

// Define number of steps per revolution:
const int stepsPerRevolution = 200;

// Give the motor control pins names:
#define pwmA 3
#define pwmB 11
#define brakeA 9
#define brakeB 8
#define dirA 12
#define dirB 13

// Define the AccelStepper interface type:
#define MotorInterfaceType 2

// Create a new instance of the AccelStepper class:
AccelStepper stepper = AccelStepper(MotorInterfaceType, dirA, dirB);

void setup() {
  // Set the PWM and brake pins so that the direction pins can be used to control the motor:
  pinMode(pwmA, OUTPUT);
  pinMode(pwmB, OUTPUT);
  pinMode(brakeA, OUTPUT);
  pinMode(brakeB, OUTPUT);

  digitalWrite(pwmA, HIGH);
  digitalWrite(pwmB, HIGH);
  digitalWrite(brakeA, LOW);
  digitalWrite(brakeB, LOW);

  // Set the maximum steps per second:
  stepper.setMaxSpeed(600);
}

void loop() {
  // Set the current position to 0:
  stepper.setCurrentPosition(0);

  // Run the motor forward at 400 steps/second until the motor reaches 200 steps (1 revolution):
  while (stepper.currentPosition() != 200) {
    stepper.setSpeed(400);
    stepper.runSpeed();
  }

  delay(1000);

  // Reset the position to 0:
  stepper.setCurrentPosition(0);

  // Run the motor backwards at 200 steps/second until the motor reaches -200 steps (1 revolution):
  while (stepper.currentPosition() != -200) {
    stepper.setSpeed(-200);
    stepper.runSpeed();
  }

  delay(1000);

  // Reset the position to 0:
  stepper.setCurrentPosition(0);

  // Run the motor forward at 600 steps/second until the motor reaches 600 steps (3 revolutions):
  while (stepper.currentPosition() != 600) {
    stepper.setSpeed(600);
    stepper.runSpeed();
  }

  delay(3000);
}

Explicación del código

La primera parte del código hasta la sección loop() es exactamente la misma que en el ejemplo anterior.

En el bucle hago uso de un bucle while en combinación con el currentPosition() función. En primer lugar, puse a cero la posición actual del motor paso a paso con stepper.setCurrentPosition(0).

  // Set the current position to 0:
  stepper.setCurrentPosition(0);

A continuación utilizamos el bucle while. Un bucle while hará un bucle continuo, e infinito, hasta que la expresión dentro del paréntesis, () se vuelva falsa. Así que en este caso compruebo si la posición actual del motor paso a paso no es igual a 200 pasos (!= significa: no es igual a). Mientras no sea así, hacemos funcionar el motor paso a paso a una velocidad constante como la establecida por setSpeed().

  // Run the motor forward at 400 steps/second until the motor reaches 200 steps (1 revolution):
  while (stepper.currentPosition() != 200) {
    stepper.setSpeed(400);
    stepper.runSpeed();
  }

En el resto del bucle, hacemos exactamente lo mismo, sólo que con una velocidad y una posición de destino diferentes.

3. Código de ejemplo de aceleración y desaceleración

En este ejemplo veremos una de las principales características de la biblioteca AccelStepper: añadir aceleración y desaceleración.

Con el siguiente sketch puedes añadir aceleración y desaceleración a los movimientos del motor paso a paso, sin ninguna codificación complicada. La primera sección de este sketch es la misma que en el ejemplo 1, pero la configuración y el bucle son diferentes.

El motor funcionará a cinco revoluciones de ida y vuelta con una velocidad de 200 pasos por segundo y una aceleración de 50 pasos/segundo2.

/* Example sketch to control a stepper motor with 
  Arduino Motor Shield Rev3, Arduino UNO and 
  AccelStepper.h library: acceleration and deceleration 
  More info: https://www.makerguides.com */

#include <AccelStepper.h>

// Define number of steps per revolution:
const int stepsPerRevolution = 200;

// Give the motor control pins names:
#define pwmA 3
#define pwmB 11
#define brakeA 9
#define brakeB 8
#define dirA 12
#define dirB 13

// Define the AccelStepper interface type:
#define MotorInterfaceType 2

// Create a new instance of the AccelStepper class:
AccelStepper stepper = AccelStepper(MotorInterfaceType, dirA, dirB);

void setup() {
  // Set the PWM and brake pins so that the direction pins can be used to control the motor:
  pinMode(pwmA, OUTPUT);
  pinMode(pwmB, OUTPUT);
  pinMode(brakeA, OUTPUT);
  pinMode(brakeB, OUTPUT);

  digitalWrite(pwmA, HIGH);
  digitalWrite(pwmB, HIGH);
  digitalWrite(brakeA, LOW);
  digitalWrite(brakeB, LOW);

  // Set the maximum steps per second:
  stepper.setMaxSpeed(200);
  // Set the maximum acceleration in steps per second^2:
  stepper.setAcceleration(50);
}

void loop() {
  // Set target position:
  stepper.moveTo(1000);
  // Run to position with set speed and acceleration:
  stepper.runToPosition();

  delay(1000);

  // Move back to original position:
  stepper.moveTo(0);
  // Run to position with set speed and acceleration:
  stepper.runToPosition();

  delay(1000);
}

Cómo funciona el código

En la configuración, además de la velocidad máxima, necesitamos definir la aceleración/desaceleración. Para ello utilizamos la función setAcceleration().

  // Set the maximum steps per second:
  stepper.setMaxSpeed(200);
  // Set the maximum acceleration in steps per second^2:
  stepper.setAcceleration(50);

En la sección de bucle del código, utilicé una forma diferente de dejar que el motor gire un número predefinido de pasos. Primero establecí la posición objetivo con la función moveTo(). A continuación, simplemente utilizamos la función runToPosition() para que el motor funcione hasta la posición objetivo con la velocidad y la aceleración establecidas. El motor se desacelerará antes de alcanzar la posición objetivo.

  // Set target position:
  stepper.moveTo(1000);
  // Run to position with set speed and acceleration:
  stepper.runToPosition();

Por último, volvemos a poner la nueva posición de destino en el 0, de forma que volvemos al origen.

Conclusión

En este artículo, te he mostrado cómo puedes controlar un motor paso a paso con el Arduino Motor Shield Rev3. Hemos visto 4 ejemplos, utilizando tanto la librería Stepper como AccelStepper. Espero que lo hayas encontrado útil e informativo. Si lo has hecho, ¡compártelo con un amigo al que también le guste la electrónica!

Me encantaría saber qué proyectos planeas construir (o ya has construido) con este Arduino Motor Shield. Si tienes alguna pregunta, sugerencia, o si crees que faltan cosas en este tutorial, por favor deja un comentario abajo.

Tenga en cuenta que los comentarios son retenidos por la moderación para evitar el spam.

Chris

Monday 10th of June 2024

Thank you so much for this clear explanation and code. I am building a robotic arm and I will use a stepper motor and s motor shield Rev 3. Itis working perfectly with you code! Thank you for the amazing explanations.

Stefan Maetschke

Monday 10th of June 2024

Thank you for the kind comment!

Morgan

Saturday 9th of March 2024

In the picture at the beginning of the tutorial the motor shield and Arduino are mounted in plastic cases. Where did you get them? I cannot find them anywhere.

Stefan Maetschke

Sunday 10th of March 2024

I don't know where to find a case for the motor shield either. For the Arduino itself, I use this one: https://amzn.to/4ca3GZb

Ollivier

Monday 9th of October 2023

Dear people, Thank to you with the webpage, it works fine with my stepper motor. Edern Ollivier.

Stefan Maetschke

Wednesday 11th of October 2023

Thanks, good to hear ; )

Alex

Tuesday 17th of January 2023

Hi There,

Thanks so much for the tutorial. Is there any way this could be combined with a potentiometer to control the motor speed, or is there an Arduino programme that I could run where I could control the speed of the motor in real time. Being able to fine tune the exact rate of rotation would be very useful to the project I am currently doing.

Once again thank you for this post

Best Wishes

Alex

Axel

Monday 2nd of January 2023

Hola,

I am building a camera slider so I bought a linear slider together with a stepper motor. I am going to control that with an Arduino Uno R3 and an Arduino Motor Shield (L298P). The external power supply is adjusted to 12VDC and I limited its output current to 1.5A. I followed your code examples (THANKS a lot for providing all these variants!)

Issue: - When I power up while the motor connected, it just clicks and doesn't move. Sometimes, I need to disconnect and reconnect the motor and it works. Sometimes, it doesn't. - When I power up while the motor disconnected and then connect the motor, it moves as expected. BUT: The motor shield gets hot. - A soon as the motor is connected, the voltage of the supply drops down from 12V to 6V. - Same behavior with higher current limit. - Same behavior with "stepper" library and "AccelStepper" library.

I assume the driver and the motor don't fit together: The stepper specifications: NEMA 17 Schrittwinkel: 1,8 Grad (200 steps) Motorflanschgröße: 42 mm. Motorlänge: 47 mm. Haltemoment: 1,2 N.m Spannung: 24 V max Stromstärke: 1,5 A. Widerstand: 0,8 Ohm <--- !!! Induktivität: 2,4 mH Rotor-Trägheit: 87,3 g.

I want to keep that stepper because it is one assembled mechnical unit and I don't want to get any unaccuracy.

Which driver do you recommend? Should I use DRV8825? Or is it a good idea to connect a 10 Ohms 20W resistor in series to each coil and keep the L298P?

Best regards, Axel