[reprap-dev] accelerating while extruding print quality - fixed

Matthew Roberts reprap at mattroberts.org
Wed May 18 13:31:39 PDT 2011

I have tried my ‘advance’ idea (see below for those that missed it) - the short report is: it works!
So I now have a firmware without a ‘steps_to_prime’ and associated feedrate magic numbers, but with an ‘extruder_k’ magic number instead – for what it is worth, my magic number is 0.02 (although I think that is a little high).
All taken with a low light source to make the texture obvious
The object is the y-motor-bracket from a mendel.
The first layer is printed at 1000mm/min, the second at 2000mm/min, and the third (partial) layer at 4000mm/min.
Here is an aborted print, with acceleration, no ‘advance’ and extruder priming:
And here is the same (aborted) print with acceleration, ‘advance’ and no extruder priming(*):
(the obvious warping of the part was caused by me using a paint scraper to remove it from my heated bed – it was only a test after all.  Also some of the first layer didn’t stick that well as I started to print with the bed at only 80*C)
tuning extruder_k seems to be quite easy:
(assuming that the perimeter is printed anticlockwise)
if you set it to zero then you get lumps on the left hand side of the corners
if you set the value to high, then you get lumps on the right hand side of the corners (I have a third print that makes this behaviour clear)
so you can easily find a goldilocks value that gives corners that are correct.
* – well... the extruder does prime, but only as a result of the ‘advance’.
Previously, I said.... 
I have been playing with a simple mathematical model of the problem - and I 
think a first order approximation is easy.

Basically I can model the model the extruder as a spring followed by a flow 
of (incompressible) fluid through a nozzle (as Leo suggested).
Hooke's law models the spring as: f = constant * displacement
Bernoulli's principle models the fluid as: v^2/2 + g.h + pressure / density 
= constant

So... If we ignore the flow itself (i.e. the output of the E axis from the 
line drawing algorithm); we can calculate a concept that I'll call 
Basically we always have the E axis a number of steps ahead of the line 
drawing algorithm output.  'advance' can be calculated from the extrusion 

advance (in steps) = steps_per_cubic_mm * extruder_k * cubic_mm_per_second^2

steps_per_cubic_mm is a concept we all have in our firmware's anyway 
(assuming we know cross sectional area, which our slicers know).
cubic_mm_per_second is easy to calculate on the fly.
extruder_k is a new constant that'll change with extruder designs. (working 
backwards from my auto-priming numbers: I think that extruder_k has a value 
around 0.1 for my extruder)


missing steps...
force from Hooke's law (or pressure in Bernoulli's principle) is 
proportional to 'advance'
flow rate through a nozzle squared is proportional to pressure (Bernoulli's 
principle) - only true when firing the nozzle into 0 pressure, but that's 
probably true enough.

interestingly, the effect of moving from incompressible fluids to 
compressible fluids usually has a linear effect on flow rate squared: 


sanity check:

when stationary 'advance' is 0 steps.
when moving at a constant rate 'advance' is, constant at, say, 0.75 mm3 
worth of steps.
so drawing a single line at a constant rate means that the E axis gets 
primed and un-primed automatically.
so it looks like the mathematics is sane for the simple case - which is 


So now, I just need to code it, try it and report back.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://reprap.org/pipermail/reprap-dev/attachments/20110518/b975ab71/attachment.html>

More information about the reprap-dev mailing list