BL touch Z offset (similar to M851)



  • Hi guys,

    I succeed to set up BL touch was quite easy and straight forward the following manual on duet wiki. There is one difference how I want to set up BL touch:

    BL touch would be mounted temporarily and only for making a heightmap. Then it will be removed until next calibration. (The reason I am doing that because I am building a printer with a heated chamber of 100C.). Heightmap will be loaded from SD card and used for a mesh compensation.

    The problem I have now is the following. Then I load a map from SD card and if I send G1 Z0 it will move the bed to a Zmin which is set correct. But this way I have a gap of 2mm approx. I would like to know if there is a way of quick-adjust a Z offset to compensate for different bed surfaces or nozzle heights? (Like M851 using marlin?) Or is there a better way of doing what I am doing using BL touch?

    If it necessary my mount for BL touch is located underneath the nozzle: there is a picture (sorry for the quality) therefore my G31 X10 Y0 Z60 P25

    IMG_5731.jpeg

    Thank you in advance and happy new year! 🙂



  • how do you establish z=0 without a probe?

    you could for example use babystepping
    https://duet3d.dozuki.com/Wiki/Gcode#Section_M290_Baby_stepping


  • Moderator

    That's a very unorthodox way of using the BLTouch. You'd need to ensure your offsets are correct in all dimension. And it looks like you have two nozzles, so the BLTouch would be relative to the first nozzle, and the second nozzle would be relative to the first nozzle.

    If your mount for the BLtouch allows for repeatable positioning between uses you could probably get away with doing it like this.

    The trick would be to accurately find the Z0 so that it matches the results of the BLtouch. Honestly I think it would be far easier to mount the BLTouch permanently in a more traditional fashion so that you can use it for homing Z as well.

    How are you homing Z currently? The offset you are seeing is likely due to a mismatch between where the BLtouch identified Z0 and where your homing method has set it. You need to accurately define your offsets and homing position to correct for this.



  • @Veti

    Thanks, I will have a look at babystepping!

    @Phaedrux

    It is indeed not a common way to use it. But this is what I would like to implement with BL touch first, should be a similar approach?

    https://twitter.com/machine_elite/status/1152642281616412673

    I do have a micro switch on Zmax for homing.
    I can't leave a BL touch permanently attached as it will die with a 100C heated chamber.
    Does it mean what my offsets set wrong G31 X10 Y0 Z60 P25, distance from the bed to retracted pin?

    I hope guys, you can put some light on it, it should be possible

    Thanks in advance!




  • Moderator

    @felt342 said in BL touch Z offset (similar to M851):

    I do have a micro switch on Zmax for homing.

    This is fine, but you must have an accurate height for the Z axis length based on where Z0 is, otherwise it will not get the nozzle exactly to Z0.

    The reference point must be the surface of the bed as Z0 as the foundation of all other offsets, otherwise when you try to go back to Z0 you won't get there.

    Here is an example of using a macro to accurately measure the Z max position:
    https://duet3d.dozuki.com/Wiki/Macros#Section_Example_Measuring_the_Z_axis_for_a_Z_max_endstop_and_saving_the_result

    In this case Z0 is defined by touching the nozzle to the bed. To automate this process you could use M558 P0 probe type. This is a manual probing that presents the user with a jog dialogue to manually drop the nozzle to the bed to establish Z0. M558 P0 could be defined in that macro and then G30 would present the jog dialogue. Then the Z max could be measured accurately to set the M208 Z max.

    Once you have Z0 set, and M208 Z max set, you can then mount your BLTouch and use the normal trigger height calibration to find your G31 Z offset for the BLTouch. https://duet3d.dozuki.com/Wiki/Test_and_calibrate_the_Z_probe#Section_Calibrate_the_Z_probe_trigger_height

    You'll also need to know the X Y offset for the BLTouch from the first nozzle. Method for finding that is also described in that link.


  • Moderator

    @Veti said in BL touch Z offset (similar to M851):

    https://miscsolutions.wordpress.com/mini-height-sensor-board/
    this might be able to withstand 100C

    If the Z axis is suitable you may even be able to use stall detection as the Z probe.



  • @Phaedrux

    That's all looks interesting and at the same time a bit foggy to me. I will try to experiment with this definitely!
    Do you have any idea how it might be done on elitemachie 3d Printer with Metrol probe?

    Thanks for your guidance.


  • Moderator

    They may be using probe type P4 for a simple switch.

    https://duet3d.dozuki.com/Wiki/Connecting_a_Z_probe#Section_Mode_Num_4



  • @felt342 said in BL touch Z offset (similar to M851):

    I can't leave a BL touch permanently attached as it will die with a 100C heated chamber.

    I sure hope that all the motors, duet and power supply are outside the build chamber.
    Are the belts outside the chamber or have you verified they are good to 100C ?



  • @jens55

    Yes, everything is outside the chamber. Belts are rated to 120c.



  • @Phaedrux

    Hi, I tried to get around with you solutions and I badly failed 😄
    Will keep for a different moment in my life, for now I don't have time. I made a traditional way of using BL touch for a homing, but have an issue now. Every time then I press home Z, my X and Y start to quickly smashing on to end stops. And then Z starts homing. But I need to move first X and Y by 30x30 before Z probe would be above bed.

    This is mine homeall.g

    ; homeall.g
    ; called to home all axes
    ;
    ; generated by RepRapFirmware Configuration Tool v2.1.4 on Thu Jan 02 2020 22:17:48 GMT+0100 (Central European Standard Time)
    G91                       ; relative positioning
    G1 H2 Z0 F15000           ; lift Z relative to current position
    G1 H1 X-321 Y-272.5 F3000 ; move quickly to X or Y endstop and stop there (first pass)
    G1 H1 X-321               ; home X axis
    G1 H1 Y-272.5             ; home Y axis
    G1 X5 Y5 F15000           ; go back a few mm
    G1 H1 X-321 F300          ; move slowly to X axis endstop once more (second pass)
    G1 H1 Y-272.5             ; then move slowly to Y axis endstop
    G90                       ; absolute positioning
    G1 H2 X0 Y60 F15000       ; go to first bed probe point and home Z
    G30                       ; home Z by probing the bed
    
    ; Uncomment the following lines to lift Z after probing
    ;G91                      ; relative positioning
    ;G1 S2 Z0 F250            ; lift Z relative to current position
    ;G90                      ; absolute positioning
    
    
    

    I found there is:

    G1 H2 X0 Y60 F15000       ; go to first bed probe point and home Z
    

    I don't understand from there is Y60 there? I am using Reprap configurator
    If I manually put there Y-60 than its moves 60 by Y which is as expected. But If I put also X30 than it start to misbehave.

    There is config.g

    ; Configuration file for Duet WiFi (firmware version 2.03)
    ; executed by the firmware on start-up
    ;
    ; generated by RepRapFirmware Configuration Tool v2.1.4 on Thu Jan 02 2020 22:17:48 GMT+0100 (Central European Standard Time)
    
    ; General preferences
    G90                                             ; send absolute coordinates...
    M83                                             ; ...but relative extruder moves
    M550 P"own"                                     ; set printer name
    
    M667 S1                                         ; select CoreXY mode
    
    ; Network
    M552 S1                                         ; enable network
    M586 P0 S1                                      ; enable HTTP
    M586 P1 S0                                      ; disable FTP
    M586 P2 S0                                      ; disable Telnet
    
    ; Drives
    M569 P0 S1                                      ; physical drive 0 goes forwards
    M569 P1 S1                                      ; physical drive 1 goes forwards
    M569 P2 S1                                      ; physical drive 2 goes forwards
    M569 P3 S0                                      ; physical drive 3 goes backwards
    M569 P4 S1                                      ; physical drive 4 goes forwards
    M584 X0 Y1 Z2 E3:4                              ; set drive mapping
    M350 X16 Y16 Z16 E16:16 I1                      ; configure microstepping with interpolation
    M92 X200.00 Y200.00 Z400.00 E436.50:436.50      ; set steps per mm
    M566 X900.00 Y900.00 Z30.00 E120.00:120.00      ; set maximum instantaneous speed changes (mm/min)
    M203 X6000.00 Y6000.00 Z180.00 E1200.00:1200.00 ; set maximum speeds (mm/min)
    M201 X500.00 Y500.00 Z15.00 E250.00:250.00      ; set accelerations (mm/s^2)
    M906 X800 Y800 Z1300 E600:600 I30               ; set motor currents (mA) and motor idle factor in per cent
    M84 S30                                         ; Set idle timeout
    
    ; Axis Limits
    M208 X0 Y0 Z0 S1                                ; set axis minima
    M208 X316 Y267.5 Z334 S0                        ; set axis maxima
    
    ; Endstops
    M574 X1 Y1 S0                                   ; set active low and disabled endstops
    M574 Z1 S2                                      ; set endstops controlled by probe
    
    ; Z-Probe
    M307 H3 A-1 C-1 D-1                             ; disable heater on PWM channel for BLTouch
    M558 P9 H0 F120 T15000                          ; set Z probe type to bltouch and the dive height + speeds
    G31 P500 X10 Y-50 Z0                            ; set Z probe trigger value, offset and trigger height
    M557 X10:296 Y10:247.5 S15                      ; define mesh grid
    
    ; Heaters
    M140 H-1                                        ; disable heated bed
    M305 P1 X200                                    ; configure PT100 for heater 1
    M143 H1 S450                                    ; set temperature limit for heater 1 to 450C
    M305 P2 X201                                    ; configure PT100 for heater 2
    M143 H2 S450                                    ; set temperature limit for heater 2 to 450C
    
    ; Fans
    M106 P0 S0 I0 F500 H-1                          ; set fan 0 value, PWM signal inversion and frequency. Thermostatic control is turned off
    M106 P1 S1 I0 F500 H-1                          ; set fan 1 value, PWM signal inversion and frequency. Thermostatic control is turned off
    M106 P2 S1 I0 F500 H-1                          ; set fan 2 value, PWM signal inversion and frequency. Thermostatic control is turned off
    
    ; Tools
    M563 P0 S"Left" D0 H1 F-1                       ; define tool 0
    G10 P0 X0 Y0 Z0                                 ; set tool 0 axis offsets
    G10 P0 R0 S0                                    ; set initial tool 0 active and standby temperatures to 0C
    M563 P1 S"Right" D1 H2 F-1                      ; define tool 1
    G10 P1 X0 Y0 Z0                                 ; set tool 1 axis offsets
    G10 P1 R0 S0                                    ; set initial tool 1 active and standby temperatures to 0C
    
    ; Custom settings are not defined
    
    ; Miscellaneous
    M501                                            ; load saved parameters from non-volatile memory
    
    
    

    I don't understand that is wrong at this point, maybe you can guide me please a bit on it? Thank you in advance!


  • Moderator

    @felt342 said in BL touch Z offset (similar to M851):

    Every time then I press home Z

    You've posted your homeall, but what is in homez?


  • Moderator

    @felt342 said in BL touch Z offset (similar to M851):

    G1 H2 X0 Y60 F15000 ; go to first bed probe point and home Z
    G30 ; home Z by probing the bed

    You are using coreXY so the H2 shouldn't be there. In corexy mode that will set it to move one motor or the other. It's also unnecessary since the X and Y are homed at that point so you can just use a regular G1 X Y move to position the probe.
    Not sure why it's X0 Y60 either. But it can be whatever you want so just change it.
    Use G1 X150 Y 150 or whatever position you want to probe at.



  • @Phaedrux

    Hi, there is my home files. Haven't try yet to use just G1, after work will do! Thank you!
    Any idea why do I getting than H2 in ReprapConfigurator if its set for CoreXY, and how I can fix it to prevent in future?

    ; homez.g
    ; called to home the Z axis
    ;
    ; generated by RepRapFirmware Configuration Tool v2.1.4 on Thu Jan 02 2020 22:17:48 GMT+0100 (Central European Standard Time)
    G91                 ; relative positioning
    G1 H2 Z0 F15000     ; lift Z relative to current position
    G90                 ; absolute positioning
    G1 H2 X0 Y60 F15000 ; go to first probe point
    G30                 ; home Z by probing the bed
    
    ; Uncomment the following lines to lift Z after probing
    ;G91                ; relative positioning
    ;G1 H2 Z0 F250      ; lift Z relative to current position
    ;G90                ; absolute positioning
    
    ; homex.g
    ; called to home the X axis
    ;
    ; generated by RepRapFirmware Configuration Tool v2.1.4 on Thu Jan 02 2020 22:17:48 GMT+0100 (Central European Standard Time)
    G91               ; relative positioning
    G1 H2 Z0 F15000   ; lift Z relative to current position
    G1 H1 X-321 F3000 ; move quickly to X axis endstop and stop there (first pass)
    G1 X5 F15000      ; go back a few mm
    G1 H1 X-321 F300  ; move slowly to X axis endstop once more (second pass)
    G1 H2 Z0 F15000   ; lower Z again
    G90               ; absolute positioning
    
    ; homey.g
    ; called to home the Y axis
    ;
    ; generated by RepRapFirmware Configuration Tool v2.1.4 on Thu Jan 02 2020 22:17:48 GMT+0100 (Central European Standard Time)
    G91                 ; relative positioning
    G1 H2 Z0 F15000     ; lift Z relative to current position
    G1 H1 Y-272.5 F3000 ; move quickly to Y axis endstop and stop there (first pass)
    G1 Y5 F15000        ; go back a few mm
    G1 H1 Y-272.5 F300  ; move slowly to Y axis endstop once more (second pass)
    G1 H2 Z0 F15000     ; lower Z again
    G90                 ; absolute positioning
    
    

  • Moderator

    Haha it's a bit complicated. The H2 is ok for the z axis. Normally It allows you to move an axis when not homed yet. But for core xy it isolates a XY motor. The configurator was recently updated To use H instead of S because S has been repurposed for controlling laser power because that's what some of the laser software generates and this is a bug that is yet to be fixed.

    You homez needs to be changed in the same way as homeall.



  • @Phaedrux

    ouch 🙂
    meaning I should change in homeall.g

    G1 H2 X0 Y60 F15000       ; go to first bed probe point and home Z
    

    to

    G1 X50 Y50 F15000       ; go to first bed probe point and home Z
    

    and in homez.g

    G1 H2 X0 Y60 F15000 ; go to first probe point
    

    to

    G1 X50 Y50 F15000 ; go to first probe point
    

    Is that correct what I understood?
    learning every day! 🙂


  • Moderator

    Yes. But instead of x50 y50 you should try to position the probe at the center of the bed.



  • @Phaedrux

    Yes, that worked perfectly!

    I do have a small question still:
    Then I home Z now, its goes till mine Z offset set, and then dive by H10 value. Is this how it should be? Then I will print I should just set up in slicer startup .gcode the way it doesn't dive? Thank you!

    ; Z-Probe
    M307 H3 A-1 C-1 D-1                             ; disable heater on PWM channel for BLTouch
    M558 P9 H10 F120 T15000                          ; set Z probe type to bltouch and the dive height + speeds
    G31 P500 X10 Y-51.492 Z-0.5                            ; set Z probe trigger value, offset and trigger height
    M557 X10:296 Y10:247.5 S15                      ; define mesh grid
    

  • administrators

    The meaning of the dive height (M558 H parameter) is that when you do either a G30 probe with a P parameter (as used in bed.g) or mesh bed probing (G29), the print head will move to that height above the bed plus the trigger height before it starts probing. That's all. So if the bed is reasonably level (or for a delta printer, the printer is well calibrated), you can use a lower value such as H5 or H3 to speed up probing.

    The parameter in RRF that's similar to M851 in Marlin is the Z parameter in the G31 command. It predates M851 by several years.

    In fact, recent versions of RRF do support M851 as well for the benefit of users such as you coming from Marlin. See https://duet3d.dozuki.com/Wiki/Gcode?revisionid=HEAD#Section_M851_Set_Z_Probe_Offset_Marlin_Compatibility. The M851 parameter is the negation of the G31 Z parameter.



  • @dc42

    I see that is super helpful!
    Thank you for such a great support here on the forum, your software and hardware are really piece of great engineering. I do enjoy learning it a lot!


Log in to reply