Note. This post is about extruder micro-stepping when using a mixing hot end. None of the findings would be applicable to non-mixing, single filament input hot ends.
Some time ago I posted my thoughts on why I believed that 16x micro-stepping was not a good setting to use with a mixing hot end. The reasoning goes like this:
When the segment length of a part being printed is small, the amount of filament to be extruded is correspondingly small. This in itself would not normally be a problem, but when we then use mixing ratios which result in the extrusion required for one or more of the filaments being single digit percentages of the whole, then the size of the micro-stepping becomes significant. Or more specifically, because we can’t have a fraction of a micro-step, then the result of rounding micro-steps up or down can lead to significant under or over extrusion on a per move basis. The more course the micro stepping, the greater this error.
To illustrate the point at that time I used spread sheet to give expected extrusion amounts based on the somewhat arbitrary “fact” that with my default layer height and nozzle width, the extrusion amount in mm was about 5% of the axes movement amounts. I also took a 0.5mm segment size as being not an unreasonable amount to see in a gcode file.
That post lead to some discussion and this topic has popped up again from time to time on various forums. People have put forward various hypotheses which suggest that in “real world” printing, it might not matter or that any difference might not be noticeable. One thing that I’ve often wondered is whether a single (say) 256x micro-step would actually translate to any physical movement of the filament. No matter who I have asked or how knowledgeable that person might be, the answer has always started with “Well it depends….”.
I had my own doubts too because taking some worse case theoretical examples, it was possible that the extrusion error should have a noticeable detrimental affect on print quality, not just on colour mixing but I have never noticed that effect.
So I decide it was time to do some “real world” testing.
The first thing was to design a test piece that would generate very small segment sizes when sliced. Because of the “stripey” toothpaste effect that all current “mixing” hot ends suffer from, it was important that this test piece had some means of identifying it’s orientation in order to make side by side comparisons valid. After some experimentation I ended up with a simple cylinder 50mm diameter with a smaller cylinder centred at 50mm from the front edge. In OpenScad I set $fn to 600 to force small segment sizes. A 50mm diameter circle has a circumference of about 150mm so 600 facets should mean that each one was about a quarter of a mm long. Although, I have discovered in the past that “Slic3R seems to “do it’s own thing” when it comes to determine segment sizes regardless of what might be in the .stl file.
I sliced this with 3 perimeters and bottom layers but no infill or top layers. Here is an extract from that gcode file:
G1 X195.274 Y191.586 E0.07059
G1 X195.038 Y192.657 E0.06811
G1 X194.709 Y193.860 E0.07747
G1 X194.404 Y194.798 E0.06132
G1 X193.964 Y195.963 E0.07737
G1 X193.464 Y197.100 E0.07716
G1 X192.905 Y198.213 E0.07737
G1 X192.420 Y199.073 E0.06131
G1 X191.759 Y200.128 E0.07737
G1 X191.044 Y201.144 E0.07716
G1 X190.276 Y202.124 E0.07737
G1 X189.631 Y202.871 E0.06132
G1 X188.774 Y203.774 E0.07736
G1 X187.871 Y204.631 E0.07736
G1 X187.124 Y205.276 E0.06132
G1 X186.144 Y206.044 E0.07737
G1 X185.128 Y206.759 E0.07716
G1 X184.073 Y207.420 E0.07737
G1 X183.213 Y207.905 E0.06131
G1 X182.100 Y208.464 E0.07737
G1 X180.963 Y208.964 E0.07716
G1 X179.798 Y209.404 E0.07737
G1 X178.860 Y209.709 E0.06132
In theory the segments should all be the same size but as you can see from the “E” amounts, there is some variation. But on average, most of those extrusion amounts are in the range 0.06 to 0.08 (roughly).
Then I plugged those values into my spread sheet to see what the errors would look like. The spread sheet does the calculations for a range of mixing ratios from 1 to 10% and for all micro-stepping from 16 x to 256 x. Here is an example of how it works.
Total extrusion amount = 0.08mm. Using a mixing ratio of 4% gives an extrusion amount of 0.0032mm for that filament. At 16X micro-stepping, the extruder has 415 steps per mm. So the number of steps required to move 0.0032mm is 1.328. Because we can’t have a fraction of a micro-step, this will get either rounded up or down. The best case would be that it is rounded down to 1 micro step. So one micro step would give 0.0024mm which is a difference of 0.00079mm. For a single extruder that is an error of -1% of the total amount to be extruded but for two extruders, each set to 4% mixing, that error would equate to -2% of the total. But if we do the same maths for 32x micro stepping, the required number of micro steps would be 2.656 which gets round up to 3 and the resultant error switches from 1% negative to 1% positive. In some situations the error can be greater at a higher micro-stepping than at a lower one, just depending on how the rounding happens to work out for the amount of extrusion required. Although in general terms, the higher the micro-stepping, the lower the error.
Of course, that error calculation is for the total amount of filament to be extruded, 96% of which is coming from the “main” filament. On an individual filament basis, the “main” filament has many more micro-steps so any rounding error for that would be insignificant. But for the filament supplying 4% of the total, the difference between 1.3 micro-steps and 1 whole (rounded down) micro-step is in the region of 25%.
I had to pick one mixing ratio and in the end decided that 2% seemed to give errors that switched between positive and negative for all micro-stepping up to 128 X. The theoretical total extrusion errors were +3% @16X, -1% @ 32X, +1% @ 64X, and 0% (rounded) at 128X and above.
For the choice of colours that would show up best, I selected White as the primary colour used in one input, with Red as the secondary colour which was used in the other two inputs (this was with a Diamond 3 colour mixing hot end). The reason being that from experience, the tiniest amount of Red with White will show up as a shade of Pink.
I set the tool mixing ratio to 0.96:0.02:0.02 which would use 96% White and 2% Red in each of the other two inputs. Then I set the micro-stepping to 16 X and printed the first part. I then changed the micro-stepping to 32 X and printed the same part again. This was repeated for 64 X and 128 X and 256 X micro-stepping. Finally, I went back to 16 X and printed the part again to re-establish the base line and check that any differences were real and not the effect of something else drifting. All the prints were done consecutively, on the same day, with the minimum amount of time between them.
These next 4 pictures are the same part rotated 90 degrees. The smaller cylinder was located at the front of the build plate and is inline with the White filament input, so there is a White bias when viewed from that angle. The other two Red inputs are rotated 120 and 240 degrees from the White.
Here are all the test parts lined up side by side
Here are close ups of the individual test parts.
I hope those picture show up well. I took all the photos within a few minutes so the ambient light level didn’t change significantly. Although “hand held” I tried to keep the camera at the same distance and used a white background, then cropped the images using “PaintNet” and resized them to 500 pixels so that they will load quickly. No other corrections or alterations were applied.
I have the advantage of having the physical objects in front of me so I can see more detail. What is obvious is that there are distinct bands of coloured “streaks” on the 16x micro-stepping prints which get progressively less pronounced as micro-stepping is increased up to 128x.
Here is the 16x print next to the 128x print.
What I’m talking about is the thin stripes that exist all the way up the 16x printed part but which do not exist on the 128x printed part. In both examples, there is a wide band of pink near the bottom, followed by a band of much lighter colour, then a wider band of pink. After that, as height increases, the 16x micro-stepping part has seeming random thin bands of darker colour, which the higher micro-stepping parts do not have. If you look back at the individual pictures, you’ll now notice the difference.
The next picture shows the first 16x printed part next to the second 16x part which was printed last of all.
The random stripes of darker colour are present on both parts.
The two 16x micro stepping prints, one at the start and one at the end, both exhibit the same random thin bands of colour. This gives a high degree of confidence that any differences in the parts printed in between these two, were due to the effect of micro-stepping and not some other factor.
But, those bands do not exactly line up and the pattern is not an exact repeat from one print to the other. This is puzzling because if the bands were caused by a series of small segments, all of which happened to be rounded up, then they should be exactly the same in both prints. Clearly there is also some other mechanism at work which can change the pattern of those bands. Perhaps it’s pressure changes – either on an individual filament or the mixing chamber as whole. Perhaps deflection of the Bowden tubes is not always constant. Perhaps it’s just a function of how the filaments are combined rather than truly mixed. Perhaps motor or driver temperature is playing role. Who knows – we can only speculate.
I cannot detect any difference in the overall extrusion amount, neither visually with the aid of a magnifying glass, nor by feel using a finger tip. The surface textures looks and feel identical between all the parts.
There is a definite improvement at higher micro-stepping because those seemingly random, thin lines get progressively less prevalent as micro-stepping is increased.
There was no noticeable improvement nor any discernible difference between 128x micro-stepping and 256x. However, at 256 x micro-stepping there was a high “hiccup” count which increased every time there was a retraction. Clearly the reason for this is that the retraction speed is much higher than the “normal” extrusion speed and so at 256x micro-stepping the step pulse frequency limit is being exceeded. One way to alleviate that would be to use a slower retraction speed but that may have been detrimental. One possibility would be to use a post process script to change the extruder micro-stepping to a low value before the retraction and restore it after the subsequent un-retract move. But as there was no discernable advantage to using 256x, then the simplest thing is just to limit the micro-stepping to 128x.
With the usual caveats about my particular machine and my particular settings such as layer heights and nozzle widths, there is a clear and discernible improvement with using 128x micro-stepping instead of 16x for my (mixing) extruders and I will continue to do so.
My advice to other readers with mixing hots ends would be “try it and see”.