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

i put klipper on the old printer and it stopped being old

Moving an ageing 3D printer from Marlin to Klipper on a spare Pi roughly doubled its usable speed without me touching a single bolt.

A 3D printer mid-print with the nozzle moving fast

The printer is years old now and the prints had got slower than I remembered, mostly because I'd stopped trusting it at speed. Push the feed rate up and the corners would ring like a struck bell, ghosting their way across every flat face. So I'd kept it slow and grumbled. Last weekend I flashed Klipper onto it instead, and the same hardware is now genuinely quick. No new parts. Just a spare Pi and a different way of running the same motors.

why it's faster without new hardware

The trick is where the thinking happens. Stock Marlin firmware runs everything on the printer's own little 8-bit board, and that board has to plan motion, smooth acceleration, run the display, and watch the temperatures all at once. It's doing maths it isn't really powerful enough to do, so it caps how aggressively it can move.

Klipper splits the job. The Pi does all the heavy planning and streams precisely timed step commands down to the board, which now does nothing clever at all, just fires the steppers exactly when it's told. Suddenly there's CPU headroom to spare, and that headroom is what lets you turn on the features that actually matter.

The big one for me was input shaping. Ringing happens because the toolhead is a mass on a flexible frame, and when it changes direction sharply it oscillates. Input shaping models that oscillation and counter-steers the moves to cancel it. You measure your printer's resonant frequencies, feed them in, and the ghosting that forced me to print slowly just goes away.

The spare Pi wired in next to the printer on the bench

the bits that took a moment

Finding the resonant frequencies is the one fiddly step. I don't have an accelerometer mounted, so I used the ringing test tower: print a tall tower while stepping through frequencies, then read the smoothest band off the side with a ruler and your eyes. It's crude and it works. An ADXL345 strapped to the toolhead would do it properly and automatically, and I'll get there, but the manual method got me eighty percent of the win in twenty minutes.

The other adjustment was pressure advance, which sorts out the little blobs at corners where the extruder over- and under-supplies plastic as it accelerates. A short calibration print, one number into the config, done:

[input_shaper]
shaper_freq_x: 41.2
shaper_freq_y: 38.6
shaper_type: mzv

[extruder]
pressure_advance: 0.045

I also lost a happy half hour to the fact that everything now lives in a text file you can version. The whole printer configuration is one printer.cfg, which means it's in git, which means when I inevitably break it I can see exactly what I changed. After years of clicking through firmware menus and recompiling Marlin to change a single value, editing a config and hitting restart feels almost suspiciously easy.

was it worth the afternoon

Comfortably. The print speeds I'd given up on are back, the surface quality at those speeds is better than it ever was at the slow ones, and the printer feels like a different machine for the cost of a Pi I already owned. The mechanicals haven't changed at all. It was always capable of this. It was the firmware holding it back, doing too much on a chip too small, never quite admitting it.

The thing I keep coming back to is that the printer wasn't worn out. It was under-driven. I'd spent a couple of years assuming the limit was physical, in the belts and the frame, when really the limit was a tired little processor trying to do a job that wanted offloading. Move the thinking somewhere with room to think, and the old machine flies.