New firmware (Klipper) on TAZ 6

Here’s something kind of cool: there’s a new firmware for 3D printers that moves most of the processing into a host computer (like a Raspberry Pi 3 or ODROID), turning the ATmega2560 or equivalent chip on the RAMBO/RAMPS/etc control board into sort of a dumb minion for reading temperatures and propagating commands to the steppers/heaters/fans/etc.

https://github.com/KevinOConnor/klipper

I submitted this pull request to add TAZ 6 support:

https://github.com/KevinOConnor/klipper/pull/76

It doesn’t support using the washers on the corners of the bed to probe for the bed mesh (because I’m pretty sure it doesn’t know how to do a bed mesh yet), but it seems to work surprisingly well for me even without that. If anybody else gives this a shot, I’d be curious to hear how it works for you!

Note: You’ll need to modify your start-gcode in Cura or whatever slicer you use, because the homing routine is a little more hands-on and doesn’t support the G29 command yet. I have sample start and end gcode which I’ve used myself posted at this github gist: https://gist.github.com/clee/2f87d5180faab8e79d1094d8667f96af

This is very interesting! I had independently come across Klipper a few weeks ago and had been thinking of evaluating it. It looks like you’re gotten there first! :slight_smile:

So I am curious, have you seen any improvements in print speed or quality with Klipper? One of the things that impressed me about Klipper was that the writeup mentioned using accurate physics models for accelerations. I assume this would allow for faster print speeds over Marlin. Have you seen anything of that nature?

More broadly, I guess the question is, other than it being something new, what advantages have you seen in moving from Marlin to Klipper?

Thank you!

– Marcio

I am also interested in experimenting with Klipper. How easy is it to switch back to Marlin? Can you detail the steps involved to do that?

Print speed: I need to do some more tests, but it certainly looks promising. I printed a benchy on Marlin, and it took about 1h:28m. On Klipper, using the exact same gcode, it took 1h:20m. The nozzle-wiping sequence on startup is also faster and a little quieter with Klipper than with Marlin, at least to my ears. I should record some videos and post them to YouTube or something to show the comparison.

The initial pin mapping I used did not have the part-cooling fan pin mapped correctly (this has been fixed in the pull request and thus the version of the klipper config you see at the link in my first post), but even so, it STILL ended up with cleaner bridges on benchy than Marlin, and Marlin was using the part-cooling fan actively throughout the print. I printed both benchy models at 0.3mm layer height. I’ll edit this post to add some picture links later.

It’s not all sunshine though. The lack of support for G29 probing is especially problematic on the TAZ6, because the TAZ doesn’t really have any way to manually level the bed (at least not out of the box). So unless your print bed is unusually level, you won’t be able to print anything large. At least, I couldn’t, because one corner of my bed is slightly too close to the nozzle and the opposite corner is too far from it.

Switching back to Marlin is pretty simple. I’ve gone back and forth a few times since starting this thread.

I cloned the klipper repository onto my Raspberry Pi (as the instructions direct you to do) and used scp to copy my Marlin image (1.1.5.64-6353ccb) to klipper/marlin.hex, and then I added a new target to the src/avr/Makefile called ‘flashback’ right under the ‘flash’ target. I replaced the references to $OUT/klipper.elf.hex in the ‘flashback’ target with references to marlin.hex, so I have a target that looks like this at the end of the src/avr/Makefile:

flashback: marlin.hex
        @echo "  Flashing marlin.hex to $(FLASH_DEVICE) via avrdude"
        $(Q)if [ -z $(FLASH_DEVICE) ]; then echo "Please specify FLASH_DEVICE"; exit 1; fi
        $(Q)avrdude -p$(CONFIG_MCU) -cwiring -P"$(FLASH_DEVICE)" -D -U"flash:w:marlin.hex:i"

Make sure you have avrdude installed on your Pi (or whatever computer you have the printer plugged into over USB), make sure the printer is turned on and that no software, including Octoprint, is connected to the printer; then run ‘make flash’ from the klipper folder to flash Klipper to the printer, or run ‘make flashback’ to flash it back to Marlin.

I uploaded two YouTube videos to try to show off the different movement speed and sounds from the steppers being driven via Marlin vs Klipper.

Marlin: https://www.youtube.com/watch?v=34FoXKF2ds4

Klipper: https://www.youtube.com/watch?v=SWyrn5jpuZI

And now it’s officially part of Klipper! https://github.com/KevinOConnor/klipper/commit/9fc5506c83691cd0b8e422839eb9fc048d0e05b6

Nice job!

You may want to update the extruder thermistor entry at line 48 from:

+sensor_type: EPCOS 100K B57560G104F

to match the selection used in Marlin:

ATC Semitec 104GT-2

You may also want to port over the standard tool head PID settings(lines 190, 193, 196):

// If you are using a pre-configured hotend then you can use one of the value sets by uncommenting it
// LulzBot AO-Hexagon (24v)
      #define DEFAULT_Kp 28.79
      #define DEFAULT_Ki 1.91
      #define DEFAULT_Kd 108.51

Oh, damn, good call! It was working with the previous values, but I’ll push a pull request later tonight to adjust to these instead. These values seem to work just fine and unless I’m crazy I think the hotend is heating up a little faster now, too.

I think my project for the weekend will be adding G29 support for the TAZ 6 to Klipper.

Orias and/or marcio:

Do either of you happen to know the Z-offset I should apply after probing the bed washers? I’m guessing I can measure it with my calipers or dig the value out of the Marlin code, but I figured if either of you happened to know already, it might save me some time.

Hi Clee,

The Z_PROBE_OFFSET_FROM_EXTRUDER we use in Marlin is -1.377.

BTW, I downloaded Klipper today to my workstation and managed to hack Cura 2 to connect to it. The problem I immediately ran into is that Klipper does not let me move an axis without homing, but on the TAZ, it is necessary to lift the nozzle before homing otherwise the nozzle crashes on the homing button, which is exactly what happened when I did a G28. How did you get past that problem?

– Marcio

Awesome, thanks!

I edited klippy/cartesian.py and turned CartKinematics::_check_endstops into a noop, basically.

It’s a nasty hack, and I’m sure there’s a better way to solve the issue, but for now it lets me manually G1 Z+10 so that homing works.

(On other printers, you’re supposed to do an M84, and then manually position the Z, but that doesn’t really work so well on the TAZ… the Z doesn’t budge for me at all whether the motors are on or off.)

Sorry for pulling up this old thread again, but for clarification does the bed leveling work with the current “printer-lulzbot-taz6-2017.cfg” config file? I also have both the factory taz 6 head, and the SL head, what work would be required to get klipper working with the SL head?

I haven’t tried it recently, so I have no idea. I went back to Marlin on my TAZ6 because I couldn’t get the bed leveling to work in my branch; I think one of the AO employees here made more progress, though.

I am in the process of moving over to Klipper right now on my TAZ 6. I got my printer to fully function using the stock RAMBo 1.3L board, including ABL, the LCD controls, and safe Z-homing. I was able to print out a very clean benchy using the stock Lulzbot START and END gcode blocks. I just recently moved to the Archim2 board and have just completed configuring it with Klipper to support everything the RAMBo board supported. I am still working out a few details, but plan to release the config files to the Klipper Github repo in a pull request soon. Klipper is awesome and with the future of Lulzbot in question I fear we will have to abandon Marlin unless people continue to develop it for these printers. How did it come to this Lulzbot!?!?

Whoa, that’s really exciting! I’m looking forward to seeing your PR, and I’ll be happy to test it on my own TAZ6 :smiley:

I hadn’t even heard the news. Well, that’s a huge bummer.

Well, that’s a huge bummer.

You said it… :open_mouth:

I will update this thread when I get the PR up, which will hopefully be this weekend when I get some time. It would be great for you to give it a go, but you might have to make some mods first. I developed it to support the Dual v3 tool which mix up the extruders and fans (the second extruder wire harness goes to E1 and the main extruder harness goes to E2 making the pin mapping extra confusing!). I believe that you created and submitted the original TAZ6 config file, correct? Perhaps you could pull the desired stuff from my Dual v3 config file and update the single extruder version?

Yeah, I was the one who was too impatient to wait for someone else to figure out how to get it working. Unfortunately, I had stuff to print, so I could only play around with it so much before I had to restore Marlin so I could get back to pushing plastic.

I’m down to try adapting what you’ve got. I’ve upgraded my own printer, too, with the Aerostruder. Not sure what customizations (if any) that’ll require.

At this point, though, I really just need to get off my lazy ass and finish putting together my Voron build.

Just had a nice conversation on Klipper Discord about Lulzbot Mini washer probing. It should be possible using this config:

position_endstop:          150

[bed_tilt]
points: 
    0, 0
    0, 150
    150, 150
    150, 0

And calibrate using BED_TILT_CALIBRATE

Nice! Well, the pull request has been submitted. You can compare my config with yours and revert the single head extruder config parameters for pinouts, etc. I think the only ones that will differ are the heater and fan pins. I also added gcode macros for the start and end blocks that are designed to operate with X and Y offsets set to 0. This means that the coordinates for Z homing, wiping and probing may need to be adjusted to place the single nozzle in the proper locations for the single extruder.

https://github.com/KevinOConnor/klipper/pull/2111

Awesome! I’ll try to get this working on my Aerostruder tonight :slight_smile: