The Axis That Overshot Every Move: Settling Time, Not Tuning
A positioning axis on a dispensing machine. Every move, the carriage overshot the target by 0.2 mm, then settled back. The settle time was 200 ms. The customer needed 50 ms. We lowered the gains and the overshoot got worse, not better. The problem wasn’t the loop tuning. It was the move profile.
What overshoot actually means
The carriage accelerates, cruises, decelerates to the target. If it overshoots, the deceleration was too late — the carriage had too much speed when it reached the target. The servo then reverses and pulls back. That reversal is the overshoot-and-settle. It looks like a tuning problem, but it’s often a profile problem.
A well-tuned servo with a bad move profile will overshoot. A poorly tuned servo with a good move profile won’t. The profile (acceleration, deceleration, jerk) determines how much kinetic energy the carriage has when it reaches the target. The loop has to absorb that energy. If the energy is too high, the loop overshoots.
The S-curve parameter
Most servo drives offer a trapezoidal profile (instant acceleration change) or an S-curve (ramped acceleration). The trapezoidal profile accelerates instantly — the jerk is infinite. This creates a shock that excites the mechanics. The S-curve ramps the acceleration up and down smoothly. Less shock, less overshoot.
The original profile was trapezoidal: 1000 mm/s² acceleration, 200 mm/s cruise, 1000 mm/s² deceleration. We changed it to S-curve: 500 mm/s³ jerk, 800 mm/s² acceleration, same cruise speed. The move took slightly longer (120 ms vs 100 ms), but the overshoot dropped from 0.2 mm to 0.02 mm. The settle time dropped from 200 ms to 40 ms.
| Profile | Move time | Overshoot | Settle time |
|---|---|---|---|
| Trapezoidal (instant accel) | 100 ms | 0.20 mm | 200 ms |
| S-curve (ramped jerk) | 120 ms | 0.02 mm | 40 ms |
| S-curve + lower Kp | 130 ms | 0.01 mm | 30 ms |
Why faster isn’t always faster
The trapezoidal move was 100 ms to reach the target, but 200 ms to settle. Total cycle contribution: 300 ms. The S-curve move was 120 ms to reach, 40 ms to settle. Total: 160 ms. The S-curve was 47% faster overall, even though the “move” was slower. The overshoot-and-settle was hiding 200 ms of wasted time.
For a dispensing machine that makes 10 moves per part, that’s 1.4 seconds saved per part. At 60 parts per hour, that’s 1.4 minutes per hour. The customer got a faster machine without changing the servo tuning.
The deceleration parameter
Overshoot also happens when the deceleration is set too high. The carriage stops abruptly, the mechanics flex (belt stretch, coupling wind-up), and the flex bounces back past the target. Lowering the deceleration lets the carriage arrive more gently. The total move time increases slightly, but the settle time drops more.
For a belt-driven axis (like ours), the belt stretches under acceleration. When the servo stops commanding motion, the belt’s stored energy pushes the carriage forward. That push is the overshoot. A higher deceleration (harder stop) stores more energy in the belt. A lower deceleration (gentler stop) stores less. The S-curve’s jerk limiting controls this.
The numbers we landed on
- Acceleration: 800 mm/s² (was 1000)
- Deceleration: 800 mm/s² (was 1000)
- Jerk (S-curve): 500 mm/s³ (was infinite/trapezoidal)
- Cruise speed: 200 mm/s (unchanged)
- Position loop Kp: 300 s⁻¹ (was 400 — slightly lower for margin)
The move is 120 ms. The settle is 40 ms. The overshoot is 0.02 mm. The customer’s requirement was 50 ms settle and 0.05 mm accuracy. We met it. The axis that overshot every move wasn’t mistuned. It was being asked to stop instantly.
When to tune, when to profile
If overshoot happens at the start of the move (accel overshoot), it’s a loop tuning issue. If overshoot happens at the end (decel overshoot), it’s a profile issue. The S-curve fixes end-of-move overshoot. Lower Kp fixes start-of-move instability. Don’t confuse the two. We spent a day lowering gains before we checked the profile.
The profile rule: End-of-move overshoot is almost always a jerk/acceleration problem, not a tuning problem. Switch to S-curve, lower the jerk limit, and see if the overshoot disappears before touching the loop gains. A faster-looking move that overshoots is slower than a slower move that settles immediately.