Controle el motor paso a paso con el módulo controlador DRV8825 y Arduino

¿Eres un apasionado de la electrónica y la programación? ¿Te gustaría aprender a controlar un motor paso a paso de forma precisa y sencilla? En este artículo te mostraremos cómo utilizar el módulo controlador DRV8825 junto con Arduino para lograr un control preciso y eficiente de tus motores paso a paso. ¡No te lo pierdas!

Para aplicaciones de motor paso a paso único, un controlador como el L298N está bien, pero si desea construir su propia máquina CNC o impresora 3D, necesitará un controlador de motor paso a paso dedicado como el DRV8825.

Debido a la simplicidad del control del motor paso a paso y la variedad de modos paso a paso que ofrece el controlador DRV8825, es una solución ideal para aplicaciones de construcción que requieren un control del motor paso a paso preciso y confiable, como el control de movimiento de bancadas, cabezales y ensamblajes en varios CNC. Aplicaciones de trazado, fresado y versiones de impresora 3D.

También es bastante útil el hecho de que sólo se requieren dos pines para controlar la velocidad y dirección de un motor paso a paso bipolar como el NEMA 17.

¿Sabes cómo funcionan los motores paso a paso?

Los motores paso a paso utilizan un engranaje y electroimanes para hacer girar la rueda paso a paso.

Cada pulso ALTO enviado energiza la bobina, aprieta los dientes más cercanos al engranaje e impulsa el motor un paso hacia adelante.

Controle el motor paso a paso con el módulo controlador DRV8825 y Arduino

La forma en que pulsas estas bobinas tiene un gran impacto en el comportamiento del motor.

  • La secuencia de impulsos determina el sentido de rotación del motor.
  • La frecuencia de los pulsos determina la velocidad del motor.
  • El número de pulsos determina cuánto gira el motor.

Chip controlador de motor paso a paso DRV8825

El corazón del módulo es un controlador de micropasos de Texas Instruments: DRV8825. A pesar de su pequeño tamaño (0,8″x0,6″), tiene mucho que ofrecer.

Controle el motor paso a paso con el módulo controlador DRV8825 y Arduino

El controlador de motor paso a paso DRV8825 tiene una capacidad de salida de hasta 45 V. Esto le permite controlar un motor paso a paso bipolar como el NEMA 17 con una corriente de salida de hasta 2,5 A por bobina.

Además, la corriente de salida está regulada, lo que permite que el motor paso a paso funcione silenciosamente y elimina la resonancia o el timbre que es común en los diseños de controladores paso a paso no regulados.

Para facilitar la operación, el controlador tiene un traductor integrado. Esto reduce el número de pines de control a solo dos, uno para controlar los pasos y el otro para controlar la dirección de giro.

El controlador ofrece seis resoluciones de paso diferentes: paso completo, medio paso, cuarto de paso, octavo paso, decimosexto paso y treinta segundos.

Para garantizar un funcionamiento confiable, el controlador tiene características adicionales como protección contra subtensión, disparo, cortocircuito, sobrecorriente y térmica.

Especificaciones técnicas

Aquí están las especificaciones:

Tensión de salida del motor 8,2 V-45 V
voltaje lógico Salida incorporada de 3,3 V
Corriente continua por fase 1A
Corriente máxima por fase 2.5A
Resolución de micropasos completo, 1/2, 1/4, 1/8, 1/16 y 1/32

Puede encontrar más información en la siguiente hoja de datos.

Configuración de pines del controlador del motor DRV8825

El controlador DRV8825 tiene un total de 16 pines que lo conectan con el mundo exterior. La asignación de pines es la siguiente:

Controle el motor paso a paso con el módulo controlador DRV8825 y Arduino

Conozcamos cada pin individualmente.

Pines de alimentación

A diferencia de la mayoría de los controladores de motores paso a paso, el DRV8825 solo tiene una conexión de fuente de alimentación.

Controle el motor paso a paso con el módulo controlador DRV8825 y Arduino

VMOT Y TIERRA TÜV suministrar energía al motor. A este pin se puede conectar cualquier voltaje entre 8,2 V y 45 V.

El módulo no tiene un pin de suministro lógico ya que el DRV8825 obtiene su energía de la fuente de alimentación del motor a través de un regulador de voltaje interno 3V3. Sin embargo, debe conectar la tierra de su microcontrolador al LÓGICA TIERRA Bolígrafo.

Según la hoja de datos, para mantener 4A, el suministro del motor necesita un condensador de desacoplamiento adecuado cerca de la placa.

Advertencia:

A pesar de la presencia de condensadores cerámicos de baja ESR a bordo, este controlador sólo está parcialmente protegido contra picos de voltaje. En algunos casos, estos picos pueden exceder los 45 V (el voltaje nominal máximo del DRV8825), lo que podría causar daños permanentes a la placa de circuito e incluso al motor.

Una forma de proteger al controlador de tales picos de voltaje es colocar un capacitor electrolítico grande de 100 μF (o al menos 47 μF) entre las clavijas de alimentación del motor.

Pines de selección de micropasos

El controlador DRV8825 admite micropasos al dividir un solo paso en pasos más pequeños. Esto se logra energizando las bobinas con corrientes medias.

Por ejemplo, si elige accionar el NEMA 17 (con un ángulo de paso de 1,8° o 200 pasos/revolución) en modo de cuarto de paso, el motor producirá 800 micropasos por revolución.

Controle el motor paso a paso con el módulo controlador DRV8825 y Arduino

El controlador DRV8825 tiene tres entradas de selección de tamaño de paso (resolución): M0, M1 y M2 . Al configurar los niveles lógicos apropiados para estos pines, podemos configurar el motor en una de las resoluciones de seis pasos.

M0 M1 M2 Resolución de micropasos
Bajo Bajo Bajo paso completo
Alto Bajo Bajo Medio paso
Bajo Alto Bajo 1/4 de paso
Alto Alto Bajo 1/8 de paso
Bajo Bajo Alto 1/16 paso
Alto Bajo Alto 1/32 paso
Bajo Alto Alto 1/32 paso
Alto Alto Alto 1/32 paso

Estos tres pines de selección de micropasos se bajan mediante resistencias desplegables incorporadas. Entonces, si no los conecta, el motor funcionará en modo de paso completo.

Pines de entrada de control

El DRV8825 tiene dos entradas de control: STEP y DIR.

Controle el motor paso a paso con el módulo controlador DRV8825 y Arduino

PASO La entrada controla los micropasos del motor. Cada pulso ALTO enviado a este pin impulsa el motor de acuerdo con el número de micropasos establecidos por los pines de selección de micropasos. Cuanto mayor es la frecuencia del pulso, más rápido gira el motor.

La entrada controla la dirección de rotación del motor. Tirarlo a ALTO hace que el motor gire en el sentido de las agujas del reloj, tirarlo a BAJO lo gira en sentido antihorario.

Si desea que el motor gire solo en una dirección, puede conectar el DIR directamente a VCC o GND.

Pines para controlar los estados de energía.

El DRV8825 tiene tres entradas separadas para controlar sus estados de energía: EN, RST y SLP.

Controle el motor paso a paso con el módulo controlador DRV8825 y Arduino

ES es un pin de entrada baja activo. Cuando este pin se baja, el controlador DRV8825 está habilitado. Por defecto, este pin está bajado. Entonces, a menos que lo tire hacia arriba, el controlador siempre estará habilitado. Este pin es particularmente útil cuando se implementa un sistema de parada o apagado de emergencia.

SLP es un pin de entrada baja activo. Al tirar de este pin a BAJO, el controlador entra en modo de suspensión, lo que mantiene el consumo de energía al mínimo. Puede utilizar esto para ahorrar electricidad, especialmente cuando el motor no está en uso.

primero También es una entrada baja activa. Cuando este pin se baja, todas las entradas de PASO se ignoran. También restablece el controlador configurando el traductor interno en un estado «Inicio» predefinido. El estado inicial es básicamente la posición inicial desde la que arranca el motor y varía según la resolución de los micropasos.

Tenga en cuenta que después del evento de activación (lógica ALTA en el pin SLEEP), debe permitir un retraso de 1 ms antes de emitir un comando de paso para permitir que la bomba de carga se estabilice.

Pluma de detección de errores

El DRV8825 tiene uno ERROR Salida que pasa a BAJA cada vez que los FET del puente H se desactivan debido a una protección contra sobrecorriente o un apagado térmico.

Controle el motor paso a paso con el módulo controlador DRV8825 y Arduino

El pin de Fallo normalmente está en cortocircuito con el pin SLEEP; Por lo tanto, siempre que el pin de falla se establece en BAJO, todo el chip se desactiva. Y permanece deshabilitado hasta que se realiza un RESET o se elimina y se vuelve a aplicar el voltaje del motor VMOT.

pines de salida

Los canales de salida del controlador del motor DRV8825 tienen pines separados en el costado del módulo. B2, B1, A1 y A2 Lápices.

Controle el motor paso a paso con el módulo controlador DRV8825 y Arduino

Puede conectar cualquier motor paso a paso bipolar de tamaño pequeño a mediano a estos pines, p. B. NEMA 17.

Cada pin de salida puede suministrar hasta 2,5 A al motor. Sin embargo, la cantidad de energía suministrada al motor depende de la fuente de alimentación, el sistema de enfriamiento y la configuración del límite de corriente del sistema.

Sistema de refrigeración – disipador de calor

La disipación excesiva de energía del CI del controlador DRV8825 dará como resultado un aumento de temperatura que podría dañar el CI si excede su capacidad.

Aunque el controlador IC DRV8825 tiene una corriente nominal máxima de 2,5 A por bobina, solo puede entregar aproximadamente 1,5 A por bobina sin sobrecalentarse. Para lograr más de 1,5 A por bobina, se requiere un disipador de calor u otro método de enfriamiento.

Controle el motor paso a paso con el módulo controlador DRV8825 y Arduino

El controlador DRV8825 suele venir con el disipador de calor. Se recomienda instalar el disipador de calor antes de utilizar el controlador.

Limitación actual

Antes de arrancar el motor, debe limitar la corriente máxima que fluye a través de las bobinas paso a paso para que no exceda la corriente nominal del motor.

Controle el motor paso a paso con el módulo controlador DRV8825 y Arduino

El controlador DRV8825 tiene un pequeño potenciómetro de ajuste para ajustar el límite de corriente.

Hay dos métodos para este ajuste:

Método 1:

En este método, el límite de corriente se determina midiendo el voltaje (Vref) en el pin «ref».

  1. Mire la hoja de datos de su motor paso a paso. Anota la corriente nominal. En nuestro caso se utiliza NEMA 17 200 pasos/revolución, 12V 350mA.
  2. Desconecte los tres pines de selección de micropasos para poner el controlador en modo de paso completo.
  3. Mantenga el motor en una posición fija sin sincronizar la entrada STEP.
  4. Mida el voltaje (Vref) en el potenciómetro de metal mientras lo ajusta.
  5. Ajuste el voltaje Vref usando la fórmula

    Vref = límite actual / 2

    Por ejemplo, si su motor tiene una tensión nominal de 350 mA, establecería la tensión de referencia en 0,175 V.

Controle el motor paso a paso con el módulo controlador DRV8825 y Arduino

Puede realizar este ajuste rápida y fácilmente conectando un extremo del cable de prueba con pinza de cocodrilo al eje de un destornillador de metal y el otro extremo a su multímetro. Esto le permite medir el voltaje a medida que realiza el ajuste.

Método 2:

En este método, el límite de corriente se determina midiendo la corriente que fluye a través de la bobina.

  1. Mire la hoja de datos de su motor paso a paso. Anota la corriente nominal. En nuestro caso se utiliza NEMA 17 200 pasos/revolución, 12V 350mA.
  2. Desconecte los tres pines de selección de micropasos para poner el controlador en modo de paso completo.
  3. Mantenga el motor en una posición fija sin sincronizar la entrada STEP.
  4. Conecte el amperímetro en serie con una de las bobinas de su motor paso a paso y mida la corriente real que fluye.
  5. Tome un destornillador pequeño y ajuste el potenciómetro limitador de corriente hasta alcanzar la corriente nominal.
Controle el motor paso a paso con el módulo controlador DRV8825 y Arduino

Cableado de un controlador de motor paso a paso DRV8825 a un Arduino

Ahora que sabemos todo sobre el controlador, conectémoslo a nuestro Arduino.

Las conexiones son sencillas. Primero, conecte el pin RST al pin SLP/SLEEP adyacente y 5V en el Arduino para mantener el controlador habilitado.

Conecte el pin GND LOGIC al pin de tierra del Arduino. Conecte los pines de entrada DIR y STEP a los pines de salida digital n.° 2 y n.° 3 del Arduino.

Conecte el motor paso a paso a los pines B2, B1, A1 y A2. De hecho, el módulo DRV8825 está diseñado para adaptarse al conector de 4 pines de los motores paso a paso bipolares, por lo que esto no debería ser un problema.

Advertencia:

No intente conectar o desconectar el motor paso a paso mientras el controlador esté en funcionamiento. Esto podría causar daños al conductor.

Deje los pines de selección de micropasos desconectados si desea operar el motor en modo de paso completo.

Finalmente, conecte la fuente de alimentación del motor a los pines VMOT y GND MOT. Recuerde colocar un condensador electrolítico de desacoplamiento grande de 100 μF entre los pines de alimentación del motor para evitar grandes picos de voltaje.

Controle el motor paso a paso con el módulo controlador DRV8825 y Arduino

Código Arduino – Sin biblioteca

El siguiente esquema muestra cómo controlar la velocidad y la dirección de rotación de un motor paso a paso bipolar con el controlador de motor paso a paso DRV8825 y puede servir como base para futuros experimentos y proyectos prácticos.

// Define pin connections & motor's steps per revolution
const int dirPin = 2;
const int stepPin = 3;
const int stepsPerRevolution = 200;

void setup()
{
	// Declare pins as Outputs
	pinMode(stepPin, OUTPUT);
	pinMode(dirPin, OUTPUT);
}
void loop()
{
	// Set motor direction clockwise
	digitalWrite(dirPin, HIGH);

	// Spin motor slowly
	for(int x = 0; x < stepsPerRevolution; x++)
	{
		digitalWrite(stepPin, HIGH);
		delayMicroseconds(2000);
		digitalWrite(stepPin, LOW);
		delayMicroseconds(2000);
	}
	delay(1000); // Wait a second
	
	// Set motor direction counterclockwise
	digitalWrite(dirPin, LOW);

	// Spin motor quickly
	for(int x = 0; x < stepsPerRevolution; x++)
	{
		digitalWrite(stepPin, HIGH);
		delayMicroseconds(1000);
		digitalWrite(stepPin, LOW);
		delayMicroseconds(1000);
	}
	delay(1000); // Wait a second
}

Explicación del código:

El boceto comienza definiendo los pines Arduino a los que están conectados los pines STEP y DIR del DRV8825. una variable llamada stepsPerRevolution también está definido. Puede ajustarlo para que coincida con las especificaciones de su motor paso a paso.

const int dirPin = 2;
const int stepPin = 3;
const int stepsPerRevolution = 200;

En el área de configuración, todos los pines de control del motor están configurados como SALIDA digital.

pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);

En la sección de bucle, el motor gira lentamente en el sentido de las agujas del reloj y luego rápidamente en el sentido contrario a las agujas del reloj cada segundo.

Controlar la dirección de giro: Para controlar la dirección de rotación del motor, el pin DIR se establece en ALTO o BAJO. Una entrada ALTA hace girar el motor en el sentido de las agujas del reloj, mientras que una entrada BAJA lo hace en el sentido contrario a las agujas del reloj.

digitalWrite(dirPin, HIGH);

Control de velocidad: La frecuencia de los pulsos enviados al pin STEP determina la velocidad del motor. Cuanto mayor sea la frecuencia del pulso, más rápido funcionará el motor. Un pulso no es más que poner la salida en ALTO, esperar un poco, luego bajarla y esperar nuevamente. Al ajustar el retraso entre dos pulsos, puede cambiar la frecuencia de los pulsos y por lo tanto la velocidad del motor.

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

Código Arduino: uso de la biblioteca AccelStepper

Para aplicaciones simples de un solo motor, controlar un motor paso a paso sin una biblioteca es completamente suficiente. Sin embargo, si desea controlar varios motores paso a paso, debe utilizar una biblioteca.

Entonces, para nuestro próximo experimento usaremos una biblioteca de motores paso a paso extendida llamada Biblioteca AccelStepper. Soporta:

  • Aceleración y desaceleración.
  • Múltiples pasos simultáneos con pedaleo simultáneo independiente en cada paso.

Esta biblioteca no está incluida en el IDE de Arduino, por lo que primero debes instalarla.

Instalación de biblioteca

Para instalar la biblioteca, navegue hasta Croquis > Incluir bibliotecas > Administrar bibliotecas… Espere a que el administrador de la biblioteca descargue el índice de la biblioteca y actualice la lista de bibliotecas instaladas.

Controle el motor paso a paso con el módulo controlador DRV8825 y Arduino

Filtra tu búsqueda escribiendo “Acelerador'. Haga clic en la primera entrada y luego seleccione Instalar.

Controle el motor paso a paso con el módulo controlador DRV8825 y Arduino

código arduino

Aquí hay un boceto simple que acelera el motor paso a paso en una dirección y luego desacelera hasta detenerse. Después de una revolución, el motor invierte su sentido de rotación y repite el proceso.

// Include the AccelStepper Library
#include <AccelStepper.h>

// Define pin connections
const int dirPin = 2;
const int stepPin = 3;

// Define motor interface type
#define motorInterfaceType 1

// Creates an instance
AccelStepper myStepper(motorInterfaceType, stepPin, dirPin);

void setup() {
	// set the maximum speed, acceleration factor,
	// initial speed and the target position
	myStepper.setMaxSpeed(1000);
	myStepper.setAcceleration(50);
	myStepper.setSpeed(200);
	myStepper.moveTo(200);
}

void loop() {
	// Change direction once the motor reaches target position
	if (myStepper.distanceToGo() == 0) 
		myStepper.moveTo(-myStepper.currentPosition());

	// Move the motor one step
	myStepper.run();
}

Explicación del código:

El boceto comienza integrando la biblioteca AccelStepper recién instalada.

#include <AccelStepper.h>

Primero, se definen los pines Arduino a los que se conectan los pines STEP y DIR del DRV8825. El motorInterfaceType también se establece en 1. (1 significa un controlador paso a paso externo con pasadores paso a paso y de dirección).

// Define pin connections
const int dirPin = 2;
const int stepPin = 3;

// Define motor interface type
#define motorInterfaceType 1

A esto le sigue una instancia de la biblioteca paso a paso con el nombre myStepper creado.

AccelStepper myStepper(motorInterfaceType, stepPin, dirPin);

En la función de configuración, la velocidad máxima permitida del motor se establece en 1000 (el motor acelera a esta velocidad cuando lo dejamos funcionar). Luego se ajusta la tasa de aceleración/desaceleración para acelerar y desacelerar aún más los movimientos del motor paso a paso.

La velocidad constante deseada se establece en 200. Y como el NEMA 17 realiza 200 pasos por revolución, la posición objetivo también se establece en 200.

void setup() {
	myStepper.setMaxSpeed(1000);
	myStepper.setAcceleration(50);
	myStepper.setSpeed(200);
	myStepper.moveTo(200);
}

En la función de bucle a if La instrucción se utiliza para determinar qué tan lejos debe viajar el motor (leyendo el distanceToGo propiedad) antes de que se alcance la posición objetivo (determinada por moveTo). Si eso distanceToGo Llega a cero, el ajuste hará girar el motor en la dirección opuesta moveTo Posición al negativo de su posición actual.

Al final del ciclo notarás que run() se llama la función. Esta es la función más crítica porque el paso a paso no se moverá si no se realiza esta función.

void loop() {
	if (myStepper.distanceToGo() == 0) 
		myStepper.moveTo(-myStepper.currentPosition());

	myStepper.run();
}

Error 403 The request cannot be completed because you have exceeded your quota. : quotaExceeded





Controla el motor paso a paso con el módulo controlador DRV8825 y Arduino

Controla el motor paso a paso con el módulo controlador DRV8825 y Arduino

Para aplicaciones con motores de un solo paso, un controlador como el L298N es adecuado, pero si deseas construir tu propia máquina CNC o impresora 3D, necesitarás un controlador de motor paso a paso dedicado como el DRV8825.

Debido a la simplicidad del control del motor paso a paso y a la variedad de modos de paso que ofrece el controlador DRV8825, es una solución ideal para construir aplicaciones que requieren un control preciso y confiable del motor paso a paso, como el control del movimiento de camas, cabezales y ensamblajes en varios diseños de plotters CNC, fresadoras e impresoras 3D.

¿Cómo funcionan los motores paso a paso?

Los motores paso a paso utilizan una rueda dentada y electromagnetos para rotar la rueda un ‘paso’ a la vez. Cada pulso ALTO enviado energiza la bobina, atrayendo los dientes más cercanos a la rueda dentada y moviendo el motor un paso hacia adelante. La secuencia de pulsos determina la dirección de giro del motor, la frecuencia de los pulsos determina la velocidad del motor y el número de pulsos determina cuánto girará el motor.

Chip controlador de motor paso a paso DRV8825

En el corazón del módulo se encuentra un controlador de microstepping de Texas Instruments, el DRV8825. A pesar de su pequeño tamaño, este chip es muy potente.

  • Capacidad de salida de motor de hasta 45V.
  • Corriente de salida continua de hasta 2.5A por bobina para controlar un motor paso a paso bipolar como el NEMA 17.
  • Regulación de la corriente de salida para una operación silenciosa del motor paso a paso.
  • Traductor integrado para una operación sencilla con solo dos pines de control: uno para los pasos y otro para la dirección.

Especificaciones Técnicas

Aquí están las especificaciones del DRV8825:

  1. Motor output voltage: 8.2V – 45V
  2. Logic voltage: Built-In 3.3V output
  3. Corriente continua por fase: 1A
  4. Corriente máxima por fase: 2.5A
  5. Resolución de microstep: completo, 1/2, 1/4, 1/8, 1/16 y 1/32

Para obtener más información, consulta la hoja de datos del DRV8825.

Control de Motor Paso a Paso con Arduino

Las conexiones entre el módulo DRV8825 y Arduino son sencillas. Comienza conectando el pin RST al pin adyacente SLP/SLEEP y 5V en el Arduino para mantener habilitado el controlador. Luego, conecta GND LOGIC a la tierra del Arduino, y DIR y STEP a los pines de salida digital #2 y #3 del Arduino. Finalmente, conecta el suministro de energía del motor a los pines VMOT y GND MOT.

Recuerda colocar un capacitor electrolítico grande de 100μF a través de los pines de suministro de energía del motor para evitar grandes picos de voltaje.

Código de Arduino – Sin una biblioteca

El siguiente sketch te mostrará cómo controlar la velocidad y la dirección de giro de un motor paso a paso bipolar utilizando el controlador de motor paso a paso DRV8825:

// Define pin connections & motor's steps per revolution
const int dirPin = 2;
const int stepPin = 3;
const int stepsPerRevolution = 200;

void setup()
{
    // Declare pins as Outputs
    pinMode(stepPin, OUTPUT);
    pinMode(dirPin, OUTPUT);
}
void loop()
{
    // Set motor direction clockwise
    digitalWrite(dirPin, HIGH);

    // Spin motor slowly
    for(int x = 0; x < stepsPerRevolution; x++)
    {
        digitalWrite(stepPin, HIGH);
        delayMicroseconds(2000);
        digitalWrite(stepPin, LOW);
        delayMicroseconds(2000);
    }
    delay(1000); // Wait a second
    
    // Set motor direction counterclockwise
    digitalWrite(dirPin, LOW);

    // Spin motor quickly
    for(int x = 0; x < stepsPerRevolution; x++)
    {
        digitalWrite(stepPin, HIGH);
        delayMicroseconds(1000);
        digitalWrite(stepPin, LOW);
        delayMicroseconds(1000);
    }
    delay(1000); // Wait a second
}

Conclusión

¡Con el controlador DRV8825 y Arduino, puedes controlar precisamente tu motor paso a paso para aplicaciones como impresoras 3D y máquinas CNC! Sigue explorando las posibilidades y experimenta con tus propios proyectos.


5 comentarios en «Controle el motor paso a paso con el módulo controlador DRV8825 y Arduino»

  1. ¡Me encantó este artículo! Siempre es genial aprender nuevas formas de controlar motores paso a paso y el uso del módulo controlador DRV8825 con Arduino parece ser una excelente opción. ¡Gracias por la información!

Deja un comentario