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.

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();
}
Fuente original del codigo: http://www.schmalzhaus.com
Diagrama de Conexión del DRV8825 con Arduino

Disculpa hay alguna manera de lograr esto sin ese controlador ??
Josue, siempre al usar un motor a pasos requieres un controlador.
Disculpa hay alguna manera de hacer este control sin ese driver ??
Que tal Josue eh visto en Internet que utilizan un L298 que es un puente H te dejo un enlace del modulo que han utilizado
https://hetpro-store.com/modulo-puente-h-l298n-para-control-de-motores/
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
Fernando, te recomiendo poner disipadores, originales o no, igual se calientan.
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
Hola, por favor me informa el link del código original, pues no lo encuentro en: http://www.schmalzhaus.com
Que tal James, este es link del codigo
http://www.schmalzhaus.com/EasyDriver/Examples/EasyDriverExamples.html
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]
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
hola buen dia podrias utilizar este controlador o bien alguno que tenemos en nuestra pagina siempre y cuando cumpla con las caracteristicas https://hetpro-store.com/controladores-de-motores/ y si quieres alimentar de manerda externa debes tener cuidado para el buen rendimiento de los motores
Hola! es necesario poner el capacitor? no lo veo en el diagrama de conexiones. Gracias.
Hola es necesario ya que es de prevencion y no llegue el voltaje pico al motor
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.
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.
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
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/
Amigo y obligatoriamente tiene que llevar esa tarjeta controladora, no hay manera de conectarla directamente a la fuente.
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
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
Solo déjalos desconectados los comunes. Solo conecta los 4 cables de las fases.
Hola disculpen si mi motor hace solo ruidos y no se mueve claro el ruido es agudo y secuencial que podria ser se habra dañado el motor ?
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
Si quisiera conectar 2 motores a pasos al mismo arduino como podria hacerlo con esta libreria? son 2 Nema 23 de 4A por fase
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.
hola, buenas tardes una pregunta por cuál pin debo energizar para que realice el movimiento el motor?