3D printer acceleration calculator: distance and time to reach speed

Distance to reach a speed is speed² ÷ (2 × acceleration), so at 3,000 mm/s² a 300 mm/s move needs 15 mm to get up to speed and 15 mm to stop. Any move shorter than 30 mm never prints at 300 mm/s: a 20 mm wall peaks at 245 mm/s and averages 122 mm/s.

Move

One straight line of G-code: a wall from corner to corner, an infill line or a travel move.

mm/s

The speed in the slicer, or F ÷ 60 from the G-code line.

mm/s²

Picking one fills in the acceleration. Machine maximums are ceilings; stock profiles print below them.

mm
Corners (optional)

The speed the head carries through the corner at each end. 0 is a full stop. Klipper takes a 90° corner at square_corner_velocity, 5 mm/s by default.

mm/s
mm/s

Klipper's default is 0.5, which lowers the peak of short moves. Leave 0 for Marlin, which has no such setting.

Peak speed reached

–

Reaches the set speed?

–

Distance to reach the set speed

–

Time to reach the set speed

–

Average speed over the move

–

Move time

–

Shortest move that reaches the set speed

–

The formula

Printer firmware changes speed at a constant acceleration. Each move speeds up from its start speed to the set speed, cruises, then slows to its end speed. Klipper’s docs call this the trapezoid generator, after the shape of the speed graph. Marlin’s planner builds the same trapezoid for every move.

distance to reach speed     s = (v² − v0²) ÷ (2 × a)
time to reach speed         t = (v − v0) ÷ a
shortest full-speed move    d_min = (v² − v0²) ÷ (2 × a) + (v² − v1²) ÷ (2 × a)
peak of a shorter move      v_peak = √((2 × a × d + v0² + v1²) ÷ 2)
move time                   (v_peak − v0) ÷ a + cruise distance ÷ v_peak + (v_peak − v1) ÷ a
average speed               d ÷ move time
  • v is the set speed in mm/s, from the slicer or the G-code’s F value ÷ 60.
  • a is the acceleration in mm/s².
  • d is the length of one straight move in mm.
  • v0 and v1 are the speeds at the start and end of the move: 0 from a standstill, the corner speed otherwise.

The first line is Klipper’s look-ahead formula, end_velocity² = start_velocity² + 2 × accel × move_distance, solved for distance.

A move shorter than d_min never cruises. Its two ramps meet in the middle, so the graph is a triangle. From a standstill to a standstill, the peak is √(a × d).

How far does a 3D printer travel before reaching full speed?

From a standstill, the print head covers the speed squared divided by twice the acceleration. At 3,000 mm/s², reaching 300 mm/s takes 15 mm and stopping takes another 15 mm, so a move must be at least 30 mm long to touch 300 mm/s. At 10,000 mm/s² the ramp shrinks to 4.5 mm.

Distance to reach each speed from a standstill, in mm:

Speed 500 mm/s² 3,000 mm/s² 5,000 mm/s² 10,000 mm/s² 20,000 mm/s²
100 mm/s 10 1.67 1 0.5 0.25
200 mm/s 40 6.67 4 2 1
300 mm/s 90 15 9 4.5 2.25
500 mm/s 250 41.7 25 12.5 6.25

Braking takes the same distance again, so double a figure for the shortest rest-to-rest move that reaches that speed. The time to reach a speed is speed ÷ acceleration: 0.1 s for 300 mm/s at 3,000 mm/s², 15 ms at 20,000.

The columns are published figures. 500 is the printing acceleration in Creality’s stock Ender-3 V2 firmware and 3,000 is Marlin’s default. For the X1 Carbon, 5,000 and 10,000 are Bambu Studio’s outer wall and default values, and 20,000 is the machine limit. The 500 mm/s row is the top toolhead speed on Bambu Lab’s P1S, A1 and A1 mini spec pages.

Worked example: a 20 mm wall at 300 mm/s

These are the calculator’s defaults, the max_velocity: 300 and max_accel: 3000 of the Voron 2.4 reference printer.cfg.

  1. Distance to reach 300 mm/s: 300² ÷ (2 × 3,000) = 15 mm, in 300 ÷ 3,000 = 0.1 s.
  2. Shortest move that reaches 300 mm/s: 15 + 15 = 30 mm. The 20 mm wall never gets up to speed.
  3. Peak: √(3,000 × 20) = 244.9 mm/s, at the 10 mm mark.
  4. Move time: 2 × 244.9 ÷ 3,000 = 0.163 s (163.3 ms).
  5. Average: 20 ÷ 0.1633 = 122.5 mm/s, 41% of the set speed.

At a steady 300 mm/s the wall would take 66.7 ms. The real move takes 2.45 times as long.

Corners: when a move does not start from zero

At a corner the head slows to a junction speed instead of stopping. Enter that speed as the start and end speed.

  • Klipper: square_corner_velocity is the speed through a 90° corner, 5 mm/s by default. Sharper corners are slower and shallower ones faster.
  • Marlin with junction deviation (M205 J, default 0.013 mm): the 90° corner speed is √(a × J × 2.414), which is 9.7 mm/s at 3,000 mm/s².
  • Marlin with classic jerk (M205 X and Y): jerk is the largest speed change an axis may make instantly. At a 90° corner each axis changes by the whole corner speed, so the X/Y jerk is the corner speed. Creality’s stock Ender-3 V2 firmware uses classic jerk at 5 mm/s.

Corner speeds of 5 to 10 mm/s barely move the result. With 5 mm/s at both ends, the 20 mm wall peaks at 245.0 mm/s instead of 244.9 and averages 125.0 mm/s instead of 122.5.

Shallow corners matter more. A curve exported as many short segments turns only a few degrees at each joint. At a 10° turn the junction speed is about ten times the 90° figure. The G-code time estimator lists corner speeds by angle.

Acceleration vs speed: which one makes a print faster?

On short moves, acceleration sets the pace and a higher set speed changes nothing. At 3,000 mm/s², a 20 mm move peaks at 244.9 mm/s whether the slicer asks for 300 or 500 mm/s. At 10,000 mm/s² the same move reaches 300 mm/s and its average rises from 122.5 to 206.9 mm/s.

Peak / average speed in mm/s for one move from a standstill to a standstill, set to 300 mm/s:

Move length 3,000 mm/s² 10,000 mm/s² 20,000 mm/s²
5 mm 122.5 / 61.2 223.6 / 111.8 300 / 157.9
10 mm 173.2 / 86.6 300 / 157.9 300 / 206.9
20 mm 244.9 / 122.5 300 / 206.9 300 / 244.9
50 mm 300 / 187.5 300 / 254.2 300 / 275.2
100 mm 300 / 230.8 300 / 275.2 300 / 287.1

Read down a column to see where speed starts to count. At 3,000 mm/s² nothing under 30 mm reaches 300 mm/s, and even a 100 mm move averages 77% of the set speed. At 20,000 mm/s² a 5 mm move already touches 300 mm/s.

A whole print is thousands of moves like these, plus corners. The G-code time estimator times every move in a sliced file this way. The print time calculator estimates from an STL or the slicer’s grams before you slice.

Speed has a second ceiling that acceleration does not lift: the hotend can only melt so much plastic per second. A 0.2 mm layer with a 0.45 mm line at 300 mm/s needs 27 mm³/s. Check that against your filament’s limit with the volumetric flow calculator.

What acceleration do 3D printers use?

Makers’ published figures run from 500 mm/s² for printing moves in Creality’s stock Ender-3 V2 firmware to 20,000 mm/s² maximums on the Bambu Lab X1 Carbon, P1S and Creality K1. Stock profiles often print below the maximum: Bambu Studio’s X1 Carbon default is 10,000, with 5,000 on outer walls. Marlin’s default is 3,000.

Printer or firmware Acceleration (mm/s²) What it is Source
Bambu Lab X1 Carbon 20,000 X and Y Machine maximum Bambu Studio printer profile
Bambu Lab X1 Carbon, 0.20mm Standard 10,000 default, 5,000 outer walls, 2,000 top surfaces, 500 first layer Profile default Bambu Studio process profile
Bambu Lab P1S 20,000 Machine maximum Bambu Lab spec
Bambu Lab A1 and A1 mini 10,000 Machine maximum Bambu Lab spec
Bambu Lab A1, 0.20mm Standard 6,000 default Profile default Bambu Studio process profile
Creality K1 20,000 Machine maximum Creality spec
Prusa MK4S 4,000 X and Y (2,500 in Stealth mode) Machine maximum PrusaSlicer printer profile
Prusa MK4S, 0.20mm SPEED 4,000 walls and infill, 1,500 top solid infill, 500 first layer Profile default PrusaSlicer print profile
Prusa CORE One 10,000 X and Y, 7,000 extruding and travel Machine maximum PrusaSlicer printer profile
Prusa CORE One, 0.20mm SPEED 3,000 external perimeters, 6,000 perimeters, 7,000 infill Profile default PrusaSlicer print profile
Creality Ender-3 V2, stock Marlin 500 printing, 1,000 travel, 500 X and Y limit Firmware default Creality’s firmware source
Creality Ender-3 V2, Klipper example 3,000 Config maximum (max_accel) Klipper example config
Voron 2.4 and Trident 3,000 (commented “Max 4000”) Config maximum (max_accel) Voron reference printer.cfg
Marlin 3,000 printing, travel and X/Y limit Firmware default Marlin Configuration.h

Klipper’s config folder holds 108 example printer.cfg files. Their max_accel runs from 450 to 20,000 mm/s², and 50 of them set 3,000, which is also the median.

UltiMaker Cura’s “Enable Acceleration Control” is off by default. Turned on, its Print Acceleration starts at 3,000 mm/s² and its Travel Acceleration at 5,000.

Machine maximum or profile default

A machine maximum is a ceiling. A slicer with acceleration control on picks a value per feature (outer walls, infill, first layer, travel) and writes each value into the G-code where that feature starts.

On Marlin, M204 sets the acceleration for printing (P), travel (T) and retraction (R) moves. The planner then lowers it so no motor exceeds its M201 limit. On Klipper, max_accel is the rate most moves use, and an M204 S or SET_VELOCITY_LIMIT ACCEL= from the slicer replaces it for the moves that follow. An M204 with P and T but no S uses the lower of the two.

To see what your printer ran, search the sliced G-code for M204 or SET_VELOCITY_LIMIT lines, and enter that value in the calculator.

Where to find your printer’s acceleration

  • Marlin: send M503. The M204 line shows P, R and T. The M201 line shows each axis’s maximum, and the M205 line shows the junction deviation (J) or the X and Y jerk.
  • Klipper: max_accel, square_corner_velocity and minimum_cruise_ratio sit under [printer] in printer.cfg. If you ran the input shaper calibration (Klipper’s resonance test), its output suggests a max_accel for each shaper: “suggested max_accel <= 3500 mm/sec^2” for MZV in the docs’ example.
  • PrusaSlicer: Print Settings, Speed page, “Acceleration control (advanced)”. The printer’s limits sit under Printer Settings, Machine limits, and PrusaSlicer writes them as M201 at the start of the file.
  • Bambu Studio and OrcaSlicer: the process Speed tab, Acceleration group. The machine limits are under the printer’s Motion ability page, Acceleration limitation.
  • UltiMaker Cura: the Speed section, “Enable Acceleration Control”.
  • Spec pages: some list acceleration in m/s². Multiply by 1,000 for the calculator’s mm/s², so 20 m/s² is 20,000 mm/s².

Klipper’s minimum cruise ratio

Klipper’s minimum_cruise_ratio, 0.5 by default, keeps short zigzag moves from accelerating straight into braking. Enter 0.5 in the calculator for a Klipper printer on default settings, or the value in your printer.cfg. Leave 0 for Marlin, whose planner has no such setting.

The ratio caps a move’s top speed as if it accelerated at a × (1 − ratio), so a standalone move spends at least that share of its length cruising. The real acceleration stays at a. Klipper’s own example: a standalone 1.5 mm move cruises at least 0.75 mm.

With the default 0.5, the shortest move that reaches 300 mm/s at 3,000 mm/s² doubles from 30 to 60 mm. The 20 mm wall peaks at 173.2 mm/s instead of 244.9, and averages 115.5 mm/s instead of 122.5.

Published · Figures last checked

Sources

  1. Klipper documentation, Kinematics (constant acceleration, trapezoid generator, look-ahead, minimum cruise ratio) (accessed 2026-10-18)
  2. Klipper documentation, Configuration reference: [printer] (max_accel, minimum_cruise_ratio, square_corner_velocity) (accessed 2026-10-18)
  3. Klipper source, klippy/toolhead.py (junction deviation, minimum cruise ratio pseudo acceleration, M204) (accessed 2026-10-18)
  4. Klipper documentation, G-Codes (M204 and SET_VELOCITY_LIMIT) (accessed 2026-10-18)
  5. Klipper documentation, Measuring resonances (suggested max_accel per input shaper) (accessed 2026-10-18)
  6. Klipper example printer configs, config folder (108 printer-*.cfg files at commit 373f200) (accessed 2026-10-18)
  7. Klipper example config, Creality Ender 3 V2 (printer-creality-ender3-v2-2020.cfg) (accessed 2026-10-18)
  8. Marlin documentation, M201: Print / travel move limits (accessed 2026-10-18)
  9. Marlin documentation, M204: Set starting acceleration (accessed 2026-10-18)
  10. Marlin documentation, M205: Set advanced settings (junction deviation and jerk) (accessed 2026-10-18)
  11. Marlin, Configuration.h (default acceleration, jerk and junction deviation) (accessed 2026-10-18)
  12. Marlin source, planner.cpp (trapezoid per block, junction deviation speed) (accessed 2026-10-18)
  13. Creality, Ender-3 V2 Marlin source, Configuration.h (accessed 2026-10-18)
  14. Voron Design, Voron 2.4 reference printer.cfg (Octopus) (accessed 2026-10-18)
  15. Voron Design, Voron Trident reference printer.cfg (Octopus) (accessed 2026-10-18)
  16. Bambu Studio profiles, Bambu Lab X1 Carbon 0.4 nozzle (machine limits) (accessed 2026-10-18)
  17. Bambu Studio profiles, 0.20mm Standard @BBL X1C (accelerations and speeds) (accessed 2026-10-18)
  18. Bambu Studio profiles, 0.20mm Standard @BBL A1 (accessed 2026-10-18)
  19. Bambu Lab store, P1S tech specs (accessed 2026-10-18)
  20. Bambu Lab store, A1 tech specs (accessed 2026-10-18)
  21. Bambu Lab store, A1 mini tech specs (accessed 2026-10-18)
  22. Creality store, K1 3D printer (accessed 2026-10-18)
  23. Prusa Research, PrusaSlicer profiles for Prusa printers (PrusaResearch 2.5.12.ini) (accessed 2026-10-18)
  24. PrusaSlicer source 2.9.2, Tab.cpp (Speed page Acceleration control, Machine limits page) (accessed 2026-10-18)
  25. PrusaSlicer source 2.9.2, GCode.cpp (machine limits written as M201) (accessed 2026-10-18)
  26. Bambu Studio source, Tab.cpp (Speed page Acceleration group, Motion ability page) (accessed 2026-10-18)
  27. OrcaSlicer source, Tab.cpp (Speed page Acceleration group, Motion ability page) (accessed 2026-10-18)
  28. UltiMaker Cura, fdmprinter.def.json (acceleration settings) (accessed 2026-10-18)