Closed Rickthebig closed 2 months ago
That's a great idea, worth to implement. 👍 Though for klipper users it may requires to implement calculation of extrusion correction at the slicer side.
Orca bot: this issue is stale because it has been open for 90 days with no activity.
Orca bot: This issue was closed because it has been inactive for 7 days since being marked as stale.
Is there an existing issue for this feature request?
Is your feature request related to a problem?
When a wide range of speeds is used in the same print, the higher speeds are prone to underextrusion because at those higher speeds the flow rate is not linear.
This feature request tackles under-/overextrusion in regions of a part that is printed using a wide range of speeds (which happens when the part has long straight walls but also small details, overhanging walls etc.). If the flow rate is calibrated for the fast tracks, slower paths will be overrextruded. If the flow rate is calibrated for the slow paths, the fast paths will be underextruded.
For example, at 100 mm/s the flow rate is not twice as large as at 50 mm/s. This happens even when the speed does not hit the volumetric extrusion limit and is due to subtle slippage of the extruder gears due to a higher back pressure at higher speeds. In other words, at higher and higher speeds the resistance against filament advance grows exponentially.
Near the volumetric extrusion limit of the nozzle, the additional factor of insufficient melting capacity of the heat block comes into play, which is in nature a different cause, but shows the same effect of gradually reducing the flow rate.
Which printers will be beneficial to this feature?
All
Describe the solution you'd like
This is a well known phenomenom and there is a G command to correct speed dependent flow variation, also called non-linear extrusion: M592. Example for Marlin: M592 [A] [B] [C]
Entering this command is very simple, but Orca lacks an interface to do it. This command needs an interface, because it defines several values as coefficients in a polynomial equation which describes the speed/flow dependency and these values must be determined prior to be used. Entering values blindly would definitely lead to severe extrusion problems.
Describe alternatives you've considered
Additional context
The change expected is to issue an additional line to the gcode file containing the M592 command, for example (Reprap version): M592 D0 A0.0058 B0.0038 Just that simple (the actual flow correction is done by the firmware). Orca needs a suitable interface though. Implementing the calibration test is just an option, but a very desirable one. Let the user input the coefficients that he determined by any other means, if there is no built-in calibration procedure.
Please note: Non-linear extrusion is not a replacement for Pressure Advance. Pressure Advance deals with changing pressure. Non-Linear extrusion is related to a static dependency, and whatever the depencency of extrusion rate on speed is, pressure advance does not care about that.
The values entered in the interface should be valid for a given extrusion temperature. Changing the extrusion temperature in the filament profile should either invalidate/deactivate the values or allow to adapt them somehow (higher extrusion temperature means lower resistance to flow, therefore the non-linearity flattens a bit and the correction should be smaller). Take a look at following case:
As you can see, changing the extrusion temperature of PETG from 220 to 210 will decrease flow rate by 15%, that is a lot! Furthermore, if the non-linear extrusion is not corrected properly, even at a constant temperature of 210 degrees C, relative flow rate will drop dramatically by almost 20% if the commanded volumetric speed is changed from 6 to 8 mm3/s.
EDIT: If Orca developers were really ambitious: It is even possible to implement a temperature independent non-linear flow compensation by introducing a correction to the polynom (i.e., a correction of the correction) in form of a "fudge" factor. The "fudge" factor would just shift the polynom to fit the behaviour shown above and could be determined by doing a similar flow rate calibration at different temperatures (but less coordinates needed). There is nothing scientific about this but this is rather an empirical solution that would allow to apply the result of the non-linear flow test to different temperatures, assuming that Orca would automatically adapt the "fudge" factor accordingly (since the extrusion temperature is known to Orca).
This is just a suggestion that would make the Orca slicer really unique. No slicer is known to me which would implement such a feature, diverting unpretentious users to use the same constant extrusion speed for the whole print piece (a well known wisdom), which then would be quite low.
I have non-linear compensation enabled via M592 in my Bowden 60 cm setup, a DIY BLV Cube (RRF) after doing my own extrusion tests: geared BMG clone noname steppers E3D V6 with a compatible CHT nozzle (clone)
Just as an example of the effect of this setting, I did the built-in MaxFlow calibration test.
Result: The MaxFlow test runs up to 20 mm3/s without any signs of deterioration, and then the stepper starts to skip. This is in contrast with the usually expected behaviour, where due to the uncompensated decreasing frow rate, the wall gets thinner and thinner, until it is noticeable deteriorated. So effectively, this non-linear compensation pushes the max extrusion limit and improves quality at high speeds. A prove of the usefullness of this feature cannot be clearer and more manifest.
For the calibration test (which is ready ie does not be to be developed), see: https://www.cnckitchen.com/blog/extrusion-system-benchmark-tool-for-fast-prints For the explanation about non-linear extrusion: https://marlinfw.org/docs/gcode/M592.html See also: https://klipper.discourse.group/t/extrusion-correct-at-various-flowrates/1104