En este tutorial, veremos cómo accionar un motor paso a paso bipolar utilizando un driver A4988. 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 A4988
- Cable USB A macho a USB B macho
Principio de funcionamiento
Los controladores de motor paso a paso permiten controlar eficazmente los motores 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 A4988 se encarga de enviar la secuencia a las dos bobinas del motor en función de las órdenes recibidas como entrada.
Especificaciones técnicas A4988
Minimum operating voltage | 8 V |
Maximum operating voltage | 35 V |
Continuous current per phase | 1.2 A |
Maximum current per phase | 2 A |
Minimum logic voltage | 3 V |
Maximum logic voltage | 5.5 V |
Microstep resolution | full, 1/2, 1/4, 1/8 and 1/16 |
Reverse voltage protection? | No |
Dimensions | 15.5 × 20.5 mm (0.6″ × 0.8″) |
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.5
Por ejemplo:
Si el valor de corriente es de 1A, el valor mostrado en el multímetro debe ser igual a 0,4V.
MaxCurrent=1.0A –> Vref = 0.4V
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.
MS1 | MS2 | MS3 | Résolution Microstepping |
Low | Low | Low | Pas complet (full step) |
High | Low | Low | 1/2 pas |
Low | High | Low | 1/4 de pas |
High | High | Low | 1/8 ième de pas |
High | High | High | 1/16 ième de pas |
Código
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