Tue Aug 06, 2019 6:09 pm

It's my strong opinion that the number of variables in play should be minimized as much as possible. Figure out the esteps number that results in as close to exactly as long a piece of filament is extruded as it is told to do, first and foremost. If you command it to extrude 100mm and it actually extrudes 105mm because you've fiddled with your esteps then of course you're going to have to tweak other figures to get the volume of plastic extruded to be correct.

1) Manually extrude some length of plastic. I don't just extrude 100mm, I'll extrude 300 or 400, and measure it as exactly as you can. Do the math to find the correction for the esteps that makes it so that as closely as you can measure, the extruder is extruding exactly as much filament as its told to.

2) Measure the actual filament diameter. I don't often use really crap filament that varies wildly, but I'll go ahead and measure the filament diameter of a new spool, and if I suspect it might be variable I might double-check that later, and then enter that value into S3D for the actual filament diameter.

Once those two values are set up properly then at the very least you should be getting exactly the volume of filament extruded that the slicer calculates is necessary to print the line width and height that you've set up. There are still going to be some variables, however. One is the Z axis, since you may be attempting to use a layer thickness that lies in between values that the stepper motor(s) on your Z axis can actually generate. This means your controller board may be rounding individual layer heights up or down to that next available step, resulting in periodic layer-thickness artifacts when due to the math a given layer has to be rounded the opposite direction from those around it. So if you are able to figure out what's the native Z-axis resolution of your steppers and the way your Z axis is moved then make sure your layer heights are even multiples of this, so each layer's height is always generated exactly by a step your stepper motor is capable of making. For instance, with my custom D-Bot printer, the native base layer height was .04mm, so as long as I always used integer multiples of .04mm (.16mm, .20mm, .24mm, etc.) each layer's height was always set exactly in the stepper, not a result of rounding up or down. I've since modified my Z-axis mechanism from direct-drive with two steppers, one on each leadscrew, to a 3-leadscrew setup that is belt driven by a single stepper, with a 4:1 gear reduction. Now my native layer height is .01mm, and I'm free to use any layer thickness I want set to some integer multiple of .01mm, ie: as long as I don't try to go sub-hundredth of a milimeter in layer height I'm fine.

There are also volumetric calculations at play here. You're squishing plastic out of a certain diameter hole, and attempting to get an exact height and width of laid-down plastic. If you're using a .4mm nozzle and trying to lay down a .2mm layer height, this means that each layer is only half as high as the nozzle is wide, and it's forcing molten plastic out of this hole onto the layer or surface below it. The slicer can calculate the volume of plastic that will thus squish out as basically the height times the width with minor difference being the rounded edges. How round are the edges? For a .1mm layer height and a .4mm nozzle those layer edges will look very different than if you try to print a .4mm high layer with a .4mm wide nozzle. That's going to change the shape of the patch of plastic laid down, which changes the volume of plastic laid down, which changes the final dimensions of the printed object. That's what the "fudge factors" are really for. If these little dimensional differences make a big enough impact on your prints then you've got something you can twiddle to nudge things to be how you want them to be.

But certainly start by getting esteps set to as close to exactly what it needs to be set to so that as close to exactly what length of filament is extruded as it's commanded to extrude. That eliminates that as a variable. Then measure your actual filament diameter, which relates to the cross-sectional area of the filament, which with extrusion rate relates to the volume/time of plastic that is extruded. Once diameter is set accurately, then only the extrusion multiplier is left as a variable. Ideally this would be 1.0 if the slicer were able to do a perfect job of calculating every single factor that impacts what shape and dimensions your lines are printed, but since it's unable to be perfect, you can nudge it around a little if you really want to.