S-curve acceleration
Standard CNC controllers use trapezoidal acceleration: the motor goes from zero to full speed with a constant acceleration rate. It works, but the sudden changes in acceleration cause vibration and ringing that show up as marks on your workpiece.
S-curve acceleration smooths these transitions. Instead of snapping to full acceleration, it ramps up gradually. The result: smoother motion, less vibration, and better surface finish.
How it works
Three quantities describe a move: velocity (how fast), acceleration (how quickly velocity changes) and jerk (how quickly acceleration changes).
- Trapezoidal — acceleration is switched on and off instantly. Plot velocity over time and you get a trapezoid: a straight ramp up, a flat cruise, a straight ramp down. At each corner of that trapezoid the acceleration jumps from zero to its maximum (or back) in a single step. In theory that is an infinite jerk; in practice it is a hammer blow to the machine frame.
- S-curve — acceleration itself is ramped. The velocity curve bends gently into the acceleration phase, runs straight while acceleration is at its maximum, and bends gently out again. That bent shape is the "S". The jerk limit sets how steep those bends are.
The maximum acceleration doesn't change. What changes is how abruptly the machine is asked to get there.
The trade-off
S-curves produce better surface quality, but they're slightly slower than trapezoidal acceleration. The smooth ramp phases add time to each move. For most jobs the difference is barely noticeable. For high-speed production work where cycle time is critical, you can always switch back to trapezoidal.
As a rule of thumb, building up to full acceleration takes about acceleration ÷ jerk seconds, and the same again to ramp back down. On long moves that is lost in the noise. Where you notice it is on toolpaths made of many short segments, such as 3D surfacing or detailed engraving: the machine spends a larger share of each segment ramping, so the average feed drops.
When it matters most
- Surface finish — less vibration means fewer witness marks, especially on contours
- Mechanical stress — smoother acceleration is easier on belts, bearings, and couplings
- Resonance — trapezoidal acceleration can excite resonant frequencies; S-curves avoid the sudden jolts that trigger them
Light, fast machines with belts or long gantries benefit most, because they ring easily. A heavy, stiff mill with ballscrews benefits less, but the gentler direction changes are still easier on the drivetrain.
Recognising ringing
Ringing (also called ghosting) shows up as a series of faint ripples on a wall just after a sharp corner or a sudden change of direction. The ripples fade with distance from the corner and repeat at a regular spacing.
That spacing tells you something: it is roughly the feed rate divided by the resonance frequency. At 3000 mm/min (50 mm/s), a frame that rings at 50 Hz leaves ripples about 1 mm apart. If you slow the feed and the ripples move closer together, you're looking at ringing, not at a worn cutter or a loose workpiece.
Configuration
One setting in your machine config:
scurve_planner:
jerk: 50000 # Jerk limit in mm/min³ (1000–1000000)
Lower jerk = smoother motion but slower acceleration. Higher jerk = faster but more aggressive. Start at 50000 and adjust to taste.
To switch back to trapezoidal (the default for FluidNC):
trapezoid_planner:
Tuning the jerk limit
You don't need an accelerometer. A test part and your eyes are enough.
- Get your acceleration and maximum speed right first, with the trapezoidal planner or the S-curve default. S-curve smooths motion; it does not give the motors more torque.
- Cut a simple test part with sharp outside corners, for example a square boss or a square pocket with a finishing pass, in a material that shows marks (MDF, plastic or aluminium). Note the feed rate.
- Change only the jerk value. Halve it and double it rather than making small steps, so the difference is visible.
- Cut the same part again at the same feed and compare the walls just after the corners.
- Pick the highest jerk value that still gives you a clean finish. Going lower than that only costs time.
Change one thing at a time. If you change jerk and acceleration in the same test, you won't know which one made the difference.
Troubleshooting
| Symptom |
Likely cause |
What to do |
| Ripples after corners |
Jerk too high for the frame |
Lower the jerk limit |
| Clean finish, but jobs got noticeably slower |
Jerk lower than needed, many short segments |
Raise the jerk limit until ringing just starts to return, then back off |
| Lost position after fast moves |
Acceleration or speed too high for the motors |
Lower acceleration or max speed; jerk won't fix this |
| No difference at all |
Planner not active |
Check that scurve_planner is in the config you actually uploaded, and restart the board |
The FluidBoard is the only ESP32-based controller with S-curve acceleration support. Most hobby controllers — and even some industrial ones — are limited to trapezoidal profiles.