Icono del sitio AranaCorp

Uso de un controlador de motor paso a paso DRV8825

En este tutorial veremos cómo accionar un motor paso a paso bipolar utilizando un driver DRV8825. Este tutorial es compatible con los drivers de motores paso a paso comúnmente utilizados en proyectos de fresado digital o impresoras 3D (DRV8825, SilentStepStick, etc.).

Hardware

Principio de funcionamiento

Los controladores de motor paso a paso permiten controlar los motores de forma eficaz utilizando sólo dos señales de control, STEP y DIR. El número de impulsos enviados al driver corresponde al número de pasos dados, la frecuencia de impulsos corresponde a la velocidad del motor y la señal dir corresponde al sentido de giro del motor. El módulo DRV8825 se encarga de enviar la secuencia a las dos bobinas del motor en función de las órdenes recibidas como entrada.

Especificaciones técnicas DRV8825

M0M1M2Microstep resolution
LowLowLowFull step
HighLowLow1/2 step
LowHighLow1/4 step
HighHighLow1/8 step
LowLowHigh1/16 step
HighLowHigh1/32 step
LowHighHigh1/32 step
HighHighHigh1/32 step

Diagrama

Antes de conectar el motor al controlador, ajuste correctamente el limitador de corriente. Para ello, es necesario:

MaxCurrent=Vref x 2 

Por ejemplo:

Si el valor de corriente es de 1A, el valor mostrado en el multímetro debe ser igual a 0,5V.

MaxCurrent=1.0A –> Vref = 0.5V

La resolución de los pasos del controlador puede modificarse para una mayor precisión. Esta configuración se define poniendo los pines M0, M1 y M2 en ALTO o BAJO según la siguiente tabla lógica.

M0M1M2Microstep resolution
LowLowLowFull step
HighLowLow1/2 step
LowHighLow1/4 step
HighHighLow1/8 step
LowLowHigh1/16 step
HighLowHigh1/32 step
LowHighHigh1/32 step
HighHighHigh1/32 step

Código por el controlador DRV8825

Para accionar el driver del motor paso a paso, todo lo que tenemos que hacer es enviar un estado HIGH o LOW al pin DIR y un pulso al pin STEP.

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


const int stepsPerRev=200;
int pulseWidthMicros = 100;  // microseconds
int millisBtwnSteps = 1000;

void setup() {
  Serial.begin(9600);
  pinMode(stepPin, OUTPUT);
  pinMode(dirPin, OUTPUT);
 
  Serial.println(F("A4988 Initialized"));
}

void loop() {
  Serial.println(F("Running clockwise"));
  digitalWrite(dirPin, HIGH); // Enables the motor to move in a particular direction
  // Makes 200 pulses for making one full cycle rotation
  for (int i = 0; i < stepsPerRev; i++) {
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(pulseWidthMicros);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(millisBtwnSteps);
  }
  delay(1000); // One second delay

  Serial.println(F("Running counter-clockwise"));
  digitalWrite(dirPin, LOW); //Changes the rotations direction
  // Makes 400 pulses for making two full cycle rotation
  for (int i = 0; i < 2*stepsPerRev; i++) {
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(pulseWidthMicros);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(millisBtwnSteps);
  }
  delay(1000);
}

Para más funciones, puede utilizar la biblioteca AccelStepper.h

Aplicaciones

Fuentes

Salir de la versión móvil