Mesh Bed Leveling does not work (Core XY with 2 z-axis motors)
-
Try changing G29 in your start code to either G29 S0 (create new heightmap) or G29 S2 (load existing heightmap)
I must admit, the mesh levelling is the one problem I'm still trying to work through in my dual Z drive CoreXY toolchanging machine - though that's a probe problem to do with creating it accurately rather than it working or not.
-
I tried this several minutes ago, but It doesn't help:
; generated by PrusaSlicer 2.4.0-beta1+win64 on 2021-12-22 at 12:54:39 UTC ; ; external perimeters extrusion width = 0.45mm ; perimeters extrusion width = 0.45mm ; infill extrusion width = 0.45mm ; solid infill extrusion width = 0.45mm ; top infill extrusion width = 0.40mm ; first layer extrusion width = 0.45mm M107 ;TYPE:Custom G29 S2; M140 S55; set bed temp M190 S55; wait for bed temp G32 M104 S220; set extruder temp G29 S0; G1 Z30 F5000; G1 X10 Y0 F30000; M109 S220; wait for extruder temp G29 S1; G92 E0 ; reset extrusion distance G1 Z10 F1000; G1 X50 Z1 F1000; G1 X100 Z0.4 F1000 E15; G1 X200 F1000 E22; G21 ; set units to millimeters G90 ; use absolute coordinates M82 ; use absolute distances for extrusion G92 E0 M572 D0 S0.05; M107 ;LAYER_CHANGE ;Z:0.2 ;HEIGHT:0.2 G1 E-1.2 F3600 G92 E0 G1 Z.2 F30000 G1 Z.4 G1 X10.225 Y10.225 G1 Z.2 G1 E1.2 F3600 ;TYPE:External perimeter ;WIDTH:0.45 G1 F2100 G1 X389.775 Y10.225 E13.53342 G1 X389.775 Y389.775 E25.86685 G1 X10.225 Y389.775 E38.20027 G1 X10.225 Y10.285 E50.53174 G1 X10.975 Y10.975 F30000 G1 F2100 G1 X389.025 Y10.975 E62.81642
Clear height map a the begin, probing and at the loading it..
-
@buckker you have nowhere selected the tool and the slicer doesn't select it too, I would add T0 to the end of config.g
I would then try a simple G29 S0 after rebooting and homing, then checking mesh probing status by making M122 while probing.
-
I checked the following things:
M122 during probing:
DMs created 83, maxWait 9ms, bed compensation in use: none, comp offset 0.000
M122 during printing:
DMs created 83, maxWait 18ms, bed compensation in use: mesh, comp offset 0.000
this is the tool section from the config..g:
; Tools M563 P0 S"Dragon Hotend" D0 H1 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
I add a T0 to my g-code file:
; generated by PrusaSlicer 2.4.0-beta1+win64 on 2021-12-22 at 12:54:39 UTC ; ; external perimeters extrusion width = 0.45mm ; perimeters extrusion width = 0.45mm ; infill extrusion width = 0.45mm ; solid infill extrusion width = 0.45mm ; top infill extrusion width = 0.40mm ; first layer extrusion width = 0.45mm M107 ;TYPE:Custom T0; M140 S55; set bed temp M190 S55; wait for bed temp G32 M104 S220; set extruder temp G29 S0; G1 Z30 F5000; G1 X10 Y0 F30000; M109 S220; wait for extruder temp G92 E0 ; reset extrusion distance G1 Z10 F1000; G1 X50 Z1 F1000; G1 X100 Z0.4 F1000 E15; G1 X200 F1000 E22; G21 ; set units to millimeters G90 ; use absolute coordinates M82 ; use absolute distances for extrusion G92 E0 M572 D0 S0.05;
I will modify the gcode to your ideas.
Actually I can't see any z-axis compensating during the print....
-
@buckker so M122 says that mesh compensation is active.
I can think of the following possibilites
- the bed is plain enough so you don't see compensation
- the probe-nozzle offset is wrong, so the compensation is at the wrong place
- printing outside mesh probing M557 X50:350 Y50:350 S50
The offset is set at G31 X, Y, Z values. Your values are X0 Y35 Z1.85, which means the BLTouch should be at the same X position and 35 mm behind the nozzle, when you look at the printer and X plus is to the right and Y plus is to the back.
For the plain bed, please check the heightmap.csv, it is viewable in the DWC (Duet web control browser application).
The mesh was measured starting at (50,50), you may look at the wrong points,
-
My conclusion after a few tests....:
- the printer compensates now some z-axis deviation. I put a dial gauge on the heat bed. I could see, that the z-axis moves during the printing. But the nozzle touches the bed at one corner. At the other corner the first layer is somewhere in the air... It seems that It compensates in the wrong direction... How is this possible? G32 works fine, it compensates in the correct direction.
The BL Touch is placed behind the nozzle, only y-axis offset:
some other pictures:
Heightmap:
@joergs5 said in Mesh Bed Leveling does not work (Core XY with 2 z-axis motors):
printing outside mesh probing M557 X50:350 Y50:350 S50
Whats actually happens if I print outside the probing area?
-
@buckker plaese see my last comment from previous post, I added the possibility that the mesh measurement starts at 50,50, so you may have not measured the whole area. Please try to measure the whole M208 area (please be careful, the BLTouch/extruder needs some room...).
I cannot remember, whether M557 coordinates refer to the M208 or to the BLTouch positions.
-
@buckker BTW congratulations using good measurement equipment!
-
@buckker said in Mesh Bed Leveling does not work (Core XY with 2 z-axis motors):
Whats actually happens if I print outside the probing area?
I looked into the source Grid.cpp function GetInterpolatedHeightError(): my understanding is, the last mesh point in this direction is used as reference height. E.g. if (50,50) to (350,350) have mesh points, than for (0,200) the point (50,200) is taken as height.
-
@buckker one more aspect I can think of is if your Z axis is driven by something like a worm drive, that direction changes have some play (backlash). This would cause unexpected movements.
You can check whether there is compensation directly by checking the Z motor position: M114 has a Count value, the third one is the motor position of Z. The counter is set at homing and depends on motor position and M92 value. So you know the firmware's value and not depend on the reality Z position.
-
Yes, Tesa really produces very high quality measurement equipment
I modified the probing area with more points. But it also doesn't help. I also print some smaller test parts (cubic with 280mm x 280mm). With this dimensions the part is 100% in the probed area. Same result...
I also checked with the dial gauge the travel of the z-axis. Both motors compensate some deviation. The direction should be also fine. But it was not able to compare the z-axis absolute travel measured by the dial gauge with the height map. It seems that the printer compensate some deviation, but no enough..
I use a belt driven gearbox for the z-axis (4:1). I will check the backlash of the axis.
actual printing result:
height map for this part:
One thing confused me: at the left front corner, the layer should stick very good (+0.2mm offset), the nozzle should have nearly zero gap without mesh bed compensating (if I print at 0.2mm layer height). But actually the layer is too far away from the build plate... I don't understand this...
I will run a print with disabling mesh bed compensation
-
@buckker said in Mesh Bed Leveling does not work (Core XY with 2 z-axis motors):
confused me: at the left front corner, the layer should stick very good (+0.2mm offset),
is this the reality (bed uneven) or is it a measurement error? A good lineal, best would be a hair lineal, could give you the answer. Or a measuring plate together with your gauge. Or maybe you have an additional linear guide, mounting the gauge, parallel to the bed, allows measuring the bed.
I suspect the two linear guides of Y are not in one plane, too. (left is higher in front, right one is higher in the back). I use feeler gauge for fine tuning. You don't have a reference, however. I would try between 0.1 and 0.2 mm and then decide by bed measuring (mesh probing or gauge).
An additonal topic you can check is whether the bed is sliding smooth enough. I. e. the distance of the two opposite linear guides need to have a little play. Otherwise a direction change of Z stepper will produce a little gap, depending how high the belt tension is. The bed should not be fixed with screws, because bed expansion by temperature will change the distance between the linear guides.
-
It's not a measurement error. The aluminium bed is flat (EN AW-5093 precision cast plate, also checked with a lineal). But it's possible to bend the plate with the 4 adjusting screws. For my opinion 0.2mm error for a 400x400mm plate is not that bad.
I have a second printer with a 350x350mm bed and only one z-axis stepper motor (also Duet Wifi equipped, same firmeware version). I tested the bed leveling with the same test part. On this machine the bed leveling works normal and the first layer is perfect over the hole area. The flatness of the bed is around 0.2mm..
After that I compared the start g code from my prusa slicer. I could notice some differences. But for today it's enough tested Maybe I have more luck tomorrow...
-
@buckker said in Mesh Bed Leveling does not work (Core XY with 2 z-axis motors):
bend the plate with the 4 adjusting screws
Beside firmware, the hardware could produce strange results. One possibility is a stuck bed, if the two opposite linear guides get stuck. This is the only idea I have in addition.
Good luck tomorrow proceeding investigating!
-
In cases like this where the mesh doesn't appear to be compensating correctly at certain points usually means there is some variance in probe offset between different XY points due to some form of skew. Possibly tilt or sag of the gantry, or skew in the rails from not being perfectly aligned, etc.
One way to check for this is to do a G30 S-1 test at various points on the bed and see how the trigger height results change.
-
Good Morning everyone
@JoergS5 I designed the heat bed with enough play for the heat expansion. I also printed the the supporting parts on the left and right side for the heat bed. Due to the plastic material, it's not that stiff and can be deformed. Secondly, if the length rises due to the heat expansion, the screw head is able to move in the cylinder countersink.
I did a few prints on this machine and they looking very good. Actual a 400mm high part. I believe, if I have a mechanical problem, the prints would't looking that nice.
https://www.youtube.com/watch?v=s3IA_d9eO8U
@Phaedrux Thanks. I have checked the mechanical system yesterday. I couldn't find any play or low stiffness. The x-axis is supported by two MGN9 rails. It's a lot stiffer than my second printer, who actually print very nice first layer...
Maybe it's time to change the BLTouch. I ordered it from Triangle Lab. Normally they sold very high quality products, but it's possible that the sensor isn't that precise as it should be.
I will do some probing points to see how good the repetitive precision is.
Many thanks for your help!
-
@buckker Given the location of your probe, the area of the bed that "seems raised" and the position of your wiring loom to the head, I wonder if the loom may be pulling on the head slightly and causing the probe to move slightly nearer the bed when in that from left corner? That would make it look to the system that the left front part of the bed is higher.
-
@buckker said in Mesh Bed Leveling does not work (Core XY with 2 z-axis motors):
I designed the heat bed with enough play for the heat expansion.
It's good that you're aware of those factors, most users don't. Your print looks nice!
-
I did did some further tests. I use G30 S-1 to probe at the center and at one corner of the build plate. Those are the results:
center:
corner:
And I did another test where I pull on the cable in several directions (regarding the post from @gloomyandy ) The max. deviation I get is around 0.015mm.
I think this is a nice precision.
I also eliminate the G32 from the start code. With that the bed is around 0.5mm tilted. I started a print. I could see, that the machine do some compensating, but not enough.
From my actual standpoint I would say that a mechanical cause is improbable. I asking me if something is wrong with my configuration or if it's really a firmware bug. Do we have a prove that the mesh bed leveling works with two independent stepper motors? Could it be, that reprap firmware only compensates 50% of the deviation because of the two motors? With one motor it compensates 100%?
-
@buckker Having two motors really makes no difference to the mesh compensation code, it simply moves the whole bed up and down to adjust for the mesh it does not try and do anything fancy, this uses the same code as when performing any other Z movement so I'm pretty sure you would have noticed by now if the firmware was not moving correctly in Z. I have a similar setup to yours and do not have any issues with bed compensation (and my bed is probably not as flat as yours is!).
A few comments on your configuration files...
- You may need to change your axis limits. At the moment you are not allowing any movement below z=0, looking at your mesh a significant part of that is below this point and so the compensation will not be working correctly in those areas.
- It;s probably a good idea to perform another G30 (or home Z) after running G32 as it is likely that your Z=0 height will have change a little during the bed levelling process. Similarly make sure that you always set Z=0 before creating a mesh (and/or loading one if you use a saved version). If you set your z=0 point at a location that coincides with a mesh point (probably a good idea). Then your mesh should have a reading very close to zero at that point.
- Depending upon how you have determined your probe offset after making the above changes you may need to adjust that setting a little.
Good luck!