Generating Z Offset for BLTouch on Gecko CoreXY

  • Hello,

    While I've just joined and this is my first post, I've been lurking here for several months.

    I'm having a heck of a time generating the Z offset with the [genuine] BLTouch. It's a 2nd generation "Smart" model. The physical Z distance from the tip of the print nozzle to the underside of the probe housing is 8.3 mm.
    Duet Firmware is 2.02.

    I've checked all my belts and motor shaft set screws. I've lowered the Z jerk settings. I've run the calibration process described here BLTouch on Duet WiFi – Configuration and usage and here Test and calibrate a Z probe dozens of times.

    Yet, every time, I get something similar to this console session:

    12:35:46 PM
    G30 S-1
    Stopped at height 1.272 mm
    12:35:38 PM
    G1 Z10
    12:35:29 PM
    G1 Z0
    12:35:12 PM
    G30 S-1
    Stopped at height 1.254 mm
    12:34:58 PM
    G1 Z10
    12:34:55 PM
    G1 Z0
    12:34:46 PM
    G30 S-1
    Stopped at height 1.267 mm
    12:34:36 PM
    G1 Z10
    12:34:29 PM
    G1 Z0
    12:34:19 PM
    G30 S-1
    Stopped at height 1.240 mm
    12:34:10 PM
    G1 Z10
    12:34:04 PM
    G1 Z0
    12:33:54 PM
    G30 S-1
    Stopped at height 1.137 mm
    12:33:46 PM
    G1 Z10
    12:33:40 PM
    G1 Z0
    12:33:14 PM
    G30 S-1
    Stopped at height 1.240 mm
    12:33:06 PM
    G1 Z10
    12:32:58 PM
    G1 Z0
    12:32:51 PM
    G30 S-1
    Stopped at height 1.435 mm
    12:32:43 PM
    G1 Z10
    12:32:32 PM
    G1 Z0
    12:32:24 PM
    G30 S-1
    Stopped at height 1.461 mm
    12:32:13 PM
    G1 Z10
    12:32:09 PM
    G92 Z0
    <jog head down>
    12:31:02 PM
    M98 P"0:/macros/Allow Z below 0"
    12:30:52 PM
    G1 Z0
    12:30:47 PM

    And, lather, rinse, repeat…
    As you can see, this lack of repeatability is insane.

    Here's my config:
    ; Configuration file for Duet 2 WiFi 1.04 (firmware version 2.02)

    ; General
    G90 ; Send absolute coordinates...
    M83 ; ...but relative extruder moves
    M667 S1 ; Select CoreXY mode
    ; M558 P0 ; Will manually adjust nozzle down to bed, (i.e. Paper leveling). Disabled due to MBL.

    ; Network
    M550 PGecko ; Set machine name
    M552 S1 ; Enable network
    ;*** Access point is configured manually via M587
    M586 P0 S1 ; Enable HTTP
    M586 P1 S0 ; Disable FTP
    M586 P2 S0 ; Disable Telnet

    ; Drives
    M569 P0 S1 ; Drive 0 (X) goes forwards
    M569 P1 S1 ; Drive 1 (Y) goes forwards
    M569 P2 S0 ; Drive 2 (Z) goes backwards
    M569 P3 S0 ; Drive 3 (E0) goes forwards
    M92 X80.73 Y80.73 Z1117 E432 ; Set steps per mm
    M350 X128 Y128 Z128 I0 ; Configure microstepping without interpolation
    M350 E16 I1 ; Configure microstepping with interpolation for extruder
    M201 X500 Y500 Z100 E800 ; Set max printing acceleration (mm/s^2)
    M203 X6000 Y6000 Z3000 E4000 ; Set maximum speeds (mm/min)
    M204 P500 T1600 R500 ; Set default acceleration for Printing, Travel, and Retraction moves
    ; M205 X20 Y20 Z10 E10 ; Jerk Settings for axes (mm/s) // USE M566 INSTEAD //
    M566 X1200 Y1200 Z10 E600 ; Set ("Jerk") maximum instantaneous speed changes (mm/min)
    M906 X1200 Y1200 Z900 E800 I25 ; Set motor currents (mA); Set motor idle factor in percent
    M84 S30 ; Set idle timeout

    ; Axis Limits
    M208 X0 Y0 Z0 S1 ; Set axis minima
    M208 X300 Y270 Z300 S0 ; Set axis maxima
    ; M671 X-8:308:-8:308 Y314:314:-25:-25 ; Adjusting Screw locations X,Y: Rear Left (-8,314), Rear Right (308,314), Front Right (308,-25), Front Left (-8,25)

    ; Endstops
    M574 X0 Y2 S1 ; Set Active Low endstops for XY. For Z, see "Z-Probe" below.

    ; Heaters
    M143 H0 S120 ; Set temperature limit for heater 0 [bed] to 120C
    M305 P0 H"Bed" T100000 B4138 C0 R4700 ; Set thermistor + ADC parameters for heater 0 [bed]
    M307 H0 A93.1 C956.5 D0.3 V24.5 B0 ; Result of bed PID Tuning 8 February 2019
    M143 H1 S280 ; Set temperature limit for heater 1 [hotend] to 280C
    M301 H1 P26.5 I0.706 D82.4 ; Set PID for heater 1 [hotend] computed 12 March 2019
    M305 P1 H"E3DV6" T100000 B4138 C0 R4700 ; Set thermistor + ADC parameters for heater 1 [hotend]
    M307 H1 A480.8 C317.7 D4.4 V24.4 S0.8 B0 ; Result of hotend PID Tuning 12 March 2019 & set PID Mode
    M307 H4 A-1 C-1 D-1 ; Disable heater 4 on PWM channel for BLTouch
    ; M305 P101 S"Drivers" ; Set name for virtual heater 101
    M912 P0 S-5.25 ; Set MCU temp offset. S# = (Tr - Tc). Tc = initial MCU temp at COLD boot. Tr = average of bed & hotend sensors at COLD boot.

    ; Z-Probe
    M574 Z1 S2 ; Set Z endstop to be controlled by probe
    M558 P9 H5 F120 T6000 ; Set Z probe type to BLtouch (9), 5 mm dive height, feed & travel speeds. (Must come before G31.)
    G31 P25 X40.5 Y-22.8 Z0 ; Set Z probe trigger value, XY offsets from nozzle, and trigger height
    M557 X41:300 Y0:270 S20 ; Define mesh grid (accounting for XY offsets). Defining probe points is done in bed.g

    ; BLTouch prep so we don't catch the probe pin on the edge of the bed
    G4 S10 ; Wait 10 seconds
    M280 P4 S160 I1 ; Alarm Release and Push-Pin UP just in case it's in alarm and deployed
    G4 S3 ; Wait 3 seconds
    M402 ; Retract probe just in case it's down

    ; Fans
    M106 P0 C"Part Fan" S0 I0 F500 H-1 T45 ; Set fan 0 [Part Cooling] value, PWM signal inversion and frequency. Thermostatic control is turned off
    M106 P1 C"Heatsink Fan" S1 I0 F500 H1 T50 ; Set fan 1 [Heatsink Cooling] value, PWM signal inversion and frequency. Thermostatic control is turned on
    M106 P2 I0 F100 H100:101 T45:65 B0.5 L0.3 ; Set fan 2 [Duet MCU (100), drivers (101)] with thermostatic control. 30% power @ 45C, 100% @ 65C

    ; Tools
    M563 P0 S"Hotend" D0 H1 F0 ; Define tool 0: (tool 0, extruder 0, heater 1 [hotend], fan 0 [part cooling fan])
    G10 P0 X0 Y0 Z0 ; Set tool 0 axis offsets
    G10 P0 R0 S0 ; Set initial tool 0 active and standby temperatures to 0C

    M18 ; Disable stepper motors until needed

    ; Startup Tones
    M400 ; wait for moves to complete
    G4 S2 ; wait 2s
    M300 P200 S2500 ; play 2500Hz beep for 200ms
    G4 P201 ; wait 201ms
    M300 P200 S3000
    G4 P201

    ; Automatic saving after power loss is not enabled

    The bed itself is a MIC-6 aluminum plate, 6.35 mm thick, holding a borosilicate glass plate resting on 0.5 mm silicone thermal pad squares. The bed is leveled to the base within 0.05 mm. By this I mean, all four corners are the exact same distance away from the bed's mount. Prior to BLTouch and Duet, I would level the bed to the nozzle using the paper method.

    I would really appreciate any help or thoughts…


  • Moderator

    That's pretty bad repeatability.

    We need to determine if it's the probe, or the mechanics.

    Ideas for the probe:

    Are any heaters on while you're doing this? If so, you could try adding the B parameter to M558 to turn off the heaters while probing.
    Also, if the hotend fan is on, does it vibrate much?

    It's also possible that the pin is dirty. You can take it out and check it by removing the grub screw at the top of the probe. Clean it with IPA. Check the tip.

    Is the probe straight up and down in the mount? Tilt could be causing varying trigger heights.

    Is there anything on the bed where the pin is probing causing an uneven surface?

    For the mechanics:

    Is there any slop in the print head? If you wiggle the nozzle by hand is it rigid, or does it have some give? Same for the Z axis, I can't quite tell from the picture, but it seems like it's a belted z axis?

    You can test the repeatability of the Z motion by simply touching the nozzle to the bed, setting G92 Z0, and then jogging the bed up and down in various ways for a bit and then returning it to Z0. Does it return to just touching the nozzle to the bed, or is it a bit different?

    Your config looks ok, but the Max Z speed might be a bit high at 1000, that may come into play during the pull back after the probe triggers. Try reducing it to 600, which is still 10mm/s and plenty fast for the Z axis.

  • Thank you very much for the reply.

    The bed heater is usually on. It's a kapton-type, adhered to the underside of the 6.35 mm aluminum bed. I estimate that when powered-on and probing, the heater is physically no closer than 16.7 mm from the bottom of the BLTouch housing and about 20 mm away from the bottom of its PCB. (Not to mention the shielding capabilities of the thick aluminum. Nevertheless, I'll try a series of probes unheated. No other heater or fan is on, (save for the PSU's occasional use of the thermally-controlled fan).

    I removed the pin and cleaned & inspected it.

    The mount was off by about 1°, so I sanded one of the shims and confirmed that the probe is now perpendicular to the bed.

    The nozzle/hotend is captive to the Bondtech BMG extruder. The extruder and its stepper are mated through a CNC aluminum carriage, which is also mounted to the linear rail carriage. The mount for the BLTouch is this fang and this shroud, which attaches to the heatsink of the E3D hotend and is secured with an M3 screw and nut.
    All that said, I did not appreciate any wobble or slop in the print head assembly.

    (About the Z belts…) While the bed is completely stationary, the moving Z gantry is immense. It's controlled by a very strong motor with dual 140 mm Gates 2GT belts connected to a shaft with pulleys on either end that drive (what the printer's designer called) "white PU metal reinforced belts" which, in turn, control the gantry height.

    During the calibration process, once I've issued the G92 Z0, a G1 Z0 always returns to the exact height. I verify this by determining that the nozzle grabs the paper in the exact same way.

    I've changed the maximum accelerations as follows:
    M203 X6000 Y6000 Z600 E4000 ; Set maximum speeds (mm/min)

    So, to summarize, I've cleaned the pin, made the housing/mount more perpendicular, kept the bed heater off, and reduced the Z max speed to 600 mm/min. Thank you! Now to test!

  • These were my results with the fixes/modifications listed above: (chronologically last to first)

    Stopped at height 0.961 mm
    Stopped at height 0.906 mm
    Stopped at height 0.913 mm
    Stopped at height 0.921 mm
    Stopped at height 1.370 mm

    Then I ran the "Measure Probe Repeatability" test and got these results:
    G32 bed probe heights: 0.299 0.274 0.296 0.300 0.304 0.304 0.303 0.326 0.307 0.303, mean 0.302, deviation from mean 0.012… which, while not stellar, aren't terrible. But, I still have no idea what to set as my Z Offset.

  • Moderator

    @st3phen said in Generating Z Offset for BLTouch on Gecko CoreXY:

    But, I still have no idea what to set as my Z Offset.

    Use the average value of your G30 S-1 results. Around 0.915 ish. You can use the A and S parameters in M558 to increase the stringency of the deviation so that it will probe multiple times until it gets two probings as close together as you specify. That should help reject the large outliers.

    then you can use actual print first layer to dial in the height with baby stepping.

    It might also be worth replacing the probe.

  • This ended-up being an issue with my understanding of the calibration process, apparently. Every time I moved the nozzle down to Z=0 via the G1 Z0 command, it introduced error into subsequent measurements.

    I abandoned that and moved to a process of
    G1 Z10
    G30 S-1
    G1 Z10, etc.

    That proved to get amazing repeatability. In fact, using the "Measure Probe Repeatability" test results in STDV of 0.003!

Log in to reply