3D Printer Bed Leveling
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).
Introduction
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 i 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
Matrix
Name | Bed/Head Contact? | Re-calibration on glass sheet change? | Re-calibration on tool change? | Dedicated motor needed? | Licenses and patents of implementations | Files | Price | Build Complexity 1 – 10 | Usage Repeatability | Bed weight/g | Head weight/g | HW Sources | Example Usage | Surface dependence | Developer | Instructions available? | Notes |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Mechanical tramming, motorized fixation | Yes | No | No | Yes | Patent application for gimbal and lock system | 6.0 | Very good | > 100 | 0.0 | Video by Kühling&Kühling | Spring-loaded surface and with variable height fixation | No | |||||
Mechanical tramming, manual fixation | Yes | No | No | No | CC BY SA | jonaskuehling's Github repo | 1.0 | 1.0 | Very good | ~20.0 | 0.0 | Video by Scott Booker | Spring-loaded surface and with variable height fixation | Kühling&Kühling | No | ||
Microswitch near hot end | No | No | Yes | Yes | Video by Smartfriendz | None | |||||||||||
Microswitch across print head | Yes | No | No | No | 1.0 | 5.0 | Good | 0.0 | ~10 | Video by Smartfriendz, Video by Tom, Image of Robox connection | None | Smartfriendz first used microswitch near head, then changed to microswitch across head to ease installation and save a servo. CEL Robox also uses microswitch across print head. | |||||
Microswitches in bed | Yes | No | No | No | 1.0 | 4.0 | Good enough for layer heights > ~0.05 mm | ~10 | 0.0 | Cheap Ebay source | Video by Prusa Research, Fisher uses �this bed resting on these spring loaded corners. | Resting on microswitches | Prusa and others | Some microswitches are heat sensitive. Home made switches are easily constructed. Reprappro did not reuse modulation IR probe from Ormerod design in its newer Fisher design. Suggests overall benefits. | |||
Ultrasonic source+sensor near print head | No | No? | Yes | No | GPL, CC0 | dc42's Github repo (experimental support) | ~$15? | 5.0 | Low due to temperature dependence | 0.0 | ~8 | Reading forum thread required | Depends on air temperature between bed and sensor. Hard to control/predict. | Dc42 and Radian on RepRap forums | No | ||
Modulated IR sensor near print head | No | No | Yes | No | MIT | Reprappro's Github repo | 22.0 | 4.0 | Needs recalibration when ambient light or bed reflectivity changes | 0.0 | ~5 | Emakershop | Ormerod II | Relies on IR reflection (color/transparency sensitive) | Reprappro (Bowyer et al) | Yes | Linked goes to specialized breakout board. Modulated refers to switching light source on and off, and using diffed values. |
Differential IR sensor near print head | No | No | Yes | No | GPL, CC0 | dc42's Github repo | 40.0 | 4.0 | Saturates in direct sunlight at shallow angle [1] | 0.0 | ~7 | Filastruder.com | See pic here | Relies on IR reflection (color/transparency sensitive) | Escher 3d (dc42 on RepRap forums) | Yes | Linked goes to specialized breakout board. Differential refers to usage of two light sources. Also called three-way modulation. |
Capacitive proximity sensor near print head | No | Yes | Yes | No | 3.0 | 6.0 | Sensitive to electrical noise, temperature (air humidity) and any irregularity between metal sheet and head. Very high theoretical precision. | 0.0 | ~20 | Chip used by Radian. Ebay | Video by Radian, Video explaining basic concept | Needs extremely regular bed, as air, paper, dust, glue etc affects measurments. | Radian on RepRap forums | No | Developer Radian prefers capacitive sensing after extensive experimentation with IR and ultrasonic. Equally experienced developer dc42 prefers differential IR sensing. | ||
Inductive proximity sensor near print head | No | Yes | Yes | No | 3.0 | 3.0 | Good | 0.0 | ~45 | Sensor used by Folgertech | Explanation by Radian, Video by AIRCONROB, Video by Richrap | Works with aluminum bed without glass (too low sensing range). Ferrous metal bed gives good enough sensing range for having glass bed above it. [1, 2] | Radian on RepRap forums (and others) | Yes | Used by �Smartfriendz, Printrbot and bq. Smartfriendz used microswitch near and through print head in previous designs. Less sensitive to bed irregularities than capacitive sensing. bq uses steel plate behind glass sheet. | ||
Piezo elements in bed | Yes | No | No | No | CC BY SA | elenhinan's Thingiverse repo, Inornate's remix on Thingiverse | 15.0 | 7.0 | Very good in theory but needs controlled environment (sensitive to vibration and electrical noise). | ~15 | 0.0 | See Inornate's repo for BOM | Video by elenhinan | Resting on piezo elements | elenhinan and inornate on thingiverse | Some here, some here | See developer thread (inactive since spring 2015). |
Voltage across bed/head | No | Yes | Requires voltage in head. Otherwise no. | No | CC BY SA | 1.0 | 3.0 | Requires nozzle cleaning, otherwise very good. | ~3 | ~1 | Yommy Rawr's video of Lulzbot Mini | One separated conductive area per data point | Lulzbot | Only Lulzbot Mini in known to use this solution. Reported to work very reliably. | |||
Force sensitive resistors in bed | Yes | No | No | No | 18.0 | Sparkfun | Requires ca 1 N to acticate, which some find too much to be reliable [1] | ||||||||||
Force sensitive resistors across print head | Yes | No | No | No | 6.0 | Sparkfun | |||||||||||
Accelerometer in print head | Yes | No | No | No | 8.0 | Unknown | 0.0 | ~5.0 | Seems like the promised Kickstarted Tiko will use it... | None | Tiko team | No | Very little known about accelerometer solution |
Researched Sources
http://www.protoparadigm.com/news-updates/3screw-bed-leveling-and-the-importance-of-a-level-print-bed-on-a-3d-printer/ | |
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://www.tridimake.com/2015/12/tribed-fully-automatic-bed-leveling-and-z-offset-adjustment.html | |
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://hackaday.com/2014/04/15/automated-bed-leveling-for-3d-printers-is-now-solved/ | |
http://www.instructables.com/id/Mach3-Zero-Probe-Tool/ | |
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