Simulador interativoIntermediário

Simulador de perfil de movimento: trapezoidal e curva em S

Compare perfis trapezoidal e em curva em S com jerk limitado e veja posição, velocidade, aceleração e jerk mudarem ao arrastar os limites.

Categoria
Sistemas de controle
Tempo
30–60 min
Plataforma
Navegador · Arduino
Esquema técnico de Simulador de perfil de movimento: trapezoidal e curva em SVELOCITY OVER TIMETIME

01 / Comece aqui

Introdução

Todo comando de motor esconde um plano de movimento. Ao pedir que um eixo se desloque, é preciso definir com que rapidez ele acelera, quanto tempo mantém a velocidade e quando desacelera. Este laboratório torna esse plano visível: defina o movimento e os limites da máquina, e compare um perfil trapezoidal e um perfil em curva em S lado a lado, inclusive quando nem todos os limites podem ser atendidos.

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.

Browser native
This lab plots position, velocity, acceleration and jerk for the same move under a trapezoidal and an S-curve profile. Use the controls below to change the move, or read the full theory and algorithm after this lab.

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.

Playhead

Drag any limit — the plan updates as you drag. Press Play to run the move.

The move
Machine limits

Both profiles reach every limit you set.

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

Distância e velocidade máxima descrevem o movimento que você quer. Aceleração e limite de jerk descrevem o que a máquina realmente pode fazer. O laboratório replaneja a cada arrasto — não há botão a pressionar: as curvas respondem imediatamente.

Mostrar alterna entre os dois perfis e permite exibir cada um isoladamente. Reproduzir faz um cursor de reprodução percorrer os gráficos em tempo real, que é a maneira mais rápida de perceber que a curva em S termina depois.

A observação abaixo dos limites avisa quando um limite deixa de ser alcançável, que é a razão pela qual vale a pena arrastar os controles deslizantes.

Teoria

Quatro gráficos empilhados, cada um sendo a derivada do gráfico acima. Esse empilhamento é o argumento: um canto na velocidade é um degrau na aceleração, e um degrau na aceleração é um impulso no jerk. A descontinuidade nunca desaparece à medida que você diferencia — ela desce até se tornar ilimitada.

Um perfil trapezoidal acelera a uma taxa constante, mantém a velocidade e depois desacelera. A velocidade é um trapézio, a aceleração é uma onda quadrada e o jerk é um conjunto de impulsos nos cantos. Esses impulsos são o que uma máquina ouve como batida e que fazem um trem de transmissão complacente ressoar.

Um perfil de curva em S também limita o jerk. A aceleração entra em rampa durante t_j = a_max / j_max, permanece constante e sai em rampa, de modo que a velocidade ganha cantos arredondados. Custa exatamente um tempo de jerk e limita o choque.

Nenhum perfil consegue respeitar todos os limites o tempo todo. Um movimento menor que v²/a nunca atinge a velocidade máxima. Uma curva em S cuja velocidade máxima é menor que a²/j nunca atinge o limite de aceleração. Ambas são situações normais e ambas são visíveis aqui.

Algoritmo

O laboratório resolve o perfil em vez de integrá-lo. Cada segmento tem um jerk constante, portanto, dentro de um segmento:

a(τ) = a₀ + j·τ
v(τ) = v₀ + a₀·τ + j·τ²/2
x(τ) = x₀ + v₀·τ + a₀·τ²/2 + j·τ³/6

Essas expressões são exatas, e é por isso que o movimento termina no alvo, não perto dele, e por isso que arrastar um controle replaneja o movimento instantaneamente.

Escolher a velocidade de pico usa uma única identidade: uma rampa de velocidade possui simetria ímpar em relação ao ponto médio, portanto sempre cobre exatamente v_peak/2 × duration, qualquer que seja sua forma. Isso transforma “existe uma fase de velocidade constante?” em uma única comparação e permite resolver em forma fechada a velocidade de pico limitada pela distância — um cálculo quadrático enquanto a aceleração ainda satura e um cálculo com raiz cúbica quando ela deixa de saturar.

Código-fonte

Um gerador trapezoidal pequeno o bastante para colar em um esboço Arduino. Ele retorna a posição que seu laço de controle deve seguir no tempo 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;
}

Chame-o uma vez por período de controle e forneça o resultado ao elemento que fecha o laço. AccelStepper faz o equivalente internamente para motores de passo; não há opção de curva em S, portanto um perfil limitado por jerk deve ser gerado por você.

Premissas e diferenças do hardware

Os perfis assumem um eixo rígido e sem restrições: sem atrito, sem folga de retorno, sem alongamento de correia e sem perda de passo, e que a corrente de pico está disponível sempre que necessária. Um motor de passo ou um eixo CC real tem torque que diminui com a velocidade, complacência que transforma jerk em oscilação e um driver de motor que satura — por isso uma curva em S ajuda um braço acionado por correia, mas é tempo perdido em um cursor curto e rígido. A taxa de amostragem também é ideal aqui; em um microcontrolador, a estabilidade do temporizador é o limite de precisão. Leia o movimento como a referência que seu controlador existente deve seguir e depois verifique-a contra a mecânica que ela realmente aciona.

Diagrama do circuito

Não há um circuito exclusivo deste laboratório — o perfil é uma camada de cálculo, não uma peça. Ele fica entre sua fonte de comandos e o laço que você já tem:

target position  →  PROFILE  →  setpoint  →  controller  →  driver  →  motor
                                                 ↑                        │
                                                 └────── encoder ─────────┘

A fiação é a que o motor já exige: um driver de motor dimensionado para a corrente de pico exigida pela rampa e realimentação por encoder se quiser fechar o laço. O que muda é apenas a referência que o controlador deve seguir.

A derivação completa, a confusão com “jerk” no Marlin e o motivo pelo qual o planejamento de perfis muitas vezes corrige um PID que parecia mal ajustado estão em perfis de movimento: aceleração trapezoidal e em curva S.

Lista de verificação de hardware

Componentes

  • Um motor de passo ou um motor CC com encoder
  • Um driver de motor dimensionado para a corrente de pico solicitada pelo perfil
  • Um controlador com um temporizador estável o suficiente para manter a taxa de amostragem
  • Uma montagem rígida — a complacência é o que transforma jerk em oscilação

Explore o grafo

Onde este simulador é usado

Os projetos, caminhos de aprendizagem e tutoriais que se apoiam neste laboratório.

Continue construindo

Baixar recursos

Use estas referências da página enquanto trabalha no projeto. Pacotes de projeto para download serão adicionados somente depois que seu código-fonte e sua versão forem publicados.

Dúvidas comuns

Perguntas frequentes

Por que meu eixo nunca atinge a velocidade máxima que defini?

Porque o movimento é curto demais. Acelerar até a velocidade máxima exige uma distância de aceleração de v²/2a, e a mesma distância para parar; portanto, qualquer movimento menor que v²/a termina antes de a rampa acabar. O perfil de velocidade se torna um triângulo em vez de um trapézio, e seu pico é √(a·d), independentemente do que você configurou. Aumentar o limite de velocidade não muda nada nesses movimentos — apenas aumentar a aceleração faz diferença. Arraste o controle de distância abaixo do limite e o laboratório avisará isso.

Uma curva em S é sempre melhor que um perfil trapezoidal?

Não. Ela é sempre mais lenta, e a máquina nem sempre sofre com aquilo que ela resolve. Uma curva em S limita o jerk, o que importa quando o trem de transmissão tem complacência — correias, elos longos, uma ferramenta pesada na ponta de um braço — porque um degrau na aceleração excita essa complacência e provoca oscilação depois. Em um eixo curto, rígido e acionado diretamente, a oscilação pode ser imperceptível e o tempo extra é uma perda pura. Use o laboratório para ver o custo e decida se sua máquina está pagando por algo de que precisa.

Quanto tempo o limite de jerk realmente custa?

Exatamente um tempo de jerk, t_j = a_max / j_max, desde que ambos os perfis alcancem a mesma velocidade máxima e a mesma aceleração. Não dois — e, surpreendentemente, isso independe da distância percorrida. O segmento de aceleração da curva em S é mais longo, portanto cobre mais distância antes de manter a velocidade; a fase de velocidade constante diminui e devolve a maior parte do tempo. Somente o tempo de jerk em si é irrecuperável. Arraste o controle de distância e veja o custo de jerk permanecer constante.

Por que a aceleração nunca atinge meu limite de aceleração?

Porque o limite de jerk está baixo demais para a aceleração. Subir até a_max e descer de novo exige uma variação de velocidade de a_max²/j_max; portanto, se sua velocidade máxima for menor que isso, a própria aceleração se torna triangular e atinge um pico de √(v·j). É o mesmo caso de um movimento curto que esgota a distância disponível, agora uma ordem de derivação acima. O laboratório destaca isso sempre que acontece.

Onde o perfil entra no meu código?

Antes do controlador, não dentro dele. O perfil gera uma referência — onde o eixo deveria estar agora — e o controlador existente segue-a: um agendador de degraus, um laço PID, uma escrita de servo. É por isso que o planejamento de perfis muitas vezes corrige um eixo que parecia mal ajustado. Um comando de degrau pede ao PID uma saída infinita, então o erro começa na distância completa do movimento e o termo integral acumula enquanto a saída está saturada. Com uma referência gerada pelo perfil, o erro permanece pequeno e os mesmos ganhos se comportam.

Leitura complementar

Referências

Fontes confiáveis para ir além do modelo educacional limitado deste simulador.