Mesh Compensation Overcompensating a bit?
-
I am printing keychains with a 3.5x3.5cm QR Code, embedded into the first layer, on a CaribouDuet. After a lot of finetuning and troubleshooting, I can still not reproduce the keychain reliably in all positions on the heatbed. I can perfectly reproduce it in certain positions though.
On the foto you see the keychains in the positions they are being printed in, but each one flipped so you can see the bottom.
The top left one and bottom right one look fine and work fine. As intended.
The bottom left one is a bit squished. Nozzle tiny bit too low.
The top right one lacks a tiny bit of adhesion, due to needing the nozzle to be about 0.02mm lower.
On the heightmap you can see that the top right one is actually in a higher area of the heatbed, despite needing the nozzle to be closer and you see that the bottom left one is actually on the lower area of the heatbed, despite being a bit squished.
Nozzle is 0.4, extrusion width for first layer is 0.3. I tried different numbers of heightmap mesh points. Right now I am at the highest I tried, being 144 points. So it is a 3.5cm QR code and a 1.8 cm distance between mesh points.
Is the mesh compensation overcompensating a bit? Is there anything I can do about it?
-
@suntoxx said in Mesh Compensation Overcompensating a bit?:
Is the mesh compensation overcompensating a bit? Is there anything I can do about it?
0.02 mm? you’re really pushing the limits
Roughly calculated, one of your QR Codes is covered by 4 mesh points - and a lot of triangulated (= estimated) heights in between. So the first thing to do is to provide a mesh with as many points as possible (that’s about 400).
The second thing to consider is the resolution / repeatability of your probe: An accuracy of 0.01 mm all over the bed is something not all probes can deliver. So, half of your deviation can easily go on behalf of the probe.
Third, the resolution of your Z axis can be a limiting factor: this depends on how you drive the stepper(s) and how many steps/mm you can achieve. Don’t know the Caribou and your driver settings, so that’s purely speculated.
A forth thing is print speed: depending on your acceleration settings for Z, the nozzle height may follow the bed a bit late. But in your case, that’s theory. In practice, a finer mesh will help you most.
-
@infiniteloop Thanks for the response. Yes, it does feel like im hitting some limits here. Is there a way to easily (automated?) extract the coordinates used by a print and use them to reduce the probed area for the print? It seems a bit overkill and time intensive to maximize the heightmap for the entire bed, when only using a small portion of it.
The probe is a BL Touch, so according to their 0.001mm or so claim, that should be ok?
I am not really familiar with building and calibrating printers and relatively new to printing. Is this what you are referring to:
M350 X16 Y16 Z16 E16 I1 ; configure microstepping with interpolation M92 X200.00 Y200.00 Z400.00 E400.00 ; set steps per mm
And acceleration is
M201 X500.00 Y500.00 Z100.00 E500.00
I will try to 400 points approach next run.
Edit: I print the first layer at 20mms
Edit 2: Did a quick print of only the top right one with a custom mesh only around that one, with 81 points. Result is much better! Doing 4 now, also with custom mesh and 225 points on the 4 of them.
Edit 3: Too late for this run, but next one i will try M557 X{first_layer_print_min[0]}:{first_layer_print_max[0]} Y{first_layer_print_min[1]}:{first_layer_print_max[1]} S8 in PS startcode. -
@suntoxx It’s a bit late for a comprehensive reply, but I will try my best …
Without the use of a preprocessor, I don’t know a way to automatically confine the mesh to an area used by the actual print. You can either restrict the area by hand, or you can generate a narrow mesh for the whole bed once and re-use it for subsequent prints. The latter proposal only works if you can level your bed precisely before you (re-)apply the mesh.
0.001 mm? A single grain of dust spoils such a claim for a whole magnitude! Nevertheless, the BLTouch is OK.
400 steps/mm are fine. Well, micro stepping is not overly precise under some circumstances, but TBH I have no better proposal.
Maybe you could try some faster acceleration, 100 for Z looks quite moderate to me. But at a print speed of 20 mm/s, that doesn’t matter. Nevertheless, you might get better results with 15 mm/s for the first layer - that’s something to try.
Your Edits prove the value of a narrow mesh. However, mechanical precision of a printer is limited (not only by the BLTouch or the steppers), so it’s worth to take a look at first layer adhesion, too. To improve this, you could play with print speed, bed and hotend temperatures.
-
I have found on my printers I can generate a 400 point height map at printing temps (bed and extruder) and use that heightmap for all subsequent prints.
I do re-create the heightmap from time to time to see if anything appears to be changing.
Frederick
-
@fcwilt that would be worth a try, although if a tiny piece of filament gets under the sheet, i suppose that could cause a problem.
It seems your suggestion worked perfectly, thanks! The higher number of probe points does even things out. I did not expect that. I expected the surface to be uneven, but in a more rolling slope way. Seems to be pretty rough terrain though.
The startcode for prusaslicer i posted, works like a charm. It automatically calculates the needed mesh compensation area and adds it to the print. However, i believe this is actually something that the Duet should do and not the slicer. Is there a way to have Duet calculate the extends of the printed object, without the need to add code to the different slicers (that on top needs to be compatible with the slicer in question)?
And what do you believe is the lowest distance between probe points that makes sense? I used 8mm and it works nicely. Would more yield the same result? Is there a point where decreasing it makes no sense technically (angles can't be too steep I suppose?)
-
@infiniteloop said in Mesh Compensation Overcompensating a bit?:
@suntoxx It’s a bit late for a comprehensive reply, but I will try my best …
Without the use of a preprocessor, I don’t know a way to automatically confine the mesh to an area used by the actual print.
Check out the Prusaslicer startcode i found last night. It works nicely! Just wish that Duet would handle it and not that you got to adjust it according to each slicer.
Maybe you could try some faster acceleration, 100 for Z looks quite moderate to me.
Z acceleration seems moderate in comparison to the other axis? What would that improve? I guess not much in terms of time. Less stringing?
Your Edits prove the value of a narrow mesh. However, mechanical precision of a printer is limited (not only by the BLTouch or the steppers), so it’s worth to take a look at first layer adhesion, too. To improve this, you could play with print speed, bed and hotend temperatures.
Yes, i am quite far up in temperature I think, using 70° and 235° for PLA for this print. I actually did have an adhesion problem too on this print, at least on some print positions. I did not know that Iso and paper is not enough. Using dishwasher or window cleaner now on top and adhesion on the king sheet is sufficient for this more difficult print.
Edit: Adjusted z by 0.01mm and result is consistent and perfect now!
-
@suntoxx said in Mesh Compensation Overcompensating a bit?:
Adjusted z by 0.01mm and result is consistent and perfect now!
Congrats!
-
@suntoxx said in Mesh Compensation Overcompensating a bit?:
@fcwilt that would be worth a try, although if a tiny piece of filament gets under the sheet, i suppose that could cause a problem.
It seems your suggestion worked perfectly, thanks! The higher number of probe points does even things out. I did not expect that. I expected the surface to be uneven, but in a more rolling slope way. Seems to be pretty rough terrain though.
Yes beds can be more uneven then you might expect. But I have found a 400 point grid handles my largest bed, 300 x 300. I use tool plate aluminum for all my beds but even they could benefit from machining if I could fine someone to do it.
The startcode for prusaslicer i posted, works like a charm. It automatically calculates the needed mesh compensation area and adds it to the print. However, i believe this is actually something that the Duet should do and not the slicer. Is there a way to have Duet calculate the extends of the printed object, without the need to add code to the different slicers (that on top needs to be compatible with the slicer in question)?
I suppose it could be done but it might be slow since the entire file would have to be scanned and analyzed. The slicer is running on your computer which likely has a processor far more powerful than the one in the Duet.
Since I create the heightmap perhaps once a month and use it for all subsequent prints I have never investigated the approach you are using.
And what do you believe is the lowest distance between probe points that makes sense? I used 8mm and it works nicely. Would more yield the same result? Is there a point where decreasing it makes no sense technically (angles can't be too steep I suppose?)
I don't specify the distance, just the number of points in each direction, using the P parameter. So a 400 point grid uses P20:20. The largest bed I have is 300 x 300 but I limit the printing area to 280 x 280. So 280 mm divided by 20 points is appx 14 mm. I could use P21:21 to obtain exactly 14 mm.
I might consider having more than one heightmap covering different areas (300x300, 200,200, etc) but keeping the 400 points. It would still involve creating them "once" and using them for all subsequent prints.
Glad to hear things are working well for you.
Frederick
-
Seems i was a bit overconfident this morning (or more likely too comatose). There is still quite a difference in between them. This time i did 6 keychains (only the first layers), 21x21 points only on the needed area, resulting in something like 7mm distance between probes. The most striking difference is the bottom left keychain, which is squished (again), while the others could use some more squishing. The keychain first layers are in position on the foto, but flipped, so the underside can be seen.
@fcwilt I dont know how much power the duet has, but just scanning the first layer for the outer dimensions, shouldnt require much power if done in a smart way, i would think. Plus, couldnt DWC handle that, if it really needs more power than available? Then it has full access to the desktop cpu and ram.
Do you think it is possible to have a window pop up when starting to print, triggered by the custom startcode in Prusaslicer? Something like do you want to probe your bed? Yes will use the line i posted above, for automated mesh probing coordinates, and no/cancel will instead call for a saved 21x21 heightmap (which you refresh via a macro regularely)?
-
@suntoxx said in Mesh Compensation Overcompensating a bit?:
@fcwilt I dont know how much power the duet has, but just scanning the first layer for the outer dimensions, shouldnt require much power if done in a smart way, i would think. Plus, couldnt DWC handle that, if it really needs more power than available? Then it has full access to the desktop cpu.
Good point. I was thinking it would have to scan the entire file but of course it doesn't. So the Duet could likely handle it particularly if you used a setup that include the SBC.
Do you think it is possible to have a window pop up when starting to print, triggered by the custom startcode in Prusaslicer? Something like do you want to probe your bed? Yes will use the line i posted above, for automated mesh probing coordinates, and no/cancel will instead call for a saved 21x21 heightmap (which you refresh via a macro regularely)?
Absolutely.
The only custom code I enter into any of the places where that can be done is to enter a M98 call to my own code in the Duet.
For example in Prusa I could enter some or all of the following:
- M98 P"print_begin.g"
- M98 P"print_end.g"
- M98 P"print_layer_change_before.g"
- M98 P"print_layer_change_after.g"
- M98 P"print_tool_change.g"
- M98 P"print_filament_start.g"
- M98 P"print_filament_end.g"
To address your specific question it should be possible to use M291 with an S3 parameter to popup a dialog and prompt the user.
For example:
; some print start code M98 P"prompt_user.g" ; some more print start code
In prompt_user.g a M291 pops up the dialog with an OK and CANCEL option:
M291 R"prompt title text" P"prompt message text" S3 ; if the user selects CANCEL the code below is not executed and execution continues after the M98 P"prompt_user.g" call. ; some code to execute if the user selects OK
That's just one way to do it.
Frederick
-
Since I started 3d printing a couple months ago, when doing fine adjustments to prints, I kept having the impression that even the coordinates that are actually measured, are not used as absolute values.
Now the fact that the Keychain on the lowest part of the print area keeps being the most squished one, seems to confirm that perception. What is the reason behind this?
Would it result in a recognizable pattern to use the measured coordinates as absolute values and because of that, all absolute points get relativated and that can result in less adhesion on the lowest areas and to counter it, a "force into one direction" (downwards) approach is applied to those areas, which is what I keep seeing in the squished, bottom left Keychain?
With those Keychains, I would actually prefer that pattern. It could even be used, like the archimedic arcs on the top layer, or the way gyroid infill can look nice on certain occasions, shining through the perimeters. Some probing patterns to choose from.
If im right about this, is there a way (for someone who has no idea about coding) to switch from this "relative mode" to an absolute mode, in which only the areas between probed points get interpolated/relativated?
@dc42 is that impression more less correct?
@fcwilt that looks good, thanks! I will try to integrate that, once i come to a conclusion about how i use the mesh compensation to my best advantage. Maybe i will have to find a way to level my bed?
-
@suntoxx Have you a low mesh compenstaion taper?
https://docs.duet3d.com/User_manual/Reference/Gcodes#m376-set-bed-compensation-taper -
@suntoxx said in Mesh Compensation Overcompensating a bit?:
@fcwilt that looks good, thanks! I will try to integrate that, once i come to a conclusion about how i use the mesh compensation to my best advantage. Maybe i will have to find a way to level my bed?
You should absolutely level the bed as best you can - Mesh Bed Compensation is no substitute for Bed Leveling.
What about you current bed prevents it from being leveled?
Frederick
-
@suntoxx said in Mesh Compensation Overcompensating a bit?:
Since I started 3d printing a couple months ago, when doing fine adjustments to prints, I kept having the impression that even the coordinates that are actually measured, are not used as absolute values.
I don't understand what you mean.
Can you elaborate a bit?
Frederick
-
@fcwilt said in Mesh Compensation Overcompensating a bit?:
What about you current bed prevents it from being leveled?
Taking it apart and readjusting it every once in a while. Or is there a more permanent solution than the Nylock mod.
@fcwilt said in Mesh Compensation Overcompensating a bit?:
Can you elaborate a bit?
If the probed coordinates would be used as absolute values at those exact coordinates, they should be perfect in regard to z offset, getting more imperfect (on average) the further away from the probed point. The squished keychain i think proves this right.
Is there a way to set a "per stl" z offset? The keychains itself seem fairly uniform.
@stephen6309 said in Mesh Compensation Overcompensating a bit?:
@suntoxx Have you a low mesh compenstaion taper?
https://docs.duet3d.com/User_manual/Reference/Gcodes#m376-set-bed-compensation-taperNever heard of it, going to look at it, thanks.
Edit: If i understand it correctly, I would need the opposite of this command. For depths instead of height.
-
@suntoxx said in Mesh Compensation Overcompensating a bit?:
Taking it apart and readjusting it every once in a while. Or is there a more permanent solution than the Nylock mod.
Aside from my one printer with three Z steppers allowing for Auto Bed Leveling my other printers have 3 or 4 "thumbscrews" that can easily be adjusted use the Manual Bed Leveling Assistant the is built into the firmware
If the probed coordinates would be used as absolute values at those exact coordinates, they should be perfect in regard to z offset, getting more imperfect (on average) the further away from the probed point. The squished keychain i think proves this right.
Which is why I use that max number of probe points to restrict the amount of interpolation the firmware needs to do to determine the Z adjustment between probe points.
What is your bed made out of? Perhaps you could replace it with something flatter.
Frederick
-
@fcwilt it seems to be the standard Prusa mk3s heatbed.
-
@suntoxx said in Mesh Compensation Overcompensating a bit?:
@fcwilt it seems to be the standard Prusa mk3s heatbed.
I know nothing about that printer - I will see what I can find out. Some companies make upgraded parts for popular printers.
Frederick
-
@fcwilt it must be this one https://www.prusa3d.com/product/magnetic-heatbed-mk52-24v-assembly/