How it took me a ducking year to finally tune Klipper on my Anycubic Kobra Neo
I got this printer in June of 2022 and primary reason was to start making structural parts for my electronics projects. I was familiar with 3d printing a bit, and even printed a few models in the library on Ultimaker but never designed anything myself so was not sure if it was even practical.
Fast-forward a few months of using and I thought it was a good idea to install Klipper on that machine. Main advantage for me was picking up a separate Raspberry Pi board and getting it to work with WiFi. Moving models around on SD-cards soon got quite tedious. I heard of Klipper being superior to stock firmware available on many low-end consumer printers, providing new features such as input shaping to enable faster printing speeds, but I was mostly going for convenience.
Unfortunately Kobra Neo was not particularly popular at the time so I only found a single reddit post with configuration example. Still it sort of worked out, even though I had to fiddle a bit with z-offset. I had some issues with inconsistent layer height across the bed due to bed imperfections, but I rigged a hardware solution to the problem by printing bed spacers out of TPU and replaced original ones made out of hard plastic to be able to level it manually. I did a few rounds of bed leveling accompanied with probe scanning whole area to validate result and get a decent variance of 0.18 across whole bed. There were still some imperfections but printer was doing okay job and I shelved tinkering with it for a while in favor of actually doing something interesting with it.
But then my focus shifted to projects where I had to print bigger and flatter surfaces and tinkering with z-offset every print just to kick it off started to get more and more tedious. On top of that central heating is not really a thing in Japan and indoor temperatures can swing wildly even during course of a single day, especially when seasons shift.
So starting a print for a new project after a couple of days (or weeks) only to realize your Z is off again gets annoying pretty fast. Now Kobra is equipped with inductive probe and everyone seems to mention that is can drift with different temperatures, so I started considering an upgrade to something like a BL-touch or other mechanical alternatives. But before going another rabbit hole down adaptive a new probe and modifying printing head I noticed a peculiar thing - during printing 1st layer Z axis did not really seem to move. At first I thought that okay maybe the movement is so subtle that it is not noticeable, but then reading more of Klipper’s discourse I started to suspect that something is not right with ABL-compensation.
I tried to play around with bed mesh config section, setting a different approximation algorithm and tweaking its parameters. I even found a post suggesting that ABL does not seem to work in Klipper at all, but that seemed a little far-fetched to be true. At that point I ran out of patience, tightened screws again, adjusted Z-offset and parked it.
Few more months passed, now spring arrived, another temperature shift and we are back at square one. So I thought I would take another shot at tuning my Z-offset, why not?
This time around I stumbled upon a helpful video in which author simply checked what is the actual distance between nozzle and the bed if you move your Z to 0.2 with Klipper UI. If everything is set up right you should be able to shove a piece of paper between nozzle tip and the bed. To my surprise however Kobra readily slammed nozzle into the bed. Bingo!
Turned out whole Z axis was shifted such that endstop position was under the bed surface and I did not notice that only because of huge Z-offset I was typically applying while printing. It is really cool that this technology is at the state where you can mess things so much and still get decent output even for ‘misconfigured’ hardware.
After reading some more on endstop, z-offset and probe z-offset I removed printer’s endstop configuration and replaced with with probe’s virtual endstop. Then it was a matter of adding following line to stepper_z section and tuning z-offset again but this time applying it to probe instead of endstop.
endstop_pin: probe: z_virtual_endstop
Later I added a safe_z_home section to ensure that homing sequence will conclude with inducive senor being triggered by bed surface. Had a little ‘whoops’ when trying to home it with virtual endstop for a first time. I have also disconnected endstop sensor for Z, since it is not being used anymore. I still don’t fully understand how it was intended to work together with the probe. I guess it is a safety against cases when probe is not triggered by bed, but having safe_z_home section should prevent that anyway.
While I was at it I ran through other stepper configurations to check on each axis values range. Earlier I noticed that slicer preview and actual parts placement during printing have a little offset. This was easily fixed by adjusting min/max value ranges for X and Y to make them spot on in the middle. Luckily you don’t have to actually print anything to test that, can just use Klipper UI to move print head to limit positions (0, 220), a little annoying part that you have to restart Klipper every config change and wait for it to come back up.
With this, finally, I was getting more-or-less consistent first layers after running bed mesh calibrate and my Z-screw was spinning readily compensating for another iteration of warping that fell upon my poor bed.
TL;DR for the story, while there is a ton of information available on discord servers, forums in blogs, articles and YT videos, reading the actual docs for each of parameters and doing own tests is what would likely give you a better understanding than following someone else’s advice.