Pressure Advance Calibration


  • administrators

    @mo said in Pressure Advance Calibration:

    Hehe by having a seizure I didn't mean anything erroneous on the side of Duet or pressure advance - I'd say it was doing exactly what it was supposed to, adjusting the pressure of extrusion according to speed and turns/corners, it was just doing it at a frequency I wasn't expecting, it hardly stopped, I have a small gear shaped knob placed on the shaft for decoration and to see retractions better and it was in constant back and forth motion, paired with the sound it makes. Hence the 'seizure' reference

    If it's applying pressure advance between the short segments of a curve, there are two reasons why this may happen:

    • Your XY jerk setting is too low, so the machine is having to slow down at the junctions between segments;
    • Your slicer is generating moves with changing extrusion rates instead of a uniform extrusion rate. S3D used to be particularly bad at doing this.


  • @dc42
    Hmm, S3D it is indeed, that I've used to slice it up.

    And I've been tackling some ringing issues today and have drastically lowered the jerk values, this model now is printing at 120 value only.

    Your comment answers something that I'm observing, PA is disabled, value 0, beside retractions the gear should be moving uniformly forward while extruding - but it's not, it does have moments of speeding up and slowing down, so what you've just said about S3D seems to be at play in here.



  • 0_1539512448390_IMG_20181014_201508.jpg 0_1539512462594_IMG_20181014_201558.jpg

    Here you can see exactly where I've disabled pressure advance.

    What's the lowest jerk you'd recommend to go with that doesn't cause issues with pressure advance?



  • Also made a python-script to generate test pattern for pressure advance. I use a cylinder printed in spiral vase mode instead. Plan to extend it into generating a square pattern and Marlin-like pattern as well. Feel fre to try it out if you like. Just rename it to pa_cal.py and run the command:
    python pa_cal.py > pa_cal.gcode
    0_1539520976520_pa_cal.py.txt

    Anyone running into problems with Jerk on a Zesty Nimble above 0.1 when tuning pressure advance?



  • I don't want to appear to be spamming these forums but I've just posted something elsewhere that has a bearing on this thread. https://forum.duet3d.com/topic/7276/high-speed-high-volume-flow-rate-printing



  • A g-code question...

    Will these produce a different result for calibrating pressure advance, if so, which of them is best?

    G1 X0 Y0 F12000
    G1 F4200
    G1 X0 Y30 Ex.xx
    G1 X0 Y60 Ex.xx F1200
    G1 X0 Y90 Ex.xx F4200

    or

    G1 X0 Y0 F12000
    G1 F4200
    G1 X0 Y30 Ex.xx F4200
    G1 F1200
    G1 X0 Y60 Ex.xx
    G1 F4200
    G1 X0 Y90 Ex.xx

    Will the top one be interpreted as a linear interpolation of the feedrate between the start and end point and the second one be a more instant acceleration?


  • administrators

    They should both be treated exactly the same.



  • @dc42 That's a little bit contradictory to what's written in the feedrate part of G0/G1 documentation: https://duet3d.dozuki.com/Wiki/Gcode#Section_G0_G1_Move

    G1 F1500
    G1 X50 Y25.3 E22.4
    In the above example, we set the feedrate to 1500mm/minute on line 1, then move to 50mm on the X axis and 25.3mm on the Y axis while extruding 22.4mm of filament between the two points.
    G1 F1500
    G1 X50 Y25.3 E22.4 F3000
    However, in the above example, we set a feedrate of 1500mm/minute on line 1, then do the move described above accelerating to a feedrate of 3000 mm/minute as it does so. The extrusion will accelerate along with the X and Y movement, so everything stays synchronized.
    Feedrate is treated as simply another variable (like X, Y, Z, and E) to be linearly interpolated. This gives complete control over the acceleration and deceleration of the printer head in such a way that ensures that everything moves smoothly together, and the right volume of material is extruded at all points. The feedrate specified may not be reached due to a lower feedrate limit being configured, or the move being too short for the axis to accelerate and decelerate in time.



  • @dc42 Why doesn’t RRF use jerk in those cases?


  • administrators

    @rcarlyle said in Pressure Advance Calibration:

    @dc42 Why doesn’t RRF use jerk in those cases?

    The reason for having jerk is so that if you print a curve made up form short line segments, the print head can maintain a constant speed. Without jerk it would have to stop at the boundaries between segments, to avoid an instantaneous change in X or Y speed due to the small change in direction. Jerk is not required in other cases.



  • @dc42 If jerk benefits you on extrusion-extrusion corners, it will also benefit you on starts, stops, travel-extrusion changes, and extrusion-travel changes. From a speed standpoint at least, if not so much blobbing. I could see it affecting performance of coast, as well, if you slow to a stop between the last print segment and the start of the first coast segment. What’s the downside of doing it?

    Another question if you don’t mind, since we’re talking about it... does RRF ever use different entry/exit speeds at the same corner? For example, if two colinear segments have different feedrates, will RRF decel all the way to the new speed, or will it jerk at the corner?



  • @rcarlyle said in Pressure Advance Calibration:

    @dc42 If jerk benefits you on extrusion-extrusion corners, .....................

    But does it offer a benefit? My take on it is that "jerk" or instantaneous speed change is just horrible (as it's name implies). As David has pointed out, it is necessary for segmented curves otherwise the print head would have to decelerate to a complete stop at the end of every segment, before starting the next so the time to complete a segmented arc move would be just too long. The same could be said for any situation where there are a series of very small moves. The only "benefit" is that it saves time in those situations but in terms of motion control, it's just horrible. I just think of "jerk" as a necessary evil that we have to put up with.


  • administrators

    Using XY jerk on starts/stops etc. would require intentional extruder jerk too. In order to apply pressure advance to a move that requires extruder jerk, it would be necessary to instantaneously advance or retract the filament by the appropriate amount (the amount of extruder jerk required multiplied by the pressure advance time). That's even more impossible than changing the speed instantaneously.



  • @deckingman said in Pressure Advance Calibration:

    I just think of "jerk" as a necessary evil that we have to put up with.

    Based on some experimentation I theorize that some "jerk" might actually be advantageous and make the motion smoother. Consider the motion platform a dynamic system (difference in actual vs commanded nozzle position). This can be modeled as a spring-damper system, which models e.g. ringing artifacts. "jerk" effectively puts some pre-tension on the spring in this system which in some of my tests seems to lead to a more faithful adherence to a linear acceleration profile, and in turn make the assumption pressure advance is based on more accurate.



  • @dc42 other firmwares use extruder jerk with no issues. High E jerk is commonly used to improve retraction performance with geared 3mm filament extruders. Sailfish even allows small instant position jumps with E axis pressure advance. It works great!

    Remember, there’s a “torsion spring” torque/error relationship between the stepper driver’s coil energization angle and the physical rotor angle. A position jump of a few microsteps just rapidly changes the instantaneous torque on the rotor. There’s absolutely nothing wrong with doing that on an extruder which is highly damped. In fact, I would say it’s highly desirable since it lets you unload the built-up pressure/compression a lot faster.

    Imagine an extruder pushing right up near stall (one full step of load angle) and you want to retract. Why would you gradually accelerate through the ”dead travel” of >1 full step of coil energization angle between peak forward torque and applying reverse torque?


  • administrators

    @RCarlyle, I understand what you are saying, especially in regard to using extruder jerk or position jump to increase initial retraction speed. Maybe I will implement that. However, the movement in 3D printer firmware seems to be in the opposite direction, towards using S-curve acceleration. Once we have S-curve acceleration it becomes possible to compensate for elasticity in the motion system.



  • After going from rods to lineat Hiwin guides I tried your test print. This is the results I get.
    I'm no expert so I would like to know what could be done to better the print.
    alt text

    Thanks for the info and any help



  • @dc42 what’s the thinking on how you improve elasticity compensation with S-curve motion? (Not disagreeing; just don’t know what the approach is)



  • @synapsis, it's a bit hard to see from that photo, but here's roughly what I think you see:

    0_1540052464500_test_print.jpg

    It's a bit weird that the four different bands look so different from each other. What are your jerk and acceleration settings? What type of extruder?

    For the right setting here, I'd try the orange arrow location. Above it pressure advance is too aggressive leading to under-extrusion during deceleration.


  • administrators

    @rcarlyle said in Pressure Advance Calibration:

    @dc42 what’s the thinking on how you improve elasticity compensation with S-curve motion? (Not disagreeing; just don’t know what the approach is)

    My thinking is this. Let's assume a Cartesian printer for now. In order to accelerate (say) the X axis, the motor and belt have to impart a force to the head given by F=ma. But the belt and the motor are springy, so in order to really impart force F to the mass of the print carriage, the motor must move by an additional amount S=ma/k where k is the spring constant. If the acceleration changes abruptly, then this requires instantaneous changes in motor position, which are impossible; but if we use S-curve acceleration then the required changes in motor position are gradual and should be achievable.


Log in to reply