Bed Leveling Questions…



  • It looks like the firmware trend is moving from few-point point ABL to many-point mesh bed leveling. That's great, particularly since my bed is a lot less flat than I expected it to be.

    But I also liked the ABL because I have two Z motors on my CoreXY, and if they fall out of sync (from vibration when power-down or maybe a too-vigorous part removal) I will have a tilt to one side or the other. I've been using the faster ABL probing as an indicator while I make the mechanical adjustments to get the bed back to mostly level. (Long term, I will be mechanically syncing the two Z screws.) So I'd like to have the detail height map stored that I can load up and overlay on top of an every-print 4-point calibration to remove the residual Z screw error.

    Is that possible? The mesh_bed_compensation wiki page seems to indicate it is, but I'm not sure I have the details right. Here's my proposed flowchart with my best guess at what commands in what order:

    INITIAL CALIBRATION (done once, infrequently after):
    A1) G32 ; probe 4 corners of bed as spec'ed in bed.g file
    A2) Mechanically adjust Z screws and repeat step A1 until left-right (side-to-side) is roughly level.
    A3) M557 X30:200 Y30:200 S30 ; full mesh
    A4) G29 ; measure and save height map to heightmap.csv.

    EVERY-PRINT CALIBRATION:
    B1) G32 ; probe 4 corners of bed as spec'ed in bed.g file
    B2) Mechanically adjust Z screws and repeat step B1 until left-right (side-to-side) is roughly level.
    B3) G29 S1; recall heightmap.csv
    B4) Start printing with a well-compensated bed

    Is that correct?


  • administrators

    David should be able to confirm this but my understanding is that should work.


  • administrators

    Yes that should work.

    A planned future firmware feature will let you use the Z probe to adjust your two motors individually to get the bed level left to right, if you have them connected to separate stepper driver outputs.



  • Excellent, thank you both.



  • FWIW I resolved this problem with two Z motors run from a single driver by adding a mechanical homing stage into my start up code. I added lower hard stop points to each side of the bed, one with each Z motor, and then run the bed down into those stops (at a low current) until the motors misstep. This sets a repeatable level between the two. Very simple and, so far, very reliable. The whole process goes like this:

    1. Run Z axis up to its normal zero micro switch stop so we know roughly where we are.

    2. Run Z axis all the way down at high speed to 10 mm above hard bottom stops

    3. Reduce current and speed and run Z axis down a further 20 mm. This ensures that both motors will hit their end stops and misstep. The slow speed and low current keeps this process painless.

    4. Run Z axis back up and run zero routine as usual. (In my case using a DC42 IR sensor)

    (This assumes that the two motors are within 10 mm to start with. You can increase the 20 mm misstepping run if you think the error could be more than that.)

    With the speed and current low, the maximum delta between the two motors should now be no more than one full step of the motor. This adds maybe 20 seconds to the start up Gcode but solves a lot of problems! Coupled with mesh leveling it's meant I never have to worry about bed flatness.

    For hard stops I just printed sleeves that fit around the lead screws that limit downwards travel and transfer the load. Probably better would be hard stops on the frame, but I haven't found that to be necessary in practice.


Log in to reply