Nozzle pressure control is an advanced 3D printing problem, but I had big problems with it printing the Parts for the Openbuild X-Axis mod. There is a realy easy workaround for this, but it seems nearly nobody knows about it, and the according feature of Slic3r is very bad documented. That’s way I hope this post may be helpful for others.
First, what I am talking about? Have a look at the following pictures:
As you can see there is a tiny, but long gap in the perimeters of the left side of the vertical wall, and another one on the right side of the field in the top of the picture. In the last picture, I have broken away the part of the wall so you can see it’s not only something happen in the top layers, it goes deep inside the part and limits it’s structural strength!
So what is happening here, and why on this part and only at particular places? On the first look you might think about under extrusion, but in this case the gaps would go all around the part.
The root cause is the speed differences I have in this part. I’m printing with honeycomb infill for strength. While my Slic3r setting for infill speed is at 60mm/s, that speed is never be reached in reality. This is due to the TAZ default setting of the jerk, which is 8mm/s. With honeycomb, the nozzle has to do a 60° turn every few mm, and this is enough that the jerk limits the speed down to 8mm/s for infill (yes, an angle of 60° means max speed = max jerk. Nice, isn’t it?)
On the other hand, the perimeters are printed at 45mm/s except the outer one which will be printed at 22mm/s for a nice surface finish. So we have 8mm/s vs. 45mm/s. And here comes the problem: Inside the nozzle, the pressure due to the filament beeing squished through the nozzle tip, is much higher at 45mm/s than it is for 8mm/s. After very slow infill, at the perimeter start point there is nearly no pressure inside the nozzle. Now the printer accelerates to 45mm/s nearly instantly, but the pressure needs some time to build up because there is some flex in the peace of filament between the hobbed bolt and the nozzle. That means we don’t get as much material out of the nozzle as expected -> the line width is smaller then needed for the first few cm of travel!
That’s why there is a gap in my part, the line width was not high enough to get contact to the next lines.
There is an easy way to get around this effect: You have to preload the filament before the print move starts. The extra length for this preload is proportional to the print speed. The details are much more complicated, but that should be enough to keep the post length down…
The perfect way to do this would be inside the firmware, so it can calculate the neccesery preload or depressurize filament length also during acceleration and deceleration for every point on the print path in real time. This is done with the JKN advance algorithm in Sailfish FW, but there is nothing like this in Marlin at the moment.
But Slic3r has a workaround for us If you have a look at Printer settings -> General, there is a field called Pressure advance. If a nonzero value is entered, it does what was described before: Before the print move, it preloads the filament a fraction of a mm depending on the given print speed for the following line and the k factor given in the field.
The problem is, there is no description out there how to calibrate this factor… There is only a mouse-over hint that values for bowden extruder should be between 0 and 10. Not very helpful. But I found a way to do it. Remeber, the goal is that a printed line has the expected width, independent from the speed it will be printed.
So I made a test. I wrote a gCode that prints 4 lines. The first at 20mm/s, the second at 60mm/s, the third again at 20 and the fourth at 60mm/s so I know the process is stable if repeated.
This is a picture of the line start points with no Pressure advance (count the lines from top of the picture downward):
As you can clearly see, the first and third line is much more wide than the fast printed ones.
I was playing with the value, starting by 1. This was much too high, which results in a blob at the line start points due to too much preload and the next line not printed half way due to too high pressure unload at the end of the last line.
After about 8 tests, I endet up with a k factor of 0.1, which looks like this (start point again on the right side):
Now the line width is equal from the beginning of the line to the end at both speeds.
No gaps anymore in my parts with honeycomb infill If you are using Slic3r, it should be quite safe to take my 0.1 for every other TAZ and Mini as the factor should be constant for a given extruder. Maybe it varies a little bit by the filament material, I’m using PLA but it seems to work also for my PETG prints.
There is only one important thing to have in mind: Slic3r assumes your printer is printing at the speeds you have entered in Slic3rs settings! For example it doesn’t know the TAZ will slow down to 8mm/s for honeycomb infill due to jerk. If you keep the speed setting for infill at, say, 60mm/s, it will preload for 60mm/s which will result in a blob at every infill start point and a half way not printed line after it. So you have to think about what the TAZ will do in reality and enter a print speed of 8mm/s for infill in this case.