Duet3D Logo Duet3D
    • Tags
    • Documentation
    • Order
    • Register
    • Login

    Generating Z Offset for BLTouch on Gecko CoreXY

    Scheduled Pinned Locked Moved
    Duet Hardware and wiring
    2
    6
    649
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • st3phenundefined
      st3phen
      last edited by

      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
      G30

      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…

      0_1555351361048_IMG_7746.jpg

      1 Reply Last reply Reply Quote 0
      • Phaedruxundefined
        Phaedrux Moderator
        last edited by

        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.

        Z-Bot CoreXY Build | Thingiverse Profile

        1 Reply Last reply Reply Quote 0
        • st3phenundefined
          st3phen
          last edited by

          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!

          1 Reply Last reply Reply Quote 0
          • st3phenundefined
            st3phen
            last edited by

            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.

            Phaedruxundefined 1 Reply Last reply Reply Quote 0
            • Phaedruxundefined
              Phaedrux Moderator @st3phen
              last edited by Phaedrux

              @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.

              Z-Bot CoreXY Build | Thingiverse Profile

              1 Reply Last reply Reply Quote 0
              • st3phenundefined
                st3phen
                last edited by

                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!

                1 Reply Last reply Reply Quote 0
                • First post
                  Last post
                Unless otherwise noted, all forum content is licensed under CC-BY-SA