Extruder with endstop

Hello everyone!

I’d like to ask what would be the best place in the code to add a homing endstop to an Extruder.

I’ve been studying the sources and docs for a few days, but an answer is not really evident to me yet.

Thank you for the great project :slightly_smiling_face:

Can you elaborate?

Do you mean something like a BLTouch that is responsible for the correct height of the extruder?

1 Like

Hello! Thanks for the interest Eddy.

The application is for syringe-based 3D-printing. Those extruders would benefit from automatically finding their top-position of the syringe (i.e. homing the extruder axis).

This is different from setting the a correct height for an extruder on the Z axis using a probe.

Does this answer your question?


1 Like

This should help!


I managed to add the endstop and write up a module for homing extruders. Its not free of quirks, but it works well enough.

The basic idea is to (1) add an endstop to the extruder’s stepper, and (2) write an extra module similar to manual_stepper. The module registers an extruder homing command, creates a virtual toolhead with only the extruder stepper, and passes it to the homing move.

If someone is interested in discussing the code or contributing let me know :slight_smile:

Hey! I’m actually working on something very similar for work. Would you mind sharing your config file to see how you set this up? Would also be willing to help improve it if needed! :slight_smile:

Sure, everything is in my fork of the Klipper repo: GitHub - naikymen/klipper-homing-extruder: Klipper is a 3d-printer firmware, not a CNC firmware. Let's get it there!

The configs there are tied to changes in Klippy. You’ll have to check out my fork/branch and restart Klipper to apply the changes.

In theory it works just as current Klipper does. I regularly merge changes upstream.

Let me know how it went! I would like hear your thoughts too :slight_smile:

1 Like

Sweet, thanks mate!! I’ll dabble around for a bit and will let you know how it went.

Just to give you an idea of what I’m doing, I’m building a multimaterial bioprinter. I currently have 2 syringe pumps (will be 4 in the future) mounted to my printer. Each syringe pump has two endstop switches; one at the top position like yours, and the other at the carriage of the pump. The idea is to have the following homing sequence:

  1. First, the carriage moves up until it reaches the endstop to find its “min” position.

  2. The carriage then moves back down until it reaches the plunger (the plunger is purposefully not fixed to the carriage for my setup, so it can only extrude, not retract). This will be the “0” position, after which the print can start.

I’m currently trying to get it to work without step 2, but will eventually need to include it.

Also, may I ask what you’re using your setup for? Just wanna see how similar they are to see how much we could collaborate (If you’re interested, of course).

Thanks again m8 :slight_smile:

Hey, sorry to bother you again. I’m trying to get your fork to work but I can’t connect to my printer. I tried:

-Replacing only the files “extruder.py” “homing.py” and “toolhead.py” with the ones in your fork.
-Replacing my klippy folder with the one in your fork.
-Replacing my entire klipper folder with your fork.

I restarted klipper everytime for all cases with no luck. Is there anything else I’m missing?

It seems that there is a lot to talk about :slight_smile:

Is there any useful info in the logs? All the configs must be updated to match your pins. The current pin names are specific to my setup; a couple Arduino CNCshields.

If it’s all right with you we can chat by PMs - to solve the issue and avoid cluttering the thread.

We can share the solution here later on.

It looks great! I wanted to reuse a 3D-printer for that but wasn’t convinced by the moving bed.

What are you printing?

I wanted to try painting on YPD plates with my yeasts for fun.

I think you can use the extruder homing feature for endstop 2 (the lower one).

My fork will do CNC-style probing too, so you can try use endstop 1 (the top one) as a regular “probe”.

Know that there are “upstream” issues in Klipper with absolute extrusion and tool-changing; this means that the “0” origin of the extruder will not be very useful for now. For details see: Bug: extruder [re]activation applies the incorrect coordinate system

It can be patched though. I’m waiting for Kevin to share his thoughts.

Of course, it’s a “pipetting” robot for simple lab protocols: pipettin-bot / Pipetting Bot · GitLab

Mainly micropipettes and tips instead of syringes. There are a few videos of it moving around (?)

That would be lovely :slight_smile: let’s talk!

You may want to join Jubilee’s lab automation channel on Discord. We also can talk over there, and others will surely help.

Best and thanks for sharing too!

1 Like

Small update: there was a bug with probing on the E axis, which I had not tested. Fixing it made the entire implementation everything much more elegant. :sparkles:

Thanks a lot to @themollusk for testing and helping out. :kissing_heart:

Also, the fork’s README is now hopefully better and more welcoming.