Simulatore di profili di movimento: trapezoidale e a S
Pianifica e confronta un profilo trapezoidale e uno a S con jerk limitato, osservando posizione, velocità, accelerazione e jerk mentre trascini i limiti.
- Categoria
- Controlli automatici
- Tempo
- 30–60 min
- Piattaforma
- Browser · Arduino
01 / Inizia qui
Introduzione
Ogni comando del motore nasconde una pianificazione. Quando un asse deve spostarsi, qualcosa decide quanto rapidamente raggiunge la velocità, quanto la mantiene e quando inizia a rallentare. Questo laboratorio mostra un profilo trapezoidale e uno a S che pianificano lo stesso movimento affiancati, inclusi i casi in cui non è possibile rispettare tutti i limiti contemporaneamente.
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.
Controlli
Distanza e velocità massima descrivono il movimento desiderato. Accelerazione e limite di jerk descrivono ciò che la macchina può effettivamente fare. Il laboratorio ripianifica a ogni trascinamento: non devi premere nulla prima che le curve rispondano.
Mostra alterna tra entrambi i profili e uno solo. Riproduci fa scorrere un cursore temporale sui grafici in tempo reale, il modo più rapido per percepire che il profilo a S termina più tardi.
La nota sotto i limiti ti dice quando un limite non è più raggiungibile: è il motivo per cui vale la pena trascinare i cursori.
Teoria
Quattro grafici impilati, ciascuno la derivata di quello sopra. Quell’impilamento è la dimostrazione: un angolo nella velocità è un gradino nell’accelerazione, e un gradino nell’accelerazione è un impulso nel jerk. La discontinuità non scompare quando si differenzia: scende finché non diventa illimitata.
Un profilo trapezoidale accelera con un’accelerazione costante, mantiene la velocità e poi decelera. La velocità è un trapezio, l’accelerazione è un’onda quadrata e il jerk è una serie di impulsi agli angoli. Sono proprio questi impulsi che una macchina percepisce come un colpo e a cui un gruppo di trasmissione flessibile risponde con oscillazioni.
Un profilo a S limita anche il jerk. L’accelerazione aumenta in rampa per t_j = a_max / j_max, rimane costante e poi diminuisce, così la velocità acquisisce angoli arrotondati. Costa esattamente un tempo di jerk e ottiene uno shock limitato.
Nessun profilo può sempre rispettare ogni limite. Un movimento più breve di v²/a non raggiunge mai la velocità massima. Un profilo a S la cui velocità massima è inferiore a a²/j non raggiunge mai il limite di accelerazione. Entrambi i casi sono normali e sono visibili qui.
Algoritmo
Il laboratorio risolve il profilo invece di integrarlo. Ogni segmento ha un jerk costante, quindi all’interno di un segmento:
a(τ) = a₀ + j·τ
v(τ) = v₀ + a₀·τ + j·τ²/2
x(τ) = x₀ + v₀·τ + a₀·τ²/2 + j·τ³/6
Queste equazioni sono esatte: ecco perché il movimento arriva sul bersaglio e non solo vicino, e perché trascinando un cursore il profilo viene ripianificato immediatamente.
La scelta della velocità di picco usa una sola identità: una rampa di velocità è simmetrica rispetto al suo punto medio, quindi copre sempre esattamente v_peak/2 × duration, qualunque forma abbia. Questo trasforma la domanda «c’è una fase di velocità costante?» in un unico confronto e rende la velocità di picco limitata dalla distanza risolvibile in forma chiusa: un’equazione di secondo grado mentre l’accelerazione è ancora saturata, una radice cubica quando non lo è più.
Codice sorgente
Un generatore trapezoidale abbastanza piccolo da incollare in uno sketch. Restituisce la posizione che il ciclo di controllo deve inseguire al 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;
}
Chiamalo una volta per ogni periodo di controllo e passa il risultato a ciò che chiude il ciclo. AccelStepper fa equivalentemente il lavoro internamente per i motori passo-passo; non ha un’opzione S-curve, quindi un profilo con jerk limitato devi generarlo tu.
Ipotesi e differenze hardware
I profili ipotizzano un asse rigido e non vincolato: nessun attrito, nessun gioco di inversione, nessun allungamento della cinghia e nessun passo perso, e la corrente di picco è disponibile su richiesta. Un vero motore passo-passo o un asse DC ha una coppia che diminuisce con la velocità, una flessibilità che trasforma il jerk in oscillazioni e un driver che satura: è per questo che un profilo a S aiuta un braccio azionato da cinghia, ma è tempo sprecato su una slitta breve e rigida. Anche la frequenza di campionamento è ideale; su un microcontrollore la stabilità del timer è il limite di precisione. Leggi il movimento come il valore di riferimento che il controllore esistente deve inseguire, poi verificalo rispetto alla meccanica che sta effettivamente azionando.
Schema elettrico
Non esiste uno schema unico per questo laboratorio: il profilo è uno strato di aritmetica, non un componente. Si trova tra la sorgente del comando e il ciclo che hai già:
target position → PROFILE → setpoint → controller → driver → motor
↑ │
└────── encoder ─────────┘
Il cablaggio è quello di cui il tuo motore ha già bisogno: un driver dimensionato per la corrente di picco richiesta dalla rampa e retroazione dell’encoder se vuoi chiudere il ciclo. Cambia solo ciò che il controllore deve seguire.
La derivazione completa, la confusione tra “jerk” in Marlin e il motivo per cui la profilazione spesso risolve un PID che sembrava regolato male sono in profili di movimento: accelerazione trapezoidale e a S.
Checklist hardware
Componenti
- Un motore passo-passo o un motore DC con encoder
- Un driver del motore dimensionato per la corrente di picco richiesta dal profilo
- Un controllore con un timer abbastanza stabile da mantenere la frequenza di campionamento
- Un supporto rigido: la flessibilità è ciò che trasforma il jerk in oscillazioni
Esplora il grafo
Dove si usa questo simulatore
I progetti, i percorsi di apprendimento e i tutorial che si basano su questo laboratorio.
Continua a costruire
Scarica le risorse
Usa questi riferimenti nella pagina mentre lavori al progetto. I pacchetti di progetto scaricabili verranno aggiunti solo dopo la pubblicazione del loro codice sorgente e della loro versione.
Domande comuni
Domande frequenti
Perché il mio asse non raggiunge mai la velocità massima impostata?
Perché il movimento è troppo breve. Raggiungere una velocità massima richiede una rampa di v²/2a e altrettanta per fermarsi, quindi qualsiasi movimento più breve di v²/a termina prima che la rampa sia completa. Il profilo di velocità diventa triangolare invece che trapezoidale, con picco √(a·d), indipendentemente dalla configurazione. Aumentare il limite di velocità non cambia nulla per questi movimenti: bisogna aumentare l'accelerazione. Trascina il cursore della distanza sotto la soglia e il laboratorio lo segnalerà.
Un profilo a S è sempre migliore di un profilo trapezoidale?
No. È sempre più lento e la macchina non soffre sempre dell'elemento che corregge. Un profilo a S limita il jerk, il che conta quando il gruppo di trasmissione ha flessibilità: cinghie, bracci lunghi, uno strumento pesante all'estremità di un braccio. Un salto dell'accelerazione eccita quella flessibilità, che poi oscilla. Su un asse breve, rigido e a trazione diretta l'oscillazione può essere impercettibile e il tempo aggiuntivo è una pura perdita. Usa il laboratorio per vedere il costo e poi decidi se la tua macchina sta pagando qualcosa di cui ha bisogno.
Quanto tempo costa davvero la limitazione del jerk?
Esattamente un tempo di jerk, t_j = a_max / j_max, purché entrambi i profili raggiungano la stessa velocità massima e la stessa accelerazione. Non due e, per la parte sorprendente, indipendentemente dalla distanza del movimento. Il segmento di accelerazione del profilo a S è più lungo, quindi percorre più distanza prima della velocità costante e la fase di crociera si riduce, restituendo gran parte del tempo. Solo il tempo di jerk è irrecuperabile. Trascina il cursore della distanza e osserva che il costo del jerk rimane costante.
Perché l'accelerazione non raggiunge mai il mio limite di accelerazione?
Perché il limite di jerk è troppo basso. Passare da zero ad a_max e poi tornare indietro richiede una variazione di velocità pari a a_max²/j_max; quindi, se la velocità massima è inferiore, l'accelerazione stessa diventa triangolare e ha un picco di √(v·j). È la stessa storia dello spazio esaurito di un movimento breve, ma a una derivata di ordine superiore. Il laboratorio lo segnala ogni volta che accade.
Dove devo inserire il profilo nel codice?
Prima del controllore, non al suo interno. Il profilo genera un valore di riferimento, cioè dove l'asse dovrebbe trovarsi in questo momento, e ciò che avevi già lo segue: un pianificatore dei passi, un ciclo PID, una scrittura del servomotore. Ecco perché la profilazione spesso risolve un asse che sembrava regolato male. Un comando a gradino chiede al PID un'uscita infinita, quindi il suo errore parte dall'intera distanza del movimento e il termine integrale si accumula mentre l'uscita è saturata. Contro un riferimento profilato l'errore resta piccolo e gli stessi guadagni si comportano bene.
Per approfondire
Fonti
Fonti autorevoli per andare oltre il modello didattico, volutamente limitato, di questo simulatore.