Manejar un motor stepper con un driver DRV8825 y Arduino

Voy a contar cómo manejar un motor paso a paso (stepper) con Arduino a través de un controlador DRV8825. En esta otra entrada explico cómo hacerlo con una Raspberry Pi, de forma muy similar, y en esta hablo de varios motores y drivers.

0j42241200

Características principales del driver DRV8825:

  • Para motores bipolares
  • Permite microstepping de hasta 1/32
  • 1.5  por fase o 2.2A si se dispone de ventilación forzada de aire o disipadores
  • Interfaz casi idéntica al A4988
  • 45 V máximo
  • Control de corriente máxima con un potenciómetro

El motor que voy a usar es un motor NEMA 17 JK42HS40-1704 13A, comprado aquí por 12.50 €, pero valdría cualquier motor bipolar de 4 cables.

Características del motor:

  • Número de parte: JK42HS40-1704 13A
  • Tamaño de marco: NEMA17
  • Ángulo del paso: 1,8 grados
  • Voltaje: 3.4V
  • Corriente: 1,7 A/fase
  • Resistencia: 2,0 ohmios/fase
  • Inductancia: 3,0 mH/phase
  • Llevar a cabo el esfuerzo de torsión: 4000g-cm 58.30 OZ-IN
  • Inercia del rotor: 54 g-cm2
  • Esfuerzo de torsión de la muesca: 0,22 kilogramo-cm
  • Número de ventajas de alambre: 4
  • Peso: 0,24 kilogramos
  • Longitud: 40m m
  • Eje del motor: 5mm
  • Longitud del árbol delantero: 20 mm
  • Certificación: CE, ROHS, ISO9001

Siguiendo las instrucciones de la hoja de especificaciones de Pololu, voy a emplear el segundo modo de conexión (hay dos formas, empleo la segunda):

Empleo un Arduino Nano, pero valdría cualquier otro. Uso el pin 8 para la dirección y el 9 para el step. El esquema Fritzing de mi montaje es así (¡¡¡¡Falta añadir el condensador!!!!!):

La conexión de los cables del motor al DRV8825 la hago así:

  • A1: negro
  • A2: verde
  • B1: rojo
  • B2: azul

Para no dañar el motor tenemos que regular inicialmente el potenciómetro a la mínima potencia, girando el potenciómetro en sentido antihorario hasta el final, y más adelante ajustarlo hasta la capacidad del motor. En este vídeo se explica cómo regular adecuadamente la intensidad.

[Explicar en más detalle el ajuste de la corriente]

Mirando en la ficha de mi motor, la máxima corriente por fase es de 1.7 A/fase. Por encima de 1.5 A (y hasta 2.2A) el controlador DRV8825 debe tener ventilación forzada de aire o un disipador, así que le pego un disipador (me venía al comprarlo con el DRV8825).

Ahora tengo que ajustar la corriente del DRV8825 con el potenciómetro. Primero tengo que averiguar a cuánto he de limitar esa corriente. Para ello empleo la fórmula que viene en la hoja de especificaciones del driver:

Current Limit = VREF × 2

(Ojo, que por muchas páginas se ven otras fórmulas; hay que emplear la fórmula específica de nuestro driver).

 

 

 

Con el código siguiente el motor da una vuelta completa en una dirección, y luego cambia de dirección y da otra vuelta:

 

const int dirPin = 8;
const int stepPin = 9;
 
const int steps = 200;
int microPausa = 1000;
 
void setup() {
 pinMode(dirPin, OUTPUT);
 pinMode(stepPin, OUTPUT);
}
 
void loop() {
 digitalWrite(dirPin, HIGH);  // Establezco una dirección

 for (int x = 0; x < steps ; x++) {
   digitalWrite(stepPin, HIGH);
   delayMicroseconds(microPausa);
   digitalWrite(stepPin, LOW);
   delayMicroseconds(microPausa);
 }
 delay(1000);
 
 digitalWrite(dirPin, LOW);  // Cambio la dirección

 for (int x = 0; x < steps ; x++) {
   digitalWrite(stepPin, HIGH);
   delayMicroseconds(microPausa);
   digitalWrite(stepPin, LOW);
   delayMicroseconds(microPausa);
 }
 delay(1000);

}

 

 

Referencias

https://www.pololu.com/product/2133

Controlador de motor a pasos DRV8825

Motores paso a paso con Arduino y driver A4988 o DRV8825

https://forum.pololu.com/t/drv-8825-stepper-motor-steps-and-delay-between-pulses/7530

2 pensamientos en “Manejar un motor stepper con un driver DRV8825 y Arduino

  1. Pingback: Motores paso a paso (stepper motor) con Arduino y varios controladores | Carlini's Blog

  2. En el caso del 4988 Imax=Vref/8xRs en el 8825 Imax=Vref/5xRs. en mi caso Rs es R100 que corresponde a 0,1 Ohm, por lo tanto Vref=2x Imax en mi caso 1,68 A implica que debo ajustar a 0,84Volts. Pero para paso completo habia que multiplicarlo por 0,7 (70%) para el 4988, en el 8825 también deberia hacerse lo mismo? Muy buen articulo, muchas gracias

Deja un comentario

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