- G0-G1: Linear Move
- G2-G3: Arc or Circle Move
- G4: Dwell
- G5: Bézier Cubic Spline
- G6: Direct Stepper Move
- G10: Retract
- G11: Recover
- G12: Clean the Nozzle
- G17-G19: CNC Workspace Planes
- G20: Inch Units
- G21: Millimeter Units
- G26: Mesh Validation Pattern
- G27: Park toolhead
- G28: Auto Home
- G29: Bed Leveling
- G29: Bed Leveling (3-Point)
- G29: Bed Leveling (Linear)
- G29: Bed Leveling (Manual)
- G29: Bed Leveling (Bilinear)
- G29: Bed Leveling (Unified)
- G30: Single Z-Probe
- G31: Dock Sled
- G32: Undock Sled
- G33: Delta Auto Calibration
- G34: Z Steppers Auto-Alignment
- G34: Mechanical Gantry Calibration
- G35: Tramming Assistant
- G38.2-G38.5: Probe target
- G42: Move to mesh coordinate
- G53: Move in Machine Coordinates
- G54-G59.3: Workspace Coordinate System
- G60: Stored Positions
- G61: Return to Saved Position
- G76: Probe temperature calibration
- G80: Cancel Current Motion Mode
- G90: Absolute Positioning
- G91: Relative Positioning
- G92: Set Position
- G425: Backlash Calibration
- M0-M1: Unconditional stop
- M3: Spindle CW / Laser On
- M4: Spindle CCW / Laser On
- M5: Spindle / Laser Off
- M7-M9: Coolant Controls
- M10-M11: Vacuum / Blower Control
- M16: Expected Printer Check
- M17: Enable Steppers
- M18, M84: Disable steppers
- M20: List SD Card
- M21: Init SD card
- M22: Release SD card
- M23: Select SD file
- M24: Start or Resume SD print
- M25: Pause SD print
- M26: Set SD position
- M27: Report SD print status
- M28: Start SD write
- M29: Stop SD write
- M30: Delete SD file
- M31: Report Print Time
- M32: Select and Start
- M33: Get Long Path
- M34: SDCard Sorting
- M42: Set Pin State
- M43: Debug Pins
- M43 T: Toggle Pins
- M48: Probe Repeatability Test
- M73: Set Print Progress
- M75: Start Print Job Timer
- M76: Pause Print Job Timer
- M77: Stop Print Job Timer
- M78: Print Job Stats
- M80: Power On
- M81: Power Off
- M82: E Absolute
- M83: E Relative
- M85: Inactivity Shutdown
- M86: Hotend Idle Timeout
- M87: Disable Hotend Idle Timeout
- M92: Set Axis Steps-per-unit
- M100: Free Memory
- M102: Configure Bed Distance Sensor
- M104: Set Hotend Temperature
- M105: Report Temperatures
- M106: Set Fan Speed
- M107: Fan Off
- M108: Break and Continue
- M109: Wait for Hotend Temperature
- M110: Set / Get Line Number
- M111: Debug Level
- M112: Full Shutdown
- M113: Host Keepalive
- M114: Get Current Position
- M115: Firmware Info
- M117: Set LCD Message
- M118: Serial print
- M119: Endstop States
- M120: Enable Endstops
- M121: Disable Endstops
- M122: TMC Debugging
- M123: Fan Tachometers
- M125: Park Head
- M126: Baricuda 1 Open
- M127: Baricuda 1 Close
- M128: Baricuda 2 Open
- M129: Baricuda 2 Close
- M140: Set Bed Temperature
- M141: Set Chamber Temperature
- M143: Set Laser Cooler Temperature
- M145: Set Material Preset
- M149: Temperature Units
- M150: Set RGB(W) Color
- M154: Position Auto-Report
- M155: Temperature Auto-Report
- M163: Set Mix Factor
- M164: Save Mix
- M165: Set Mix
- M166: Gradient Mix
- M190: Wait for Bed Temperature
- M191: Wait for Chamber Temperature
- M192: Wait for Probe temperature
- M193: Wait For Laser Cooler Temperature
- M200: Volumetric Extrusion Diameter
- M201: Print / Travel Move Limits
- M203: Set Max Feedrate
- M204: Set Starting Acceleration
- M205: Set Advanced Settings
- M206: Set Home Offsets
- M207: Firmware Retraction Settings
- M208: Firmware Recover Settings
- M209: Set Auto Retract
- M210: Homing Feedrate
- M211: Software Endstops
- M217: Filament swap parameters
- M218: Set Hotend Offset
- M220: Set Feedrate Percentage
- M221: Set Flow Percentage
- M226: Wait for Pin State
- M240: Trigger Camera
- M250: LCD Contrast
- M255: LCD Sleep/Backlight Timeout
- M256: LCD Brightness
- M260: I2C Send
- M261: I2C Request
- M280: Servo Position
- M281: Edit Servo Angles
- M282: Detach Servo
- M290: Babystep
- M300: Play Tone
- M301: Set Hotend PID
- M302: Cold Extrude
- M303: PID autotune
- M304: Set Bed PID
- M305: User Thermistor Parameters
- M306: Model Predictive Temp. Control
- M350: Set micro-stepping
- M351: Set Microstep Pins
- M355: Case Light Control
- M360: SCARA Theta A
- M361: SCARA Theta-B
- M362: SCARA Psi-A
- M363: SCARA Psi-B
- M364: SCARA Psi-C
- M380: Activate Solenoid
- M381: Deactivate Solenoids
- M400: Finish Moves
- M401: Deploy Probe
- M402: Stow Probe
- M403: MMU2 Filament Type
- M404: Filament Width Sensor Nominal Diameter
- M405: Filament Width Sensor On
- M406: Filament Width Sensor Off
- M407: Read Filament Width
- M410: Quickstop
- M412: Filament Runout
- M413: Power-loss Recovery
- M420: Bed Leveling State
- M421: Set Mesh Value
- M422: Set Z Motor XY
- M423: X Twist Compensation
- M425: Backlash compensation
- M428: Home Offsets Here
- M430: Power Monitor
- M486: Cancel Objects
- M493: Fixed-Time Motion
- M500: Save Settings
- M501: Restore Settings
- M502: Factory Reset
- M503: Report Settings
- M504: Validate EEPROM contents
- M510: Lock Machine
- M511: Unlock Machine
- M512: Set Passcode
- M524: Abort SD print
- M540: Endstops Abort SD
- M569: Set TMC stepping mode
- M575: Serial baud rate
- M592: Nonlinear Extrusion Control
- M593: ZV Input Shaping
- M600: Filament Change
- M603: Configure Filament Change
- M605: Multi Nozzle Mode
- M665: Delta Configuration
- M665: SCARA Configuration
- M666: Set Delta endstop adjustments
- M666: Set dual endstop offsets
- M672: Duet Smart Effector sensitivity
- M701: Load filament
- M702: Unload filament
- M710: Controller Fan settings
- M808: Repeat Marker
- M810-M819: G-code macros
- M820: Report G-code macros
- M851: XYZ Probe Offset
- M852: Bed Skew Compensation
- M860-M869: I2C Position Encoders
- M871: Probe temperature config
- M876: Handle Prompt Response
- M900: Linear Advance Factor
- M906: Stepper Motor Current
- M907: Trimpot Stepper Motor Current
- M908: Set Trimpot Pins
- M909: Report DAC Stepper Current
- M910: Commit DAC to EEPROM
- M911: TMC OT Pre-Warn Condition
- M912: Clear TMC OT Pre-Warn
- M913: Set Hybrid Threshold Speed
- M914: TMC Bump Sensitivity
- M915: TMC Z axis calibration
- M916: L6474 Thermal Warning Test
- M917: L6474 Overcurrent Warning Test
- M918: L6474 Speed Warning Test
- M919: TMC Chopper Timing
- M928: Start SD Logging
- M951: Magnetic Parking Extruder
- M993: Back up flash settings to SD
- M994: Restore flash from SD
- M995: Touch Screen Calibration
- M997: Firmware update
- M999: STOP Restart
- M7219: MAX7219 Control
- T0-T7: Select or Report Tool
- T?-Tx: MMU2 Special Commands
Description
The Unified Bed Leveling System (UBL) provides a comprehensive set of resources to produce the best bed leveling results possible. See the full Unified Bed Leveling documentation for more details.
Notes
- Requires
AUTO_BED_LEVELING_UBL
. -
M420 S1
can be used to turn leveling on, but requires a valid (complete) mesh. SeeM420
for more details.
Release Notes:
-
UBL builds on Edward Patel’s “Mesh Bed Leveling” system (also included).
-
UBL does not replace 3-Point or Planar leveling. These use a 3D matrix to tilt the whole model. UBL’s 3-point and Planar operations only apply to the mesh, not to the whole model.
-
It is highly recommended to enable EEPROM. Without EEPROM storage enabled, UBL is limited to 3-Point or Grid Leveling (
G29 P0 T
orG29 P0 G
) and can’t save meshes for later use. -
For the initial
G28
andG29 P1
that automatically populates the mesh, UBL probes the mesh points in a growing spiral starting from the center of the bed. This pattern is better for Deltabots, allowing the center of the Mesh to be populated (and edited) more quickly so you can do test printing early in the process. -
You don’t need to populate the entire mesh to use it. This saves time if you need to adjust settings and probe again.
-
UBL gathers the points closest the nozzle unless you specify an (X,Y) coordinate pair.
-
Use
G29 P3
to automatically fill in unpopulated mesh points. You can also use an LCD controller withG29 P2
to move the nozzle to each unpopulated point and manually adjust the height. See theP2
andP3
parameters for usage info. -
We know it takes a lot of effort to create good working Mesh data, so UBL stores its mesh data in a separate location where it won’t be affected by EEPROM errors or version changes.
-
For multi-axis machines (
I_DRIVER_TYPE
defined) without implementation of inverse kinematics, bed leveling produces wrong results while the toolhead is not oriented vertical and perpendicular to the bed and must be turned off withM420 S0
.
Usage
G29 [A] [B<mm/flag>] [C<bool/float>] [D] [E] [F<linear>] [H<linear>] [I<int>] [J<int>] [K<index>] [L<index>] [P<0|1|2|3|4|5|6>] [Q<index>] [R<int>] [S<slot>] [T<0|1>] [U] [V<0|1|2|3|4>] [W] [X<linear>] [Y<linear>]
Parameters
[A] | Activate Unified Bed Leveling (i.e., |
[B<mm/flag>] | Business Card mode (
|
[C<bool/float>] |
|
[D] | Disable Unified Bed Leveling (i.e., |
[E] | Stow probe after probing |
[F<linear>] | Fade height. (UBL only! For others use Fade the amount of Mesh Based Compensation over a specified height. At the specified height, no correction is applied and natural printer kinematics take over. If no number is specified for the command, 10mm is assumed to be reasonable. |
[H<linear>] | Height:
|
[I<int>] | Invalidate a number of mesh points (default 1).
|
[J<int>] | Grid (or 3-Point) leveling:
|
[K<index>] UBL_DEVEL_DEBUGGING | Kompare: Subtract (diff) the stored mesh with this index from the current mesh. This destructively operates on the active mesh, and the result should not be used for printing. (Requires |
[L<index>] | Load a mesh. If no index is given, load the previously-activated mesh. The given mesh index will be used for subsequent Load and Store operations. |
[P<0|1|2|3|4|5|6>] | Phase: The
|
[Q<index>] | Test Pattern. Load the specified Test Pattern to check for correct operation. This command is intended for developers and is not required for everyday bed leveling. |
[R<int>] | Repeat count. (Default
|
[S<slot>] | Save the mesh to EEPROM in the given slot.
|
[T<0|1>] | Topology: Include a Topology Map in the output.
|
[U] | Unlevel: Probe the outer perimeter to assist bed tramming. (Use with
|
[V<0|1|2|3|4>] | Verbosity Level (0-4) |
[W] UBL_DEVEL_DEBUGGING | What?: Display valuable UBL data. (Requires |
[X<linear>] | X position for all phases and commands (Default: current X) |
[Y<linear>] | Y position for all phases and commands (Default: current Y) |
Examples
This is a minimal sequence for set-up and initial probing of a UBL mesh on a machine that includes a display and z-probe
This is a minimal sequence for set-up and initial probing of a UBL mesh on a machine that includes a display and no z-probe
Optional settings
Use G26
and G29
commands to fine-tune a measured mesh
Tilt a stored mesh; e.g. in your startup script