thinkyhead

G29 - Bed Leveling (Manual)

calibration Measure Z heights in a grid, enable leveling compensation MESH_BED_LEVELING

Description

Mesh Bed Leveling (MBL) allows interactively measuring a Z height mesh without a bed probe. The only tool required is a piece of paper or a feeler gauge. MBL uses the mesh to compensate for variations in height across the bed.

Mesh Bed Leveling from the host:

  1. Use G29 S0 to get the current status and mesh. If there’s an existing mesh, you can send M420 S1 to use it.
  2. Use G29 S1 to move to the first point for Z adjustment.
  3. Adjust Z so a piece of paper can just pass under the nozzle.
  4. Use G29 S2 to save the Z value and move to the next point.
  5. Repeat steps 3-4 until completed.
  6. Use M500 to save the mesh to EEPROM, if desired.

Mesh Bed Leveling using an LCD controller: (Requires LCD_BED_LEVELING)

  1. Select Level Bed then choose Level Bed (not Cancel) in the sub-menu.
  2. Wait for Homing XYZ to complete.
  3. When Click to Begin appears, press the controller button to move to the first point.
  4. Use the controller wheel to adjust Z so that a piece of paper can just pass under the nozzle.
  5. Press the controller button to save the Z value and move to the next point.
  6. Repeat steps 4-5 until completed.
  7. Use Control > Store memory to save the mesh to EEPROM, if desired.

Notes

  • Requires the MESH_BED_LEVELING option in Configuration.h.
  • Similar to AUTO_BED_LEVELING_BILINEAR with PROBE_MANUALLY but uses less SRAM.
  • For automatic probe-based leveling enable one of the AUTO_BED_LEVELING_* options instead.
  • By default G28 disables bed leveling. Follow G28 with M420 S to turn leveling on.
    • With ENABLE_LEVELING_AFTER_G28 leveling will always be enabled after G28.
    • With RESTORE_LEVELING_AFTER_G28 leveling is restored to whatever state it was in before G28.

Usage

G29 [I<index>] [J<index>] S<0|1|2|3|4|5> [X<count>] [Y<count>] [Z<linear>]

Parameters

[I<index>]

(Marlin 2.x) With S3, the (0…n-1) X index of the mesh value to modify.

    [J<index>]

    (Marlin 2.x) With S3, the (0…n-1) Y index of the mesh value to modify.

      S<0|1|2|3|4|5>
      • S0:

        Produce a mesh report (see examples below).

      • S1:

        Start probing mesh points.

      • S2:

        Probe the next mesh point.

      • S3:

        Manually modify a single point with X Y Z parameters. (See also M421.)

      • S4:

        Set a global Z offset. Positive values are away from the bed; negative values are closer.

      • S5:

        Reset and disable mesh.

      [X<count>]

      (Marlin 1.x) With S3, the (1…n) X count of the mesh value to modify.

        [Y<count>]

        (Marlin 1.x) With S3, the (1…n) Y count of the mesh value to modify.

          [Z<linear>]

          With S3, the new mesh Z value.

            Examples

            S0 mesh report:

            > G29 S0
            Num X,Y: 3,3
            Z offset: 0
            Measured points:
                   0      1       2
            0 +0.011 -0.020  -0.026
            1 +0.017 +0.002  -0.019
            2 +0.022 -0.030  -0.013

            (Marlin 1.x) Modify some mesh points and view the new mesh:

            > G29 S3 X3 Y3 Z0.042
            > G29 S3 X2 Y2 Z-0.666
            > G29 S0
            Num X,Y: 3,3
            Z offset: 0
            Measured points:
                   0      1       2
            0 +0.011 -0.020  -0.026
            1 +0.017 -0.666  -0.019
            2 +0.022 -0.030  +0.042

            (Marlin 2.x) Modify some mesh points and view the new mesh:

            > G29 S3 I2 J2 Z0.042
            > G29 S3 I1 J1 Z-0.666
            > G29 S0
            3x3 mesh. Z offset: 0
            Measured points:
                   0      1       2
            0 +0.011 -0.020  -0.026
            1 +0.017 -0.666  -0.019
            2 +0.022 -0.030  +0.042