2 de junio de 2026 · 9 min

Tu primer motor paso a paso con NEMA 17 y A4988

El primer paso (literal) hacia la CNC o la impresora 3D propia: mover un NEMA 17 con un A4988 y controlar la velocidad con un potenciómetro. Con el ajuste de Vref explicado de una vez por todas.

arduinomotoresa4988cncproyectos

Antes de soñar con la CNC o la impresora 3D casera, hay un rito de iniciación: hacer girar un motor paso a paso, bien, entendiendo qué pasa. Este proyecto es exactamente eso — un NEMA 17, un driver A4988 y un potenciómetro para controlar velocidad y sentido. Es la base de la que salen todas las máquinas que después dan gusto mostrar.

Si todavía dudás entre A4988, DRV8825 o ULN2003, primero pasá por nuestra guía de drivers. Acá vamos directo a la práctica.

Lista de compra

ComponenteCantidadPara qué
Arduino UNO1Genera los pulsos
Motor NEMA 171El músculo
Driver A49881La inteligencia de potencia
Fuente 12V 3A1Potencia del motor
Capacitor electrolítico 100 µF1Protege el driver
Potenciómetro 10 kΩ1Control de velocidad
Protoboard + cables1Montaje

Conexionado

A4988 (montado en protoboard):

Potenciómetro: extremos a 5V y GND, cursor a A0.

Antes de energizar: el Vref

El potenciómetro chiquito del A4988 fija la corriente máxima. De fábrica puede venir en cualquier posición. Con el multímetro entre el tornillo del pote y GND (driver alimentado, motor desconectado), ajustá el Vref = corriente deseada × 0.8. Para un NEMA 17 típico de 1.2 A: unos 0.9 V para arrancar con margen. Dos minutos que separan un motor suave de un driver que se apaga a los tirones.

El código

const int PIN_STEP = 3;
const int PIN_DIR = 4;
const int PIN_POTE = A0;

const int PASOS_POR_VUELTA = 200;  // NEMA 17 estandar: 1.8 grados/paso

void setup() {
  pinMode(PIN_STEP, OUTPUT);
  pinMode(PIN_DIR, OUTPUT);
}

void loop() {
  int lectura = analogRead(PIN_POTE);  // 0-1023

  // mitad izquierda del pote: un sentido; mitad derecha: el otro.
  // cuanto mas lejos del centro, mas rapido.
  int desvio = lectura - 512;
  digitalWrite(PIN_DIR, desvio > 0);

  int magnitud = abs(desvio);
  if (magnitud < 40) return;  // zona muerta central: motor quieto

  // periodo entre pasos: de 2000 us (lento) a 400 us (rapido)
  int periodo = map(magnitud, 40, 512, 2000, 400);

  digitalWrite(PIN_STEP, HIGH);
  delayMicroseconds(periodo / 2);
  digitalWrite(PIN_STEP, LOW);
  delayMicroseconds(periodo / 2);
}

Pote al centro: quieto. Girás a la derecha: arranca en un sentido y acelera. A la izquierda: lo mismo al revés. Con esto ya entendiste lo esencial de cómo una CNC mueve sus ejes.

Errores comunes (los mismos de siempre, y uno nuevo)

  1. RESET y SLEEP sin puentear. El driver queda dormido y “no anda nada”. Puente y listo.
  2. Desconectar el motor con todo energizado. Mata al A4988 al instante. Fuente apagada antes de tocar cables de motor, siempre.
  3. Vref sin ajustar. Motor que vibra sin girar (corriente baja) o driver que arranca y se corta a los segundos (corriente alta, protección térmica).
  4. Perder pasos al acelerar. Los paso a paso no arrancan a máxima velocidad: necesitan rampa. Nuestro código acelera con el pote; si programás movimientos automáticos, subí la velocidad gradualmente.
  5. Bobinas mal apareadas. Si el motor tiembla sin girar, intercambiá un cable de un par. Con los pares bien armados, gira suave.

Para llevarlo más lejos

Todo el banco de pruebas

NEMA 17, A4988, fuente, capacitores y Arduino: todo en electronicabyp.com.ar con envío a todo el país. ¿Vas encaminado a una CNC completa? Escribinos por WhatsApp y armamos la lista entera de una.


¿Necesitás los componentes de esta guía? Los encontrás en electronicabyp.com.ar — hacemos envíos a toda Argentina. Para cotizaciones por cantidad, escribinos por WhatsApp.