DRV8825 Controlador de motor a pasos para Arduino

El DRV8825 para Arduino es un controlador de motores a pasos que proporciona una solución de  manejo de motores para impresoras, scanner, CNC entre otras aplicaciones.
El DRV8825 cuenta con  dos puentes H y un indexador microstepping. Incluso está diseñado para accionar un motor paso a paso bipolar. La tarjeta cuenta con un potenciómetro que permite ajustar el uso de corriente para tener movimientos más suaves y a la vez proteger al motor de algún daño. Este controlador nos permite operar hasta 2.2 A por bobina y un voltaje máximo de hasta 45V.

En este tutorial te indicaremos como utilizar el DRV8825 para controlar un motor a pasos con Arduino.

Material para el tutorial:

  •        Arduino UNO.
  •        Cables macho macho.
  •        Protoboard.
  •        Alimentación externa de 12v.
  •        Motor a pasos.
  •        Capacitor electrolítico 100uF a 25v.
  •       Controlador de motor a pasos DRV8825.

En la tienda virtual de HeTPro puedes encontrar todos los materiales www.hetpro-store.com. Los controladores y software Arduino lo puedes encontrar en: www.arduino.cc

Motor a pasos con el DRV8825 para Arduino

Los motores paso con el DRV8825 que es un controlador, son ideales para la construcción de mecanismos en donde se requieren movimientos muy precisos. La característica principal de estos motores es el hecho de poder moverlos un paso a la vez por cada pulso que se le aplique. Este paso puede variar desde 90° hasta pequeños movimientos de tan solo 1.8°. En otras palabras, se necesitarán 4 pasos en el primer caso (90°) y 200 para el segundo caso (1.8°), para completar un giro completo de 360°.

Estos motores poseen la habilidad de poder quedar enclavados en una posición o bien totalmente libres. Si una o más de sus bobinas están energizadas, el motor estará enclavado en la posición correspondiente. Por el contrario quedará completamente libre si no circula corriente por ninguna de sus bobinas.

bobinas

Como identificar las bobinas de un motor a pasos

Para identificar las bobinas de un motor a pasos, es decir cuales son los cables que pertenecen a cada bobina y cual es el común es necesario un multímetro en modo continuidad. Para los motores bipolares (4 cables) basta con escoger un cable al azar conectarle una punta del mulímetro. Entonces con la otra punta  conectarla con cada uno de los cables restantes. El cable que accione el pitido del multímetro indicara que esos dos cables son una bobina, y por ende los dos cables sobrantes sera la otra.

Para los motores unipolares (6 cables) tres cables tendrán continuidad entre si. Esto significa que dos son para la bobina y uno es el común, para determinar cual es el común de los tres, con el multímetro medimos resistencia. Por lo tanto el par de cables que marquen la mayor resistencia estos serán la bobina. Finalmente el cable sobrante sera el común que aproximadamente sera la mitad del valor de los cables principales.

Código de ejemplo para el DRV8825 para Arduino:

Para el controlar la tarjeta del DRV8825 es necesario descargar la librería llamada “ AccelStepper.h”, ya que la descargues y se agregue a las librerías de Arduino ingresa el siguiente código:

Descargar libreria: AccelStepper.h

Detalles del programa

#include <AccelStepper.h>
 
AccelStepper stepper(1, 9, 8);//(define el tipo de control del motor,pin de paso,pin direccion)
 
int pos = 100;
 
void setup()
{
  stepper.setMaxSpeed(800); //velocidad maxima permitida
  stepper.setAcceleration(500);// relacion entre aceleracion/desaceleracion
}
 
void loop()
{
  if (stepper.distanceToGo() == 0)//distancia de la posicion actual y la destino
 
  {
    delay(500);
    pos = -pos;
    stepper.moveTo(pos);//establece la posicion de destino
  }
  stepper.run();
}
  • setMaxSpeed es la velocidad máxima permitida este valor debe ser mayor a 0. La velocidad máxima que alcance el motor dependerá del procesador y el oscilador del controlador, si se exceden las velocidades puede tener aceleraciones y desaceleraciones no lineales.
  • setAccelaration establece la relación de aceleración / desaceleracion y el valor debe ser mayor que cero.debes tener cuidado en no acelerar mas de lo necesario.
  • distanceToGo es la distancia de la posición actual y la de destino, numero positivo es en sentido horario desde la posición actual.
  • Fuente original del codigo: http://www.schmalzhaus.com

    Diagrama de Conexión del DRV8825 con Arduino

    Conexiones del controlador de motores DRV8825 con Arduino, asi como el pinout del controlador
    Conexiones del controlador de motores DRV8825 con Arduino, asi como el pinout del controlador

    También te puede interesar:

    27 comentarios en «DRV8825 Controlador de motor a pasos para Arduino»

    1. Tengo un CNC con Arduino Uno IDE y tarjeta CNC Shield 3.0 con 4 Drivers DVR8825, hay algun pricedimiento de diagnóstico para checar que estén bien en cuanto a sus limites de voltaje y corriente ?
      Me dice un técnico que se calientan porque no son los originales de Texas Instruments, son G Tech

        1. Si, Hector, estoy probando a qué temoeratura llegan los drivers ajustados a 250 mV por 1 Amp consumo de de corriente, se supone que no debe pasar de lis 60 grados C
          Estoy usando los minidisipadores que vienen de fábrica.
          Gracias por la ayuda
          Saludos

    2. Ok, Gracias

      La biblioteca AccelStepper es muy completa, sugiero crear una buena documentación en nuestro idioma y montar un circuito demostrativo ademas de usar un driver muy popular el Driver (DRV8825 Stepper Motor Driver) o similar para explorar las muchísimas funciones que trae la biblioteca y aplicarla en el circuito

      Quien se anima, yo seria uno de los principales colaboradores

      lista de funciones
      [code] AccelStepper (uint8_t interface=AccelStepper::FULL4WIRE, uint8_t pin1=2, uint8_t pin2=3, uint8_t pin3=4, uint8_t pin4=5, bool enable=true)

      AccelStepper (void(*forward)(), void(*backward)())

      void moveTo (long absolute)

      void move (long relative)

      boolean run ()

      boolean runSpeed ()

      void setMaxSpeed (float speed)

      float maxSpeed ()

      void setAcceleration (float acceleration)

      void setSpeed (float speed)

      float speed ()

      long distanceToGo ()

      long targetPosition ()

      long currentPosition ()

      void setCurrentPosition (long position)

      void runToPosition ()

      boolean runSpeedToPosition ()

      void runToNewPosition (long position)

      void stop ()

      virtual void disableOutputs ()

      virtual void enableOutputs ()

      void setMinPulseWidth (unsigned int minWidth)

      void setEnablePin (uint8_t enablePin=0xff)

      void setPinsInverted (bool directionInvert=false, bool stepInvert=false, bool enableInvert=false)

      void setPinsInverted (bool pin1Invert, bool pin2Invert, bool pin3Invert, bool pin4Invert, bool enableInvert)

      bool isRunning ()[/code]

    3. Hola compañeros, disculpen la molestia y mi ignorancia, tengo 2 nema 23 que van a 2 [A] por fase , ¿que drivers necesito para estos motores? ¿puedo alimentar los motores con una fuente de 12 [V] a 1 [A]? Por favor alguien me pueda ayudar un saludo

    4. Buenas tardes, estoy realizando un proyecto, quiero que mi motor gire 360º en X veces (ya lo tengo resuelto, gracias a tu turial)haga 5segundos de pausa y en esa pausa mandar una señal a la camara para que haga una foto, lo tengo todo hecho por separado, pero me falta unirlo y no se como. Muchas gracias por su ayuda.

      1. Andres, de acuerdo a la hoja de datos dice que no, por lo que te recomiendo poner un recubrimiento impermeable entre el paso del agua y el sensor. Saludos.

    5. Buen dia amigo muy interesante tu post, actualmente tengo un motor vexta de cuatro cables, modelo C6781-9212K, y no tengo la menor idea de cómo echarlo andar, lo necesito para giro COTINUO, como un motor normal por favor si me puede echar una mano de como hacer la conexión este es mi correo ernesto7465@gmail.com

      1. Hola que tal Ernesto, básicamente todos los motores a pasos funcionan de la misma manera, tienes que identificar cuales son tus bobinas para conectarlo al driver, por el numero de parte que nos proporcionaste del motor menciona que trabaja hasta 3A, por lo cual este controlador no te sirve, tenemos otro que si soporta hasta el amperaje https://hetpro-store.com/tarjeta-controladora-de-motores-a-pasos-tb6560-3a/ Tambien tenemos un tutorial para utilizar este otro driver https://www.hetpro-store.com/TUTORIALES/tb6560-controlador-motor-pasos/

          1. Si es obligatorio Ernesto, al menos estas dos tarjetas ya que el Arduino es para manipular el sentido y la velocidad, y el driver es para poder combinar las dos fuentes de voltaje, el motivo por el cual necesitas estas tarjetas es porque «encienden y apagan» la fuente demasiado rápido para que se mueva el motor, saludos

    6. Amigo, una preguntotota, yo tengo un motor de 6 cables, en este caso ya tengo identificados los dos cables comunes, esos comunes a donde los mando?? y los otros cuatro supongo irian conectados igual que en tu esquema, no? ningun cable de mi motor va directamente a la fuente de voltaje, verdad? lo estoy haciendo mal? :S

      Muchas gracias. Saluods

      1. si es lo que imagino, puede ser que estes dando demasiada velocidad en los pulsos, o este mal configurados los pines del driver, en relacion a la programacion

      1. Hola Antonio, si es posible, sólo tendrás que agregar dos objetos. Por ejemplo:
        AccelStepper stepper(1, 9, 8);
        AccelStepper stepper2(2, 3, 4);

        Y tendrás que repetir los pasos para el stepper2 como indica el tutorial. Ademas de usar un segundo controlador. Saludos.

    Deja una respuesta

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