DRV8825: el driver para motores paso a paso

drv8825

Un driver para motores es un circuito que permite controlar los motores de corriente continua de una forma muy simple. Estos controladores permiten manejar los voltajes e intensidades a los que se está suministrando al motor para así controlar la velocidad de giro. Además, sirven como método de protección para evitar que la electrónica de los motores pueda resultar dañada limitando la corriente que circula (chopping).

Por tanto, si vas a crear un proyecto DIY que va a incluir uno o varios motores de CC, sean del tipo que sean, y en especial para los motores paso a paso, deberías usar un driver para motores para que te facilite las cosas. Aunque hay métodos para hacerlo de forma diferente, mediante transistores, los módulos con driver de motores resultan mucho más prácticos y directos. De hecho, estos drivers se basa en transistores para hacer su labor…

¿Por qué necesito un driver?

El driver es necesario para el control del motor, como ya he dicho. Además, debes tener en cuenta que la placa Arduino y su microcontrolador no es capaz de alimentar el movimiento del motor. Simplemente está diseñado para señales digitales, pero no funcionaría bien cuando se debe suministrar algo más de potencia como la que demandan este tipo de motores. Por eso se tiene que tener este elemento entre la placa Arduino y los motores.

Tipos de driver

Debes saber que existen varios tipos de drivers según el tipo de motor al que vayan destinados. Esto es importante saber diferenciarlo para obtener el controlador adecuado:

  • Driver para motor unipolar: son los más sencillos de controlar, ya que la corriente que circula por las bobinas siempre va en la misma dirección. El trabajo del driver simplemente debe conocer qué bobinas tiene que activar en cada pulso. Un ejemplo de este tipo de controlador sería el ULN2003A.
  • Driver para motor bipolar: estos motores son más complejos y sus drivers también lo son, como el DRV8825. En este caso se pueden activar con corriente en una u otra dirección (norte-sur y sur-norte). Es el driver el que decide la dirección para cambiar la polaridad del campo magnético que se produce en el interior del motor. El circuito más conocido para invertir la dirección se llama Punete H, permitiendo girar el motor en ambos sentidos. Ese puente H se compone de varios transistores.

Estos últimos se han popularizado aún más en los últimos años debido a que también los llevan incluidos en algunas impresoras 3D para controlar la impresión con el cabezal. Es posible que si pretendes montar una impresora 3D o si ya cuentas con una, necesites uno de estos para poder controlar el motor o sustituir esta pieza si se ha dañado. También son utilizados para robots, plotters, impresoras convencionales, escáner, vehículos electrónicos, y un largo etc.

DRV8825

Existen varios modelos de drivers en el mercado. Por ejemplo, el DRV8825 es una versión mejorada del A4988. Este driver solo necesita de dos salidas digitales del microcontrolador para poder manejar el motor de forma adecuada. Solo con eso se puede controlar el sentido y el paso del motor con esos dos señales. Es decir, con esto se permite realizar el stepping, o que el motor gire paso a paso en vez de girar de forma veloz como otros motores simples.

DRV8825 permite trabajar con tensiones superiores a las que trabaja el A4988, ya que puede llegar a los 45v en vez de los 35v del A4988. También puede manejar intensidades superiores, concretamente 2.5A, eso es medio amperio más que el A4988. Además de todo eso, este nuevo driver añade un nuevo modo de microstepping 1/32 (1/16 para el A4988) para poder mover el eje del motor paso a paso de una forma más precisa.

Por lo demás son bastante similares. Por ejemplo, ambos pueden alcanzar temperaturas elevadas de funcionamiento sin problema. Por eso, si los acompañas de un pequeño disipador, mucho mejor (muchos modelos ya lo incorporan), especialmente si lo vas a usar por encima del 1A.

Si el encapsulado alcanza altas temperaturas, por precaución lo deberías apagar. Estaría bien consultar los datasheets del modelo que hayas comprado y ver la temperatura máxima a la que puede trabajar. Agregar un sensor de temperatura junto al driver para monitorizar la temperatura y usar un circuito que interrumpa el funcionamiento si llega a esa temperatura límite sería muy recomendable…

El DRV8825 dispone de protección contra problemas de sobreintensidad, cortocircuito, sobretensión y sobretemperatura. Por tanto, son dispositivos muy fiables y resistentes. Y todo por un precio bastante bajo en las tiendas especializadas donde se puede encontrar este componente.

Microstepping

microstepping

Con la técnica del microstepping se pueden conseguir pasos inferiores al paso nominal del motor paso a paso que vas a usar. Es decir, dividir el giro en más porciones para poder avanzar más lentamente o de forma más precisa. Para ello se hace variar la corriente aplicada a cada bobina emulando un valor analógico con las señales digitales de las que se dispone. Si se consiguen unas señales analógicas senoidales perfectas y desfasadas 90º entre sí, se conseguiría la rotación deseada.

Pero claro, no se puede conseguir esa señal analógica, porque trabajamos con señales digitales. Por eso se debe tratar estas para intentar simular la señal analógica mediante pequeños saltos de la señal eléctrica. De ello dependerá la resolución del motor: 1/4, 1/8, 1/16, 1/32,…

Para seleccionar la resolución que quieres debes controlar los pines M0, M1 y M2 del módulo. Los pines están conectados a tierra o GND mediante resistencias pull-up, por lo que si no se conecta nada estarán siempre a LOW o 0. Para cambiar ese valor habrá que forzar un valor 1 o HIGH. Los valores de M0, M1, M2 respectivamente a los que tiene que estar según la resolución, son:

  • Full step: Low, Low, Low
  • 1/2: High, Low, Low
  • 1/4: Low, High, Low
  • 1/8: High, High, Low
  • 1/16: Low, Low, High
  • 1/32: el resto de valores posibles

Pinout

DRV8825 pinout

El driver DRV8825 tiene un esquema simple de conexión, aunque al contar con bastantes pines puede resultar un poco complicado para los menos expertos. Lo puedes ver en la imagen superior, pero asegurate posicionar el módulo de forma adecuada cuando estés mirando los pines, ya que es frecuente equivocarse y cogerlo invertido, lo que resulta en un mal conexionado e incluso en daños.

Como recomendación para conectar el driver, se recomienda ajustar y calibrar el dispositivo de forma adecuada siguiendo los siguientes pasos para un funcionamiento adecuado y para no dañarlo:

  1. Conecta el driver a la tensión de alimentación sin el motor conectado ni microstepping.
  2. Mide con un polímetro la tensión que existe entre GND y el potenciómetro.
  3. Ajustar el potenciómetro hasta que sea el valor adecuado.
  4. Ahora puedes desconectar la alimentación.
  5. En este momento sí que puedes conectar el motor. Y vuelve a conectar de nuevo la alimentación al diver.
  6. Con el polímetro mide la intensidad entre el driver y el motor paso a paso y puedes hacer un ajuste más fino del potenciómetro.
  7. Vuelve a desconectar la alimentación y ya puedes conectarlo a Arduino.

Si no vas a usar microstepping puedes ajustar la intensidad del regulador hasta el 100% de la intensidad nominal del motor. Pero si lo vas a usar debes reducir este límite, ya que el valor que luego circulará será superior al medido…

Artículo relacionado:
L298N: módulo para controlar motores para Arduino

Integración con Arduino

Esquema de ARduino y DRV8825

Para usar el driver DRV8825 con Arduino, la conexión es bastante simple como puedes ver en la parte superior en este esquema electrónico de Fritzing:

  • VMOT: conectado a la alimentación hasta 45v de máxima.
  • GND: a tierra (motor)
  • SLP: a 5v
  • RST: a 5v
  • GND: a tierra (logic)
  • STP: al pin 3 de Arduino
  • DIR: al pin 2 de Arduino
  • A1, A2, B1, B2: al stepper (motor)

Una vez conectado y ajustado adecuadamente, el código para su control también es sencillo. Por ejemplo, para el control de un motor paso a paso puedes usar el siguiente código en Arduino IDE:

const int dirPin = 2;
const int stepPin = 3;
 
const int steps = 200;
int stepDelay;
 
void setup() {
   // Configura los pines como salida
   pinMode(dirPin, OUTPUT);
   pinMode(stepPin, OUTPUT);
}
 
void loop() {
   //Se pone una dirección y velocidad
   digitalWrite(dirPin, HIGH);
   stepDelay = 250;
   // Se gira 200 pulsos para hacer vuelta completa del eje
   for (int x = 0; x < 200; x++) {
      digitalWrite(stepPin, HIGH);
      delayMicroseconds(stepDelay);
      digitalWrite(stepPin, LOW);
      delayMicroseconds(stepDelay);
   }
   delay(1000);
 
   //Ahora se cambia la dirección de giro y se aumenta la velocidad
   digitalWrite(dirPin, LOW);
   stepDelay = 150;
   //Se hacen dos vueltas completas
   for (int x = 0; x < 400; x++) {
      digitalWrite(stepPin, HIGH);
      delayMicroseconds(stepDelay);
      digitalWrite(stepPin, LOW);
      delayMicroseconds(stepDelay);
   }
   delay(1000);
}

Te aconsejo que pruebes también algunos ejemplos de código que encontrarás entre los ejemplos que vienen con Arduino IDE y pruebes a modificar valores para aprender cómo afecta al motor.

Para más información sobre los motores paso a paso, su control y la programación de Arduino, te recomiendo descargar gratis nuestro curso de programación.

Sé el primero en comentar

Deja tu comentario

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

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.