Welcome! Log In Create A New Profile

Advanced

Extrusion based bed level compensation

Posted by LoboCNC 
Extrusion based bed level compensation
June 20, 2017 03:48PM
From what I understand of automatic bed leveling, the out-of-levelness is compensated for by converting the simple X-Y motions for each layer into X-Y-Z motions. However, it seems like constantly moving the Z axis up and down will invite all sorts of surface irregularities, especially if the Z axis has even the slighted hint of backlash.

Given that most out-of-levelness is only on the order of 0.1 - 0.2mm, it seems like a better solution would be to print the first layer with a constant Z value but vary the rate of extrusion to essentially build up a level surface. Thus some parts of the first layer might be 0.1mm while others are, say 0.3mm. All subsequent layers would then be printed as usual without any leveling compensation needed.

Has anyone tried this?
Re: Extrusion based bed level compensation
June 20, 2017 06:13PM
That's an interesting idea. I can see two possible issues:

1. It will only work if the amount by which the bed is out-of-level is smaller than the first layer height. For example if you print using a 0.4mm nozzle, then you are limited to nozzle-to-bed height in the range approx. 0.05 to 0.35mm. So you would probably use a 0.2mm first layer height, then it could handle variations of +/-0.15mm in the bed height.

2. For it to work well, I think you would need to vary the extrusion rate linearly over the length of as move, or else divide the move into small segments.

Edited 1 time(s). Last edit at 06/21/2017 04:23AM by dc42.



Large delta printer [miscsolutions.wordpress.com], E3D tool changer, Robotdigg SCARA printer, Crane Quad and Ormerod

Disclosure: I design Duet electronics and work on RepRapFirmware, [duet3d.com].
Re: Extrusion based bed level compensation
June 20, 2017 06:31PM
Quote
dc42
That's an interesting idea. I can see two possible issues:

1. It will only work if the amount by which the bed is out-of-level is smaller than the first layer height. For example if you print using a 0.4mm nozzle, then you are limited to nozzle-to-bed height in the ranger approx. 0.05 to 0.35mm. So you would probably use a 0.2mm first layer height, then it could handle variations of +/-0.15mm in the bed height.

2. For it to work well, I think you would need to vary the extrusion rate linearly over the length of as move, or else divide the move into small segments.

Good points. One other concern is that thicker lines might not adhere quite as well because there is less pressure required to flatten out the line. It may be that for thicker lines, you want to slow down the print speed to improve adhesion. In fact, maybe instead of increasing the flow rate for thick lines, you simply slow down the XY speed to achieve the net increase in thickness.

Edited 1 time(s). Last edit at 06/20/2017 06:31PM by LoboCNC.
Re: Extrusion based bed level compensation
June 20, 2017 07:30PM
Quote

Given that most out-of-levelness is only on the order of 0.1 - 0.2mm, it seems like a better solution would be to print the first layer with a constant Z value but vary the rate of extrusion to essentially build up a level surface. Thus some parts of the first layer might be 0.1mm while others are, say 0.3mm. All subsequent layers would then be printed as usual without any leveling compensation needed.

Has anyone tried this?

Kindof, manually. When my Delta wasn't well-leveled, I'd interactively adjust the flow rate on the first layer or two... if the extruder was skipping and/or the printed trace was a bit transparent, I'd turn the rate down. If the extruder wasn't skipping and/or the printed trace was a bit narrow, I'd turn it up. Once the first layer or two was done, it would be fine.

Presumably your plan is to somehow map the irregularities in the print bed beforehand, so that your printer knows where to print at 0.3mm and where to print at 0.1mm. That is probably more of a challenge than printing the first layer at varying thickness. I'm thinking that some kind of pressure sensor (e.g. a load cell, or something similar to the piezo bed-probes) could be used to measure the back-pressure on the filament and therefore the height of the nozzle above the bed. Essentially, extrusion rate would be a PID-tuned thing to maintain some constant backpressure.

Another thought I had was to replace the nozzle with some kind of grinder/mill/sander. Then just run multiple passes of the head over the whole print bed, gradually lower and lower, until the whole bed is completely flat. Assuming that the bed doesn't change shape over time due to temperature variations or whatever, it would then be perfectly "tuned" to whatever the printer mechanism believed was flat.
Re: Extrusion based bed level compensation
June 20, 2017 07:59PM
One other thought I had regarding the initial level mapping is to first lay down a single thick perimeter line and then use a camera to measure the resulting line width, which would be inversely proportional to the bed height. Although when I print gold translucent filament on Kapton tape, the first layer lines are nearly invisible. If you only need to level periodically, though, a high contrast filament printed in a grid and then imaged would probably work pretty well.
Re: Extrusion based bed level compensation
June 20, 2017 08:36PM
Quote
LoboCNC
One other thought I had regarding the initial level mapping is to first lay down a single thick perimeter line and then use a camera to measure the resulting line width, which would be inversely proportional to the bed height. Although when I print gold translucent filament on Kapton tape, the first layer lines are nearly invisible. If you only need to level periodically, though, a high contrast filament printed in a grid and then imaged would probably work pretty well.

Or, extending that idea, print a grid. Cameras are potentially difficult though... you need to do some photogrammetry to correct for the lens focal length and position and angle of the camera relative to the bed, and lighting/reflections. On another track (pun intended), a spiral or Hilbert curve would allow you to use a line-following algorithm and a simple downward-facing camera alongside/instead of the the nozzle.

Which leads me to another thought... what about an IR camera (maybe just an IR photo-diode?) to measure heating of the bed by the nozzle, without filament? A large, faint heat spot would mean the nozzle was high above the bed. A small, intense spot would mean it was low. I'm thinking to move the nozzle to (say) 1mm above the nominal bed plane, then measure how long it takes trigger the photo-diode.
Re: Extrusion based bed level compensation
June 21, 2017 12:58AM
Quote
LoboCNC
From what I understand of automatic bed leveling, the out-of-levelness is compensated for by converting the simple X-Y motions for each layer into X-Y-Z motions. However, it seems like constantly moving the Z axis up and down will invite all sorts of surface irregularities, especially if the Z axis has even the slighted hint of backlash.

Given that most out-of-levelness is only on the order of 0.1 - 0.2mm, it seems like a better solution would be to print the first layer with a constant Z value but vary the rate of extrusion to essentially build up a level surface. Thus some parts of the first layer might be 0.1mm while others are, say 0.3mm. All subsequent layers would then be printed as usual without any leveling compensation needed.

Has anyone tried this?

Wasn't that the purpose of the "Raft" option?

You lay down a raft of plastic to give a level base then print on the raft.
Re: Extrusion based bed level compensation
June 21, 2017 02:00AM
Quote
GRAYWOLF
Quote
LoboCNC
From what I understand of automatic bed leveling, the out-of-levelness is compensated for by converting the simple X-Y motions for each layer into X-Y-Z motions. However, it seems like constantly moving the Z axis up and down will invite all sorts of surface irregularities, especially if the Z axis has even the slighted hint of backlash.

Given that most out-of-levelness is only on the order of 0.1 - 0.2mm, it seems like a better solution would be to print the first layer with a constant Z value but vary the rate of extrusion to essentially build up a level surface. Thus some parts of the first layer might be 0.1mm while others are, say 0.3mm. All subsequent layers would then be printed as usual without any leveling compensation needed.

Has anyone tried this?

Wasn't that the purpose of the "Raft" option?

You lay down a raft of plastic to give a level base then print on the raft.

Yes, the bottom layer would act a little like a raft, but without having to print and then remove the raft. And it would give you a nice bottom surface for those prints where the the bottom is the display surface.
Re: Extrusion based bed level compensation
June 21, 2017 01:02PM
I'm going to come at a tangent to this discussion - my idea was use a piezo probe or other genuinely accurate probe and get a good height map, then have a glass square section at the side of the bed (or part of the bed anyway), you print a few lines onto it and an optical scanner/camera reads the thickness of the line, then adjusts the extrusion rate, printing a check line afterwards. If the nozzle is a known width and the nozzle to bed gap a known distance, then this allows extruder auto calibration.

Edited 1 time(s). Last edit at 06/21/2017 01:06PM by DjDemonD.


Simon Khoury

Co-founder of [www.precisionpiezo.co.uk] Accurate, repeatable, versatile Z-Probes
Published:Inventions
Re: Extrusion based bed level compensation
June 21, 2017 03:55PM
So work it the same way as aligning your printer head works on an inkjet printer, especially one with a scanner.

Would be very useful to have, but would the cost be worth it?


Lykle
________________________________________________

Co-creator of the Zesty Nimble, worlds lightest Direct Drive extruder.
[zesty.tech]
Re: Extrusion based bed level compensation
June 21, 2017 04:05PM
I don't know, but auto-extruder calibration is I believe, a holy grail. Sure we all know how to do it and its not that hard, but it varies with the filament. So for consumer-type machines the options so far have been enclosed cartridge filament of known diameter/tolerance possibly with this info encoded onto a chip and therefore expensive and lacking versatility or a filament diameter sensor, which still needs a starting point and the extrusion rate to be trimmed to achieve perfect extrusion or some type of pressure sensor in the nozzle, of which I have seen literally no working examples.


Simon Khoury

Co-founder of [www.precisionpiezo.co.uk] Accurate, repeatable, versatile Z-Probes
Published:Inventions
Re: Extrusion based bed level compensation
June 22, 2017 08:22PM
Isn't the first layer always printed at a fixed Z height when you don't map the bed? If you print with a layer height that varies but keeps a fixed distance from the bed, you're just moving the errors to the next layer.
Re: Extrusion based bed level compensation
June 22, 2017 09:42PM
Quote
etfrench
Isn't the first layer always printed at a fixed Z height when you don't map the bed? If you print with a layer height that varies but keeps a fixed distance from the bed, you're just moving the errors to the next layer.

I think the idea is that the first layer would be printed at a fixed Z height so that the top of it would be flat (or, at least, flatter than the bed) but the extrusion rate would be varied to vary the thickness of the layer, so that the bottom adheres all across the bed.
Re: Extrusion based bed level compensation
June 23, 2017 12:03PM
I thought that was already a case as extruded plastic is round and gets flattened between nozzle and bed. It's gets flatter when bed gets closer and rounder when bed 'moves' away from it. I suppose one could increase decrease extrusion (not sure if non geared extrudes have the resolution though) to maintain even width however since bed leveling is an approximation you cannot get rid of the width variation completely.
Re: Extrusion based bed level compensation
June 23, 2017 04:15PM
This is actually a pretty neat idea, but its very hard to actually implement because it crosses the machine/slicer boundary.

The slicer doesn't have enough information to do this unless you probe the bed and send that that heightmap back to the slicer (and then reslice and export g-code).

The 3d printer board really does not want to do this because its would require duplicating a huge amount of slicer logic, but also would be a major violation of the "contract" between the slicer and the machine because the E axis will no longer be moving as commanded.


I've generally been of the opinion that building a flat bed to begin with is probably easier than doing a bunch of software calibration.
Re: Extrusion based bed level compensation
June 23, 2017 04:45PM
Quote
691175002
This is actually a pretty neat idea, but its very hard to actually implement because it crosses the machine/slicer boundary.

The slicer doesn't have enough information to do this unless you probe the bed and send that that heightmap back to the slicer (and then reslice and export g-code).

The 3d printer board really does not want to do this because its would require duplicating a huge amount of slicer logic, but also would be a major violation of the "contract" between the slicer and the machine because the E axis will no longer be moving as commanded.

I don't quite understand how this requires any slicer logic. Essentially, the extrusion motor needs to be controlled in velocity mode, where the velocity is proportional to the X-Y speed and to the cross sectional area of the line. It may require rejiggering of the low-level step generation code, but it's not fundamentally complicated.

Quote
691175002
I've generally been of the opinion that building a flat bed to begin with is probably easier than doing a bunch of software calibration.

For smaller beds, this is probably true. As you get to larger beds (300mm+), particularly ones that move up or down, keeping the surface flat within 0.05mm is a lot trickier.
Re: Extrusion based bed level compensation
June 23, 2017 04:49PM
But whilst this a novel approach to that problem and well worth trying, I can't help but think that using grid compensation with tapering (taper it off after 1mm if you want) essentially achieves the same thing.


Simon Khoury

Co-founder of [www.precisionpiezo.co.uk] Accurate, repeatable, versatile Z-Probes
Published:Inventions
Re: Extrusion based bed level compensation
June 24, 2017 10:39AM
Quote
DjDemonD
But whilst this a novel approach to that problem and well worth trying, I can't help but think that using grid compensation with tapering (taper it off after 1mm if you want) essentially achieves the same thing.
Agree
Re: Extrusion based bed level compensation
June 24, 2017 11:02AM
Quote
DjDemonD
But whilst this a novel approach to that problem and well worth trying, I can't help but think that using grid compensation with tapering (taper it off after 1mm if you want) essentially achieves the same thing.

The problem with a short taper is that the layer height will vary over the print. For example, support you print with a 0.2mm layer height, and you have errors recorded in the height map of up to +/- 0.1mm. If you taper over a height as short as 1mm then that's only 5 layers, so the height of each later will vary by up to 0.02mm. That's 10% of the layer height; so you will get up to 10% instantaneous under- or over-extrusion. Whereas if you taper over 10mm then the same +/-0.1mm results in only 1% under of over extrusion.

This problem could be avoided if the extrusion was made to vary with the instantaneous layer height. RepRapFirmware doesn't do that, and few other firmwares support compensation tapering at all. If the firmware did vary the extrusion in this way, then setting the taper to 1 layer height would amount to implementing LoboCNC's original proposal.

A possible halfway house is to keep the extrusion factor constant during a segment, but adjust it to conform to the average layer height for that segment. That should be easier to implement in firmware than tapering the extrusion factor to match the starting and ending layer heights. Combined with using short segments while doing bed compensation, this should be an adequate solution.



Large delta printer [miscsolutions.wordpress.com], E3D tool changer, Robotdigg SCARA printer, Crane Quad and Ormerod

Disclosure: I design Duet electronics and work on RepRapFirmware, [duet3d.com].
Sorry, only registered users may post in this forum.

Click here to login