Arduino - Controlador de motor paso a paso DRV8825

En este tutorial, vamos a aprender sobre el controlador DRV8825 para motor paso a paso y cómo usarlo con Arduino para controlar el motor paso a paso. En detalle, aprenderemos:

Módulo DRV8825 para Arduino

Acerca de DRV8825 Controlador de motor paso a paso

El DRV8825 es un módulo controlador de motor paso a paso ampliamente utilizado para controlar motores paso a paso bipolares en aplicaciones como máquinas CNC, impresoras 3D y robótica. Presenta un límite de corriente ajustable, protección contra sobrecalentamiento y opciones de microstepping de seis pasos, que incluyen paso completo, 1/2, 1/4, 1/8, 1/16 y 1/32. El módulo puede manejar hasta 2,2 A por bobina con un enfriamiento adecuado y opera en un amplio rango de voltaje de 8,2 V a 45 V, lo que lo hace adecuado para una variedad de motores paso a paso.

Para aprender sobre conceptos de motores paso a paso como: paso completo, micropasos, motor paso a paso unipolar y motor paso a paso bipolar, consulte el tutorial Arduino - Stepper Motor.

Es impresionante que se pueda controlar la velocidad y la dirección de un motor paso a paso bipolar, como el NEMA 17, con solo dos pines de Arduino.

Pinout del controlador de motor paso a paso DRV8825

Pinout del módulo DRV8825

El controlador de motor paso a paso DRV8825 tiene 16 pines. A continuación se presenta un diagrama de pines típico para el módulo controlador de motor paso a paso DRV8825. Tenga en cuenta que algunas variaciones del módulo pueden etiquetar los pines de manera ligeramente diferente, pero la funcionalidad es la misma.

Pin Name Description
VMOT Motor power supply (8.2 V to 45 V). This powers the stepper motor.
GND (for Motor) Ground reference for the motor power supply. Connect this pin to the GND of the motor power supply
2B, 2A Outputs to Coil B of the stepper motor.
1A, 1B Outputs to Coil A of the stepper motor.
FAULT Fault Detection Pin. This is an output pin that drives LOW whenever the H-bridge FETs are disabled as the result of over-current protection or thermal shutdown.
GND (for Logic) Ground reference for the logic signals. Connect this pin to the GND of Arduino
ENABLE Active-Low pin to enable/disable the motor outputs. LOW = Enabled, HIGH = Disabled.
M1, M2, M3 Microstepping resolution selector pins (see table below).
RESET Active-Low reset pin - pulling this pin LOW resets the driver.
SLEEP Active-Low sleep pin - pulling this pin LOW puts the driver into low-power sleep mode.
STEP Step input - a rising edge on this pin advances the motor by one step (or one microstep, depending on microstepping setting).
DIR Direction input - sets the rotation direction of the stepper motor.

Además, hay un pequeño potenciómetro en la placa que puedes ajustar para establecer la limitación de la corriente, lo que ayuda a evitar que el motor paso a paso y el controlador se sobrecalienten.

En resumen, estos 16 pines se organizan en las siguientes categorías según su funcionalidad:

  • Pines conectados al motor paso a paso: 1A, 1B, 2A, 2B.
  • Pines conectados al Arduino para el control del driver: ENABLE, M1, M2, M3, RESET, SLEEP.
  • Pines conectados al Arduino para el control de la dirección y la velocidad del motor: DIR, STEP.
  • Pin para retroalimentación al Arduino: FAULT.
  • Pines conectados al suministro de energía del motor: VMOT, GND (tierra de alimentación del motor).
  • Pin conectado a la tierra del Arduino: GND (tierra lógica).

El módulo DRV8825 no requiere un suministro lógico desde la placa Arduino, ya que toma energía del alimentador del motor mediante su regulador de voltaje interno de 3,3 V. Sin embargo, es esencial conectar la tierra del Arduino al pin GND (lógica) del módulo DRV8825 para garantizar un funcionamiento correcto y una referencia de tierra compartida.

Configuración de micropasos

El controlador DRV8825 permite el microstepping al dividir cada paso en incrementos más pequeños. Esto se logra aplicando niveles de corriente intermedios a las bobinas del motor.

Por ejemplo, un motor NEMA 17 con un ángulo de paso de 1,8° (200 pasos por revolución):

  • Modo de paso completo (1/1): 200 pasos por revolución
  • Modo de medio paso (1/2): 400 pasos por revolución
  • Modo de 1/4 de paso: 800 pasos por revolución
  • Modo de 1/8 de paso: 1600 pasos por revolución
  • Modo de 1/16 de paso: 3200 pasos por revolución
  • Modo de 1/32 de paso: 6400 pasos por revolución

Al aumentar el nivel de micropasos, el motor se mueve de forma más suave y precisa, pero a costa de un mayor número de pasos necesarios por revolución. Si continúa usando la misma tasa de pulsos de paso (pulsos por segundo), entonces cada revolución tomará más tiempo, ralentizando efectivamente el motor.

Sin embargo, si su microcontrolador puede generar pulsos lo suficientemente rápidos para igualar un mayor número de pasos, puede mantener o incluso aumentar la velocidad. El límite práctico depende de cuán rápidamente tanto el controlador como su microcontrolador pueden procesar estos pulsos sin perder pasos.

Pines de selección de micropasos del DRV8825

El DRV8825 presenta tres entradas de selección de resolución de micropasos: los pines M0, M1 y M2. Al configurar estos pines con niveles lógicos específicos, puedes elegir entre seis resoluciones de micropasos:

M0 Pin M1 Pi M2 Pi Microstep Resolution
Low Low Low Full step
High Low Low Half step
Low High Low 1/4 step
High High Low 1/8 step
Low Low High 1/16 step
High Low High 1/32 step
Low High High 1/32 step
High High High 1/32 step

Estos pines de selección de micropasos están equipados con resistencias pull-down integradas en la placa que los mantienen en un estado bajo por defecto. Si quedan sin conectar, el motor funcionará en modo de paso completo.

Cómo funciona

Para controlar un motor paso a paso utilizando el módulo DRV8825, necesitas al menos dos pines de Arduino: uno para el pin DIR y otro para el pin STEP. El DRV8825 interpreta estas señales desde el Arduino para mover el motor paso a paso con precisión.

  • STEP Pin: Cada pulso en el pin STEP hace avanzar el motor un micropaso (o un paso completo, dependiendo de tu configuración de micropasos).
  • DIR Pin: Determina la dirección de rotación del motor.

El controlador, a continuación, utiliza estas señales, junto con sus propias configuraciones, para enviar salidas de control al motor a través de los pines 1A, 1B, 2A y 2B.

También puedes configurar pines adicionales en el módulo DRV8825 (ENABLE, M1, M2, M3, RESET, SLEEP) de una de tres formas:

  • Déjalos sin conectar para permitir que el controlador opere con la configuración predeterminada.
  • Soldarlos a GND o VCC para un modo de operación fijo.
  • Conéctalos a pines de Arduino para que puedas controlar estas funciones dinámicamente en tu código.

Diagrama de cableado entre Arduino, módulo DRV8825 y motor paso a paso

El siguiente diagrama de cableado muestra las conexiones mínimas necesarias entre el Arduino, el módulo DRV8825 y el motor paso a paso. Con esta configuración, el controlador DRV8825 opera en su modo predeterminado (paso completo).

Diagrama de cableado del controlador de motor paso a paso DRV8825 para Arduino

This image is created using Fritzing. Click to enlarge image

En detalle:

  • VMOT: Conectar a la fuente de alimentación del motor (p. ej., 12 V).
  • GND (para el motor): Conectar a la tierra de la fuente de alimentación del motor.
  • 1A, 1B, 2A, 2B: Conectar a las bobinas del motor paso a paso.
  • STEP: Conectar al pin digital de Arduino D4.
  • DIR: Conectar al pin digital de Arduino D3.
  • GND (para la lógica): Conectar al pin GND de Arduino.
  • Otros pines: dejar sin conexión.

Código de Arduino

/* * Este código de Arduino fue desarrollado por es.newbiely.com * Este código de Arduino se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino/arduino-drv8825-stepper-motor-driver */ // Include the AccelStepper Library #include <AccelStepper.h> // Define pin connections #define DIR_PIN 3 #define STEP_PIN 4 // Creates an instance AccelStepper stepper(AccelStepper::DRIVER, STEP_PIN, DIR_PIN); void setup() { // set the maximum speed, acceleration factor, // initial speed and the target position stepper.setMaxSpeed(1000); stepper.setAcceleration(200); stepper.setSpeed(200); stepper.moveTo(200); } void loop() { // Change direction once the motor reaches target position if (stepper.distanceToGo() == 0) stepper.moveTo(-stepper.currentPosition()); stepper.run(); // Move the motor one step }

Pasos R\u00e1pidos

  • Copia el código anterior y ábrelo con el IDE de Arduino
  • Navega al icono de Bibliotecas en la barra izquierda del IDE de Arduino.
  • Busca “AccelStepper”, luego encuentra la biblioteca AccelStepper de Mike McCauley
  • Haz clic en el botón Instalar para instalar la biblioteca AccelStepper.
Biblioteca Arduino AccelStepper
  • Copie el código anterior y ábralo con el IDE de Arduino
  • Haga clic en el botón Subir en el IDE de Arduino para subir el código al Arduino
  • Verá que el motor gira hacia atrás y hacia adelante

Nota: al operar el motor en modo de paso completo, su movimiento puede no ser muy suave, lo cual es normal. Para un movimiento más suave, habilite el microstepping configurando los pines M1, M2 y M3.

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!