Simulador interactivoIntermedio

Simulador paso a paso: desfase y pérdida de pasos

Observe cómo el rotor sigue el campo magnético, supere el límite de 90 grados eléctricos y comprenda cómo una máquina pierde pasos sin detectarlo.

Categoría
Sistemas embebidos
Tiempo
20–40 min
Plataforma
Browser · Arduino · ESP32
Esquema técnico de Simulador paso a paso: desfase y pérdida de pasosFIELDROTORCARRIAGE80 STEPS/MM · 1.8° · 1/16LAG ANGLE DECIDES WHETHER IT ARRIVES

01 / Empieza aquí

Introducción

Un motor paso a paso no da pasos por arte de magia: arrastra un rotor tras un campo magnético rotativo, y el desfase angular entre ambos determina si el movimiento se completa. Este laboratorio integra la dinámica del rotor: al superar el límite crítico de 90° eléctricos, el motor pierde el sincronismo de forma natural, exactamente igual que ocurriría en el banco de pruebas físico.

Live lab / Open-loop step integrity

Stepper motor simulator

Command a move and watch the rotor trail the field. Push the acceleration, drop the voltage or add load until the lag angle runs past the 90° pull-out limit — and the motor silently stops arriving.

Browser native
This lab plots a stepper move twice: the position the driver believes the axis has reached against the position the rotor actually reached, and below it the lag angle between the commanded magnetic field and the rotor. Use the controls below to change the move, the drive and the load.

Upper plot: the dashed line is where the driver thinks the axis is, the solid line is where the rotor actually is. Lower plot: the lag angle between them. The shaded band is where a steady load can sit — past ±90 electrical degrees the torque starts falling instead of rising, so there is no equilibrium out there, and a rotor that keeps going reaches 180° and slips a pole.

  • Commanded (what the driver counted)
  • Actual rotor position
  • Where a load can sit (±90°e)
  • Sync lost
Try it

There is nothing to start — the whole move is re-integrated as you drag any control. Step through the five presets to see the four ways an open-loop move stops arriving.

The move
The drive
The load

The rotor stays inside the stable band for the whole move and lands on target.

Full steps lost
0
Peak lag
25°e
Position error
0.000 mm
Resolution
80 steps/mm
Pull-out torque
0.311 N·m
Corner speed
599 rpm

Every action has a button above. If you prefer the keyboard, focus the plots and press P for the next preset, M for the next microstepping setting, N to toggle the acceleration ramp, R to reset and F for full screen; sliders respond to the arrow keys.

Controles

El laboratorio recalcula la trayectoria en cada variación de los mandos, por lo que las curvas siguen los deslizadores en tiempo real sin requerir un botón de inicio. El cálculo integra 30 000 iteraciones instantáneamente.

Control Magnitud que modifica
Ajustes predefinidos (Preset) Casos prácticos que van desde movimientos limpios hasta cuatro modos de fallo distintos
Perfil de frecuencia (Step rate) Rampa trapezoidal de aceleración o salto instantáneo a velocidad máxima
Distancia / Velocidad / Aceleración Parámetros cinemáticos de la orden de desplazamiento solicitada
Tensión de alimentación Tensión disponible por el controlador para forzar corriente en el bobinado
Límite de corriente Ajuste del potenciómetro de calibración (determina el par máximo disponible)
Micropasos (Microstepping) Nivel de subdivisión del campo magnético, desde 1/1 hasta 1/16
Mecanismo Polea y correa GT2 (40 mm/vuelta) o husillo T8 (8 mm/vuelta)
Par resistente Rozamiento y carga mecánica aplicada en el eje del motor

La gráfica superior representa la posición: la traza discontinua es la posición que el controlador supone que tiene el eje, y la traza continua es la posición física real del rotor. La gráfica inferior muestra el ángulo de desfase electromagnético entre ambos, con la banda estable de ±90° sombreada.

Teoría

Un motor paso a paso no avanza a saltos discretos por impacto mecánico. El controlador gira un campo magnético y el rotor lo persigue, retrasándose siempre cierto ángulo; el par generado es proporcional al seno de dicho ángulo:

T = T_peak(ω) × sin(δ)

δ se mide en grados eléctricos. Un motor de 1.8° posee 50 dientes en el rotor, por lo que su ciclo magnético se repite 50 veces por revolución y un paso completo equivale exactamente a 90° eléctricos.

Entre −90° y +90°, el motor se comporta de manera análoga a un muelle torsional: a mayor retraso, mayor fuerza de recuperación. Esta zona de estabilidad permite el funcionamiento en bucle abierto. Al sobrepasar los 90°, la derivada del seno se vuelve negativa: un mayor retraso produce menor par de recuperación, agravando el desfase hasta que a los 180° el par invierte su sentido y atrae el rotor hacia el polo subsiguiente. El rotor resbala hacia el siguiente diente magnético estable, a un ciclo eléctrico completo (cuatro pasos completos) de distancia.

Conviene distinguir dos umbrales críticos: los 90° delimitan el final del equilibrio estático (un sobreimpulso transitorio breve no necesariamente provoca desincronización, por lo que un paso completo de 90° no bloquea el motor); y los 180° constituyen el punto de pérdida irreversible de pasos.

El ángulo de desfase aumenta debido a tres factores:

  • Carga mecánica: A velocidad constante sin(δ) = par_demandado ÷ par_disponible. Si la carga representa la mitad del par disponible, el desfase es de 30°, dejando 60° de margen de seguridad.
  • Aceleración: Vencer la inercia del rotor consume par del mismo balance, de modo que el desfase máximo ocurre en la fase de aceleración y no a velocidad crucero.
  • Velocidad de giro: El par máximo disponible T_peak cae a medida que aumenta la velocidad de giro.

Los devanados del motor son inductivos. A medida que la frecuencia eléctrica aumenta, la reactancia inductiva se eleva y la fuerza contraelectromotriz (f.c.e.m.) contrarresta la tensión de alimentación, reduciendo la corriente efectiva. La curva de par es plana hasta una velocidad de codo (corner speed) y decae con rapidez posteriormente; dicha velocidad de corte viene fijada por la tensión de la fuente.

De aquí se desprenden las dos reglas de diseño esenciales: más corriente proporciona más par; mayor tensión proporciona mayor velocidad de trabajo.

Algoritmo

El movimiento del rotor se integra numéricamente mediante las leyes físicas directas. El código no detecta ni introduce artificialmente pérdidas de paso: estas emergen naturalmente de la ley sinusoidal del par magnético.

// por cada intervalo de integración de 20 us
const ideal    = sampleProfile(plan, time).position;         // mm requeridos por el planificador
const command  = Math.round(ideal * stepsPerMm) / stepsPerMm; // el driver opera en múltiplos de micropasos
const lag      = rotorTeeth * (commandAngle - theta);         // desfase en radianes eléctricos

const { torque } = peakTorque(setup, omega);                  // disminuye con la velocidad
const friction   = loadTorque * Math.tanh(omega / 0.5);       // fricción de Coulomb suavizada
const accel      = (torque * Math.sin(lag) - friction - damping * omega) / inertia;

theta += omega * dt + 0.5 * accel * dt * dt;
omega += accel * dt;

Dos aspectos de la implementación técnica merecen especial atención:

La consigna se cuantiza en la rejilla discreta de micropasos antes de que el rotor la experimente. Dicha discretización actúa como excitación dinámica: en paso completo, cada pulso supone un salto brusco de 90° eléctricos sobre un sistema subamortiguado, lo cual explica la resonancia y ruido característicos del paso completo frente a la suavidad del micropaso.

El modelo del devanado define el límite de par disponible:

const backEmf   = kT * speed;
const impedance = Math.hypot(resistance, rotorTeeth * speed * inductance);
const current   = Math.min(currentLimit, Math.max(0, supplyVolts - backEmf) / impedance);
const torque    = Math.SQRT2 * kT * current;

Este modelo reproduce con fidelidad la forma de la curva par-velocidad real de un controlador tipo chopper. La trayectoria proviene del planificador de perfiles de movimiento del sitio, permitiendo contrastar un movimiento con aceleración progresiva y uno directo sin ramas condicionales artificiales.

Experimentos guiados

Aísle una sola variable por prueba para comprender su repercusión física directa.

1. La importancia de la rampa de aceleración. Mantenga los valores predeterminados y alterne Perfil de frecuencia entre Con rampa y Directo a velocidad máxima.

Con rampa progresiva Directo a velocidad máxima
Desfase máximo 25° eléctricos Supera 90° a 1.2 ms, bloqueo a los 3.0 ms
Pasos completos perdidos 0 280
Posición final real alcanzada 60.00 mm 4.0 mm

Mismo motor, mismo driver, idéntica corriente y objetivo: la sola presencia de la rampa marca la diferencia entre completar la cota o perder el movimiento entero en el arranque.

2. Localizar la velocidad límite de arranque directo (pull-in rate). Seleccione Directo a velocidad máxima e incremente progresivamente la velocidad desde 100 mm/s. El sistema responde con éxito hasta que cerca de los 200 mm/s falla de forma tajante. Ese valor coincide con el umbral físico pull-in característico de los motores paso a paso.

3. La tensión determina la velocidad. Cargue el preajuste Alimentación de 12 V, velocidad alta: el eje se bloquea. Aumente la tensión a 24 V manteniendo intacto el límite de corriente: el desplazamiento se completa con normalidad. Si intenta solucionar el fallo a 12 V incrementando la corriente máxima, comprobará que es inútil: superada la velocidad de corte, el driver no puede forzar los amperios deseados sin mayor tensión.

4. El micropaso no aumenta la precisión estática. Con los demás parámetros fijos, modifique los Micropasos de 1/1 a 1/16 y analice los dos registros:

Micropasos Tamaño de paso Desviación máxima dinámica Error estático bajo carga
Paso completo (1/1) 0.200 mm 0.127 mm 0.049 mm
1/4 micropaso 0.050 mm 0.061 mm 0.044 mm
1/16 micropaso 0.0125 mm 0.045 mm 0.044 mm

La fidelidad de seguimiento dinámico mejora sensiblemente al reducirse la oscilación, pero el error estático inducido por la carga resistiva permanece exactamente en 0.044 mm, independientemente de si se utiliza paso completo o 1/16.

5. Par de parada (Pull-out). Aumente gradualmente el Par resistente a velocidad moderada. Observe cómo el ángulo de desfase en la gráfica inferior sube hacia la línea límite (30°, 50°, 70°). Al sobrepasar los 90°, el sincronismo colapsa de inmediato sin margen de aviso previo.

6. El paso completo aplica impactos de 90°. Seleccione el ajuste de Paso completo y lea el desfase máximo: aproximadamente 102° eléctricos. Cada pulso induce una perturbación de 90° que la inercia sobrepasa. Aunque no se pierdan pasos en vacío, el sistema opera peligrosamente cerca de la inestabilidad, motivo por el cual el paso completo admite muy poca carga externa.

7. Influencia del mecanismo mecánico. Seleccione el husillo T8 en lugar de la polea GT2. La resolución pasa de 80 a 400 pasos/mm, por lo que alcanzar la misma velocidad de desplazamiento lineal exige multiplicar por cinco la frecuencia de emisión de pulsos.

Observaciones esenciales

  • El fallo se presenta como un acantilado, no como una degradación suave. Hasta los 90° el ángulo crece linealmente; al cruzar ese límite, el movimiento se pierde por completo. Esto distingue un motor paso a paso de un sistema servo en bucle cerrado, que simplemente disminuye su velocidad bajo sobrecarga.
  • El microcontrolador no detecta el fallo en bucle abierto. La posición ordenada en línea discontinua llega siempre a destino porque el emisor de pulsos no tiene realimentación física de la posición del eje.
  • El error de carga es intrínseco al principio de operación. Incluso en condiciones ideales, el rotor opera rezagado algunos micrómetros respecto al campo para generar par motor según sin(δ) = carga ÷ par.
  • Los pasos perdidos son siempre múltiplos de cuatro pasos completos. En bucle abierto, cualquier pérdida corresponde a ciclos magnéticos enteros.

Comparativa con hardware físico real

Este laboratorio didáctico Un eje mecánico real
Temporización de pulsos ideal a 50 kHz Fluctuaciones de temporizador (jitter) y techo en torno a 10–15 kHz en Arduino Uno
Masa rígida puntual Dilatación de correas, holgura mecánica (backlash) y flexión estructural
Par resistente constante Fricción variable a lo largo del recorrido y arrastre de cableado
Modelo concentrado de devanado Curva real con par de retención (detent) y resonancias mecánicas
Regulación de corriente teórica Controladores con limitación térmica cuando la disipación es insuficiente
Sin disipación térmica Consumo continuo aproximado de 8 W por motor en reposo bajo tensión

En una máquina real no se dispone de visualización directa del ángulo de desfase magnético. El procedimiento empírico consiste en incrementar velocidad y aceleración hasta provocar la pérdida de pasos, y posteriormente reducir dichos valores entre un 30 % y un 50 % como margen de seguridad industrial.

Consulte la guía de cableado y ajuste de Vref del A4988, calibre los pasos por milímetro en correas y husillos y aplique estos conceptos en la construcción de un robot trazador (pen plotter).

Código fuente

El empleo de rampas de aceleración es indispensable en máquinas físicas. El enfoque bloqueante elemental que provoca atascos y resonancia responde a la siguiente estructura:

// Patrón no recomendado: la frecuencia salta de cero a máxima velocidad
void moveBlocking(long steps, unsigned delayUs) {
  for (long i = 0; i < steps; i++) {
    digitalWrite(STEP_PIN, HIGH);
    delayMicroseconds(2);
    digitalWrite(STEP_PIN, LOW);
    delayMicroseconds(delayUs);      // constante => sin aceleración progresiva
  }
}

Implementación estructurada no bloqueante con rampa de aceleración utilizando la biblioteca AccelStepper:

#include <AccelStepper.h>

const float STEPS_PER_MM = 80.0;          // Polea GT2 de 20 dientes a 1/16 de paso
AccelStepper axis(AccelStepper::DRIVER, STEP_PIN, DIR_PIN);

void setup() {
  pinMode(EN_PIN, OUTPUT);
  digitalWrite(EN_PIN, LOW);              // Activo en nivel bajo: energizar bobinas

  axis.setMaxSpeed(200 * STEPS_PER_MM);   // 200 mm/s
  axis.setAcceleration(2000 * STEPS_PER_MM);
}

void loop() {
  if (axis.distanceToGo() == 0) {
    axis.moveTo(axis.currentPosition() == 0 ? lround(60 * STEPS_PER_MM) : 0);
  }
  axis.run();                             // Retorna inmediatamente: invocar con frecuencia
  checkEndstops();                        // Posible gracias a la ausencia de bloqueos
}

setMaxSpeed y setAcceleration generan un perfil trapezoidal. Para perfiles con limitación de jerk (curva S) se genera la consigna de posición matemáticamente y se actualiza periódicamente sobre el controlador.

Para comprobar si una máquina opera próxima a la pérdida de pasos, el ensayo de repetibilidad resulta concluyente:

// Ejecutar un desplazamiento largo de ida y vuelta N veces y comprobar el origen físico.
// Si el error no es múltiplo de cuatro pasos completos, la causa es mecánica y no de sincronismo magnético.
for (int i = 0; i < 20; i++) { moveTo(LONG_MOVE); runToPosition(); moveTo(0); runToPosition(); }
// volver a buscar finales de carrera y contrastar la posición física con el cero de referencia

Supuestos y diferencias del modelo

La dinámica del rotor es rigurosa: el par proporcional a sin(δ) modela con precisión un motor híbrido. Las constantes corresponden a un motor tipo NEMA 17 (modelo 17HS4401: 1.8°, 1.7 A, 2.8 Ω, 3.2 mH, 0.44 N·m de retención, con una masa de carro equivalente de 300 g en el eje).

Simplificaciones del simulador: el devanado se aproxima en régimen estacionario mediante impedancia y f.c.e.m., lo que resulta conservador a frecuencias muy elevadas. No se modela el par de retención en reposo sin corriente, las resonancias mecánicas intermedias ni los modos de decaimiento (decay) del driver. La temporización es ideal sin fluctuaciones de microcontrolador.

Estas aproximaciones no alteran la física del sistema ni qué ajustes deben corregirse, pero justifican la verificación experimental en maquinaria física.

Diagrama de circuito

Esquema de conexión básico de un motor bipolar a un controlador comercial con microcontrolador:

Arduino 5V  ──── VDD
Arduino GND ──── GND (lógica) ──┬── GND (motor) ──── Fuente −
Fuente + (12–24 V) ─ VMOT ──────┴── 100 µF electrolítico, soldado junto a placa
Pin 3 ──── STEP                 RESET ──┬── SLEEP
Pin 4 ──── DIR                  MS1, MS2, MS3 ──── 5 V   (1/16 de paso)
Pin 5 ──── ENABLE (activo en bajo)
Bobina A ──── 1A, 1B            Bobina B ──── 2A, 2B

La página del controlador A4988 detalla el conexionado completo, la tabla de tensiones Vref y la necesidad indispensable del condensador electrolítico de desacoplo.

Lista de hardware

Componentes

  • Un motor paso a paso bipolar (típicamente 1.8°, 200 pasos por vuelta)
  • Un controlador con regulación y limitación de corriente ajustable
  • Fuente de alimentación de motor de 12 V o superior comprobada
  • Eje con correa o husillo para relacionar pasos y milímetros

Explora el grafo

Dónde se usa este simulador

Los proyectos, rutas de aprendizaje y tutoriales que se basan en este laboratorio.

Sigue construyendo

Descargar recursos

Usa estas referencias de la página mientras trabajas en el proyecto. Los paquetes descargables del proyecto se añadirán solo cuando se publiquen su código fuente y su versión.

Preguntas comunes

Preguntas frecuentes

¿Por qué pierde pasos mi motor paso a paso?

Porque el rotor se retrasó excesivamente respecto al campo magnético ordenado. Por debajo de 90° eléctricos (un paso completo), el par magnético devuelve el rotor a su posición; allí debe trabajar cualquier carga continua. Al superar los 90°, el par disponible disminuye a medida que aumenta el desfase, y a los 180° se invierte empujando hacia el polo siguiente, por lo que el rotor resbala hacia el siguiente punto estable un ciclo eléctrico completo más adelante. Tres causas provocan esto: un par de carga excesivo, una aceleración demasiado agresiva o una velocidad elevada donde el par disminuye drásticamente.

¿Por qué se pierden exactamente cuatro pasos cada vez?

Porque la configuración de los polos magnéticos se repite cada cuatro pasos completos. Cuando el rotor pierde el sincronismo, no se detiene en cualquier ángulo arbitrario: se desliza hasta engancharse con el siguiente diente magnético estable, situado a un ciclo eléctrico completo de distancia (360° eléctricos, equivalentes exactamente a 4 pasos completos). El simulador no fuerza esta regla de forma artificial: integra la ley sinusoidal del par motor y la cuenta de pasos perdidos resulta siempre un múltiplo exacto de cuatro. Si una máquina falla por un número distinto, el origen no es la pérdida de sincronismo magnético.

¿El micropaso (microstepping) hace a la máquina más precisa?

Aporta suavidad y reduce vibraciones, pero no incrementa la precisión absoluta bajo carga. Al alternar entre paso completo (1/1) y 1/16 con una carga constante, la desviación a lo largo de la trayectoria se reduce considerablemente porque ya no se aplican impactos bruscos de 90° eléctricos y desaparece la resonancia; sin embargo, el error estático inducido por la carga permanece invariable (por ejemplo, 0.044 mm tanto en paso completo como en 1/16). Dividir el paso hace que dicho error represente más micropasos en el conteo, pero no disminuye el error físico real.

¿Debo subir la tensión o la corriente para evitar que el motor se cale (stall)?

Depende de la velocidad a la que se cale el motor. Por debajo de la velocidad crítica (corner speed), el controlador mantiene el límite de corriente ajustado, de modo que el par depende de los amperios: incremente la corriente. Por encima de dicha velocidad, la inductancia del devanado y la fuerza contraelectromotriz impiden inyectar la corriente requerida con la tensión disponible; en ese régimen el par depende exclusivamente de la tensión de alimentación y subir el límite de corriente solo calentará el circuito. Al alimentar a 24 V en lugar de 12 V, un movimiento rápido que antes se calaba se completa con éxito sin modificar la corriente.

¿Por qué un movimiento funciona con rampa de aceleración y falla sin ella?

Porque acelerar la inercia del rotor exige un par significativo. En el instante de partida el rotor está inmóvil mientras que el campo magnético arranca instantáneamente a velocidad máxima. Sin rampa, el ángulo de desfase supera los 90° eléctricos en apenas un milisegundo y se desincroniza a los tres milisegundos: el controlador emite la secuencia completa mientras el eje físico apenas se desplaza unos milímetros. Ese umbral es la velocidad de arranque directo (pull-in rate), y la rampa de aceleración trapezoidal o en curva S es la que permite trabajar sin sobrepasarlo.

¿Este simulador reproduce con fidelidad un motor físico real?

La dinámica del rotor es rigurosa: el par proporcional al seno del ángulo de desfase es el principio físico de los motores híbridos, y la pérdida de pasos surge de integrar dicha ecuación. El modelado de los bobinados emplea una aproximación en estado estacionario para controladores por modulación de corriente (chopper), reflejando con exactitud la curva par-velocidad típica de las hojas de datos. Resulta idóneo para adquirir intuición de diseño; para dimensionar maquinaria crítica consulte siempre la curva de par proporcionada por el fabricante.

Lecturas adicionales

Referencias

Fuentes autorizadas para profundizar más allá del modelo educativo acotado de este simulador.