Non-invasive dual motor extruder and filament Load Script

Hello *,
I have developed and build a non-invasive dual Motor extruder.


On the rendered Image some parts are hidden, however, I did build it, and it did pass the first tests.

But I currently have a problem with my filament load and unload scripts.

For helping you with helping me, I will describe how my load script works:

  1. Hold the filament into the extruder input
  2. Select Load Filament in the Custom Menu
  3. The extruder will move very few mm to engage the filament ← Problem
  4. The User can go away
  5. The hotend heats up
  6. The Extruder will now move a longer distance to load the filament into the bowden tube
  7. Purging
  8. The User can start printer task remotely

The Problem is that in step 3 normally the hotend is cold, and therefore I use the FORCE_MOVE command to move the extruder anyway.
This is a low level command not designed for this purpose. It will ignore any condition and also ignore steppers that should be synchronized.

My script did work for more than 1 year now, but now it has reached its demise and I need to learn how it should be handled as intended.

This is my current configuration for syncronization:

[extruder]
max_extrude_only_distance: 100
max_extrude_only_velocity: 120
max_extrude_only_accel: 3500
full_steps_per_rotation: 400

step_pin: PF9
dir_pin: !PF10
enable_pin: !PG2
microsteps: 16
rotation_distance: 39.7

nozzle_diameter: 0.400
filament_diameter: 1.750
heater_pin: PA3
sensor_type: EPCOS 100K B57560G104F
sensor_pin: PF4
control: pid
pid_Kp: 24.835
pid_Ki: 1.623
pid_Kd: 94.994
min_temp: 0
max_temp: 300

[tmc2209 extruder]
uart_pin: PF2
run_current: 0.900
stealthchop_threshold: 999999



[extruder_stepper extruder_sync]
extruder: extruder
step_pin: PC13
dir_pin: PF0
enable_pin: !PF1
full_steps_per_rotation: 400
microsteps: 16
rotation_distance: 39.7



[tmc2209 extruder_stepper extruder_sync]
uart_pin: PE4
run_current: 0.900
stealthchop_threshold: 999999

I see 4 options right now:

  1. Learn the right command.
  2. Change the min extrusion temperature to 0 while loading.
  3. Hardware step dir bridge hack.
  4. Let the user wait for hotend warmup.

On 1st and 2nd I have no idea how to do this. Maybe you could help me. 3 and 4 are easy, but I would like to avoid this. Sadly m302 seems not to be implemented ( M302 feature request )

If somebody is interested in my hardware design, I can share it after some tests are done. Sadly the support from my side will be minimal.

Best regards and happy 3D-Printing

MasterQ

Looks good.

What are the advantages of having two extruder motors? I’m guessing they’re too massive for a direct drive - is this correct?

This is my guess too.
Good for a bowden setup.

This dual Motor extruder has 3 advantages:

  1. There are no invasive gears which are damaging the filament, instead there is are 2 gt2 timing belts that grabs the filament carefully over a large area
  2. If 1 motor is used there is need for a gear which would introduce backlash (if common dual drive extruder), this makes the extruder less precise and causes problems on direction changes.
  3. This dual Motor extruder can transfer more movement power with less force on the filament

I knew I saw something similar:

4 Likes

I implemented M302: Feature request: M302 support - #4 by LastZeanon

Hello @EddyMI3D ,

I watched the entire video. Yep. Good show. I like how the fellow put together the parts w/ the ideas he had.

That is neat.

Seth

1 Like

Ok, this kinda other usecase (direct extruder agains bowden extruder).
Additionally, the extruder here addresses some problems that the extruder in the video does not address.

  1. The dual motor extruder has a mechanism that allows to control the pressure on the filament
  2. The dual motor extruder absolutely avoids gears that transfer power. Specially plastic gears
    1. This solves backlash problem (as mentioned before)
    2. This solves problems of durability caused by transferring power from one gear to another gear with plastic gears (have bad experience with this)
  3. The dual motor extruder has much longer area to grab the filament → more precision and less slip (as mentioned before)
  4. The dual motor extruder build is possible with less precise parts
  5. The dual motor extruder build is possible with cheap standard part
  6. Sadly the dual motor extruder cover plates needs to be produced with a CNC (but this was at least no problem for me)
  7. The TPU beast has a nogo in my opionion here: (https://youtu.be/-LdFmPYItb0?t=287) as this will slip or needs to be glued.

However, all in all the TPU beast would not match my requirements. But what I really like is the option to pull the filament by hand. Maybe I will include this into the next revision if i have a good idea how to do :slight_smile:

Thanks for the inspiration.



This is how it looks if installed, the small black levers on the top allows regulating the pressure on the filament.

Maybe I found something for the requested solution here:
https://www.reddit.com/r/klippers/comments/sknxij/assign_multiple_fans_to_the_same_function/
It is still a hack, but I’m fine with it if it works. I will post a config if it works!

Thanks for this, I’m already working on my own fork so merging it with another could be annoying ^^ Can you maybe start a pull request for this, so it comes into the master? I already tried with my features, but it was rejected. I think you have better change with M302 as this is a small modification.
It could be really nice to have this functionality directly in klipper!

1 Like

Really a nice design. :+1:
Personally, I would never exchange a direct extruder for a bowden one. IMO, the design inherent drawbacks (in fact the bowden itself) just cannot be overcome, regardless how good the extruder is.

1 Like

Sadly this will not work, so I have still no solution :confused:


I run into this issue. What is what I expected as the motor step firmware part needs a good performance at this place, so this can not be implemented for motors.

Kevin answered this once on a similar issue here:

I have encountered a second problem:

[extruder_stepper extruder_sync]

Will not sync the settings as pressure advanced. This also means the motors are not completely in sync as move instructions will be calculated twice. This can wear out the timing belts, similar to a car with all-wheel drive and differential lock in curves, would wear out the wheels.

Somebody with a new idea?

Currently, I’m close to solve this by a hardware step/dir bridge hack, as I’m running out of ideas.

The branch I linked there is a clean copy of the klipper master with just the M302 feature added so merging it into your fork wouldnt be different than merging a change to master.
However I probably will make a pr

1 Like

Thanks :slight_smile:
The question about bowden or not is political/religion, and not solvable in my opinion. As both has advantages and disadvantages. The personal weighting of the arguments determines which method is preferred.

But for making the solution more simple (for my case) I measure on the hotend with a super light weight and ultra precice sensor that gives realtime compensation instructions to the extruder. With this method I solved the disadvantages of a bowden setup (at least these one I’m interested in), as the precision of a direct drive extruder can be reached with a bowden setup without having the weight of a direct drive extruder.
I can even reach much better precision as a direct extruder as also problems like slip can be compensated…

However, it’s a complicated setup and still needs development, what also is a disadvantage ^^ But one I can handle.

I guess with the currently available tool-set you are out of luck. This sounds like something very similar to duplication / replication mode on IDEX printers, but on the same extruder. There was a PR (https://github.com/Klipper3d/klipper/pull/4464) that never made it into mainline.

1 Like

Thanks a lot, I will be looking forward to it and wait for it!
I want to keep the customizations in the software I use at low at possible to keep it maintainability and specially for being able to merge main line with as few conflicts as possible.

Maybe I’m totally on the wrong track, since I never used it: The Enraged Rabbit Carrot Feeder (ERCF) should probably also need some means to synchronize their “feeding stepper” to the “extrusion stepper”.
Maybe worth checking how they solved it.

Really, really nice design, I think I can learn a lot from that, but sadly I don’t think they have a solution for the problem.

As I did hear some expert opinions on that, I will wait one more day for an upcoming solution and if this can not be solved with software I will just apply a Hardware hack.

If I’m lucky there will be a way, but in every case many thanks @all :slight_smile:

@Sineos can this How do I synchronise two motors? - #2 by Sineos somehow also be applied to extruders for synchronize them? Possibly this could be a working solution.

Or is the [extruder_stepper … ] already the extruder way for the same feature?

Generally speaking, I never had such an issue, so I would not consider myself the authority here.

I do not think so, since on an extruder a lot more functionality is included compared to a “simple” axis

I would have pointed to this in the first place but due to my lack of experience in this, I assumed that you already tested it and came to the following conclusion:

Whereas, I’m a bit surprised by this, since this would somehow contradict the idea of “synchronized” extruder steppers as per the documentation here: Configuration reference - Klipper documentation

Thanks for your answer!

I agree, but it is proved, I can set different settings for both extruder. I’m setting PA value by a script, and it is clearly visible that one motor uses pa and the other don’t. The motor movement looks the same if copy all settings to both drivers, but as mentioned, my conclusion is that both drivers makes the same calculations and there is no guarantee on that they really are in sync on step level :confused:

If this is unintended, it could be nice to get this fixed. But maybe some needs this functionality to have a bowden extruder and a direct extruder, but I think even in this case a real sync would at least not be wrong… But ok if some wants same pressure on the filament on all places this different PA values could be correct. I don’t know :confused:

The maximum time has been used on trying a software solution, so I solved it with solution 3. hw step/dir/enable bridge.
The second motor is still declared as [extruder_stepper extruder_sync] just for the case Klipper is doing some inits on the driver while enable the stepper. But i no longer care about settings like PA, as they get the step dir signal from the other stepper.

Ofc I respected conflicting signals and step, dir and enable is no longer directly connected to the mainboard on the second driver.


The hack is decent. Addional i set the shaft register in the TMC Gconf register for inverse direction for one motor :slight_smile:

Now both motor runs perfectly on sync on step level.

If somebody has a good idea I’m still interested.

We will start testing durability for these timing belts, hopefully they can do the job for at least 2 years :slight_smile:
Everything else got a fast test and is working well and as intended. Very, very nice!

Thanks for reading, thanks for trying to help.

Have some pleasant prints!
MasterQ

1 Like