3D Printer Bed Leveling

From Open Source Ecology
Jump to: navigation, search


  • In order for the machine to work properly the Build Plate / Print Bed should be level
  • The process of tuning this can be called "bed leveling" or for CNC Machines in general "tramming"
  • It can be done via adjusting the machine itself, and/or by compensating for the imperfections of the platform via a sensor to measure this, and software

This wiki page collects OSE's understanding of bed leveling, tramming and compensation mechanisms of FFF 3D printers. It is intended for use when assessing other's bed leveling mechanisms as well as serving as a design rationale for various bed leveling mechanism developments (see for example Prusa_i3_Development and D3D_Printer_Design_Process).

Take any sensor requirements into account when choosing 3D_Printer_Build_Plate.

For specs and usage of different sensor types, see the #Assessment_Matrix and Research_On_Inductive_Proximity_Sensors.


All common FFF 3D printers needs a constant distance between nozzle and print or print bed during all print layers. This is critical when first/bottom layers are put down, since bed adherence is what keeps the figure fixed during print. All common gcode (move-instructions for printer) assumes a flat print bed in the models XY-plane. A flat print bed is also the printers default model of the physical print bed, before any sensing or compensation. Two fundamentally different approaches are used to handle differences between assumed coordinate system and actual printer shape: mechanical bed leveling/tramming and software bed compensation.

Bed leveling/tramming

Simply pushing three points of the print bed into place with the print head. This procedure is conceptually simple, but it requires a rigid and flat print bed as well as a mechanism for fixing the print bed once pushed into place. This fixation mechanism involves some specialized firmware code and manual intervention or two extra motors.

One (non-libre) solution has been announced in a Google group and mentioned by Hackaday.

Bed Compensation

This is short for "automatic bed shape irregularity compensation in software". Introduces the sub-problems of height sensing and geometric transformations of gcode.

Sensor placement, sensor fixation and sensing mechanism limits the possible sensing area and number of sensing points. Number and precision of sensed points sets fixed limits on compensation quality based on simple geometry. Each sensed point allows removing implicit assumptions about physical bed shape. Sensor precision determines compensation repeatability.

Zero Data Points

This means the printer user has to manually set first layer height before print. No common designs does this due to the time consumption of the procedure. For one printer that actually does this, see Clerck.

One Data Point

This allows automatic bed height adaption. The printer's modeled Z-axis and the Z-axis assumed by the gcode will be completely parallel. Early RepRap designs such as Darwin and Mendel used this. They both had bad sensor placement (fixed to frame, not to bed or print head) and bad sensor fixation (manually placed along smooth rod, held in place by friction alone) made re-calibration a frequent and time consuming issue for these designs.

Two Data Points

This allows compensating for bed tilt around one axis. No common design does this.

Three Data Points

This allows compensating for tilt around two axes. This is the most common number of data points. Compensation is achieved by applying a rotational matrix to every gcode line.

A video showing the tilt compensation made possible with three data points is shown here.

More Data points


Assessment Matrix

The following matrix doesn't fit nicely into Google Sheets because it doesn't allow multiple links per cell. It was developed in ods format, source file with links here: File:Bed leveling and compensation comparison.ods. The following wikitable is missing all links due to format converting issues.

Column descriptions

Precision is not mentioned in its own column because meaningful numbers cannot exist without taking many factors into account, such as:

  • Bed material
  • Ambient light
  • Temperature
  • Electrostatic noise

In a shielded environment, all presented solutions perform good enough.

Usage repeatability column describes experienced repeatability from actually implemented solutions when possible.

Most rows refer to an actual implementation, and hence licenses are included. Proprietary solutions are included for demonstrating useful general approaches. The reason why there's a “surface dependence” column and not a “print head dependence” column is that no found solutions are adapting hot end design to facilitate bed probing. It is always the hot end mount that is adapted.

The “Bed/Head Contact?” column tells us if re-calibration is needed on tool change.

Build complexity is guessed by Tobben and assumes building upon previous work as much as possible.

Possible placements of sensors are:

  • Frame
  • Near print head
  • Across/through print head (print head acts as part of the sensor)
  • In print bed


Good link preserving conversion from ods to wikitable needed. For now, see File:Bed leveling and compensation comparison.ods.


Research Report 1

Hi Marcin!

Did a full day of research on bed leveling yesterday and were surprised by what I found. Most solutions feel badly over-engineered for the application. My favourite solution by far is Kühling & Kühling's semi-automatic system:


  • No additional hardware except for 3 screws
  • Total code required: 10 lines of simple gcode
  • Adds no extra weight
  • Adds no extra wires or circuitry
  • Adds no extra signal treatment in software
  • Dirt-insensitive
  • Doesn't require special bed materials
  • Intuitive, gives the user the chance easily understand and control

Among sensors, FSRs sensing forces across print head are still my favourite:

  • Would work with only one sensor
  • Working libre implementations exist
  • Adds little extra weight
  • Dirt-insensitive
  • Doesn't require special bed materials

I'm posting this report on the wiki: http://opensourceecology.org/wiki/3D_Printer_Bed_Leveling#Research_Report_1


First Attempt at Listing Sources

http://www.tridimake.com/2015/12/bed-leveling-tramming-sensors.html Steps through entire state of the art/tech tree of choices. Ends up recommending using three Force Sensing Resistors.
http://forums.reprap.org/read.php?14,605317 Forum thread announcing load cell z-probe design.
http://www.instructables.com/id/Reprap-Load-Cell-Z-Probe/ Instructable for load cell based bed level system announced in above link.
http://forums.reprap.org/read.php?151,246132,362843#msg-362843 Posted list of threads relevant to height sensing
http://reprap.org/wiki/Auto_Bed_Leveling RepRap Wiki Article on bed compensation

Collection of links suggesting a need for automatic bed leveling or compensation

forum thread 2013, status of firmware work on bed compensation in 2012, Lulzbot's thread on bed compensation started in 2013 was active until mid 2015, bed leveling question from 2012, Print Bed Leveling procedure on RepRap Wiki

Relevant Meeting Protocols

Internal Links

External Links