BLTouch calibrated, nozzle still dives into the bed

  • I am having a few problems with my BLTouch. I have calibrated it several times using different methods and get the nozzle being 1.3 mm lower than the BLTouch pin so a Z offset of -1.3 mm. This works fine for auto homing, bed levelling and using code G1 Z0 to lower to where needed. However when using Cura to print the nozzle homes exactly as it should then drives the nozzle in to the bed as it starts or tries to start to print and not just a little bit either. Anyone have any ideas?

    Start G-code is:

    G28 ;Home
    G29 ;Probe
    G1 Z15.0 F6000 ;Move Platform down 15 mm
    G92 E0
    G1 F200 E3
    G92 E0

    Hi MattW49, welcome to 3DPrinting.SE! Maybe you can share the first lines from a Cura sliced model up to the point it dives into the bed according to your observations. Furthermore please answer by [edit]: "Does this only happen with Cura (so not with other slicers)? Has it ever worked well? What steps did you use to calibrate the Z offset and store it in memory?" With more information people can provide better answers to help you out.

    F6000 is too high, you will miss some steps.

    What printer is this BL Touch on? Did it come as stock on that printer, or have you added it as an after-market mod? If the latter, did you flash the printer with new firmware? Which firmware build and how is it configured?

    Are you measuring the offset, so retracted with respect to the nozzle? If so, that is not how you do it, the actual distance (the triggerpoint to the nozzle distance should be used, this is a smaller value). If you use the measured distance, the value is too large and it will dive into the bed.

    @FernandoBaltazar Good spot, that is a high velocity for the Z-axis. But if you miss steps, the distance would be shorter, not longer; i.e. there would be a gap, not diving into the bed.

  • This answer is intended to be a generic answer for Z-offset determination. The question is not clear on how the Z-offset has been determined. It appears as if this distance is measured, while in reality this cannot be measured.

    A touch (or a inductive or capacitive) probe uses a trigger point to determine the distance of the probe trigger point to the bed print surface. Correct installation is trivial, as is the determination of the nozzle to trigger point definition. For a touch sensor, the probing element is either stowed, fully deployed, or pushed in during leveling up to the point that the trigger point is reached and the probe stowes the rest of the pin, see figure:

    BLTouch or 3DTouch sensor Z-offset definition

    The M851 Zxx.xx offset is determined by lowering the nozzle beyond the trigger point until the nozzle hits a paper sheet. If the stowed position to nozzle distance is used, the distance is too large and the nozzle will dive into the bed on printing.

  • You should be able to offset this with a G54 Z-1.3 - if your setup accepts these gcodes.

    If you do this, always add a G53 to the very start and just before the M30 to clear all offsets after job finish (or in the event of a cancel, at the start of the next job).

    I'm not experienced with a wide variety of printers or firmware, but our repetier-based printers (and we use the same controls for our refurbished Fadal CNC machines) use G53-G59:

    As explained in this tutorial from

    Basic work offsets are very simple to specify: simply enter one of G54, G55, G56, G57, G58, or G59. [...] When you execute the work offset g-code, the XYZ offset will be added to all of your coordinates from that point forward.

    As detailed on Wikipedia:

    G54-59: Have largely replaced position register (G50 and G92). Each tuple of axis offsets relates program zero directly to machine zero. Standard is 6 tuples (G54 to G59), with optional extensibility to 48 more via G54.1 P1 to P48.

    And on the gcode dictionary provided by Hyrel 3D:

    G54 through G59 - Set Offsets
    G54, G55, G56, G57, G58, and G59 will each store and invoke offsets in the X, Y, and/or Z axes for all subsequent moves. Any values not invoked will remain with their previous value (0 unless earlier specified otherwise).

    • X is the offset in mm in the X axis.

    • Y is the offset in mm in the Y axis.

    • Z is the offset in mm in the Z axis.

    Here is an example:

    G54 X100 Y-50

    This command is decoded and executed by the printer as follows:

    G54 (set offsets)

    - X100 (+100mm to all X coordinates)

    - Y-50 (-50mm to all Y coordinates)

    Note that this differs from an M6, where the offsets are only applied to a SINGLE tool position.

    Disclaimer: I work for Hyrel 3D.

    Could you please expand upon G-code `G54`, it is not listed in e.g. this G-code overview? Which firmware supports this?

    Updated with additional information.

    Repetier does not support `G54` according to the sources. This must be a custom firmware, not based on Repetier. And Marlin doesn't support the code either. I guess Hyrel is more onto CNC firmware. Thanks for the information!

    We do our own firmware in-house, built on a repetier base.

License under CC-BY-SA with attribution

Content dated before 7/24/2021 11:53 AM