Marlin has a Linear Advance calibration pattern generator, but I find it's hard to use because:

• It only prints the initial layer on the bed, where bed irregularities interfere with accurate reading of it.
• It doesn't do proper retraction and priming, so a mess of strings and underextruded initial segments/non-adhesion mess up the results.
• It's hard to visually evaluate.
• Getting a very wide range of K values involves multiple runs.
• It's hard to clean up.

Is there a better procedure for calibration of K value for linear advance?

• Note that while this is a self-answer, I'm open to more/better answers too. – R.. GitHub STOP HELPING ICE Jan 28 at 22:12

The same effect as Marlin's test pattern, with alternation between fast and slow segments, can be achieved with a skewed tower and Cura's overhang settings, providing the opportunity to interactively adjust K value during the print, or insert changes at particular layers in the gcode for automated test towers.

I'm using the following OpenSCAD to make a skewed cylinder:

multmatrix(
[[1,0,1/8,0],
[0,1,0,0],
[0,0,1,0],
[0,0,0,1]])
cylinder(d=40,h=40);


with Cura set to:

• no top/bottom layers or infill
• single walls
• treat walls with 1° overhang as overhangs
• print overhangs at 25% speed

These values can of course be tuned, but the extreme low overhang angle and 8/1 slope is to prevent actual physical overhang-printing considerations from messing up the test.

Vase mode might work even better for this if it supports overhang settings, since it would avoid the layer seam.

• Nice. I've been using the Marlin pattern in the past for Klipper's Pressure Advance, but there are some really disgusting features hidden in the g-code that's generated. – towe Jan 29 at 7:48

You can use Klipper tuning tower and change the K value at each layer using Gcodes. You can find the model here: https://www.thingiverse.com/thing:3957406

I find easier to see the best results this way, also you can test way more settings in a single run, while the Marlin pattern generator lets you test only few values at time.

Remember to print without infill.