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
- Arduino UNO
- Controlador paso a paso DRV8825 (o A4988 o SilentStepStick)
- Cable USB A macho a USB B macho
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
M0 | M1 | M2 | Microstep resolution |
---|---|---|---|
Low | Low | Low | Full step |
High | Low | Low | 1/2 step |
Low | High | Low | 1/4 step |
High | High | Low | 1/8 step |
Low | Low | High | 1/16 step |
High | Low | High | 1/32 step |
Low | High | High | 1/32 step |
High | High | High | 1/32 step |
Diagrama
Antes de conectar el motor al controlador, ajuste correctamente el limitador de corriente. Para ello, es necesario:
- alimentar el Arduino y el Shield con la tensión del motor.
- A continuación, coloque un voltímetro entre el potenciómetro y GND.
- Gire el potenciómetro con un destornillador hasta obtener el valor que sigue la regla siguiente.
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.
M0 | M1 | M2 | Microstep resolution |
---|---|---|---|
Low | Low | Low | Full step |
High | Low | Low | 1/2 step |
Low | High | Low | 1/4 step |
High | High | Low | 1/8 step |
Low | Low | High | 1/16 step |
High | Low | High | 1/32 step |
Low | High | High | 1/32 step |
High | High | High | 1/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
- Control de un motor paso a paso
- Control de varios motores con un CNC Shield