Ramblings of an aging IT geek
← Ramblings of an aging IT geek
hardware

Klipper, and a Printer That Suddenly Flew

Moving an ageing 3D printer from stock Marlin to Klipper, and why input shaping turned a slow, ringing machine into something that prints fast and clean.

A 3D printer mid-print in a workshop

My printer was fine. That's the honest starting point. It printed parts, the parts fit, and I'd long since stopped thinking of it as a project. Stock Marlin firmware on an eight-bit board, the speeds I'd set years ago and never revisited because pushing them just produced ringing, those faint repeating ghosts of every corner echoed across the flat that follows it. So I kept it slow and stopped noticing.

Then I put Klipper on it, mostly out of curiosity, and the thing turned into a different machine.

The headline change is where the work happens. Marlin runs everything on the printer's own little microcontroller, which on an eight-bit board is wheezing to keep up with the maths at any real speed. Klipper splits the job: a Raspberry Pi does all the heavy planning and trajectory calculation, then streams precisely timed steps to the board, which now only has to do as it's told. Suddenly the controller isn't the bottleneck, and speeds that used to produce mush come out clean.

But the part that genuinely impressed me was input shaping. Ringing isn't a speed problem as such, it's a resonance problem: the print head is a mass on a moving frame, and when it changes direction the frame keeps vibrating for a few milliseconds, and the nozzle faithfully prints that vibration into the wall. Input shaping measures those resonant frequencies and then deliberately shapes the motion to cancel them out, so the frame stops ringing almost as soon as it starts.

A cluttered workshop bench

You measure the frequencies with an accelerometer. I stuck a cheap ADXL345 to the print head for an afternoon, ran the test, and let Klipper tell me what it found:

RECOMMENDED shaper_type_x = mzv, shaper_freq_x = 52.8 Hz
RECOMMENDED shaper_type_y = ei,  shaper_freq_y = 41.6 Hz

Those two numbers went into the config, the accelerometer came back off, and that was it. The X and Y axes ring at different frequencies, which makes sense the moment you look at the machine: one axis moves just the head, the other drags the whole gantry, so they have completely different masses and resonances. Marlin had no idea about any of this. It just commanded the moves and printed whatever shook out.

The result is a printer I'd describe as fast now, with no asterisk. Travel and print speeds that would have been a ringing disaster on the old setup come out with clean, sharp corners. The first benchmark print after tuning came off the bed and I genuinely held it up to the light looking for the ghosting that I knew, from years of habit, was supposed to be there. It wasn't.

The other quiet win is the workflow. Klipper's config is a plain text file you edit over the network, and the web interface means I no longer compile firmware and walk an SD card across the room to change a setting. I tweak a value, restart the firmware from a browser, and the change is live in seconds.

If you've got an older printer you've quietly written off as "slow but reliable", this is the upgrade that surprised me most in years. It cost a Pi and an afternoon, and it didn't replace the machine, it just stopped the machine holding itself back.