Bed leveling screw calculator: turns and direction for each screw

Each screw turns by its height difference from the reference screw divided by the thread pitch: 0.5 mm per turn on M3, 0.7 mm on M4, 0.8 mm on M5. Enter the height at each screw to get turns and clock-minutes, with the direction, for any firmware or for a feeler gauge.

Bed height at each screw

Same order as your firmware lists the screws. Only the differences matter, so any zero works.

mm
mm
mm
mm
mm
mm
Screws

Klipper and Marlin both default to M3 screws where clockwise raises the bed.

Not sure? Turn one knob a quarter turn clockwise and watch the corner.

Biggest adjustment

–

01:12 means 1 full turn and 12 minutes, as on a clock face.

Screw 1: front left

–

Screw 2: front right

–

Screw 3: back right

–

Screw 4: back left

–

Screw 5

–

Screw 6

–

Highest to lowest screw

–

Same screws in Klipper and Marlin

–

How many turns should you adjust a bed leveling screw?

Divide the screw’s height difference from the reference screw by the thread pitch. M3 screws move 0.5 mm per turn, M4 0.7 mm and M5 0.8 mm. A corner 0.1 mm low on M3 needs 0.2 turn, which firmware prints as 12 minutes: a clock-face minute is 1/60 of a turn.

turns   = (z_reference − z_screw) / pitch
minutes = fraction of a turn × 60

z is the bed’s height at the screw, the number a probe or a mesh reports: bigger means the bed is higher. A positive result means the corner is low and needs raising. Klipper’s SCREWS_TILT_CALCULATE and Marlin’s G35 both run this formula and report no adjustment when the difference is under 0.001 mm.

Thread Bed travel per turn Per clock-minute 6 minutes
M3 0.5 mm 0.0083 mm 0.050 mm
M4 0.7 mm 0.0117 mm 0.070 mm
M5 0.8 mm 0.0133 mm 0.080 mm
M6 1.0 mm 0.0167 mm 0.100 mm

These are the ISO metric coarse pitches, the values in both firmwares’ code. Klipper’s docs call the bed leveled “normally when all adjustments are below 6 minutes”.

Worked example: Marlin’s docs

The calculator’s defaults are the example in Marlin’s bed tramming docs. Front-right is 0.1 mm lower than front-left, back-right 0.25 mm higher and back-left 0.6 mm lower. The screws are M3, and clockwise raises the bed:

  1. Front right: 0.1 / 0.5 = 0.20 turn = 12 minutes, clockwise (CW) to raise it.
  2. Back right: −0.25 / 0.5 = −0.50 turn = 30 minutes, counter-clockwise (CCW) to lower it.
  3. Back left: 0.6 / 0.5 = 1.20 turns = 1 turn and 12 minutes, clockwise to raise it.

Marlin prints Turn Front-Right CW by 0 turns and 12 minutes, Turn Back-Right CCW by 0 turns and 30 minutes and Turn Back-Left CW by 1 turns and 12 minutes. Klipper writes the same adjustments as CW 00:12, CCW 00:30 and CW 01:12.

How do you use screws_tilt_calculate?

Add a [screws_tilt_adjust] section listing each screw’s position and the screw thread, home with G28, then run SCREWS_TILT_CALCULATE. Klipper probes over each screw and prints an adjustment such as CW 01:15: one full turn and 15 minutes clockwise. Turn the screws, run it again, and stop when every screw reads under 6 minutes.

[screws_tilt_adjust]
screw1: 30, 30
screw1_name: front left screw
screw2: 200, 30
screw2_name: front right screw
screw3: 200, 200
screw3_name: rear right screw
screw4: 30, 200
screw4_name: rear left screw
screw_thread: CW-M3
  • The coordinates are a nozzle position: Klipper’s reference calls each one “a position to command the nozzle to so that the probe is directly above the bed screw”. To get it, subtract your probe’s X and Y offsets from the screw’s position.
  • screw1 is the reference. The docs: “the system assumes that screw1 is at the correct height.”
  • screw_thread accepts CW-M3, CCW-M3, CW-M4, CCW-M4, CW-M5 and CCW-M5. The code also takes CW-M6 and CCW-M6. CW-M3 is the default.
  • Home first. The G-code reference: “You MUST always do a G28 before using this command.”
  • Reading the output. The first line explains it: “01:20 means 1 full turn and 20 minutes, CW=clockwise, CCW=counter-clockwise”. The reference screw shows (base) and no adjustment.
  • DIRECTION=CW or CCW. If you can only turn the screws one way, Klipper picks the highest or the lowest screw as the reference so that every screw turns that way. The calculator’s “Reference screw” menu does the same.
  • MAX_DEVIATION. SCREWS_TILT_CALCULATE MAX_DEVIATION=0.1 stops with an error when any screw is more than 0.1 mm from the reference. Use it in a start macro to catch a bed that has drifted.

After leveling, run a new bed mesh: the saved one still holds the tilt you just removed.

Klipper needs at least three screws: its code refuses fewer, although the docs say two.

SCREWS_TILT_CALCULATE vs screws_tilt_adjust

They’re the same feature: [screws_tilt_adjust] is the config section, and SCREWS_TILT_CALCULATE is the command it adds. The other Klipper tool, BED_SCREWS_ADJUST from a [bed_screws] section, is for printers without a probe. It parks the nozzle at Z = 0 over each screw so you can do a paper test, and it doesn’t print turns.

A macro that homes first

Since the command needs homing every time, a two-line macro saves a step:

[gcode_macro LEVEL_SCREWS]
gcode:
    G28
    SCREWS_TILT_CALCULATE

Does clockwise raise or lower the bed?

It depends on the printer, so check before you trust a CW or CCW. Marlin’s docs say the direction “is not a property of the screw”: the same right-hand thread raises the bed one way with a knob under the bed and the other way with the screw head on top. Bambu’s A1 is an example of the second kind. Its wiki says tightening the leveling screws clockwise “will increase the distance between the heatbed and the nozzle”.

Marlin’s test settles it: “turn one knob a quarter turn clockwise and see whether that corner comes up toward the nozzle.” If it does, your thread is CW (Klipper CW-M3, Marlin 30). If it goes down, it’s CCW.

Klipper’s definition is the same: with a CW thread, “a clockwise rotation of the knob decreases the gap between the nozzle and the bed.” Set the calculator’s “Turning a knob clockwise” to match.

Marlin’s G35 tramming assistant

Marlin’s version needs ASSISTED_TRAMMING in Configuration_adv.h, with the probe points in TRAMMING_POINT_XY and the thread in TRAMMING_SCREW_THREAD:

Code Thread
30 / 31 M3, clockwise / counter-clockwise
40 / 41 M4, clockwise / counter-clockwise
50 / 51 M5, clockwise / counter-clockwise

Run it with G35. G35 S40 overrides the thread setting for one run (M4 clockwise in the docs’ example). Point 1 is always the reference. Marlin has no M6 setting and no DIRECTION option. Send G28 before you print, because G35 leaves Z unhomed.

Marlin drops the leftover fraction of a minute, while Klipper rounds to the nearest minute, so the two can differ by one minute on the same bed. The calculator rounds like Klipper.

Leveling without a probe

Without a probe, use a feeler gauge. Park the nozzle at the same height over each screw and measure the gap under its tip. A gap is the opposite of a probe reading: a bigger gap means a lower corner. Pick “Gap under the nozzle” and the calculator flips the sign.

The paper test gives a feel, not a number. Klipper’s docs put printer paper at about 0.100 mm. Marlin’s LCD Bed Tramming menu parks the nozzle at each corner for the test, and Klipper’s BED_SCREWS_ADJUST over each screw. Only with a gauge or a probe can you calculate the turns.

Bed leveling screw sizes on common printers

Where the maker publishes the thread:

Printer Thread Source
Creality Ender-3 (original) M4 Creality’s drawing of the hand-twisted leveling nut
QIDI Q1 Pro CW-M4 QIDI’s shipped printer.cfg, three screws
Bambu Lab A1 Not stated; clockwise lowers the bed Bambu wiki, manual bed tramming

Klipper’s repository also holds example configs written by users for other printers: CW-M4 for the Ender-3 V2 Neo and Ender-5 S1, CW-M3 for the CR-10 Smart Pro and CR-10S Pro V2, and CW-M5 for the Artillery Sidewinder X2. Creality’s shipped configs for the K1 series and the Ender-3 V3 KE have no screw section: those printers level with pressure sensors and a mesh.

If you don’t know your thread, measure the screw’s diameter: about 3 mm is M3, 4 mm M4, 5 mm M5. Or give one knob a full turn and measure how far the corner moves.

Published · Figures last checked