Asymmetric Pressure Advance
-
Hey @dc42 how big a pain would it be to try a test build allowing "asymmetric" pressure advance 'S' values (a separate factor for acceleration and deceleration)?
In my test prints where I vary the factor layer-by-layer, I have noticed that there is a small but appreciable difference in which value gives the best result, in acceleration regions vs deceleration regions.
It makes logical sense to me that these values could differ, as the math driving actual flow rate would likely differ when "bleeding" off pressure in deceleration vs building pressure during acceleration.
-
@ccs86 if we do that then the total extrusion will be changed and the filament used will no longer be the same as calculated and commanded by the slicer. Would that be acceptable?
-
@dc42 said in Asymmetric Pressure Advance:
@ccs86 if we do that then the total extrusion will be changed and the filament used will no longer be the same as calculated and commanded by the slicer. Would that be acceptable?
That is an interesting wrinkle I hadn't considered!
My gut says that would be okay given:
- The magnitude of the advance factor is relatively low (ie direct drive, not bowden)
- The difference between the two factor values is relatively small
That is just speculation though. It is possible that in an area of print with a large amount of PA activity (narrow channel of infill with many reversals), it could accumulate enough error to be a detriment.
What about the idea of normalizing the compensation "area under the curve"? Since we are setting a time value (right?), the magnitude of compensation could be scaled on one side, to cancel out the time difference between them.
-
@dc42 said in Asymmetric Pressure Advance:
@ccs86 if we do that then the total extrusion will be changed and the filament used will no longer be the same as calculated and commanded by the slicer. Would that be acceptable?
Since the extruder is not presently doing exactly what the slicer 'expects' it to do during acceleration or deceleration moves (with or without PA as it is implemented at present), would the total amount of filament extruded in a print not already not match the value calculated by the extruder?
As I see it, implementing an asymmetric and speed sensitive PA where extruder jerk commanded by PA is matched to whether or not there is also jerk taking place on the positional axis, would be a necessary upgrade in order to get the extruder to do what the slicer 'thinks' it is doing.
Surely such a fix should get the total amount of extrusion closer to that calculated by the slicer? Or am I missing something?
-
@h975 Given the elastic nature of the plastic it wasn't really matching what the slicer expected in the first place. That's why pressure advance came along. So it does alter the extrusion amount by shifting it in time, but the total amount of extrusion at the end of a line should be the same.
-
@phaedrux said in Asymmetric Pressure Advance:
@h975 Given the elastic nature of the plastic it wasn't really matching what the slicer expected in the first place.<
Sure but unfortunately the current PA is still not making the extruder do what the slicer expects it to.
That's why pressure advance came along. So it does alter the extrusion amount by shifting it in time, but the total amount of extrusion at the end of a line should be the same.<
Agreed, but this statement would only be fully correct if the current implementation of PA was managing to pull that off precisely. Unfortunately it is presently still doing quite a poor job of it as it does not take into account the dynamics of the fluid flow under acceleration vs deceleration and it does not take into account the shear thinning effect at higher velocities. This shear thinning effect changes the viscosity and therefore requires that PA should be matched to the differing print velocities accordingly. This cannot be done with the present one size fits all PA factor.
Ultimately of course it is important to ensure that we have both the correct amount of plastic at the correct position as well as the correct total amount of plastic in the line and not just one or the other. Meeting these two requirements would require the abovementioned fixes to PA plus the fix to the extruder jerk mentioned in my previous post.
Implementing these changes would not cause less total plastic to be extruded in a line, it would only cause it to be distributed at the correct locations. I am therefore fully in support of the request for asymmetric PA by @CCS86 albeit that I would like to request that the additional changes be looked at also.
-
@h975 said in Asymmetric Pressure Advance:
Since the extruder is not presently doing exactly what the slicer 'expects' it to do during acceleration or deceleration moves (with or without PA as it is implemented at present), would the total amount of filament extruded in a print not already not match the value calculated by the extruder?
Currently it should match very closely, because the amount by which the filament is advanced is the PA factor multiplied by the current extrusion speed. So whenever the speed goes back to zero, the total extruded filament should match the commanded value. Extruder jerk complicates this a little, however RRF uses extruder jerk rarely, mostly only when the slicer has produced bad GCode e.g. tiny segments for which the extrusion amount is specified with too few decimal places.
-
@h975 said in Asymmetric Pressure Advance:
Agreed, but this statement would only be fully correct if the current implementation of PA was managing to pull that off precisely. Unfortunately it is presently still doing quite a poor job of it as it does not take into account the dynamics of the fluid flow under acceleration vs deceleration and it does not take into account the shear thinning effect at higher velocities. This shear thinning effect changes the viscosity and therefore requires that PA should be matched to the differing print velocities accordingly. This cannot be done with the present one size fits all PA factor.
That's why we're looking at implementing nonlinear PA (i.e. the amount of advance is a nonlinear function of extrusion speed) amongst other things. Nonlinear PA would still result in the actual extrusion matching the commanded extrusion.
-
@dc42 That would take care of making the PA speed sensitive and would be a huge step forward for the PA functionality. I look forward to seeing that being implemented.
In what manner are you expecting to determine the non-linear curve required if I may ask? As each materials curve will look different I was thinking along the lines of determining PA values at a few regular intervals along the extrusion velocity envelope and then fitting a curve to that in order to determine the equation describing the curve. That would admittedly require some time to calibrate so I was wondering whether you might already have thought of a better way.
There would nevertheless still need to be an asymmetry factor or some such to account for the difference between acceleration and deceleration. Are there any plans for that?
-
@dc42 said in Asymmetric Pressure Advance
.... Extruder jerk complicates this a little, however RRF uses extruder jerk rarely, mostly only when the slicer has produced bad GCode e.g. tiny segments for which the extrusion amount is specified with too few decimal places.<
Looking at this there is clearly a scenario in which extruder jerk would be implemented (not PA related?) which I have not thought of, but looking only at the PA formula I come to the conclusion that extruder jerk will automatically be implemented any time that there is an axis acceleration or deceleration since according to the formula Vactual = Vrequested + (K*actual acceleration), with the variables in the equation all referring to the extruder parameters.
According to this there would be an instantaneous velocity change required by the extruder the moment that any acceleration or deceleration is required i.e jerk. This would be irrespective of whether or not the position axis required jerk or not.
This jerk obviously has to take place by default at the end of any acceleration or deceleration phase, but should only take place at the beginning of an acceleration or deceleration phase if there is also jerk taking place on the position axis i.e such as at corner transitions (but not at line starts or ends).
What is your take on this?