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
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.
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
- 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_peakcae 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.