How should I configure a new type of extruder tool?

Basic Information:

Printer Model: Custom delta ceramic printer
MCU / Printerboard: BTT Octopus 1.1
Host / SBC: raspberry pi?
klippy.log attached:
logs-20240408-191050.zip (150.1 KB)

Describe your issue:

I am building a new type of tool for paste extruder 3D printers with the help of some of my students. We are calling it a “screed tool” and it’s job is to position a shaping tool next to the paste as it extrudes. The idea is to be able to create different texture and not be stuck with the rough layered look that we usually get with this type of printer. Here are some examples of our prints without the screed tool:

Here is what our first prototype looks like, it attached to the end of auger and has a stepper motor that can turn the tool around the nuzzle:

I have connected this to driver7 port on my octopus 1.1 board and used the following configuration to add this motor as an additional axis to my printer.cfg:

# Driver 7: Screed tool
[stepper_c1]
step_pin: PE6
dir_pin: PA14
enable_pin: !PE0
microsteps: 16
rotation_distance: 40

Now I am able to test that the wiring is correct by running the following command and the screed tool happily buzzes around:

STEPPER_BUZZ STEPPER=stepper_c1

Please note that this is a delta printer and the rest of the motors are defined as stepper_a, stepper_b, and stepper_c so I made an assumption that stepper_c1 should be the next one.

In grasshopper I am able to use a little bit of trigonometry to generate GCode for this tool or 4th axis so that at any given point it remains tangent to the current printing path. Here is a snippet of the GCode:

G1 F1800 X42 Y0 Z0 A0 E6.277328
G1 F1800 X41.530895 Y6.259775 Z0 A8.571429 E6.277327
G1 F1800 X40.134058 Y12.379716 Z0 A17.142856 E6.277328

However, it seems that axis A is not working or at least the motor is not responding. What is more interesting is that when I move other axis such as Z without giving any command to A, the screen motor is turning.

Could anyone shed some light on this issue? Is the configuration of the tool as an additional axis such as stepper_c1 a good path to take? If so, how should I reference this new axis from gcode?
Any other advice or suggestion is much appreciated.

Thank you!

1 Like

Honestly your best bet is probably this…

https://www.klipper3d.org/Config_Reference.html#manual_stepper

I don’t know how you’re going to define that in Gcode though, I mean I know you can with macros but as for legit slicing and working with things I’m not sure.

This is kind of a unique situation, maybe someone else has tackled something similar.

1 Like

@TheFuzzyGiggler thanks for the tip. I finally got a chance to update the configuration and now I am able to move the screed tool independently using commands. But as you hinted, now the challenge is how to execute this from GCode ideally using a G1 command.

After enabling the screed and setting it’s current position to 0 I can then send a command to move it, for example:

MANUAL_STEPPER STEPPER=screed MOVE=10

However, this movement in GCode needs to happen at the same time a print head movement happens which is using a command such as G1 X+10 Y+10 F6000.

Can anyone make some suggestions at what I could try next to a get a bit closer to my goal. To summarize I need to move the screed tool independently but at the same time as the other 3 axis from GCode.

Thank you!

Can you define the stepper under the [extruder] section? As in, just use your stepper setup just define the pins in the extruder section and it should work like any other 3d printer after that?

1 Like

That is a very interesting suggestion, I think you might be leading me in one possible path through this. I tried the following configuration:

# Driver 7: Screed tool
[extruder_stepper screed]
extruder:
step_pin: PE6
dir_pin: PA14
enable_pin: !PE0
microsteps: 16
rotation_distance: 40

But I was not sure how to test this newly created extruder called screed using GCode. I then linked this to the main extruder just to see what happens:

SYNC_EXTRUDER_MOTION EXTRUDER=screed MOTION_QUEUE=extruder

And now when I issue an extrusion GCode such as G1 E100 F19500 I see my screed tool also moving along.

My question is how can I control this using GCode? Do I need to define some macros? Is there a way right now to command this tool to move, ideally using a G1 command in GCode?

It is important to note the position of this tool will depend on the tangent line of the curve that is being followed and in no way it is linked to the amount of extrusion. So while it is interesting to see it move when extruding, the goal here is to position the tool based on direction of X and Y plane movements.

Thank you!

Why not just define it like:

[extruder]
step_pin: PE6
dir_pin: PA14
enable_pin: !PE0
microsteps: 16
rotation_distance: 40

I’d then see if you could use a regular 3d printer slicer to create and slice the designs and feed the results straight into your printer.

Of course you’d have to play with the settings, you’d need a very slow print speed and a very high layer height and all that. But that’s not hard to mess with by trial and error.

I’m sure other things would come up but that SHOULD get you 99% there I would thing. Cause fundamentally, what’s the difference between shoving hot thermoplastic out of a nozzle and shoving something out of a plunger and tip?

It’s abstractly the same thing.

1 Like

@TheFuzzyGiggler thanks for the quick response and your help so far.

Maybe I did not explain well before but that is not the issue at all. The two extruder motors are working just fine and I have had many successful ceramic 3D prints with this printer so far. I am trying to get the screed tool to work which is an additional independent motor that I am hoping to control using a G1 command. Here are some pictures that should help understand my setup a bit better:

Here is how extruder (main plunger) and extruder1 (auger) are defined in configuration file:

[extruder]
step_pin = PF9
dir_pin = !PF10
enable_pin = !PG2
microsteps = 1
rotation_distance = 100
max_extrude_only_accel = 3000
max_extrude_only_velocity = 1000
max_extrude_only_distance = 1000000
max_extrude_cross_section = 1000000
nozzle_diameter = 2
filament_diameter = 2
heater_pin = PA3
sensor_type = ATC Semitec 104GT-2
sensor_pin = PF4
control = pid
pid_kp = 22.2
pid_ki = 1.08
pid_kd = 114
min_temp = -250
min_extrude_temp = -250
max_temp = 250

[extruder1]
step_pin = PC13
dir_pin = !PF0
enable_pin = PF1
microsteps = 1
rotation_distance = 12
gear_ratio = 1:30
max_extrude_only_accel = 3000
max_extrude_only_velocity = 1000
max_extrude_only_distance = 1000000
max_extrude_cross_section = 1000000
nozzle_diameter = 2
filament_diameter = 2
heater_pin = PA2
sensor_type = ATC Semitec 104GT-2
sensor_pin = PF5
control = pid
pid_kp = 22.2
pid_ki = 1.08
pid_kd = 114
min_temp = -250
min_extrude_temp = -250
max_temp = 250
step_pulse_duration = 0.000003

My question is how do I control this extra tool, be it defined as an extruder or not, using a G1 or other GCode commands so movement of the tool can happen at the same time as X and Y axis movements.

Thank you!

Help me understand how the screed tool is supposed to work.

When you say screed it makes me think that after a layer is printed it “screeds” off the top to flatten it? Am I wrong in that assumption?

Having a better understanding of the intention can help me think of solutions.

1 Like

Interesting project. I have the same problem like Nick. I don’t understand the whole process.

edit: Sorry forgot to mention my answer. I’m not aware that Klipper can fulfill your needs (see quote). Maybe some of the Klipper cracks may give an input.

Good luck, hcet14

PS: I would change the two hoses. They look way too stiff.

That’s a hell of a sturdy cam and groove coupling though, I was tempted to mention that. lol

First time I’ve ever seen one on a 3d printer.

Straying wildly off topic but…
I need to start a “digital scrapbook” of the wildest things I see posted.

Best so far was the guy who put an entire Gen 12 Core I7 motherboard/cpu under his Voron 2.4

1 Like

I think the stiffness of the hoses is most problematic. Next question would be, how much weights the “extruder unit”. Is a delta printer the right start for that project?

This is not a problem at all. As I mentioned previously I am getting lots of great prints with this 3D printer. We also have a commercial ceramic 3D printer at our lab and this one that I built works just as well. And yes the delta has been an excellent platform for this.

I take that as a complement :). Yes this sturdy setup was the result of a project I did with my students to improve cleaning and changing out materials. Unlike plastic printers, switching material in a ceramic 3D printer is a messy process. You should see the 3" camlocks that are attached on both end of the plunger cylinder that is sitting on top. So far I am loving the use of camlocks, they make switching and refilling much easier than any other ceramic printer I have seen.

Thanks for your interest and help so far. Ok I’ll try to do a better job of explaining. I chose the name screed because it is a common tool used for applying texture (usually smoothe) to concrete:

screed_tool_example

Large scale 3D printers used for printing homes often have rotating nozzles and can have static “screed” tools attached to the side of the nozzle and that can help shape and stabilize the material as it flows out and gives a move smooth texture. Here is a good video that shows this process in a research lab:

My goal is to create an open source tool for ceramic 3D printers that can be used to further research in this particular area. At first glance it may not seem a big problem when you are printing a small cup. You can pickup a sponge and smooth the surface, but if you are 3D printing a multi-million $ home every bit of improvement in how the material is laid out will make a huge difference. I want to use my ceramic 3D printer to do research in this area.

So as you see in the video with the rotating nozzle head the goal is to keep the tools attached to the side of the nozzle tangent to the direction of the movement in XY plane. I have already made a grasshopper definition that can calculate the tangent value and can create the proper gcode. The problem I have is this:

How can I control this additional tool, which currently uses only 1 stepper motor, from GCode. Ideal solution would be to use a G1 command so that I could move this extra motor at the same time as the XY movement. However, if that is not possible, I could send a separate GCode for moving the tool and although the movement wont happen synchronously, it should be close enough that I could test the concept.

Does that help clarify what I am trying to achieve?

PS: Please don’t tell me Klipper is not the right tool for this. It is an open source project. If I have to get into the code and write a new kinematic for my printer I will do it eventually. I was just hoping for a straightforward solution because I imagine there must be many other scenarios that one would need to control additional stepper motors during print.

Thank you!

1 Like

Some people ask for help doing wild things that are totally not feasible using Klipper, but I don’t think this is really one of them. Really, you are 3D printing using a delta printer so I don’t think this is anything wild.

Possibly the easiest solution would be, why don’t you use a flanged outlet for where you’re extruding?

Like this

The bottom face of the flange would always screed the top of your layer no matter which direction you went.

I could be missing something obvious there, you definitely won’t offend me by pointing out any glaring issues, I’m mostly spit-balling ideas before delving into the harder things like rewriting kinematics.

Edit: Also, You’re right, camlocks are awesome

1 Like

Please don’t get me wrong. I like your project and I like

Open source is cool.

I think (after a few days of watching your photos and sleeping over it), that I understood your “screed tool”. The mirror confused me.

Everything looks so clean. I’m concerned about your lowest bearing and stepper. The ceramic grease will ruin those quite fast.

Can you post a link to a video showing your printer printing? Pictures say more than 1000 words.

1 Like

I got it working! I had to write a small macro but the key was the use of SYNC=0 to allow the movement of my screed tool happen at the same time as the XYZ movement with G1 command.

I am trying to give texture to the side walls not the top of the material. The tool needs to be able to reach previous layer

I’ll try to print get some clay running with this rool attached and I’ll post a video. I need to first update my grasshopper script and tune a few things, but I am almost there!

Thank you!

Here is the macro:

[gcode_macro SCREED]
gcode:
    M118 moving with screed tool
    # Move screed stepper if S parameter is provided
    {% if 'S' in params %}
    MANUAL_STEPPER STEPPER=screed MOVE={params.S} SYNC=0
    {% endif %}
    
    # Build the G1 command with proper spacing between parameters
    {% set move_command = "G1" %}
    {% if 'X' in params %}
    {% set move_command = move_command ~ " X" ~ params.X %}
    {% endif %}
    {% if 'Y' in params %}
    {% set move_command = move_command ~ " Y" ~ params.Y %}
    {% endif %}
    {% if 'Z' in params %}
    {% set move_command = move_command ~ " Z" ~ params.Z %}
    {% endif %}
    {% if 'E' in params %}
    {% set move_command = move_command ~ " E" ~ params.E %}
    {% endif %}
    {% if 'F' in params %}
    {% set move_command = move_command ~ " F" ~ params.F %}
    {% endif %}
    
    # Execute the G1 command if any axis parameters have been specified
    {% if move_command != "G1" %}
    {move_command}
    {% endif %}

And the GCode to use it looks something like this:

SCREED S=10 X=20 Y=-20 Z=100

Basically it combines a G1 command with MANUAL_STEPPER movement and the key is SYNC=0 which makes these movements happen in parallel

I guess my concern with that, and maybe it’s not a concern? Is… Are all your prints going to be hollow walled?

In other words, How are you going to prevent any “flange” from ruining your print if you need to move anywhere other than a straight line or a curve?

Or is that what the gears are doing? I can’t really tell.

Edit: Nevermind I watched the video, I get it. I might have an additional idea but I need to work it out mathematically first.

1 Like

Hello there,

Wouldn’t that be a “regular” use of additional axis?
(Normally it’s XYZA, not sure how this would be named in delta)

There are AFAIK forks of Klipper which implements 4th and higher order axis.
Usually targeted on CNC projects.

  • cad435
1 Like

Not quite, as to screed the extruded whatever it is the screed tool needs to be essentially tangential to the extrusion. Or at the very least directly in line with it.

Using another axis would be if it wasn’t related to the existing movements.

Hi everyone, nice machine!

What do you mean exactly?

I agree with cad435. From the GCODE it seems that this is what OP wants as well:

@arasbm as other might have pointed out already, stepper_c1 is not the way to add an extra axis to the machine. That syntax defines an extra C stepper, in sync with the main C stepper.

Using a manual stepper with sync=0 will probably work in appearance, but as the option implies, it is executed out of sync with the other movements. Your GCODE sample implies you wanted a proper axis, in sync with the rest.

If the loose coordination of sync=0 works for you, then great, you get independent acceleration control with it. Otherwise you’ll need a proper A axis, and for that you have two choices:

  1. Use a Klipper fork (and know its limitations).
  2. Use a Duet board with its nice web UI.

I’d go with option 2. I see no benefit to sticking to klipper just for this application.

1 Like