Tutorial · Principiante · 30 min

Cableado del A4988 y Vref: el límite de corriente

A4988 a un Arduino y un NEMA 17: fija el límite de corriente con un multímetro. Fórmula de Vref, la trampa de la resistencia de sensado y el coste de saltarla.

Para qué sirve realmente el manejador

Un A4988 no es un interruptor. Es un regulador de corriente que resulta que conmuta.

Esa distinción importa porque el devanado de un paso a paso es un inductor de baja resistencia —2 a 4 ohmios es lo típico. Conecta un devanado de 2,8 Ω directo a 24 V y la ley de Ohm dice 8,6 A, lo que destruiría el motor en segundos. El trabajo del manejador es trocear la alimentación encendiéndola y apagándola miles de veces por segundo para que la corriente media se asiente en un valor que tú eliges, y luego repartir esa corriente entre las dos bobinas en el patrón que hace girar el campo.

Así que al manejador hay que decirle un número: cuánta corriente por fase. Ese es el límite de corriente, y fijarlo es el único ajuste de la placa. Todo lo demás —micropasos, dirección, habilitación— es un pin que fijas una vez.

Una placa portadora A4988 dibujada desde arriba con ocho pads chapados en oro a cada lado. La columna izquierda de pads dice ENABLE, MS1, MS2, MS3, RESET, SLEEP, STEP y DIR, con STEP y DIR resaltados. La columna derecha dice VMOT, GND, 2B, 2A, 1A, 1B, VDD y GND, con VMOT resaltado en rojo. Un potenciómetro de ajuste arriba está etiquetado como el potenciómetro VREF para medir con un medidor, y un disipador con aletas cubre el chip manejador. Dos pequeñas resistencias de sensado abajo en la placa están marcadas como R100 igual a 0,1 ohmios o R050 igual a 0,05 ohmios, con una advertencia de leer las tuyas antes de calcular nada.
Dieciséis pads, un potenciómetro y dos diminutas resistencias que cambian la aritmética. STEP y DIR son los únicos dos pines que tu programa toca en ejecución; todo lo demás es configuración. Descargar SVG

Cablearlo

Pin del A4988 Va a Nota
VMOT Alimentación del motor 8–35 V No los 5 V del Arduino. Nunca.
GND (junto a VMOT) Tierra de la alimentación del motor El retorno de alta corriente
VDD 5 V del Arduino Alimentación lógica, unos pocos miliamperios
GND (junto a VDD) GND del Arduino Debe compartir tierra con la alimentación del motor
1A, 1B Una bobina del motor En cualquier orden —solo invierte la dirección
2A, 2B La otra bobina del motor Equivocarse en el emparejamiento es el error fatal
STEP Cualquier salida del Arduino Un pulso, un micropaso
DIR Cualquier salida del Arduino En alto o en bajo elige la dirección
ENABLE GND, o un pin del Arduino Activo en bajo: conecta a bajo para energizar
RESET, SLEEP Unidos entre sí Ambos deben estar en alto; puentearlos juntos lo logra
MS1, MS2, MS3 Ver la tabla de abajo Flotante significa paso completo

Dos reglas de cableado concentran casi todo el riesgo:

  • Un electrolítico de 100 µF entre VMOT y GND, cerca de la placa. No opcional. La hoja de datos y la documentación de cada portadora lo dicen, y la razón es que el troceador consume corriente en ráfagas bruscas; sin capacidad cercana, la inductancia de los cables de alimentación convierte esas ráfagas en picos de tensión que superan los 35 V nominales del chip. Las placas mueren al encender, no durante el funcionamiento, y esta suele ser la causa.
  • Nunca desconectes el motor con el manejador alimentado. Interrumpir una bobina energizada produce una gran patada inductiva sin adónde ir. Apaga primero, siempre.

Si los cuatro hilos del motor no están etiquetados, encuentra los pares con un multímetro: dentro de una bobina leerás unos pocos ohmios, y entre bobinas leerás circuito abierto. Emparéjalos por continuidad, y luego conecta un par a 1A/1B y el otro a 2A/2B.

Fijar el límite de corriente

Hay un potenciómetro en la placa, y girarlo cambia una tensión de referencia que el chip compara con la tensión en sus resistencias de sensado. Mides esa referencia —Vref— entre el cursor del potenciómetro y tierra.

La fórmula en un A4988 es:

Vref = I_phase × R_sense × 8

Aquí está la trampa que cuesta motores. R_sense no es la misma en cada placa. Las portadoras vienen con resistencias de sensado de 0,1 Ω o de 0,05 Ω, y la respuesta de la fórmula difiere en un factor de dos:

Resistencia de sensado Marcada en la placa Vref para 1,0 A Vref para 1,2 A Vref para 1,5 A
0.1 Ω R100 0.80 V 0.96 V 1.20 V
0.05 Ω R050 0.40 V 0.48 V 0.60 V
0.068 Ω R068 0.54 V 0.65 V 0.82 V

Lee la marca en las dos resistencias SMD negras cerca del borde inferior de la placa antes de calcular nada. Fija 1,2 V en una placa con resistencias de 0,05 Ω y acabas de pedir 3 A a través de un motor de 1,7 A.

El procedimiento:

  1. Alimenta la placa —VMOT conectado, motor desconectado. El chip necesita tensión de motor para regular, pero no necesitas que el motor gire.
  2. Busca la corriente nominal de fase del motor. Un NEMA 17 común es de 1,5 A o 1,7 A.
  3. Toma el 70–85 % como tu objetivo. La corriente nominal supone una refrigeración de hoja de datos que no tienes, y el último 20 % de corriente compra muy poco par mientras produce mucho calor.
  4. Calcula Vref con la fórmula y la resistencia de sensado que realmente tienes.
  5. Pon la punta negra del medidor en un pin de tierra y la punta roja en el tornillo metálico del potenciómetro. Gíralo despacio —un cuarto de vuelta es un cambio grande— hasta que el medidor lea tu número.

Merece la pena usar un destornillador pequeño de cerámica. Uno metálico que puentee el potenciómetro con otra cosa con la placa en tensión es una forma común de destruir un manejador.

Conviene decirlo claro: el límite de corriente es el T_peak en la ecuación de par que gobierna todo lo que hace un paso a paso. Ponlo bajo y el motor se retrasa más para la misma carga, y pierde pasos antes. Ponlo alto y el motor se calienta por un par que quizá no necesita. Es el único número con el que conviene ser deliberado.

Pines de micropasos

MS1, MS2 y MS3 tienen pull-down internos, así que todo lo que dejes flotante lee bajo:

MS1 MS2 MS3 Resolución Pasos por vuelta
bajo bajo bajo Paso completo 200
alto bajo bajo Medio paso 400
bajo alto bajo Cuarto de paso 800
alto alto bajo Octavo de paso 1600
alto alto alto Decimosexto de paso 3200

La mayoría de los montajes puentean los tres en alto y los dejan ahí. La razón no es la precisión —los micropasos no compran precisión bajo carga— sino que el decimosexto de paso evita que el motor resuene en cada paso, lo que deja la máquina silenciosa y evita que la ondulación aparezca en el trabajo. El coste es que tu microcontrolador ahora tiene que emitir dieciséis veces más pulsos por milímetro, lo que es una restricción real en un Arduino Uno por encima de unos 10 000 pasos por segundo.

Manejarlo

El programa mínimo útil. Fíjate en que no hay ninguna librería aquí: un paso es un pulso, y eso es genuinamente todo lo que es.

const int STEP_PIN = 3;
const int DIR_PIN  = 4;
const int EN_PIN   = 5;   // active LOW

void setup() {
  pinMode(STEP_PIN, OUTPUT);
  pinMode(DIR_PIN, OUTPUT);
  pinMode(EN_PIN, OUTPUT);
  digitalWrite(EN_PIN, LOW);      // energise the coils
  digitalWrite(DIR_PIN, HIGH);
}

void loop() {
  // One revolution at 1/16 stepping = 3200 pulses.
  for (int i = 0; i < 3200; i++) {
    digitalWrite(STEP_PIN, HIGH);
    delayMicroseconds(2);         // datasheet minimum is 1 us
    digitalWrite(STEP_PIN, LOW);
    delayMicroseconds(300);       // this delay IS the speed
  }
  delay(1000);
}

Ese código funciona y también es exactamente lo que no deberías entregar, por dos razones.

El primero es que la tasa de pasos salta de cero al máximo de inmediato. Pide una tasa por encima del límite de arranque del motor y zumbará sin ir a ningún sitio —con los valores por defecto del simulador paso a paso, ordenar velocidad máxima desde parado pierde 280 pasos completos en un movimiento de 60 mm y deja el eje en 4 mm. El mismo movimiento con rampa aterriza exactamente en el objetivo. Esa es la diferencia que marca un perfil de aceleración, y no es un refinamiento.

El segundo es que delayMicroseconds bloquea. Mientras el bucle genera pasos, nada más en el microcontrolador funciona —sin comprobación de finales de carrera, sin serie, sin segundo eje. Para cualquier cosa real, usa el patrón de temporización no bloqueante o entrégaselo a AccelStepper, que implementa la rampa y la planificación por ti:

#include <AccelStepper.h>
AccelStepper axis(AccelStepper::DRIVER, STEP_PIN, DIR_PIN);

void setup() {
  pinMode(EN_PIN, OUTPUT);
  digitalWrite(EN_PIN, LOW);
  axis.setMaxSpeed(8000);        // steps/s  -> 100 mm/s at 80 steps/mm
  axis.setAcceleration(16000);   // steps/s2 -> 200 mm/s2
  axis.moveTo(80 * 50);          // 50 mm
}

void loop() {
  axis.run();                    // returns immediately; call it constantly
}

setMaxSpeed y setAcceleration te dan un perfil trapezoidal y nada más —no hay opción de curva S. Si quieres un perfil limitado en jerk, generas tú mismo la consigna.

¿A4988 o una de las alternativas?

Manejador Corriente Micropasos Ruido Elígelo cuando
A4988 1 A sin nada, ~1,5 A refrigerado hasta 1/16 Audible Barato, en todas partes, bien documentado
DRV8825 1,5 A sin nada, ~2,2 A refrigerado hasta 1/32 Audible Necesitas más corriente o pasos más finos
TMC2208 ~1,2 A hasta 1/256 Casi silencioso El ruido importa; es la razón por la que las impresoras cambiaron
TMC2209 ~1,7 A hasta 1/256 Casi silencioso Como arriba, más retorno a origen sin sensor
ULN2003 + 28BYJ-48 ~0,3 A Medio paso Zumbido Una demo a escala de juguete, no una máquina

El DRV8825 es compatible en pines pero su fórmula de Vref es distinta —Vref = I × 0.5— y su potenciómetro gira al revés. Cambiar uno sin releer la fórmula es una forma clásica de cocinar un motor.

Los manejadores TMC valen el dinero en cuanto la máquina vive en un sitio donde puedes oírla. Hacen el mismo trabajo con una forma de onda de corriente más suave, por eso una impresora con ellos hace ruido de ventilador en lugar de ruido de motor.

Cuando algo sale mal

Síntoma Causa Solución
El motor vibra pero no gira Pares de bobinas mal cableados Encuentra los pares por continuidad y recablea
No pasa nada en absoluto ENABLE flotante o en alto, o RESET/SLEEP en bajo Conecta ENABLE a bajo; puentea RESET con SLEEP
El manejador se calienta hasta no poder tocarlo y luego corta Límite de corriente demasiado alto Remide Vref; añade disipador y ventilación
El motor está caliente pero el manejador está bien Normal 60–80 °C en la carcasa es lo esperado
Pasos perdidos solo en movimientos rápidos Tensión de alimentación demasiado baja para esa velocidad Sube VMOT —más corriente no ayudará
Pasos perdidos en aceleraciones fuertes Rampa demasiado agresiva, o corriente demasiado baja Baja la aceleración, o sube Vref hacia la nominal
La placa murió en cuanto se alimentó Falta el condensador grande en VMOT Electrolítico de 100 µF, cerca de los pines
El motor mantiene posición pero gira áspero Pasos completos Puentea MS1–MS3 en alto para 1/16
La resistencia lee abierto en un «par» Esos dos hilos son de bobinas distintas Reemparéjalos

Siguiente

Con el manejador ajustado, la pregunta restante es cuántos pulsos vale un milímetro de recorrido —lo que depende por completo de lo que gire el eje. Eso es pasos por milímetro, y es el número contra el que se calibra todo lo demás de la máquina.

Explora el grafo

Forma parte de estos montajes

Proyectos y rutas de aprendizaje que incluyen este tutorial.

Lecturas adicionales

Referencias