Jerk as a f(speed, kinetic energy)

  • The reason why too high jerk settings can cause unwanted artifacts is, that the stored kinetic energy is too high.
    I am used to print at high speeds (up to about 300 mm/s) using high accelerations (up to 5 g when printing, jerk up to 6000 mm/min). I had problems to correlate jerk/acceleration tuning test results and what real prints showed regarding ringing artifacts. I think i found out why.

    The stored kinetic energy is proportional to mv^2 (mass * speed^2) for translation and Iomega^2 (rot Inertia * revs^2) for rotation. Omega and v are correlated linear, so they go perfectly together.

    Let's assume the printer prints at 100 mm/s and the jerk is set to 600 mm/min (== 10mm/s). and brakes/jerks down to 90 mm/s. The released kinetic energy is then proportional to 100^2 -90^2 = 1.900. If the printer prints at 50 mm/s and jerks down to 40 mm/s, the released kinetic energy is then proportional to 50^2 - 40^2 = 900.

    What does this mean ? The bump, which the stiffness of the system has to deal with, is at 100 mm/s 1900/900 = 2.1 times bigger than at 50 mm/s. It also means that the stepper has to be able to handle this load. If the magnetic field of the stepper is not able to store this energy, missing steps will occur. At higher speed and jerk settings, this problem gets bigger and bigger.

    This explains, why jerk test results don't have to show up in real life prints, because yet one is comparing apples with bananas, e.g. small with big bumps. When printing fast, one would have to tune the jerk for high speeds, which means much more jerk could be applied to slow moves - but the high-speed moves are limiting.

    To be able to optimize jerk for high as well as slow speed moves, one has to consider this effect. The yet jerk value should not be a fixed value, it or something else should define the allowed “kinetic energy bump” per axis.
    The in a physical manner optimal way would be to define the allowed kinetic energy bump as a tuning value, e.g. kin_energy_bump and according to the printing speed, the allowed jerk would be adjusted.

    “speed after jerk” = max(sqrt(kin_energy_bump - “speed before jerk^2”), 0)

    If this is too complicated, it would already improve the situation when the existing jerk would be a function of speed. E.g. jerk = min(factor/speed, max_jerk) or jerk = min(factor/speed^2, max_jerk).

  • It seems to be emerging based on many recent things discussed here that 3d printing settings like extrusion multiplier and now jerk are not linear related to speed. Which is very interesting. Good work.

  • administrators

    Interesting stuff. When I get time I'll write out the differential equation that describes the effect of commanding a sudden velocity change, and see if I can find an online tool to solve them numerically.


Looks like your connection to Duet3D was lost, please wait while we try to reconnect.