The test depends on your printer. On Klipper, run SHAPER_CALIBRATE with an accelerometer or print the ringing tower without one; on Marlin, set the M201 and M204 limits by hand. Bambu Lab, Creality K1 and Prusa MK4S or CORE One printers come tuned: use the acceleration in their slicer profiles.
How do you find your 3D printer’s max acceleration?
Print a test that raises acceleration in steps and note where quality or motion breaks down. On Klipper, the ringing tower raises it 500 mm/s² every 5 mm; set max_accel to the highest band with small ringing and no widened test gap. With an accelerometer, SHAPER_CALIBRATE reports a suggested maximum for each input shaper.
| Your printer | Test | What it gives you |
|---|---|---|
| Klipper with an accelerometer | SHAPER_CALIBRATE |
A suggested max_accel per input shaper |
| Klipper without one | Ringing tower with TUNING_TOWER |
The band where ringing or smoothing starts |
| Klipper, motor limit | TEST_SPEED macro |
The highest acceleration before steps skip |
| Marlin | M593 ringing tower, then M201 and M204 | Input shaper frequency; no acceleration test in Marlin’s docs |
| Bambu Lab, Prusa MK4S and CORE One, Creality K1 | Built-in or factory calibration | Use the profile’s acceleration |
With an accelerometer: SHAPER_CALIBRATE
- Add the sensor to printer.cfg (an
[adxl345]section plus[resonance_tester]) and check it withACCELEROMETER_QUERY. - Turn the fans off and run
SHAPER_CALIBRATE. It shakes each axis hard, so watch the first run and stop it withM112if it gets violent. On a bed slinger, runSHAPER_CALIBRATE AXIS=Xwith the sensor on the toolhead, move it to the bed, then runSHAPER_CALIBRATE AXIS=Y. - Read the suggested
max_accellines. Klipper’s documentation shows this result for one axis:
| Input shaper | Fitted frequency | Suggested max_accel |
|---|---|---|
| ZV | 34.4 Hz | 4,500 mm/s² |
| MZV (recommended) | 34.6 Hz | 3,500 mm/s² |
| EI | 41.4 Hz | 3,200 mm/s² |
| 2HUMP_EI | 51.8 Hz | 3,000 mm/s² |
| 3HUMP_EI | 61.8 Hz | 2,800 mm/s² |
SAVE_CONFIGstores the shaper but leavesmax_accelalone. Set it yourself under[printer], below the X and Y suggestions for your shaper: Klipper calls them “only a theoretical maximum”, and stepper torque can cap the printer lower. Klipper’s example:
[input_shaper]
shaper_freq_x: ...
shaper_type_x: ...
shaper_freq_y: 34.6
shaper_type_y: mzv
[printer]
max_accel: 3000 # should not exceed the estimated max_accel for X and Y axes
Without an accelerometer: the ringing tower
- Slice
ringing_tower.stlfrom Klipper’s docs/prints folder without rotating it. Use 0.2 or 0.25 mm layers, no infill or top layers, 1 to 2 perimeters (or vase mode with a 1 to 2 mm base), 80 to 100 mm/s external perimeters and a minimum layer time of 3 s at most. Turn off any dynamic acceleration control. - Print it once with input shaping off to measure the ringing frequency: speed × ripples counted ÷ distance measured. Klipper’s example is 100 × 6 ÷ 12.14 = 49.4 Hz. Put that in
[input_shaper]. - Run these commands and print the tower again. Stop early if the printer shakes hard or skips steps.
SET_VELOCITY_LIMIT MINIMUM_CRUISE_RATIO=0
SET_PRESSURE_ADVANCE ADVANCE=0
SET_INPUT_SHAPER SHAPER_TYPE=MZV
TUNING_TOWER COMMAND=SET_VELOCITY_LIMIT PARAMETER=ACCEL START=1500 STEP_DELTA=500 STEP_HEIGHT=5
Acceleration at any height is 1,500 + 500 × floor(height ÷ 5):
| Band | Height | Acceleration |
|---|---|---|
| 1 | 0 to 5 mm | 1,500 mm/s² |
| 2 | 5 to 10 mm | 2,000 mm/s² |
| 3 | 10 to 15 mm | 2,500 mm/s² |
| 4 | 15 to 20 mm | 3,000 mm/s² |
| 5 | 20 to 25 mm | 3,500 mm/s² |
| 6 | 25 to 30 mm | 4,000 mm/s² |
| 7 | 30 to 35 mm | 4,500 mm/s² |
| 8 | 35 to 40 mm | 5,000 mm/s² |
| 9 | 40 to 45 mm | 5,500 mm/s² |
| 10 | 45 to 50 mm | 6,000 mm/s² |
| 11 | 50 to 55 mm | 6,500 mm/s² |
| 12 | 55 to 60 mm | 7,000 mm/s² |
Then read the tower twice and put the lower of the two values in [printer] max_accel:
- Ringing: find the highest band where the ripples after the notches still look acceptable.
- Smoothing: find where the wall’s 0.15 mm gap starts to widen. In Klipper’s example it grows from 3,500 mm/s² (band 5), so
max_accelis 3,000.
The max acceleration test for skipped steps
To find where the motors lose steps, run the TEST_SPEED macro from Ellis’ Print Tuning Guide, a community tuning guide for Klipper printers.
- Add the macro to printer.cfg and set
max_velocityto a fast speed you know works. Heat soak the printer first if it is enclosed. - Run
TEST_SPEED ACCEL=5000 ITERATIONS=2. RaiseACCELuntil the printer skips, then lower it until the skipping stops. - Confirm with 50 iterations, for example
TEST_SPEED ACCEL=5000 ITERATIONS=50. - Watch and listen: shuddering, erratic moves and loud noises are major skips. For minor ones, compare the X and Y stepper positions printed at the first and second homing: a change of more than one full step (32 at 32 microsteps) means that axis skipped.
- Save about 15% lower, because synthetic tests can pass and still skip in real prints. A pass at 10,000 mm/s² becomes 10,000 × 0.85 = 8,500 mm/s².
The guide warns these maximums are often “way higher than is reasonable to daily drive” and suggests re-testing after you tune input shaping. Print at or below the ringing-tower value.
How to calibrate acceleration on Marlin
Marlin’s documentation has no acceleration test, so you tune input shaping and then set the limits by hand:
- Tune ZV input shaping (Marlin 2.1.2 and later) with the ringing tower on Marlin’s M593 page. It gives a frequency, not an acceleration: 29.84 Hz in Marlin’s example, saved with
M593 X F29.84andM500. - Send
M503. The M201 line shows each axis’s maximum acceleration; the M204 line shows the printing (P), retraction (R) and travel (T) accelerations. - To raise acceleration, raise both: the planner lowers M204 values so no motor exceeds its M201 limit.
- Find the ceiling by hand, the way Klipper’s ringing tower does it: print the same small test at your current M204 P, then again after each 500 mm/s² step up (
M204 P2000,M204 P2500and so on). Keep the last value that printed with small ringing and no layer shift. - Save with
M500if your build has EEPROM_SETTINGS enabled.
If the motors skip steps, Marlin’s driver guide says to check for binding, lower acceleration and jerk, improve driver cooling or raise motor current.
Bambu Lab, Prusa and Creality K1: use the profile’s acceleration
Use the maximum acceleration in the slicer’s printer profile. These printers tune vibration compensation themselves or come calibrated from the factory.
| Printer | What it calibrates | Where | Profile or spec maximum, X and Y |
|---|---|---|---|
| Bambu Lab X1 Carbon, P1S | Vibration compensation | X1: Control > Calibrate. P1: Settings > Calibration. Bambu Studio: Devices > Calibrate | 20,000 mm/s² |
| Prusa MK4S | Input shaper, pre-calibrated at the factory | Optional accelerometer: LCD Menu > Settings > Hardware > Input Shaper > Calibration | 4,000 mm/s² |
| Prusa CORE One | Input shaper, pre-calibrated at the factory | Same as MK4S | 10,000 mm/s² (7,000 extruding and travel) |
| Creality K1 | Input shaping with its G-sensor | Settings > Self-check, tick Input Shaping | 20,000 mm/s² |
When to rerun the calibration:
- Bambu Lab: after moving the printer, a firmware update, belt tensioning, a part change or a drop in print quality.
- Creality K1: after a firmware update.
- Prusa: after hardware modifications. On a stock printer it is “usually unnecessary”.
Do you need an accelerometer to tune acceleration?
No. Klipper’s input shaper guide tunes from a printed ringing tower, and its “Selecting max_accel” step reads max_accel off the same print; an accelerometer is the alternative that “requires some crimping and soldering”. Marlin’s documentation also calls a printed ringing tower the easiest way to tune input shaping.
An accelerometer helps when the ripples are uneven and hard to measure, which Klipper says can mean several resonances on one axis. Sensor options:
- Klipper: ADXL345, MPU-9250 family, LIS2DW and LIS3DH chips. An ADXL345 connects over SPI to a Raspberry Pi or the printer board, and some toolhead boards carry one, such as BigTreeTech’s EBB36 and EBB42 CAN boards.
- Marlin: no accelerometer input of its own. Its docs point to a browser-based USB resonance tester (an RP2040 board with an ADXL345) that returns a shaper type and frequency.
- Self-calibrating printers: built in on Bambu Lab printers, the Creality K1 (a G-sensor) and the Prusa CORE One L and XL. On the MK4S and CORE One it is optional.
Don’t run shaper calibration before every print or every day: Klipper warns the vibrations wear the printer and can shake parts loose.
Set the slicer’s acceleration at or below max_accel
Keep every per-feature acceleration in the slicer at or below the value you found. On Klipper the slicer has the last word: an M204 or SET_VELOCITY_LIMIT ACCEL= in the G-code replaces max_accel for the moves that follow, even above the printer.cfg value.
Leave Klipper’s square_corner_velocity at its default 5 mm/s: with input shaping, a higher corner speed adds smoothing. Jerk vs acceleration explains the difference.
Enter your max_accel in the acceleration calculator to see what it buys in speed: at 3,000 mm/s², a 20 mm wall set to 300 mm/s peaks at 244.9 mm/s. The print time calculator estimates the whole job.
Written by 3D Calculators Team· Published · Figures last checked
Sources
- Klipper documentation v0.13.0, Measuring Resonances (accelerometers, SHAPER_CALIBRATE, suggested max_accel, selecting max_accel) (accessed 2026-10-30)
- Klipper documentation v0.13.0, Resonance Compensation (ringing tower, TUNING_TOWER, selecting max_accel) (accessed 2026-10-30)
- Klipper documentation v0.13.0, G-Codes (TUNING_TOWER formula, SET_VELOCITY_LIMIT, SHAPER_CALIBRATE) (accessed 2026-10-30)
- Klipper documentation v0.13.0, Configuration reference ([printer] max_accel) (accessed 2026-10-30)
- Klipper source v0.13.0, klippy/toolhead.py (M204 and SET_VELOCITY_LIMIT replace max_accel) (accessed 2026-10-30)
- Ellis' Print Tuning Guide, Determining Maximum Speeds and Accelerations (TEST_SPEED macro, skipped-step check) (accessed 2026-10-30)
- BIGTREETECH, EBB toolhead boards README (onboard ADXL345 accelerometer) (accessed 2026-10-30)
- Marlin documentation, M593: ZV Input Shaping (ringing tower and frequency sweep tuning) (accessed 2026-10-30)
- Marlin documentation, Input Shaping (accelerometer options, print-based methods) (accessed 2026-10-30)
- Marlin documentation, M201: Print / travel move limits (accessed 2026-10-30)
- Marlin documentation, M204: Set starting acceleration (accessed 2026-10-30)
- Marlin documentation, M503: Report settings (accessed 2026-10-30)
- Marlin documentation, Trinamic drivers (skipped steps troubleshooting) (accessed 2026-10-30)
- Bambu Lab Wiki, Printer Calibration Guide (vibration compensation, when to run it, menu paths) (accessed 2026-10-30)
- Bambu Studio v02.08.04.61 profiles, Bambu Lab X1 Carbon 0.4 nozzle (machine acceleration limits) (accessed 2026-10-30)
- Bambu Studio v02.08.04.61 profiles, Bambu Lab P1S 0.4 nozzle (machine acceleration limits) (accessed 2026-10-30)
- Prusa Knowledge Base, Input Shaper (CORE One, MK4/S, MK3.9/S, MK3.5/S, XL, MINI/+) (accessed 2026-10-30)
- Prusa Knowledge Base, Accelerometer (CORE One, MK4/S, MK3.9/S) (accessed 2026-10-30)
- Prusa Research, PrusaSlicer profiles PrusaResearch 2.5.13.ini (MK4S and CORE One machine limits) (accessed 2026-10-30)
- Creality, K1 Series Klipper firmware V1.3.2.20 release notes (Settings > Self-check > Input Shaping) (accessed 2026-10-30)
- Creality store, K1 3D printer (20000 mm/s² acceleration, G-sensor) (accessed 2026-10-30)