Para aplicaciones donde utilizas un solo motor paso a paso, un controlador como el L298N está bien, pero si deseas construir tu propia máquina CNC o impresora 3D, necesitarás un controlador de motor paso a paso dedicado como el A4988.
Debido a la simplicidad del control del motor paso a paso y la variedad de modos de paso proporcionados por el controlador A4988, 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 camas, cabezales y ensamblajes. en varios diseños de impresoras 3D, fresado y trazado CNC.
El hecho de que solo requiera dos pines para controlar la velocidad y la dirección de un motor paso a paso bipolar como el NEMA 17 también es bastante bueno.
¿Sabes cómo funcionan los motores paso a paso?
Los motores paso a paso utilizan una rueda dentada y electroimanes para girar la rueda un “paso” a la vez.
Cada pulso ALTO enviado energiza la bobina, atrayendo los dientes más cercanos a la rueda dentada e impulsando el motor un paso hacia adelante.
La forma en que pulsa estas bobinas afecta en gran medida el comportamiento del motor.
La secuencia de pulsos determina la dirección de giro del motor.
La frecuencia de los pulsos determina la velocidad del motor.
El número de pulsos determirá cuantos pasos girará el motor.
En el corazón del módulo se encuentra un controlador Allegro – A4988. A pesar de su pequeño tamaño (0.8″x0.6″), tiene un gran rendimiento.
El controlador de motor paso a paso A4988 tiene una capacidad de unidad de salida de hasta 35 V y ±2 A. Esto le permite controlar un motor paso a paso bipolar, como el NEMA 17, con una corriente de salida de hasta 2 A por bobina.
Además, la corriente de salida está regulada, lo que permite un funcionamiento silencioso del motor paso a paso y la eliminación de la resonancia o timbre que es común en los diseños de controladores paso a paso no regulados.
El controlador tiene un traductor incorporado para una fácil operación. Esto reduce la cantidad 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 cinco resoluciones de paso diferentes: paso completo, medio paso, cuarto de paso, octavo paso y decimosexto paso.
Para garantizar un funcionamiento confiable, el controlador tiene características adicionales como bajo voltaje, disparo directo, cortocircuito, sobrecorriente y protección térmica.
Especificaciones técnicas
Aquí están las especificaciones completas:
Para obtener más información, consulta la hoja de datos.
Configuración de pines del controlador del motor A4988
El controlador A4988 tiene un total de 16 pines que lo conectan con el mundo exterior. El pinout es el siguiente:
Conozcamos todos los pines uno por uno.
Pines de alimentación
El A4988 en realidad requiere dos conexiones de suministro de energía.
VDD y GND se utilizan para alimentar el circuito lógico interno, que puede oscilar entre 3 V y 5,5 V.
Mientras,
VMOT y GND suministra energía al motor, que puede variar de 8V a 35V.
De acuerdo con la hoja de datos, para mantener 4A, el suministro del motor requiere 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 solo está parcialmente protegido contra picos de voltaje. En algunos casos, estos picos pueden superar los 35V (la tensión nominal máxima del A4988), lo que puede causar daños permanentes en la placa e incluso en el motor.
Una forma de proteger el controlador de tales picos es colocar un condensador electrolítico grande de 100 F (o al menos 47 F) a través de las clavijas de alimentación del motor.
Pines de selección de micropasos
El controlador A4988 admite micropasos al dividir un solo paso en pasos más pequeños. Esto se logra energizando las bobinas con niveles de corriente intermedios.
Por ejemplo, si eliges conducir el NEMA 17 (con un ángulo de paso de 1,8° o 200 pasos/revolución) en modo de un cuarto de paso, el motor producirá 800 micropasos por revolución.
El controlador A4988 tiene tres entradas selectoras de tamaño de paso (resolución): MS1, MS2, MS3. Al configurar los niveles lógicos apropiados para estos pines, podemos configurar el motor en una de las resoluciones de cinco pasos.
Estos tres pines de selección de micropasos se bajan mediante resistencias desplegables internas, por lo que, si los dejas desconectados, el motor funcionará en modo de paso completo.
Pines de control
El A4988 tiene dos entradas de control: PASO y DIR.
DIR La entrada controla la dirección de giro del motor. Colocandolo en ALTO gira el motor en el sentido de las agujas del reloj, mientras que en BAJO lo gira en sentido contrario a las agujas del reloj.
Si deseas que el motor solo gire en una dirección, puedes conectar el DIR directamente a VCC o GND.
Los pines STEP y DIR no están sujetos a ningún voltaje específico, por lo que no debes dejarlos flotando en su aplicación.
Pines para controlar el encendido del módulo
El A4988 tiene tres entradas separadas para controlar sus estados de energía: EN, RST y SLP.
EN es un pin de entrada bajo activo. Cuando este pin se coloca en BAJO, el controlador A4988 está habilitado. De forma predeterminada, este pin se baja, por lo que, a menos que se coloque en ALTO, el controlador siempre está habilitado. Este pin es particularmente útil cuando se implementa un sistema de parada o parada de emergencia.
SLP es un pin de entrada bajo activo. Colocando este pin BAJO pone el controlador en modo de suspensión, reduciendo el consumo de energía al mínimo. Puedes usar esto para ahorrar energía, especialmente cuando el motor no está en uso.
RST es una entrada baja activa también. Cuando este pin se coloca BAJO, todas las entradas de PASO se ignoran. También restablece el controlador configurando el traductor interno en un estado “inicio” predefinido. El estado de origen es básicamente la posición inicial desde la que arranca el motor y varía en función de la resolución de micropasos.
RST es un pin flotante. Si no se está usando este pin, conéctalo a un pin SLP/SLEEP adyacente para dejarlo en ALTO y habilitar el controlador.
Después del evento de activación (lógica ALTA en el pin SLEEP), espera 1 milisegundo antes de emitir un comando de Paso para permitir que la bomba de carga se estabilice.
Pines de salida
Los canales de salida del controlador de motor A4988 se dividen al costado del módulo con pines 1B, 1A, 2A, 2B.
Puedes conectar cualquier motor paso a paso bipolar de tamaño pequeño a mediano, como NEMA 17, a estos pines.
Cada pin de salida puede suministrar hasta 2A al motor. Sin embargo, la cantidad de corriente suministrada al motor está determinada por la fuente de alimentación, el sistema de enfriamiento y la configuración de limitación de corriente del sistema.
Sistema de refrigeración: disipador de calor
La disipación de energía del controlador IC A4988 provoca un aumento de la temperatura, lo que podría dañar el IC si excede su capacidad.
A pesar de tener una clasificación de corriente máxima de 2A por bobina, el controlador IC A4988 solo puede suministrar alrededor de 1A por bobina sin sobrecalentarse. Para lograr más de 1A por bobina, se requiere un disipador de calor u otro método de enfriamiento.
Por lo general, el controlador A4988 viene con el disipador de calor. Se recomienda que se instale el disipador de calor antes de usar el controlador.
Límite de corriente
Antes de hacer funcionar el motor, debes 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.
El controlador A4988 incluye un pequeño potenciómetro de ajuste para establecer el límite de corriente.
Existen dos métodos para realizar 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. Echa un vistazo a la hoja de datos del motor paso a paso. Toma nota de la corriente nominal. En nuestro caso se utiliza NEMA 17 200pasos/rev, 12V 350mA.
2. Desconecta los tres pines de selección de micropasos para poner el controlador en modo de paso completo.
3. Sosten el motor en una posición fija sin cronometrar la entrada STEP.
4. Mide el voltaje (Vref) en el potenciómetro de metal mientras ajustas.
5. Ajusta el voltaje Vref usando la fórmula
Vref = Límite de corriente / 2,5
Por ejemplo, si el motor tiene una potencia nominal de 350 mA, establecería el voltaje de referencia en 0,14 V.
Puedes realizar este ajuste rápida y fácilmente conectando un extremo del cable de prueba con pinza caiman al vástago de un destornillador de metal y el otro extremo al multímetro. Esto permite medir el voltaje mientras realizad 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. Echa un vistazo a la hoja de datos del motor paso a paso. Toma nota de la corriente nominal. En nuestro caso se utiliza NEMA 17 200pasos/rev, 12V 350mA.
2. Desconecta los tres pines de selección de micropasos para poner el controlador en modo de paso completo.
3. Sosten el motor en una posición fija sin cronometrar la entrada STEP. No dejes la entrada STEP flotante; en su lugar, conéctalo a una fuente de alimentación lógica (5V).
4. Coloca el amperímetro en serie con una de las bobinas del motor paso a paso y mide la corriente real que fluye.
5. Toma un destornillador pequeño y ajusta el potenciómetro de límite de corriente hasta que alcance la corriente nominal.
Si alguna vez cambias el voltaje lógico (VDD), tendrás que volver a hacer este ajuste.
Cableado de un controlador de motor paso a paso A4988 a un Arduino
Ahora que sabemos todo sobre el controlador, conectémoslo a nuestro Arduino.
Las conexiones son sencillas. Comienza conectando VDD y GND (junto a VDD) a los pines de tierra y 5V de Arduino. Conecta los pines de entrada DIR y STEP a los pines de salida digital #2 y #3 de Arduino.
Conecta el motor paso a paso a los pines 2B, 2A, 1A y 1B. En realidad, el módulo A4988 está convenientemente diseñado para que coincida con el conector de 4 pines de los motores paso a paso bipolares, por lo que no debería ser un problema
Advertencia:
No intentes conectar o desconectar el motor paso a paso mientras el controlador está funcionando; hacerlo podría dañar el controlador.
Para mantener el controlador habilitado, conecta el pin RST al pin SLP/SLEEP adyacente. Mantén los pines de selección de micropasos desconectados si deseas hacer funcionar el motor en modo de paso completo.
Finalmente, conecta la fuente de alimentación del motor a los pines VMOT y GND. Recuerda colocar un capacitor electrolítico de desacoplamiento grande de 100 μF entre los pines de la fuente de alimentación del motor para evitar grandes picos de voltaje.
Código Arduino: sin librerías
El sketh a continuación muestra 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 A4988 y puede servir como base para experimentos y proyectos más 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 código comienza definiendo los pines Arduino a los que se conectan los pines STEP y DIR del A4988. También se define una variable llamada stepsPerRevolution. Puedes configurarlo para que coincida con las especificaciones del motor paso a paso
const int dirPin = 2;
const int stepPin = 3;
const int stepsPerRevolution = 200;
En la sección de configuración, todos los pines de control del motor están configurados como SALIDA digital.
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 con intervalos de un segundo.
Control de la dirección de giro: Para controlar la dirección de giro del motor, el pin DIR se establece en ALTO o BAJO. Una entrada ALTA gira el motor en sentido horario, mientras que una entrada BAJA lo gira en sentido antihorario.
digitalWrite(dirPin, HIGH);
Velocidad de control: 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 simplemente está puesto en la salida ALTO, esperando unos pocos milisegundos, luego puesto BAJO y esperando nuevamente. Al ajustar el retardo, puedes modificar 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 librería AccelStepper
Controlar un paso a paso sin una biblioteca está perfectamente bien para aplicaciones simples de un solo motor. Sin embargo, si deseas controlar varios motores paso a paso, deberás usar una biblioteca.
Entonces, para nuestro próximo experimento, usaremos una librería avanzada de motores paso a paso llamada AccelStepper . Es compatible con:
Aceleración y desaceleración.
Múltiples motores de pasos simultáneos, con pasos independientes concurrentes en cada motor de pasos.
Esta biblioteca no está incluida en el IDE de Arduino, por lo que primero debes instalarla.
Instalación de la librería
Para instalar la biblioteca, ve a Sketch > Incluir bibliotecas > Administrar bibliotecas… Espera a que el Administrador de bibliotecas descargue el índice de la biblioteca y actualiza la lista de bibliotecas instaladas.
Filtra la búsqueda escribiendo ‘accelstepper‘. Haz clic en la primera entrada y luego selecciona Instalar.
Código Arduino
Aquí hay un código simple que acelera el motor paso a paso en una dirección y luego desacelera para detenerse. Después de una revolución, el motor invierte su dirección de giro y repite el proceso.
// Include the AccelStepper Library
#include <AccelStepper.h>
// Define pin connections
const int dirPin = 2;
const int stepPin = 3;
Explicación del código:
// 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();
}
El sketch comienza al incluir la biblioteca AccelStepper recién instalada.
#include <AccelStepper.h>
En primer lugar, se definen los pines de Arduino, a los que se conectan los pines STEP y DIR del A4988. El motorInterfaceType también se establece en 1. (1 significa un controlador paso a paso externo con pines de paso y dirección).
// Define pin connections
const int dirPin = 2;
const int stepPin = 3;
// Define motor interface type
#define motorInterfaceType 1
A continuación, se crea una instancia de la biblioteca paso a paso nombrada myStepper.
En la función de configuración, la velocidad máxima permitida del motor se establece en 1000 (el motor acelerará hasta esta velocidad cuando lo ejecutemos). La tasa de aceleración/desaceleración luego se configura para agregar aceleración y desaceleración a los movimientos del motor paso a paso.
La velocidad constante se establece en 200. Y, debido a que NEMA 17 da 200 pasos por vuelta, la posición de destino también se establece en 200.
En la función de bucle, If se utiliza una instrucción para determinar la distancia que debe recorrer el motor (mediante la lectura de la propiedad distanceToGo) antes de alcanzar la posición de destino (establecida por moveTo). Cuando distanceToGo llega a cero, el motor gira en la dirección opuesta estableciendo la posicion moveTo negativa de su posición actual.
En la parte inferior del bucle, notarás que run() llama a la función. Esta es la función más crítica porque el paso a paso no se moverá a menos que se ejecute esta función.
void loop() {
if (myStepper.distanceToGo() == 0)
myStepper.moveTo(-myStepper.currentPosition());
myStepper.run();
}