Simulador de perfiles de movimiento: trapezoidal y S
Planifica movimientos con perfiles trapezoidales y curvas en S con limitación de jerk, visualizando posición, velocidad y aceleración en tiempo real.
- Categoría
- Sistemas de control
- Tiempo
- 30–60 min
- Plataforma
- Browser · Arduino
01 / Empieza aquí
Introducción
Cada comando hacia un motor encierra una planificación temporal. Al ordenar un desplazamiento a un eje, el sistema debe determinar cómo acelerar, cuánto tiempo mantener velocidad de crucero y cuándo frenar. Este simulador compara perfiles trapezoidales y curvas en S en paralelo, ilustrando casos donde las limitaciones físicas impiden alcanzar todos los máximos simultáneamente.
Live lab / Analytic profile planner
Motion profile simulator
Set a move and watch both profiles plan it. Drag the limits to push the move into a triangle, starve the jerk until acceleration never saturates, and read what the S-curve costs.
Four stacked plots share a time axis. Each is the derivative of the one above it, so a corner in velocity becomes a step in acceleration and an impulse in jerk. The trapezoidal profile is drawn in the accent colour, the S-curve alongside it.
- Trapezoidal
- 1.200 s
- S-curve
- 1.300 s
- Jerk cost
- +0.100 s
- Peak speed
- 100 mm/s
- Peak accel
- 500 mm/s²
- Cruise
- 0.700 s
Keyboard: focus the plots, then use Space to play/pause, B to rewind, R to reset, M to cycle which profiles are shown, and F for full screen.
Controles
Distancia y velocidad máxima definen la consigna del movimiento. Aceleración y límite de jerk delimitan la capacidad dinámica de la máquina. El simulador recalcula las curvas instantáneamente al mover los deslizadores.
Mostrar permite contrastar ambos perfiles o examinar cualquiera de ellos de forma individual. Reproducir desplaza un cursor temporal en tiempo real a lo largo de las gráficas, permitiendo apreciar visualmente el leve retraso temporal de la curva en S.
El aviso inferior indica cuándo las limitaciones físicas impiden alcanzar las cotas máximas configuradas.
Teoría
Cuatro gráficas superpuestas representan una magnitud y sus sucesivas derivadas temporales: la posición, la velocidad, la aceleración y el jerk (sobreaceleración). Esta relación revela que una arista angulosa en velocidad constituye una discontinuidad en escalón de aceleración, y un escalón de aceleración equivale a un impulso infinito en jerk. Las discontinuidades no desaparecen al derivar: descienden de nivel hasta volverse no acotadas.
Un perfil trapezoidal acelera a ritmo uniforme, mantiene velocidad de crucero y desacelera a ritmo constante. La velocidad es un trapecio, la aceleración es una onda cuadrada y el jerk se compone de impulsos infinitos en las transiciones. Esos impulsos son el golpe seco que se escucha mecánicamente y que excita vibraciones en transmisiones con holgura o elasticidad.
Un perfil de curva en S limita también la derivada de la aceleración. La aceleración se incrementa progresivamente durante t_j = a_max / j_max, se mantiene y desciende gradualmente, suavizando los vértices de la velocidad. Añade exactamente un intervalo de jerk al tiempo total a cambio de eliminar esfuerzos impulsivos bruscos.
Algoritmo
El sistema resuelve analíticamente las funciones cinemáticas en vez de recurrir a integración numérica discreta. Dentro de cada tramo de jerk constante:
a(τ) = a₀ + j·τ
v(τ) = v₀ + a₀·τ + j·τ²/2
x(τ) = x₀ + v₀·τ + a₀·τ²/2 + j·τ³/6
Estas formulaciones exactas aseguran que la trayectoria alcance la meta sin errores residuales de aproximación numérica, posibilitando una actualización reactiva inmediata al interactuar con los deslizadores.
Código fuente
Generador de perfil trapezoidal compacto para microcontroladores. Determina la posición que el lazo de control debe perseguir en el instante temporal t:
// Target position t seconds into a trapezoidal move of `d` mm.
float profilePosition(float t, float d, float vMax, float a) {
float tAcc = vMax / a;
float dAcc = vMax * vMax / (2 * a);
if (2 * dAcc > d) { // too short to reach vMax
float tPeak = sqrtf(d / a); // triangular profile
if (t >= 2 * tPeak) return d;
if (t < tPeak) return 0.5f * a * t * t;
float left = 2 * tPeak - t;
return d - 0.5f * a * left * left;
}
float tCruise = (d - 2 * dAcc) / vMax;
float tTotal = 2 * tAcc + tCruise;
if (t >= tTotal) return d;
if (t < tAcc) return 0.5f * a * t * t;
if (t < tAcc + tCruise) return dAcc + vMax * (t - tAcc);
float left = tTotal - t;
return d - 0.5f * a * left * left;
}
Invócalo periódicamente en cada ciclo de control y alimenta la salida a tu algoritmo de seguimiento.
Suposiciones y diferencias con el hardware
Los perfiles asumen un eje rígido ideal: sin fricción viscosa, sin holgura mecánica, sin estiramiento de correas y sin pérdidas de pasos, garantizando que el par máximo esté disponible de forma instantánea. Un motor paso a paso físico o un motor de CC entrega un par que decrece con la velocidad, posee flexibilidad elástica que transforma el jerk en resonancia y su driver puede saturar en tensión. En un microcontrolador, la estabilidad del temporizador define la precisión final del perfil.
Diagrama de circuito
El perfil de movimiento opera como una capa matemática que se sitúa entre la consigna final y el lazo de seguimiento:
posicion objetivo → PERFIL → punto consigna → controlador → driver → motor
↑ │
└────── encoder ───────┘
El conexionado físico es el habitual del actuador: un driver capaz de suministrar la corriente pico de aceleración y retroalimentación por encoder en caso de lazo cerrado. El desarrollo completo y el análisis de la aceleración en curva en S se exponen en el tutorial de perfiles de movimiento: aceleración trapezoidal y curva en S.
Lista de hardware
Componentes
- Motor paso a paso o motorreductor con encoder
- Driver dimensionado para la corriente pico del perfil
- Controlador con temporizador estable para la tasa de muestreo
- Estructura mecánica rígida sin holguras resonantes
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é mi eje nunca alcanza la velocidad máxima configurada?
Porque el desplazamiento es demasiado corto. Alcanzar la velocidad máxima exige una distancia de aceleración de v²/(2a) e idéntica distancia para frenar; cualquier movimiento menor a v²/a concluye antes de completar la rampa. El perfil de velocidad adopta forma triangular y su pico queda limitado a √(a·d), sin importar cuán alta fijes la velocidad teórica. Elevar la velocidad no altera estos desplazamientos cortos; únicamente aumentar la aceleración logra incrementar la velocidad pico.
¿Es siempre preferible un perfil de curva en S frente a uno trapezoidal?
No necesariamente. La curva en S siempre demanda algo más de tiempo, y no toda máquina sufre los problemas que esta mitiga. La curva en S limita la sobreaceleración (jerk), factor crucial cuando el tren motriz posee flexibilidad mecánica (correas, brazos largos o cargas suspendidas pesadas), pues los saltos escalonados en aceleración excitan resonancias y vibraciones residuales. En un eje rígido de accionamiento directo, las oscilaciones pueden ser despreciables y el tiempo extra representa una pérdida innecesaria.
¿Cuánto tiempo adicional añade la limitación de sobreaceleración (jerk)?
Exactamente un periodo de jerk, t_j = a_max / j_max, siempre que ambos perfiles alcancen la misma velocidad y aceleración máximas. No dos periodos, e independientemente de la distancia total recorrida. Como la fase de aceleración de la curva en S es más prolongada, cubre mayor distancia antes del crucero, acortando dicha fase y recuperando la mayor parte del tiempo. Solo el tiempo de transición de jerk resulta irrecuperable.
¿Por qué la aceleración no alcanza el límite máximo especificado?
Porque el límite de jerk es demasiado restrictivo. Pasar de cero a a_max y volver a cero requiere una variación de velocidad de a_max²/j_max; si la velocidad de crucero es inferior a ese umbral, la propia aceleración deviene triangular y su cresta se limita a √(v·j). Ocurre el mismo fenómeno de falta de recorrido que en los desplazamientos cortos, pero evaluado en la derivada superior.
¿Dónde debe integrarse el generador de perfiles en el código?
Antes del lazo de control, nunca dentro de él. El perfil produce la consigna de referencia (la posición y velocidad instantáneas teóricas) que tu lazo existente debe seguir: sea un programador de pulsos de paso, un PID de posición o una función de servo. Esto explica por qué implementar perfiles corrige ejes que parecían mal sintonizados: una consigna en escalón exige un salto infinito de potencia al PID, saturándolo y desbordando su término integral; frente a una trayectoria suave, el error permanece acotado.
Lecturas adicionales
Referencias
Fuentes autorizadas para profundizar más allá del modelo educativo acotado de este simulador.