thinkyhead

G29 - Bed Leveling (Bilinear)

calibration Probe the bed and enable leveling compensation. AUTO_BED_LEVELING_BILINEAR

Description

Automatic (Bilinear) Bed Leveling probes the bed at some fixed number of points and produces a mesh representing the imperfections across the bed.

The printer must be homed with G28 before G29.

Using an electronic probe Marlin can probe the entire bed with a single G29 command. See parameter descriptions and examples below for details.

Manual Probing

Click for Details

Auto Bed Leveling now includes a PROBE_MANUALLY option for systems lacking a probe.

PROBE_MANUALLY adds these parameters to G29:

  • Q : Query leveling and G29 state
  • A : Abort current leveling procedure

To do manual probing simply repeat G29 until the procedure is complete.

The first G29 accepts the same parameters , shown in the Usage section below. The exact parameters available will depend on which style of bed leveling is enabled. (Note: UBL parameters are not covered on this page unless they coincide. See the G29 for UBL page for a full list of its options.)

Before probing the bed:

  1. Use G29 Q to get the current status. If G29 isn’t idle, abort with G29 A.
  2. Use M420 V to view leveling data. You can send M420 S1 to use the existing data.

To probe the bed using G-code:

  1. Use G29 to move to the first point for Z adjustment.
  2. Adjust Z so a piece of paper can just pass under the nozzle.
  3. Use G29 to save the Z value and move to the next point.
  4. Repeat steps 3-4 until completed.
  5. Use M500 to save the leveling data to EEPROM, if desired.

To probe the bed using your LCD controller: (Requires LCD_BED_LEVELING)

  1. Select the Level Bed sub-menu, then choose Level Bed (not Cancel).
  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.

Mesh Editing

AUTO_BED_LEVELING_BILINEAR adds these parameters to G29 for editing mesh points:

  • W Write a mesh point. (Ignored during leveling.)
  • I X index for mesh point
  • J Y index for mesh point
  • X logical X of mesh point
  • Y logical Y of mesh point
  • Z Z to store in mesh. If omitted, current raw Z.

Notes

  • Any arguments left out of G29 will use the default values set in Configuration.h.
  • 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.
  • To save time and machine wear, save your mesh to EEPROM with M500 and in your slicer’s “Starting G-code” replace G29 with M420 S1 to enable your last-saved mesh.
  • 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 with M420 S0

Usage

G29 [A<bool>] [B<linear>] [C<bool>] [D<bool>] [E<bool>] [F<linear>] [H<linear>] [J<bool>] [L<linear>] [O] [Q<bool>] [R<linear>] [S<rate>] [V<0-4>] [W<bool>] [X<float>] [Y<float>] [Z<float>]

Parameters

[A<bool>]

Abort leveling procedure in-progress (PROBE_MANUALLY)

    [B<linear>]

    Set the back limit of the probing grid.

      [C<bool>]

      Create a fake grid for testing. (DEBUG_LEVELING_FEATURE)

        [D<bool>]

        Dry-Run mode. Just probe the grid but don’t update the bed leveling data

          [E<bool>]
          • By default G29 will engage the Z probe, test the bed, then disengage.
          • Include “E” to engage/disengage the Z probe for each sample.
          • There’s no extra effect if you have a fixed Z probe.
            [F<linear>]

            Set the front limit of the probing grid.

              [H<linear>]

              Set the square width and height of the area to probe.

                [J<bool>]

                (Without W) Jettison the leveling data stored in SRAM and turn off leveling compensation. Data in EEPROM is not affected.

                  [L<linear>]

                  Set the left limit of the probing grid.

                    [O]

                    Optional. If leveling is already enabled then exit without leveling. (1.1.9)

                    [Q<bool>]

                    Query the current leveling state (PROBE_MANUALLY, DEBUG_LEVELING_FEATURE)

                      [R<linear>]

                      Set the right limit of the probing grid.

                        [S<rate>]

                        Set the XY travel speed between probe points.

                          [V<0-4>]

                          Set the verbose level

                            [W<bool>]

                            Write a mesh Z offset.

                            • Use X,Y or I,J to specify the point.
                            • Use Z to specify the new value to set.
                              [X<float>]

                              Specify X when setting a mesh value (PROBE_MANUALLY).

                                [Y<float>]

                                Specify Y when setting a mesh value.

                                  [Z<float>]

                                  Specify the Z offset when setting a mesh value.

                                    Examples

                                    Automatic Probing examples

                                    G29 ; Measure the bed

                                    G29 without arguments uses your default settings.

                                    G29 L50 R150 F50 B150 V4

                                    Probe your configured N x N matrix within the bounds X50 Y50 to X150 Y150 (verbose).

                                    Manual Probing example

                                    G29 V1 ;  Ready!  Go to Point 1, wait...
                                    G29 V1 ; Store Z, go to Point 2, wait...
                                    G29 V1 ; Store Z, go to Point 3, wait...
                                    G29 V1 ; Store Z, go to Point 4, wait...
                                    G29 V1 ; Store Z, go to Point 5, wait...
                                    G29 V1 ; Store Z, go to Point 6, wait...
                                    G29 V1 ; Store Z, go to Point 7, wait...
                                    G29 V1 ; Store Z, go to Point 8, wait...
                                    G29 V1 ; Store Z, go to Point 9, wait...
                                    G29 V1 ; Store Z. Calculate matrix. Activate.

                                    Each G29 command goes to the next step until the whole procedure is done. The V1 parameter provides a progress report.