BLTouch Bed leveling oddity



  • I'm running a CR-10S (dual Z) with a Duet Maestro.
    E3D hotend on a new mount so, I had to re-level, but I keep getting this weird thing.
    There's blood on the edge of my table from my forehead. I know I'm missing something simple but ...

    I'm following: https://betrue3d.dk/bltouch-on-duet-wifi-configuratio-and-usage/

    For Mesh: https://duet3d.dozuki.com/Wiki/Using_mesh_bed_compensation#Section_Checking_the_trigger_height

    • Turned off (temporarily) G29 loading the bed map.
    • Super careful adjustment of my Z and U endstops (dual Z), they're within a couple hundredths of a mm of each other, the X axis level to frame the same amount "no CR-10 sag on right".
    • Bed is flat, referenced to the X axis rail, using a caliper flat to top of the X rail, head on the bed. All corners within hundredths, nozzle set to paper in center.

    My procedure:

    1. Nozzle 230°C, Bed 75°C
    2. Reset G31 P500 X50 Y12 Z0.68 U0.68 in config.g to G31 P500 X50 Y12 Z0 U0 (no probe compensation. (Most attempts skipped this step, I was getting desperate LOL)
    3. Comment out G29 in config.g, no map loaded at startup.
    4. Comment out G92 Z.36 U.36 in both homeall.g and homez.g (this is an offset applied after everything setup to allow the Z and U switches to be used as emergency stops)
    5. M999 to reboot
    6. Home All, results in up 5mm, from homing routine.
    7. Jog Z-5 and verify paper test. All OK
    8. Jog Z10
    9. Command G30 S-1 to probe & report height. Lets say it's 0.68 (currently). It always repeats fairly close to same when tested repeatedly. BTW - Even when it was 1.1 I had the problem.
    10. Insert into config.g G31 P500 X50 Y12 Z0.68 U0.68 , SAVE, and reboot when asked.
    11. Restart nozzle and bed heaters.
    12. Home All. Homes fine with proper offsets for the BLTouch X & Y, goes up Z5 as normal.
      BUT this is where the problem arises. IF I Z-5 TO GO TO 0 THE NOZZLE IS ALWAYS OFF THE BED BY .6 MM!!
      If I order M92 Z1 and jog down the paper grabs perfectly at .6mm

    Where the heck is this offset coming from? When I do a complete Mesh compensate procedure it tells me I'm .6 off . Duh.

    What the heck am I missing???

    Here's my files:
    config.g

    ; Configuration file for Duet Maestro (firmware version 1.21)
    ; executed by the firmware on start-up
    ;
    ; generated by RepRapFirmware Configuration Tool v2 on Tue Feb 19 2019 16:42:10 GMT-0500 (Eastern Standard Time)
    
    ; Define Axis                                      ; 
    M584 X0 Y1 Z2:4 E3 U4 P3                           ; With Second Z motor defined as U axis on E1 driver, P3 to hide it
    
    ; Define Z & U Leadscrew Position                  ; 
    M671 X-20:325 Y100:100 S1                          ; Leadscrews at left and right of X axis, centered on Y axis
    
    ; Emergency Stop on BLTouch Failure                ; FOR FUTURE USE - NEEDS WORK!!
    ;M581 Z2 S1 T0 C0                                  ; Emergency Stop if Z2 or U2 triggered (Probe failure)
    																																													  
    ; General preferences
    G90                                                ; Send absolute coordinates...
    M83                                                ; ...but relative extruder moves
    
    ; Network
    M550 P"CR-10S Duet"                                ; Set machine name
    M552 P0.0.0.0 S1                                   ; Enable network and acquire dynamic address via DHCP
    M586 P0 S1                                         ; Enable HTTP
    M586 P1 S1                                         ; Disable FTP
    M586 P2 S0                                         ; Disable Telnet
    
    ; Drives
    M569 P0 S1                                         ; Drive 0 goes forwards
    M569 P1 S1                                         ; Drive 1 goes forwards
    M569 P2 S1                                         ; Drive 2 goes forwards
    M569 P3 S1                                         ; Drive 3 goes forwards
    M569 P4 S1                                         ; Drive 4 goes forwards
    M350 X16 Y16 Z16 E16 U16 I1                        ; Configure microstepping with interpolation
    M92 X80.00 Y80.00 Z400.00 E412 U400.00           ; Set steps per mm NOTE - FOR STDEXTRUDER E124 BONDTECH WAS 413
    M566 X1000.00 Y1000.00 Z12.00 E300.00 U12.00       ; Set maximum instantaneous speed changes (mm/min)
    M203 X12000 Y12000 Z600.00 E1200 U600.00           ; Set maximum speeds (mm/min)
    M201 X500.00 Y250.00 Z16.60 E166.00 U16.60         ; Set accelerations (mm/s^2)
    M906 X1000.00 Y1000 Z700 E1000 U700.00 I30          ; Set motor currents (mA) and motor idle factor in per cent
    M84 S30                                            ; Set idle timeout
    
    ; Axis Limits
    M208 X3.5 Y-4 Z0 U0 S1                             ; Set axis minima X carriage Home = 3.5  Y bed Home = -4
    M208 X300 Y300 Z320 U320 S0                        ; Set axis maxima X Max 300, Y bed Max 300 Z Max 320
    
    ; Endstops
    M574 X1 Y1 Z1 U1 S1                                ; Set active high endstops
    
    ; Z-Probe                                          ; Genuine BLTouch
    M558 P9 H3 A10 S0.005 F100 T6000                   ; Set Z probe type to bltouch and the dive height + speeds A10 S0.005 ADDED FOR INCREASED ACCURACY
    G31 P500 X50 Y12 Z0.68 U0.68                     ; Set Z probe trigger value, offset and trigger height
    M557 X1:290 Y11:300 S20                            ; Define mesh grid
    
    ; Heaters
    M307 H0 B0 S1.00                                   ; Disable bang-bang mode for the bed heater and set PWM limit
    M305 P0 T100000 B4388 C7.060000e-8 R2200           ; Set thermistor + ADC parameters for heater 0
    M143 H0 S120                                       ; Set temperature limit for heater 0 to 120C
    M305 P2 X502 R2200 S"Heater 2"                     ; Set Heater & PT1000 for heater 2 NB P2 = E1 on Maestro PCB, X502 = E1 Thermistor (NOT P1 due to Maestro Case)
    M143 H2 S325                                       ; Set temperature limit for heater 1 to 325C
    
    ; Fans
    M106 P0 F500 H1 T45:250 C"Hotend Fan"              ; Set fan 0 value, PWM signal inversion and frequency. Thermostatic control is turned on @ 45° Ramp speed to 250°C
    ;M106 P1 S255 I0 F250 L125 H1 T60:140              ; INACTIVE, FOR FUTURE USE - USE TO COOL HE FAST AFTER PRINT (L SETTING)
    M106 P1 S0 F100 H-1 C"Parts Fan"                   ; Set fan 2 value, PWM signal not inverted. Thermostatic control is turned off
    ;M106 P2 T25:65 H100:101:102		               ; FOR FUTURE USE! UNCOMMENT TO USE Duet Electronics Fan. Thermostatic control, turn on at 25C, max RPM at 65C.
    
    ; Tools
    M563 P0 S"Heater 2" D0 H2 F1                       ; Define tool 0, Assign Heater 2 (SEE M305 P2 in Heaters), F1 to redirect for Slicer to control parts fan properly
    G10 P0 X0 Y0 Z0 U0                                 ; Set tool 0 axis offsets
    G10 P0 R0 S0                                       ; Set initial tool 0 active and standby temperatures to 0C
    
    ; Automatic power saving                               ; FOR FUTURE USE - NEEDS WORK!!
    ;M913 X30 Y30 Z30 U30                                  ; Lower motor power to 30%
    ;M911 S10 R11 P"M913 X0 Y0 G91 M83 G1 Z3 U3 E-5 F1000" ; Set voltage thresholds and actions to run on power loss
    
    ; Custom settings
    ;G29 S1			                           ; Enable automatic bed mesh compensation
    ;M572 D0 S0.10			                   ; Enable pressure-advance of 0.10 seconds
    M501                                               ; Load config-overide.g
    

    bed.g:

    ; bed.g
    ; called to perform automatic bed compensation via G32
    ;
    ; generated by RepRapFirmware Configuration Tool v2 on Tue Feb 19 2019 16:42:10 GMT-0500 (Eastern Standard Time)
    M561                ; clear any bed transform
    M98 Pdeployprobe.g  ; deploy mechanical Z probe
    G29                 ; probe the bed and enable compensation
    M98 Pretractprobe.g ; retract mechanical Z probe
    

    Any help gratefully appreciated.



  • I couldn't fit my homing files, so here they are:
    homeall.g:

    ; homeall.g
    ; called to home all axes
    ;
    ; generated by RepRapFirmware Configuration Tool v2 on Tue Feb 19 2019 16:42:10 GMT-0500 (Eastern Standard Time)
    G91                       ; relative positioning
    G1 Z5 U5 F6000 S2         ; lift Z relative to current position
    
    
    G1 S1 X-301.5 Y-309 F1800 ; move quickly to X and Y axis endstops and stop there (first pass)
    G1 X5 Y5 F6000            ; go back a few mm
    G1 S1 X-301.5 Y-309 F360  ; move slowly to X and Y axis endstops once more (second pass)
    ; begin Split & Recombine for dual Z & U
    ; this defines the mechanical endstops as BACKUP to BLTouch
    M584 Z2 U4 P4           ; split Z motor control to Z and U but for it to work we have to show U (param P4) in the UI
    G1 S1 Z-205 U-205 F1000 ; Move Z and U  down until the switches triggers
    ;G92 Z.36 U.36           ; set Z position for .36mm above BLTouch Trigger (Allow switches to be used as emergency stops)TURNED OFF FOR T-SHOOT
    M584 Z2:4 P3            ; back to combined axes and hidden U
    G1 X1 Y10 F360           ; move slowly X and Y axis away from bed edge
    
    ; Activate BLTouch for Homing Z
    G1 X45 Y12 Z5 F6000     ; lift Z relative to current position ADDED X & Y TO MOVE NEW PROBE TO POSITION OVER THE BED  
    M98 Pdeployprobe.g      ; deploy BLTouch
    G1 S1 Z-205 F1000       ; move Z down until the switch triggers
    G92 Z0                  ; set Z position to trigger height
    M98 Pretractprobe.g     ; retract BLTouch
    
    ; Set Home for Z & Lift Z
    ;G92 Z0                  ; set Z position to axis minimum (you may want to adjust this)
    G1 S2 Z5 F100           ; lift Z above bed relative to current position
    G90                     ; absolute positioning
    

    homez.g:

    ; homez.g
    ; called to home the Z axis
    ;
    ; generated by RepRapFirmware Configuration Tool v2 on Tue Feb 19 2019 16:42:11 GMT-0500 (Eastern Standard Time)
    G91                     ; relative positioning
    G1 Z5 F6000 S2          ; lift Z relative to current position
    
    ; begin Split & Recombine for dual Z & U
    ; this defines the mechanical endstops as BACKUP to BLTouch
    M584 Z2 U4 P4           ; split Z motor control to Z and U but for it to work we have to show U (param P4) in the UI
    G1 S1 Z-205 U-205 F1000 ; Move Z and U  down until the switches triggers
    ;G92 Z.36 U.36           ; set Z position for .36mm above BLTouch Trigger (Allow switches to be used as emergency stops)TURNED OFF FOR T-SHOOT
    M584 Z2:4 P3            ; back to combined axes and hidden U
    G1 X10 Y10 F360         ; move slowly X and Y axis away from bed edge
    
    ; Activate BLTouch for Homing Z
    G1 X45 Y12 Z5 F6000    ; lift Z relative to current position & move probe over bed
    M98 Pdeployprobe.g      ; deploy BLTouch
    G1 S1 Z-205 F1000       ; move Z down until the switch triggers
    G92 Z0                  ; set Z position to trigger height 
    M98 Pretractprobe.g     ; retract BLTouch
    
    ; Set Home for Z & Lift Z
    ;G92 Z0                  ; set Z position to axis minimum (you may want to adjust this)
    G1 S2 Z5 F100           ; lift Z above bed relative to current position
    G90                     ; absolute positioning
    

  • Moderator

    It seems like you've got a ill-fated combination of the endstop leveling and probe leveling approaches. Abandon the endstops and use the probe.

    G31 P500 X50 Y12 Z0.68 U0.68 in config.g

    G31 doesn't take a U parameter. It's only for the Z offset for the probe, U is an imaginary axis, not a separate physical dimension. So remove the U from G31.

    You're using endstops for leveling, but since you have a z probe, you could just use the probe. It's a lot simpler and you don't have to mess with splitting the Z into multiple axis.

    https://duet3d.dozuki.com/Wiki/Bed_levelling_using_multiple_independent_Z_motors#Section_Example_for_2_motors

    M98 Pdeployprobe.g      ; deploy BLTouch
    G1 S1 Z-205 F1000       ; move Z down until the switch triggers
    G92 Z0                  ; set Z position to trigger height
    M98 Pretractprobe.g     ; retract BLTouch
    

    This isn't the way to probe the Z height with a probe either. You've basically converted it into a mobile endstop, none of the G31 offsets are being applied when used this way. Simply use a G30 to probe the bed.

    I think you need to take a step back and simplify things. You've gone off the rails here. 😀



  • I just finished my conversion of the my CR10S and my Ender 5 Plus to using separate steppers. Through my learning, you only need to add and U* parameters in the descriptions of your steppers (ei; jerk, accel, steps etc).

    In all other instances (such as z probe offset), you simply need to apply a Z* parameter.

    It sounds like what I have been working through for the past few days where my z-offset keeps changing.

    As @Phaedrux said, use the probe. My process is very similar to yours.

    1. home all axis

    2. M564 S1 to make sure virtual endstops enabled so you can't go below 0 for Z

    3. raise 8mm

    4. probe bed

    5. repeat 3 and 4 and review Z offset.

    6. once I am locked in with my z offset, I reboot, home and check with paper.

    But I was doing this over and over and over, daily. But this I learned about operating the dual z axis with separate steppers, and using G32 to align the leadscrews Even though dual z screws is supposed to help with keeping your gantry level, it never does.

    I I made the need hardware changes and firmware changes, and can include G32 in my routine. I have found today on my CR10S I don't have to adjust my z-offset. Its rock solid.

    I will also add that in all this change, I also positioned my probe (BL Touch as well) to be closer to the nozzle. So my z offset is much smaller.

    So I would try



  • @Phaedrux

    Sorry for the long reply time ... life...
    Aw 'cmon, I went off the rails YEARS ago 😉

    I started to make the changes and after 20 minutes decided the Nuclear route would be better, so I ran RRF Configurator again and started clean.

    Your advice, along with that from @RyanP (Thanks buddy, that helped my head a LOT!!) lead me to a very nice clean setup. Some minor bobbles, but I think I've got 'em.

    I'm now running just the Z probe and am getting hatted up on RRF 3 prior to taking the plunge, as it handles not needing the split Z and has some nice upgrades.

    I'm still a bit uncomfortable with not using the endstop switches as a backup to the BLTouch, I'd like to set it up with them commanding an Emergency stop if triggered.

    Should I just wait until I'm running RRF 3 so I don't have to set it up twice?

    One other odd Q - when you change something in a system file (config.g, bed.g, etc) is that change reflected in the JSON file automatically? (I'm thinking about when you use a JSON to be a starting point for the RRF Configurator)

    Thanks again to you both!! My forehead is healing.

    Here's my new config.g, if you could take a quick peek ...

    ; Configuration file for Duet Maestro (firmware version 2.03)
    ; executed by the firmware on start-up
    ;
    ; generated by RepRapFirmware Configuration Tool v2.1.8 on Thu May 07 2020 16:11:24 GMT-0400 (Eastern Daylight Time)
    
    ; General preferences
    G90                                                ; send absolute coordinates...
    M83                                                ; ...but relative extruder moves
    M550 P"CR-10S Duet"                                ; set printer name
    
    ; Network
    M552 P0.0.0.0 S1                                   ; enable network and acquire dynamic address via DHCP
    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 S1                                         ; physical drive 3 goes forwards
    M569 P4 S1                                         ; physical drive 4 goes forwards
    M584 X0 Y1 Z2:4 E3                                 ; set drive mapping
    M350 X16 Y16 Z16:16 E16 I1                         ; configure microstepping with interpolation
    M92 X80.00 Y80.00 Z400.00 E412.00                  ; set steps per mm
    M566 X900.00 Y900.00 Z12.00 E120.00                ; set maximum instantaneous speed changes (mm/min)
    M203 X12000.00 Y12000.00 Z600.00 E1200.00          ; set maximum speeds (mm/min)
    M201 X500.00 Y250.00 Z16.60 E166.00                ; set accelerations (mm/s^2)
    M906 X1000 Y1000 Z900 E800 I30                     ; set motor currents (mA) and motor idle factor in per cent
    M84 S30                                            ; Set idle timeout
    
    ; Axis Limits
    M208 X3.5 Y-4 Z0 S1                                ; set axis minima
    M208 X320 Y320 Z340 S0                             ; set axis maxima
    
    ; Endstops
    M574 X1 Y1 S1                                      ; set active high endstops
    M574 Z1 S2                                         ; set endstops controlled by probe
    
    ; Z-Probe
    M558 P9 H5 F120 T6000                              ; set Z probe type to bltouch and the dive height + speeds
    G31 P500 X44.3 Y12 Z0.57                           ; set Z probe trigger value, offset and trigger height
    M557 X50:350 Y12:312 S20                           ; define mesh grid
    
    ; Heaters
    M307 H0 B0 S1.00                                   ; disable bang-bang mode for the bed heater and set PWM limit
    M305 P0 T100000 B4388 C7.060000e-8 R2200           ; set thermistor + ADC parameters for heater 0
    M143 H0 S120                                       ; set temperature limit for heater 0 to 120C
    M301 H2 S0.85                                      ; set heater 1 PWM limit to 85%
    M305 P2 X502 R2200 S"Heater 2"                     ; configure PT1000 for heater 1 NB: P2 = E1 on Maestro PCB, X502 = E1 Thermistor (NOT P1 due to Maestro Case)
    M143 H2 S310                                       ; set temperature limit for heater 1 to 310C
    
    ; Fans
    M106 P0 C"Parts Fan" S0 I0 F500                   ; set fan 0 name, value, PWM signal inversion and frequency. Thermostatic control is turned off
    
    
    ; Tools
    M563 P0 H2 S"Extruder 1" D0 F0                        ; 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
    
    ; Custom settings
    ;G29 S1						                      ; Enable automatic bed mesh compensation
    ;M572 D0 S0.10					                  ; Enable pressure-advance of 0.10 seconds
    
    ; Miscellaneous
    ;M911 S10 R11 P"M913 X0 Y0 G91 M83 G1 Z3 E-5 F1000" ; set voltage thresholds and actions to run on power loss
    
    
    


  • @PuterPro Glad you are up and running.
    No, the json file does not get updated when you change config.g

    Are you running the hotend fan from the 'Always On' connector?

    Regards,
    Paul



  • @PaulHew said in BLTouch Bed leveling oddity:

    @PuterPro Glad you are up and running.
    No, the json file does not get updated when you change config.g

    I was afraid of that. I missed on a few items using the Configurator, but fixed them manually. So I would have to run the Configurator again to get a json file with the proper settings baked in?

    I guess it will be a moot point when I switch to RRF 3.x anyway, since there's no straight upgrade path.

    Are you running the hotend fan from the 'Always On' connector?

    Yep! Thanks for your time!



  • @PuterPro Honestly, going to RRF3 is not as bad as it seems. Took me about an hour and a day to do the Ender3! Not really, Couple of hours max. Issues were BL Touch and thermistors.

    I am liking RRF3, now I have got my head round it!

    Regards,
    Paul.



  • @PaulHew Yeah, I'm reading all the docs now, trying to wrap my head around it. Glad to hear it's not too bad.

    I'm reading you have to go 2.x > 3.0 > 3.xxx RCxx, the last step being manual since the RRF Configurator isn't updated past 3.0. Yes?


  • Moderator

    The reason for going to 3.0 first is just to ensure you have all the right files in place. The config files should be mostly the same with the caveat for any specific changes in the release candidates.

    The json file is a one way street. It allows you to open your config in the configurator again, but it is static as of the moment it left the configurator. Any changes made afterwards are not reflected in the json.

    The configurator is a jumping off point, but once you get into a more advanced setup like with multiple independent axis, it's best to just get used to modifying the config.g directly.

    Using the endstops as an e stop is perfectly fine idea. You can also drop your Z axis motor current during homing/leveling so that in the event of a crash there is minimal chance of damage which kind of negates the need.



  • @Phaedrux said in BLTouch Bed leveling oddity:

    The reason for going to 3.0 first is ...

    Makes sense.

    The json file is a one way street.

    I suspected that when I used my last old one and a lot of it wasn't what I had done manually.

    The configurator is a jumping off point, .... it's best to just get used to modifying the config.g directly.

    That was becoming apparent this time. It's fine when I'm all mired in it, but not touching it for over a year ... "You don't use it, you lose it!" Gets worse as I get older too. Grrr. LOL

    Using the endstops as an e stop is perfectly fine idea. You can also drop your Z axis motor current during homing/leveling so that in the event of a crash there is minimal chance of damage which kind of negates the need.

    Just like the idea of a backup plan, the BLTouch can be cranky.
    I toyed with the idea of dropped current but never got around to it. Good idea, I'll do it now until I'm all squared away with RC 2.8 Milllion. Poor David, every time he thinks he's got it nailed some major buggy-boo bites him in the ass! Guy's a Saint.

    Thanks Jason, you always get me back on track, your work here is truly appreciated. 🙂


Log in to reply