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

BLTouch mesh bed leveling, but first layer isn't level

Scheduled Pinned Locked Moved
General Discussion
4
5
1.9k
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.
  • undefined
    vockleya
    last edited by vockleya 23 Oct 2022, 04:28

    I'm building a custom-designed coreXY printer with dual independent Z axis motors, and am currently running into an absolutely baffling problem with my bed leveling. I've been chasing this problem in circles for weeks, and I'm hoping that a few more knowledgeable sets of eyes might catch something I've missed.

    In short, the "level" plane calculated using a BLTouch and mesh bed leveling does not seem to match the bed. The general result is the right side of the bed being significantly further from the nozzle than the left, but also the rear right is the furthest point, and the rear left is the closest.

    I know the bed isn't particularly flat, but this issue persists regardless of any bed adjustments. In fact, the printer seems to compensate for these changes, and the high and low spots in the print are exactly the same no matter the absolute flatness or "levelness" of the bed. Also, the high and low spots in the print don't match up with high and low spots in the height map at all. Most of the bed is within about .1-.2mm of flat, with only the outer edges (50mm or so) deviating significantly from that.

    Above the 1st level, it prints nearly flawlessly. I have plenty of tweaking left to do, but levelness and distance between higher layers seems to be just fine.

    At this point, I'm not even sure where the issue lies. I'm fairly certain the mechanical design is sound. The frame is incredibly rigid, and I've spent hours adjusting the geometry of the various gantries and linear rails and rods to be running as perfectly square and/or level as possible.

    Even if something isn't quite right, shouldn't bed leveling be able to adjust for whatever offset or geometry change that introduces? If the toolhead/nozzle were lower at one end of an axis compared to the other, wouldn't the bed just move up or down to cancel that out? Or am i misunderstanding how mesh bed leveling works? It seems to me that this is a software/config issue, but I'm not sure of anything at this point.

    Any help would be greatly appreciated.

    Images and config files below. Hopefully you're able to get a decent idea of what I'm working with. I can post more config files, images, or renderings from the 3d model if any other information will help.

    Test Print.jpg

    height map.png

    Printer.jpg

    config.g

    M80 C"pson" ; power on
    ; Basic setup
    M575 P1 S1 B57600 ; enable PanelDue
    G90 ; absolute coordinates
    M83 ; relative extruder moves
    M550 P"CoreXY Printer" ; printer name
    M669 K1 ; CoreXY mode
    M552 S1 ; enable network
    M586 P0 S1 ; enable HTTP
    M586 P1 S0 ; disable FTP
    M586 P2 S0 ; disable Telnet
    ; Drives
    M569 P0 S1 ; drive 0; forwards
    M569 P1 S0 ; drive 1; backwards
    M569 P2 S0 ; drive 2; backwards (left Z leadscrew)
    M569 P3 S1 ; drive 3; forwards (extruder)
    M569 P4 S0 ; drive 4; backwards (right Z leadscrew)
    M584 X0 Y1 Z2:4 E3 ; drive mapping
    M906 X1800 Y1800 Z1400 E1000 I40 ; motor currents (mA); idle factor
    M84 S1 ; idle timeout
    M350 X16 Y16 Z16 E16 I1 ; 16x microstepping with interpolation
    M92 X80 Y80 Z400 E415 ; steps per mm
    M566 X2100 Y2100 Z1200 E600 ; jerk (mm/min)
    M203 X36000 Y36000 Z3600 E6000 ; maximum speed (mm/min)
    M201 X15000 Y15000 Z1000 E3000 ; acceleration (mm/s^2)
    M204 P5000 T10000 ; print and travel acceleration
    ; Axis Limits
    M208 X-10 Y-10 Z0 S1 ; axis minima
    M208 X318 Y300 Z370 S0 ; axis maxima
    ; Endstops
    M574 X2 S1 P"xstop" ; X endstop high end; NO; pin xstop
    M574 Y1 S1 P"ystop" ; Y endstop low end; NO; pin ystop
    ; Z-Probe
    M950 S0 C"exp.heater3" ; servo 0; pin exp.heater3
    M558 P9 C"^zprobe.in" H5 F120 T40000 ; Z probe type BLTouch; pin zprobe.in; dive height, speed
    G31 P500 X0 Y25 Z2.4 ; Z probe trigger value; position offset
    M376 H3
    ; Z-leveling
    M671 X370:-58 Y150:150 S10 ; leadscrew positions; 10mm correction limit
    ; Bed heater
    M308 S0 P"bedtemp" Y"thermistor" A"Bed Heat" T100000 B4138 ; sensor 0; pin bedtemp; type thermistor; name
    M950 H0 C"bedheat" T0 ; heater 0; pin bedheat; sensor 0
    M307 H0 R0.230 K0.266:0.000 D2.74 E1.35 B0 ; PID parameters; disable bang-bang
    M140 H0
    M143 H0 S120 ; temperature limit 120C
    ; Hotend
    M308 S1 P"e0temp" Y"thermistor" A"Hotend" T100000 B4138 ; sensor 1; pin e0temp; type thermistor; name
    M950 H1 C"e0heat" T1 ; heater 1; pin e0heat; sensor 1
    M307 H1 R3.034 K0.525:0.211 D5.88 E1.35 V23.8 B0 ; PID parameters; disable bang-bang
    M143 H1 S300 ; temperature limit 300C
    ; Fans
    M950 F0 C"fan0" Q20 ; fan 0; pin fan0; 20Hz PWM
    M106 P0 C"Part Cooling"
    M950 F1 C"fan2" ; fan 1; pin fan2
    M106 P1 C"Hotend" S1 H1 T50 ; fan 1; temperature controlled; heater 1; 50C
    ; Tools
    M563 P0 S"Hotend" D0 H1 F0 L0 ; define tool 0
    G10 P0 X0 Y0 Z0 ; set tool 0 axis offsets
    G10 P0 R180 S235 ; set initial tool 0 active and standby temperatures to 0C
    M572 D0 S0.05 ; linear advance

    bed.g

    M561 ; clear stored mesh
    G28
    ; Bed leveling pass 1
    M558 H10 ; 10mm probe dive height
    ; Define probe points
    G30 P0 X50 Y150 Z-99999
    G30 P1 X150 Y150 Z-99999
    G30 P2 X250 Y150 Z-99999 S2 ; and run probe
    ; Home Z
    G1 X150 Y150 F40000 ; move to probe point
    M558 H5 F300 ; dive height, slow home speed
    G30 ; home Z
    ; Bed leveling pass 2
    G30 P0 X50 Y50 Z-99999
    G30 P1 X150 Y50 Z-99999
    G30 P2 X250 Y50 Z-99999
    G30 P3 X250 Y150 Z-99999
    G30 P4 X150 Y150 Z-99999
    G30 P5 X50 Y150 Z-99999
    G30 P6 X50 Y250 Z-99999
    G30 P7 X150 Y250 Z-99999
    G30 P8 X250 Y250 Z-99999 S2 ; and run probe
    ; Home Z
    G1 X150 Y150 F40000 ; move to probe point
    M558 H3 F300 ; dive height, slow home speed
    G30 ; home Z
    ; Mesh bed leveling
    M557 X20:280 Y20:280 P7 ; define probe grid
    G29 ; run probe
    undefined 1 Reply Last reply 23 Oct 2022, 15:38 Reply Quote 0
    • undefined
      Norder @vockleya
      last edited by Norder 23 Oct 2022, 15:38

      @vockleya
      Please post the homeall.g and homez.g files.

      Is the BLTouch really Y25 away from the nozzle?
      So it would then be mounted in the middle of the printhead when I look at the printhead in the photo!?

      Your bed.g is pretty messed up.
      Check out the following post by @jay_s_uk, he posted reference files for a CoreXY with two Z spindles.
      However, you should not adopt them 1:1 but adapt them for your printer.

      https://forum.duet3d.com/topic/29730/mistake-true-bed-levelling-g32/4

      Google Translate
      -- Original Text --

      Poste bitte mal die homeall.g und homez.g Datei.

      Ist der BLTouch wirklich Y25 von der Düse entfernt ?
      Er wäre dann also in der Mitte des Druckkopfes montiert, wenn ich mir den Druckkopf auf dem Foto ansehe !?

      Deine bed.g ist ziemlich durcheinander.
      Gucke Dir mal folgenden Post von @jay_s_uk an, er hat dort Referenzdateien für ein CoreXY mit zwei Z-Spindeln gepostet.
      Du solltest sie aber nicht 1:1 übernehmen sondern für Deinen Drucker anpassen.
      Link siehe oben !

      DDA5X... 0.9° Stepper... Linearrails... Duet 2 Wifi... PT100 Board... Duet IR-Probe... Dyze Pro Kit up to 500°C.. etc
      Thingiverse

      1 Reply Last reply Reply Quote 0
      • undefined
        mikeabuilder
        last edited by 23 Oct 2022, 21:15

        @vockleya - Nice Design! It looks very solid.

        From your description, I believe you correctly understand the function of mesh bed leveling. It should adjust for the variations shown in your height map.

        The general shape and deflection of your height map looks reasonable. What looks like a bow up in the center of the bed in the X direction could be either a bow up in the bed, or a bow down in the middle of the gantry. Remember, the z probe measures the distance from the probe to the bed and there is no guarantee the probe is always on the same plane.

        Neither of my two CoreXY printers is a twin-Z, so I can't comment about the leveling part of bed.g. The rest seems OK.

        Your comment about the height map not matching you observed first layer seems correct.

        My advice - I had a similar issue with one of my CoreXY printers. In the end, my solution had three components - First was making sure the surface of the build plate was very clean. I tried both alcohol and ammonia and found ammonia worked better for me when printing PLA and alcohol was better with PETG. Second, giving the bed plenty of time to heat evenly was important. My printer has a 6mm aluminum bed and it takes about 15 minutes for the top corned to get fully up to temp. I'm in the process of adding insulation on the bottom. Third was finding a z-offset that was a good compromise across the bed. In theory, mesh compensation should make this redundant, but I made test squares like you have in each corner and used baby-stepping while each was printing to find the ideal offset. Then I adjusted my tool z offset to hit the middle of the baby steps range.

        Other things you can look for:

        • Your printhead rocking on the X rail, or the whole gantry rocking on the Y rail. If there is play, it's possible your cable chains or bowden tube could be rocking the printhead so that the probe offset is changing at different X and Y positions.

        • If the two Y rails are not super-parallel and/or you belt tensions are not close to equal, and there is play in the blocks, the belts could be torquing the gantry during movement. This might not be seen when the print head stops to probe the bed.

        undefined 1 Reply Last reply 24 Oct 2022, 23:26 Reply Quote 0
        • undefined
          OwenD
          last edited by 24 Oct 2022, 03:00

          If you have two Z drives then shouldn't you have only two probe points in your bed.g ?
          I.e one near each lead screw so you can level the bed.

          1 Reply Last reply Reply Quote 1
          • undefined
            vockleya @mikeabuilder
            last edited by 24 Oct 2022, 23:26

            Thanks for all the ideas. I've got a lot more testing to do now.

            When I manually level the bed to the nozzle and then run G29, I get the mesh below, I think the entire toolhead is deflecting as it travels across the X axis. I'll need to do a bit of a redesign to stiffen it more. I also want to add 2 fixed probe points attached directly to the Z gantry, insteaf of using the bed for auto leveling. That should give a more reliable starting point.

            The homing and bed probing files seem to be working correctly, so I don't think thats the issue. Although I've cleaned them up a bit and all 3 are included below.

            mesh.png

            bed.g

            M561 ; clear stored mesh
            G28 ; home all
            ; rough bed leveling pass
            M558 H10 F1500 ; dive height, speed
            G30 P0 X50 Y150 Z-99999 ; probe points
            G30 P1 X150 Y150 Z-99999
            G30 P2 X250 Y150 Z-99999 S2 ; and run probe
            ; fine bed leveling pass
            M558 H3 F300 ; dive height, speed
            G30 P0 X100 Y100 Z-99999 ; probe points
            G30 P1 X200 Y100 Z-99999
            G30 P2 X100 Y200 Z-99999
            G30 P3 X200 Y200 Z-99999 S2 ; and run probe
            ; mesh bed leveling
            M557 X20:280 Y20:280 P3 ; probe grid
            G29 ; run probe

            homeall.g

            ; Home X/Y
            G91 ; relative positioning
            G1 H2 Z5 F1000 ; drop bed
            G1 H1 X320 Y-320 F10000 ; move to X or Y endstop (fast)
            G1 H1 X320 F10000 ; move to X endstop (fast)
            G1 H1 Y-320 F10000 ; move to Y endstop (fast)
            G1 X-5 Y5 F10000 ; go back a few mm
            G1 H1 X320 F1000 ; move to X endstop (slow)
            G1 H1 Y-320 F1000 ; move to Y endstop (slow)
            G90 ; absolute positioning
            ; Home z
            M98 P"homez.g"

            homez.g

            G91 ; relative positioning
            G1 H2 Z5 F6000 ; drop bed
            G90 ; absolute positioning
            G1 X150 Y150 F30000 ; move to probe point
            M558 H10 F2500 ; fast home
            G30 ; home Z
            M558 H3 F300 ; slow home
            G30 ; home Z
            1 Reply Last reply Reply Quote 0
            1 out of 5
            • First post
              1/5
              Last post
            Unless otherwise noted, all forum content is licensed under CC-BY-SA