Mesh bed leveling on 1.18 (and 1.20+1)

  • Again I try to understand.

    Here is my meshlevel macro:
    T0 ; select first hot end
    G91 ; Relative coordinates
    G1 Z4 F6000 ; Lower bed to avoid hotend dragging in bed.
    G1 X-350 Y-240 F3000 S1 ; move up to 240mm in the -X and -Y directions until the homing switches are triggered
    G1 X6 Y6 F600 ; move slowly 6mm in +X and +Y directions
    G1 X-10 Y-10 S1 ; move up to 10mm in the -X and -Y directions until the homing switches are triggered
    G90 ; Absoulte coordinates
    G1 X150 Y100 F3000 ; Go to first bed probe point and home the Z axis
    G30 ; Home Z-axis
    T1 ; Change to second head
    M557 X50:300 Y25:175 S25 ; Bed level from X50Y25 to X300Y175 in 20mm increments
    G29 S0 ; Auto Bed Level and create report
    M374 ; Save calibration grid
    T0 ; Change to tool 0 so that the coordinates work for docking
    G1 X70 Y200 F3000 ; Dock after bedlevel. Move first in front of docking notch
    G1 X70 Y235 F3000 ; Dock after bedlevel

    The result:
    -0.290, -0.290, -0.243, -0.268, -0.190, -0.215, -0.203, -0.135, -0.195, -0.255, -0.253
    -0.240, -0.213, -0.233, -0.130, -0.112, -0.130, -0.092, -0.112, -0.153, -0.220, -0.153
    -0.173, -0.090, -0.090, -0.070, -0.075, -0.048, -0.090, -0.122, -0.075, -0.150, -0.065
    -0.108, -0.092, -0.115, -0.072, -0.060, -0.015, -0.033, -0.072, -0.068, -0.045, -0.075
    -0.148, -0.158, -0.102, -0.010, -0.003, 0.035, 0.015, 0.005, -0.062, -0.055, -0.138
    -0.158, -0.148, -0.132, -0.058, -0.090, -0.045, -0.005, -0.015, -0.062, -0.098, -0.090
    -0.245, -0.238, -0.175, -0.163, -0.173, -0.132, -0.110, -0.140, -0.165, -0.203, -0.200

    And a print using this:

    Look at the left part and it is possible to see that the lines is closer than on the right side. I.e. the compensation is pressing the print more against the bed. (open picture in other tab to be able to zoom and see it better)

    Now mirroring X:
    -0.253, -0.255, -0.195, -0.135, -0.203, -0.215, -0.190, -0.268, -0.243, -0.290, -0.290
    -0.153, -0.220, -0.153, -0.112, -0.092, -0.130, -0.112, -0.130, -0.233, -0.213, -0.240
    -0.065, -0.150, -0.075, -0.122, -0.090, -0.048, -0.075, -0.070, -0.090, -0.090, -0.173
    -0.075, -0.045, -0.068, -0.072, -0.033, -0.015, -0.060, -0.072, -0.115, -0.092, -0.108
    -0.138, -0.055, -0.062, 0.005, 0.015, 0.035, -0.003, -0.010, -0.102, -0.158, -0.148
    -0.090, -0.098, -0.062, -0.015, -0.005, -0.045, -0.090, -0.058, -0.132, -0.148, -0.158
    -0.200 , -0.203, -0.165, -0.140, -0.110, -0.132, -0.173, -0.163, -0.175, -0.238, -0.245

    The spacing is almost perfect. (open picture in other tab to be able to zoom and see it better)

    I find this STRANGE… if this is only a fault on my machine. It is repeatable...

    Other problem I have is in the macro and that is that the X compensation is always lost when running the scrip above. I always has to edit the config-override.g file row for the Z probe:
    G31 T1 P500 X-44.2 Y0.0 Z2.20
    it is always after a mesh level:
    G31 T1 P500 X-0.0 Y0.0 Z2.20

    Storing works that I have tested. no firmware fault on this issue. just don't understand why I can't retain that value...

    Question: Is there a way of restarting or re-reading the config.g file after I have updated files? Since I do not see that I trust the mesh leveling I need a way of getting the changes into the system... Today I "edit" the config.g, that is I press edit and then save.

    Does anybody see what is wrong in the macro?

  • administrators

    You don't need the M374 or M500 commands in your macro because the grid is saved automatically after a successful grid probe.

    I don't know why it is losing the probe X offset. Can you run G31 T1 at various points in that macro to see at which point the X offset is lost?

    Why are you switching tools in the probing macro?

  • I switch head simply to get the probe on the build plate… T0 at this coordinate then the probe is not on the bed. --> this causes the bed to raise into the nozzles since then the Z probe is not triggering correctly.
    Still do not think this explains the improvement I see when mirroring... But worth a try.

    Will remove the store commands.

    That probably removes the X problem. Since I assume it is cleared during the process and stored by the commands...

    Will try.
    Have put G31 T1 after each command.

  • administrators

    It shouldn't make any difference which tool you use when you run G29, because the firmware should position the print head so as to put the probe (not a nozzle) over the bed. So you just need to specify coordinate ranges in the M557 command that are on the bed and reachable by the probe.

    Regarding the improvement with mirroring, I think you must have an inconsistent probe trigger height. You can check that the correction is being applied in the right places by putting something on top of the bed that is thinner than the dive height such as a small piece of card), probing with G29, and then checking that the head rides up over it.

  • 19:20:26Threshold 500, trigger height 2.20, offsets X-10.0 Y-10.0
    Threshold 500, trigger height 2.20, offsets X-10.0 Y-10.0
    Threshold 500, trigger height 2.20, offsets X-10.0 Y-10.0
    19:20:17Threshold 500, trigger height 2.20, offsets X-10.0 Y-10.0
    Threshold 500, trigger height 2.20, offsets X-10.0 Y-10.0
    Threshold 500, trigger height 2.20, offsets X-10.0 Y-10.0
    19:20:17Threshold 500, trigger height 2.20, offsets X0.0 Y0.0

    Seems like it is lost immediately… hard to debug...

  • Hm whats this:
    RepRapFirmware height map file v1, mean error -0.15, deviation 0.07
    -0.215, -0.273, -0.190, -0.225, -0.220, -0.190, -0.213, -0.243, -0.235, -0.258, 0
    -0.273, -0.248, -0.193, -0.148, -0.108, -0.105, -0.082, -0.078, -0.153, -0.143, 0
    -0.170, -0.183, -0.160, -0.130, -0.132, -0.043, -0.085, -0.075, -0.110, -0.070, 0
    -0.173, -0.100, -0.038, -0.035, 0.005, -0.013, 0.025, -0.028, -0.178, -0.092, 0
    -0.163, -0.148, -0.143, -0.118, -0.075, -0.035, -0.072, -0.055, -0.050, -0.072, 0
    -0.205, -0.197, -0.150, -0.143, -0.110, -0.143, -0.163, -0.163, -0.118, -0.130, 0
    -0.248, -0.335, -0.280, -0.228, -0.178, -0.178, -0.203, -0.190, -0.143, -0.213, 0

    Why column of 0 suddenly?

    Was just to test to swap again. since as always the left side over compensates…

  • administrators

    So the X and Y offsets get changed to first zero, and then both to -10?

    Do you have any tool change files, if so, what do they contain?

  • on the duet?

    I use the script above…

    Have not updated any other scripts... there are some Txxx I have never looked into... There is nothing in these files. My tool change is done in the slicer. Not super good documentation in the wiki...

    Any ideas as to what the column of zeros mean?

    And sorry to report that the mirroring is still the best…

  • Made some test today. And I can verify that there is no mirroring in the firmware…

    I taped down a piece of paper on the right side and it was "found" by the leveling where it should be...
    Then re-did it on the left and it appeared...

    So the magic now it WHY do I get better firs layers when mirroring...

    The paper used is 0.36mm thick... but the duet says it is approximately 1mm.

    Here is the table WITH paper on the left:
    RepRapFirmware height map file v1 generated at 2017-03-29 20:35, mean error 0.17, deviation 0.42
    0.565, 0.702, 0.717, -0.158, -0.080, -0.035, -0.010, -0.050, -0.070, -0.140, 0
    0.857, 1.040, 1.050, -0.045, -0.015, -0.030, -0.020, -0.075, -0.140, -0.115, 0
    0.915, 1.182, 1.155, -0.082, -0.023, 0.045, 0.007, -0.020, -0.048, -0.058, 0
    0.885, 1.003, 0.892, -0.045, 0.017, -0.010, 0.007, -0.035, -0.040, -0.080, 0
    0.702, 0.837, 0.618, -0.155, -0.080, -0.030, -0.038, -0.010, -0.055, -0.072, 0
    0.587, 0.620, 0.520, -0.193, -0.130, -0.143, -0.138, -0.125, -0.110, -0.122, 0
    0.240, 0.400, 0.415, -0.020, -0.230, -0.200, -0.240, -0.268, -0.210, -0.288, 0

    And no paper:
    RepRapFirmware height map file v1 generated at 2017-03-29 20:54, mean error -0.12, deviation 0.10
    -0.190, -0.278, -0.173, -0.130, -0.048, 0.003, 0.020, -0.033, -0.058, -0.155, 0
    -0.215, -0.125, -0.060, -0.030, -0.018, -0.045, -0.035, -0.078, -0.115, -0.078, 0
    -0.235, -0.160, -0.110, -0.053, 0.003, 0.050, 0.007, -0.033, -0.058, -0.053, 0
    -0.210, -0.122, -0.045, -0.040, 0.005, -0.038, -0.007, -0.035, -0.018, -0.055, 0
    -0.308, -0.218, -0.163, -0.132, -0.038, 0.000, -0.030, -0.010, -0.070, -0.085, 0
    -0.338, -0.225, -0.230, -0.175, -0.112, -0.112, -0.108, -0.115, -0.112, -0.138, 0
    -0.353, -0.408, -0.340, -0.270, -0.210, -0.197, -0.235, -0.285, -0.210, -0.268, 0

  • administrators

    The column of zeros means that those points were within the probing area you requested, but not reachable by the probe, taking into account the probe offset.

    Except on an IDEX machine, it shouldn't make any difference which tool you have selected during probing.

    Did you check the probe trigger height on both sides of the bed as I suggested earlier?

  • Re-read your suggestion and I THINK I understand what I need to do… But I think the text above is this... I taped a piece of paper on the bed and yes it was seen by the probe... but the compensation seem extreme.

    Secondly: the Z-probe that is sold on the duet homepage... is that better or equal to the one that I have on the E3D bigbox?

    Starting to wonder if there is something wrong here...

    Also is there a method I can test the position of the probe? Do not trust the duet to do what you say placing the probe on the bed...

    Have had it pressing into the nozzles as hard as it can due to bad placement... would like to see the end positions and approve them before letting it do it's stuff.

    I'll post some pictures showing the first and last probe position and then maybe we can try to figure out how to alter my script to cover the entire bed.

    Row of zeros... So... if my "probe" center is between the nozzles and they are 38mm and the probe is 44mm from the center... 44 - (38/2) = 25 mm then I should probe 0 to 275 to not get a row of zeros? Correct? Or should to be 300?

    Why can't I get more X then 240?
    Command I run is: M557 X0:300 Y12:188 S20

    Also can someone explain why it is more or less impossible to understand how to get the calibration files for the M556 command? At least I would have expected to find a link in the Wiki… would have added it if I was able to find it on the internet... Thingiverse search function do not find ANYTHING at all... google find only test describing how to use it... the reprap SD card has a file but when importing it to my slicer nothing appears... Just was surprised at how hard is seems to be to get calibration done...

  • administrators

    I've added a link to the M556 calibration STLs at

    What exactly do you mean by "test the position of the probe"?

    The mini IR height sensor we sell is an improved design compared to the one that shipped with the BigBox, however if you use it with a transparent bed then the trigger height is still somewhat affected by any coatings on the surface, and it still needs a black surface below the transparent material to give the best results.

    Regarding the area to probe, where have you defined the head reference point, from which the probe and nozzle offsets are measured? Have you set up your M208 and M208 S1 commands to define the range of positions that the head reference point can reach?

  • Test I mean to make a dry run to make sure the probe is where it should be… like a command that places the probe at the extremes (for a square bed goto corner 1 then wait, either time or user input then next util all corners has been visited. But no z calibration done. So I have a chance to verify that the automatic bed leveling always has a surface that is relevant to measure from...

    I have a black PEI surface so there should be no problem for that to see the surface then... just need to check if they are interchangeable or if I need to print other mount for it. Just having hard time to trust my printer and if that can be fixed by buying a small circuit then that is not to much...

    My M208:
    M208 X300 Y240 Z295 ; set axis maxima (adjust to suit your machine)
    M208 X-38 Y0 Z-0.1 S1 ; set axis minimum (adjust to make X=0 and Y=0 the edge of the bed)

    This to allow tool T0 to move -38mm so that T1 can hit X0Y0... But now when I look at it... is the bed 338 to let T0 reach X300Y0?

    On your recommendation I have his in the config-override.g:
    G31 T1 P500 X-44.2 Y0.0 Z2.20

    placing the "center" between the nozzles.

    Followed the link... it there a trick how to download? simplify3D do not like these stl files. (I right clicked and chose "save file as" and then tried to open it in simplfy3D...) Says the file is very small and recommend I try in mm instead of inches...

    And I just found that there is... had to view the RAW file and then save the page... not very intuitive... Need to learn more about GITHUB...

  • Guess who's duet board decided that it was a briliant idea to test with the probe outside the bed:

    Now I must tram the bed AGAIN…

    Yes the bed is now this off...

    This is why I would like to have the probe test.

    but in this case it would not have helped... since the SAME macro was run again and that time it did NOT place the probe outside...

    Other feature is that now I have 3 rows of zeros...

    RepRapFirmware height map file v1, mean error -0.12, deviation 0.40
    -0.933, -0.705, -0.695, -0.598, -0.475, -0.353, -0.233, -0.112, -0.005, 0.045, 0.148, 0.250, 0.352, 0, 0, 0
    -0.858, -0.753, -0.638, -0.555, -0.398, -0.340, -0.218, -0.130, 0.023, 0.160, 0.205, 0.295, 0.398, 0, 0, 0
    -0.878, -0.745, -0.633, -0.508, -0.408, -0.235, -0.130, -0.070, 0.082, 0.168, 0.237, 0.325, 0.430, 0, 0, 0
    -0.773, -0.670, -0.543, -0.383, -0.273, -0.163, -0.035, 0.045, 0.172, 0.225, 0.285, 0.375, 0.435, 0, 0, 0
    -0.735, -0.603, -0.475, -0.360, -0.263, -0.170, -0.045, 0.045, 0.165, 0.225, 0.365, 0.432, 0.510, 0, 0, 0
    -0.695, -0.572, -0.425, -0.293, -0.213, -0.120, 0.005, 0.040, 0.180, 0.255, 0.388, 0.445, 0.530, 0, 0, 0
    -0.665, -0.558, -0.430, -0.317, -0.235, -0.135, -0.007, 0.053, 0.145, 0.273, 0.395, 0.493, 0.543, 0, 0, 0
    -0.748, -0.635, -0.488, -0.335, -0.208, -0.102, -0.040, 0.067, 0.190, 0.307, 0.370, 0.452, 0.520, 0, 0, 0
    -0.803, -0.643, -0.540, -0.425, -0.268, -0.208, -0.090, 0.003, 0.080, 0.170, 0.290, 0.370, 0.445, 0, 0, 0

  • administrators

    If you want me to explain in more detail why you are getting columns of zeros, you will need to share your config.g file.

  • My Config.g:

    ; Configuration file for BigBox v1.1 3D printer Dual hybrid Titan 
    ;*** Communication and general -------------------------------------------------------------------------------------------------------------------------------
    M111 S0                             		; Debug off
    M550 BigBoxDuet				        ; Machine name (can be anything you like)
    M551 BlaBla                         		; Machine password (used for FTP connections)
                                        		;*** If you have more than one Duet on your network, they must all have different MAC addresses, so change the last digits
    M540 P0xBE:0xEF:0xDE:0xAD:0xFE:0xED 		; MAC Address
    ;*** Wifi Networking -----------------------------------------------------------------------------------------------------------------------------------------
    M552 S1			                    	; Enable WiFi
    M555 P2                             		; Set output to look like Marlin
    M575 P1 B57600 S1			        ; Comms parameters for PanelDue
    ; Machine configuration --------------------------------------------------------------------------------------------------------------------------------------
    M569 P0 S1					; X Drive 0 goes forwards (change to S0 to reverse it)
    M569 P1 S0					; Y Drive 1 goes backwards
    M569 P2 S0					; Z Drive 2 goes forwards
    M569 P3 S1					; E0 Drive 3 goes forwards
    M569 P4 S0					; E1 Drive 4 goes forwards
    ; endstop configuration ------------------------------------------------------------------------------------------------------------------------------------
    M574 X1 Y1 S1					; set endstop configuration (X and Y and endstops only, at low end, active high)
    M350 X16 Y16 E16 I1    			    	; Set 16x microstepping with interpolation
    M906 X800 Y700 Z1000 E1000:1000      		; Set motor currents (mA) and increase idle current to 60%
    M201 X800 Y800 Z15 E1000            		; Accelerations (mm/s^2)
    M203 X15000 Y15000 Z100 E3600       		; Maximum speeds (mm/min) 
    M566 X600 Y600 Z30 E20              		; Minimum speeds mm/minute
    M208 X300 Y240 Z295                 		; set axis maxima (adjust to suit your machine)
    M208 X-38 Y0 Z-0.1 S1                 		; set axis minimum (adjust to make X=0 and Y=0 the edge of the bed) --M208 X0 Y0 Z-0.2 S1
    M92 X160 Y360 Z400                  		; Set axis steps/mm
    						; current steps-per-mm * 100 / measured value in mm
    M92 E417.5:407.0                    		; Set extruder steps per mm
    G21                                 		; Work in millimetres
    G90                                 		; Send absolute coordinates...
    M83                                 		; ...but relative extruder moves
    ; Z probe-------------------------------------------------------------------------------------------------------------------------------------------------------
    M558 P1 X0 Y0 Z1 H3 F200 T4000      		; Smart IR Z probe, used for homing Z axis, dive height 3mm, probe speed 200mm/min, travel speed 5000mm/min
    ;G31 X-25.19 Y7 Z2.94 P500          		; Set the probe height and threshold; increase Z to decrease bed probe distance X11.0 Y0.5 
    ; Thermistors and heaters ---------------------------------------------------------------------------------------------------------------------------------------
    M305 P0 T100000 B4388 R4700 H0 L0      		; Put your own H and/or L values here to set the bed thermistor ADC correction
    M305 P1 X200                                    ; Put your own H and/or L values here to set the first nozzle thermistor ADC correction
    M305 P2 X201                                    ; Put your own H and/or L values here to set the second nozzle thermistor ADC correction
    M143 H1 S130 					; Bed max temp to 130 
    M106 P0 F10                                	; Fix for Bigbox Blower
    M106 P1 T45 H1                             	; Set temp for H1 fan start
    M106 P2 T45 H2                             	; Set temp for H2 fan start 
    ; Tool definition--------------------------------------------------------------------------------------------------------------------------------------------------
    M563 P0 D0 H1                       		; Define tool 0
    G10 P0 X0.0 Y0.0 Z0.0 S0 R0                     ; Set tool 0 operating and standby temperatures
    M572 D0 S0.1
    M143 H1 S287 					; Tool max temp to 287 
    M563 P1 D1 H2                      		; Define tool 1
    G10 P1 X38.3 Y0.0 Z0.0 S0 R0                    ; Set tool 1 operating and standby temperatures
    M572 D1 S0.05
    M143 H2 S287 					; Tool max temp to 287 
    ;M556 S78 X0 Y0 Z0 				; Axis compensation here
    M140 S0						; Set bed temp to 0
    G29 S1						; Read bed level data
    M501						; Run config-override.g
    T0						; select first hot end

  • And I just bought a new Z probe hoping that it might be that… Ten pounds for shipping... For a circuit that cost 20... And Then 6 more in tax. That makes it hard for European firms to compete with China...

  • administrators

    You've defined the head reference point as the position of the first nozzle, because you have zero X and Y offsets in the G10 P0 command. Your M208 commands say that the head reference point can move along the X axis from -38 to +300mm. Your second nozzle is offset from the head reference point by +38.3mm in the X direction.

    You don't have an active G31 command in config.g, but earlier you said you were using G31 T1 P500 X-44.2 Y0.0 Z2.20 in config-override,g.

    Therefore, assuming the X axis goes from left to right on your printer, the sensor is at the left hand end of the print head, then the T0 nozzle, then the T1 nozzle. Correct?

    If the head reference point (first nozzle) can move from -38 to +300mm, then the probe with its -44.2mm offset can move from -76 to +235.8mm.

    You don't have the M557 command in config.g so I will assume you are still using M557 X0:300 Y12:188 S20 as you stated in a previous post. This means that you want to probe the bed from 0 to 300mm at intervals of 20mm., which should give 16 columns. However, the columns at +260, +280 and +300mm are not reachable by the probe because it is limited to +235mm. So I would expect to see three columns of zeros.

    HTH David

  • Ah I see… But there is something wrong here then... The probe can reach to x=288...

    I need to think about this...

    The probe can definitely not reach -76mm...

  • So… this sound VERY much like I back to my original set-up...

    T0 is the center of the world... and all the rest should reference from that...

    So the probe is approximately 28 to the left of T0 (yes you have the correct assumptions in your post).

    and the other end:

    This means that the probe needs to have T0@X28Y12 for the first measuring point and T0@X300Y12 for the last…
    Shall I use that in the M557 (tool 0 centric)? or as it is (probe centric and the last cannot be reached... (so I change it from 300 to 272)):

    M557 X0:300 Y12:188 S20     ; Bed level from X0Y12 to X275Y188 in ?mm increments
    ```And change the

    G31 T1 P500 X-44.2 Y0.0 Z2.20

    G31 T1 P500 X-25.2 Y0.0 Z2.20

    Or shall I change something more fundamental in my set-up?
    There is also some bad behavior that I see sometimes… it uses X0Y0 for the first nozzles instead of the compensated one that puts the probe in the bed. Hit the power off and next time I run the script directly after boot and all is OK. Do not like that at all.


Looks like your connection to Duet3D was lost, please wait while we try to reconnect.