slic3r / Slic3r

Open Source toolpath generator for 3D printers
https://slic3r.org/
GNU Affero General Public License v3.0
3.35k stars 1.29k forks source link

[feature request] better volume logic #2260

Open curiouspl2 opened 10 years ago

curiouspl2 commented 10 years ago

Hello. after printing, measuring, tweaking... i do have following thoughts : -esteps value should be included in 'filament' profile - each filament produces slightly different esteps due to variations in diameter and hardness. thus esteps should be included in filament profile.

-die swell value for each filament profile.

die swell affects both input and output. die swell is volumetric.

i've found that instead of printing thin walled box and measuring wall extrusion diameter, new 'gap fill' feature comes to help and requies no external measuring tools. just design object which will consist of tree perimeters, two external and one internal (gap fill)

then observe how it prints and adjust flow rate. internal perimeter (gap fill) should be contained ideally inbetween two external perimeters, without any under or overflow. then ofcourse you can additionally measure total width of part.

i do know just few methods of measuring swell, - measuring extrudate diameter while extruding using known diameter nozzle, to measuring volumetric amount of ooze . swelling changes with temperature aswell, which even more adds to complexity of the problem.

while there is already 'extrusion multiplier' setting which in theory should serve as 'error' register, introducing extra parameters allows user to add more determinism to the process - moving empirically measurable factors into their appropriate placeholders and leaving 'general error' constant with as less value as possible , thus helping nail additional error sources in future.

nophead commented 10 years ago

I would agree about E steps but die swell does not affect volume. When extruded into mid air the filament comes out bigger than the nozzle diameter but it also comes out shorter and volume is conserved. When being laid down on the object it gets stretched to the length the slicer requires and so its cross section area is dictated by the volume extruded and the volume in equals the volume out.

Die swell does affect how much the plastic is stretched, so it does affect the range of layer heights you can use, bridging, etc, but it doesn't affect the volume.

On 7 September 2014 12:43, curiouspl2 notifications@github.com wrote:

Hello. after printing, measuring, tweaking... i do have following thoughts : -esteps value should be included in 'filament' profile - each filament produces slightly different esteps due to variations in diameter and hardness. thus esteps should be included in filament profile.

-die swell value for each filament profile.

die swell affects both input and output. die swell is volumetric.

i've found that instead of printing thin walled box and measuring wall extrusion diameter, new 'gap fill' feature comes to help and requies no external measuring tools. just design object which will consist of tree perimeters, two external and one internal (gap fill)

then observe how it prints and adjust flow rate. internal perimeter (gap fill) should be contained ideally inbetween two external perimeters, without any under or overflow. then ofcourse you can additionally measure total width of part.

i do know just few methods of measuring swell, - measuring extrudate diameter while extruding using known diameter nozzle, to measuring volumetric amount of ooze . swelling changes with temperature aswell, which even more adds to complexity of the problem.

while there is already 'extrusion multiplier' setting which in theory should serve as 'error' register, introducing extra parameters allows user to add more determinism to the process - moving empirically measurable factors into their appropriate placeholders and leaving 'general error' constant with as less value as possible , thus helping nail additional error sources in future.

Reply to this email directly or view it on GitHub https://github.com/alexrj/Slic3r/issues/2260.

starno commented 10 years ago

@curiouspl2 I agree with your points, and my personal preference is to consolidate all the error into the Extrusion Multiplier which is already tied to the filament settings. IMHO Esteps should be a fixed value, the mathematical value based on the outer tooth diameter of the drive gear. The reason for this is two fold:

1) Adjusting firmware should be an advanced user setting only, and is intimidating if you dont understand how it's working (same with EEPROM)

2) The Extrusion Multiplier will now be less arbitrary and become's predictable based on material properties. The value will never exceed 1.0 because in reality the drive gear teeth penetrate the filament and the effective diameter changes. The harder a material is, the closer that value will be to 1, and vice versa for softer materials.

I think calibrating esteps for a single material, measuring 100mm input, etc. is all pretty silly. Like you mentioned, there are easier ways to achieve the same end results. The only distinct advantage I see with the adjusting esteps method is that there are implemented G/Mcodes for it so that you can adjust in real time. I just prefer to keep all the adjustments within the slicer, which it sounds like you are also trying to do.

curiouspl2 commented 10 years ago

well, i disagree. Reason i don't see esteps being 'carved in stone' (or rather firmware) is that it is not extrusion multiplier , it is how much volume is being actually drawed into extruder after issuing [x] esteps.

extrusion multiplier multiplies mm*multiplier. mm is float and multiplier is float. esteps are float aswell. note lost precission here - if one sets esteps right on , extrusion multiplier can help tweaking volume increase variations (i.e. due to thermal expansion or other effects) while still feeding perfectly exact amount of filament. note that this also allows further expansion of extrusion multiplier in future, taking into account i.e. temperature creep rate going upwards filament or effects occuring during retraction which can in turn be incorporated to smooth out blobs and excess volume on imput during such transient moments of prints.

so to put it short, esteps actually should be calibrated with specific material into extruder, as there also cannot be any 'magic formula' making them predictable. filament can be thicker or thinner, softer or harder, hobbed bolt is hand-manufactured and it's exact diameter is never precisely known, not to mention depth of the grooves. so esteps is more empirical value , which actually can be calibrated very precisely down to 0.01 decimal point.

ofcourse there can be case when esteps are calibrated by printer itself during runtime (i.e. by using optical mouse measuring how much filament had passed into extruder in reality) , then the '0' value should instruct slic3r to not emit any M/G codes to set the Esteps rate. it's up to user. 100% printers on the market have no auto-tune feature currently.

ad the die swell - i agree with nophead, checked this empirically trying to extrude thinner and thinner lines. volume is indeed preserved. this then calls for even more compilcated volume and extrusion strategy, as initial die swell causes filament to adhere differently - istead of bonding down to previous layer like we would expect, it rather swells on the sides and bonds to things we don't want to - especially when we then try to stretch it afterwards and it quite does not stretch the way we would expect. this is especially apparent when trying to extrude very thin lines, like 0.3 or 0.35 extrusion width with 0.4 nozzle , at 0.24 layer heights. result is poor bonding of layers, and layers being thicker than we would expect (so also wrong dimensions, smaller holes , etc). this might be also reason why features like sharp corners do not print nicely - they actually need to be stretched. i have no idea how to incorporate die swell to our advantage yet unfortunatelly. perhaps somehow we should avoid stretching , at least on critical features?

whosawhatsis commented 10 years ago

Esteps does not control volume, which changes with diameter, it controls the length of filament going into the extruder, which does not change with diameter and is theoretically constant. There are situations where the filament will move less than this theoretical amount (due to filament compressing between the teeth or slipping during the transition from one tooth to the next while under pressure, as this picture from an ultimaker shows: http://www.extrudable.me/wp-content/uploads/2013/03/TeethMarks.jpg), but that's what the filament multiplier is there to compensate for.

nophead commented 10 years ago

The length versus E steps is not theoretically constant. It depends on how far the teeth dig into the plastic, which depends on idler pressure and how hard the plastic is.

It is easy to measure and calibrate though and so is the filament diameter, therefore there is no need for a multiplier to get the volume correct, just a diameter and E step value for each extruder and plastic combination. A multiplier would need to be computed from measurements, rather than simply measured.

starno commented 10 years ago

My point is that both Extrusion Multiplier and Esteps are involved in the exact same volume calculations. If you try to use both, it's only going to get messy.

If you prefer to measure incoming filament by hand and flash new firmware/eeprom for every material, then only adjust Esteps and keep EM fixed at 1.

If you prefer to keep all adjustments saved within the slicer, then set Esteps by using the outside diameter of the teeth on the drive gear, and adjust Extrusion Multiplier to compensate for the tooth depth of each material. (It will always be less than 1.0)

alranel commented 10 years ago

Hello everybody. Extrusion Multiplier and E steps are proportional:

steps = calculated_filament_length * Esteps * extrusion_multiplier

This means that any adjustment can be done in a linear fashion either in the former value or the latter. Loss of precision due to an additional multiplication might apply, but unless proven differently I think the error is quite smaller than our tolerance.

Whether having a built-in E steps option boils down to one thing: usability. I understand calibrating E steps might seem to be easier than calibrating extrusion multiplier, but note that M221 can be used in the calibration process instead of M92. M221 accepts an extrusion multiplier expressed in percent. On the other hand, I think exposing E steps might confuse a lot of those non-advanced users which have no idea about E steps because their vendor provided a configured printer.

So, if the goal is usability for a small subset of advanced users I think we could solve this by adding per-filament (and per-print) custom placeholders, so that in Start G-code one can use M92 E[esteps] with their own custom value.

curiouspl2 commented 10 years ago

'configured' printer might confuse newbies even more and make them waste lot of time in calibrating instead of simply using esteps method. per-filament esteps setting via M92 is volatile, yet it underlines the need of proper calibration to avoid mess elsewhere, so i think it's good idea for everyone except of small subset of people who believe they can calibrate better with extrusion multiplier ;)

ad lost precission in extrusion multiplier - actually it should be below tolerance IF users did treat extrusion multiplier as float. they change in one-per-cent steps instead. in example of 52:4 geared extruder , having esteps value of 1810, 1% change means 18.1 esteps. 'classic' geared wade gets about 600 esteps, - for such setup 1% means 6 esteps. with esteps calibration method one can easily calibrate down to 1 estep, which seems to be 6 to 18 times more precise :) from my printing practice - 1% is enough to make solid infill look bad (overfill), 2% is enough for solid infill to actually overfill and cause print to fail, (or if it's 2% less - it's enough for solid fill to have visible gaps), also it's enough for gap fill to have visible blobs and overfilling or having visible gaps if it's 2% less. 5% is enough to make bridges and other fills not anchor to perimeters anymore. 10% is needed to make perimeters unprintable. so below 1% tweaking is certainly usefull for at least aesthetical purposes (required to make top infill look nice) but 1% is enough to make print work at all.

per-filament setting also underlines esteps are not 'carved in stone' and switch of filament changes esteps.

lordofhyphens commented 8 years ago

What about #3309 instead?