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.
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:
- Alimenta la placa —VMOT conectado, motor desconectado. El chip necesita tensión de motor para regular, pero no necesitas que el motor gire.
- Busca la corriente nominal de fase del motor. Un NEMA 17 común es de 1,5 A o 1,7 A.
- 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.
- Calcula Vref con la fórmula y la resistencia de sensado que realmente tienes.
- 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