DDEX (dual extruder single printhead) configuration help.

long story short: just set up rat os. I am just trying to add an [extruder1] to the config. pi + btt octopus v1.1 originally I tried to overwrite the regular [extruder] with [extruder0] but kept running into a new error after every save and reboot because I kept finding new places within ratos that [extruder] was split up between. [extruder] seems to be set up fine with all of the default config files for the hardware - however the rapido file specifies the wrong sensor type. I tried to overwrite the correct sensor type but klipper fails to boot because of the temperature range being too high. the temperature is reading correctly - (it is supposed to be a PT1000 but it is set to 104GT) similarly my new overwrite that adds [extruder1] is showing a room temp nozzle at over 150C despite the sensor type being correctly applied (ex1 uses a 104NT, not a PT1000). I don't know why the hotened with the wrong sensor is the right temp but the hotend with the right sensor config is showing such a wrong temperature. beyond that I know I'll probably have some more questions later on.
31 Replies
Lemcott
Lemcott•6mo ago
I absolutely did not have the wires crossed. that would be too easy for me to gloss over, obviously it could not be that.
blacksmithforlife
blacksmithforlife•6mo ago
printer.cfg please
Lemcott
Lemcott•6mo ago
I'm pretty sure I got it figured out, but doesn't hurt to have a second set of eyes
Lemcott
Lemcott•6mo ago
Lemcott
Lemcott•6mo ago
I would actually like to change [extruder] to [extruder0] someday. ratos just splits up the definition on so many pages I gave up trying to track it all down and left it as [extruder]
blacksmithforlife
blacksmithforlife•6mo ago
You have a bunch of stuff in there you don't need you should only need this in your user overrides section
[extruder] nozzle_diameter: 0.6 sensor_type: PT1000 pressure_advance: 0.03 [extruder1] step_pin: PG4 dir_pin: !PC1 enable_pin: !PA0 microsteps: 64 rotation_distance: 5.57 full_steps_per_rotation: 200 filament_diameter: 1.750 max_extrude_only_velocity: 120 max_extrude_only_accel: 800 pressure_advance_smooth_time: 0.02 max_extrude_only_distance: 200 nozzle_diameter: 0.6 heater_pin: PA3 sensor_type: ATC Semitec 104NT-4-R025H42G sensor_pin: PF5 min_extrude_temp: 170 min_temp: 0 max_temp: 285 pressure_advance: 0.03 control: pid pid_kp: 28.413 pid_ki: 1.334 pid_kd: 151.300 [stepper_x] position_max: 330
Lemcott
Lemcott•6mo ago
I know, I just copied the whole sections because I wasn't sure what else I might need to change later. Just convenience now with some clean up later. I also would rather define the pins for the second extruder the same way the first extruder is defined, just for consistency. HMM I wonder if I need to adjust the bed probe macro due to the limited X oh hey, got the 4028's working. definitely stealing a lot of the idex config hmm
Endstop x still triggered after retract
Endstop x still triggered after retract
it moves everything is lining up now might not need as much ratos help as I thought only hurdle now is that I can home all axes but fail to z-tilt the back z motor alright, yep, I am not finding a resolution for this although I'm not sure if this is still a ratos thing or just a fix my printer thing homing all axes works fine, fail the back Z probe during z tilt by getting "no trigger after full movement" and trying to mesh I end up either getting the same "no trigger" error or I start rubbing the pinda across the bed and getting "triggered before position" errors. searched through older threads but there was either never a fix stated or the fix was something to do with the user's own modifications okay changing position min to -10 got me through a tilt I def need to change the tilt and mesh macros though, as my max X movement is limited it also took 4 tries, so I'm not looking forward to troubleshooting frame skew and tensioning lmao okay, and now I should have tilt and mesh sorted. I... am curious how much this actually affects the system's ability to run tilt correctly since the probe isn't exactly over the contact point
Lemcott
Lemcott•6mo ago
any reason why my hotend fans aren't running?
Lemcott
Lemcott•6mo ago
somehow I managed to get the 4028's working no problem but something is up with the hotend fan. went all the way to 280 before realizing they weren't kicking on. tested to see if I switched the pins but nope they are def plugged into pd12 and pd13
miklschmidt
miklschmidt•6mo ago
you need to specify the heater on your [heater_fan] see: https://www.klipper3d.org/Config_Reference.html#heater_fan
Lemcott
Lemcott•6mo ago
that was it, I see toolhead cooling fans turn on and off around 50c on the webUI, however physically the fans are still not spinning.
miklschmidt
miklschmidt•6mo ago
Well, that's an electronics issue (or wrong pins, but you said those were correct)
Lemcott
Lemcott•6mo ago
hey would you look at that polarity is a thing that matters. would the best way of setting up the offsets for the second extruder be within slicer or klipper? I could set a gcode offset for the second nozzle and just run it like that I don't know if this is a ratos/klipper thing or my slicer but both extruders are spinning/retracting at the same time despite nothing I'm seeing in the slicer telling it to yeah, I'm not seeing any E1's in the gcode, only E0
miklschmidt
miklschmidt•6mo ago
check that you didn't use a parallel stepper port
Lemcott
Lemcott•6mo ago
Wow, did not know the octopus had that but sure enough... They have separate pins and step sticks, is there any way to turn it off? The only board I've used with parallel has one driver to two ports Oh my God how have I been staring at this thing for OVER A YEAR only just now realizing there are 9 ports and 8 stepsticks
miklschmidt
miklschmidt•6mo ago
😂 All boards pretty much have those, i don't get it either lol
Helge Keck
Helge Keck•6mo ago
check if the z steppers are in correct order, use the buzz command i would also check the leadscrew couplers
Lemcott
Lemcott•6mo ago
Oh That was fixed in a fix my mesh thread Realized that I never changed the rotation distance in the config as I'm using tr8*2 screws I'm still scared to put the second nozzle in Getting those two extruders level with each other seems like it will be difficult I've been modifying the new toolhead to have an adjuster plate but that will be some time to finish
Helge Keck
Helge Keck•6mo ago
yeah, your setup requires patience do not rush
Lemcott
Lemcott•6mo ago
I've got my two sany denki's configured as part cooling fans and they work fine from the mainsial interface but I'm having toruble getting them to actually kick on during a print when they are supposed to finally getting around to adding a webcam too... crowsnest log says it sees the cam and has started but 'm not seeing any webcam panels on the dashboard nor any options in the settings. weird, finally showed up in settings after chanigng the config and srestarting again. was able to 'add webcam' from there and reconfigure the same settings. yeah okay, I'm still stuck on this. turns out klipper kinda hates controlling multiple part cooling fans? am I forced to set up some complex m106 replacement macro? I've been digging through the idex git trying to figure out how helge is doing it but I'm lost. yep, there it is. a big m106 replacement macro Tried just using the idex git's 106 macro after removing the idex macro parameters and realized that wouldn't work when I started to think how klipper is supposed to figure out which of the two fans to control at any one period. Now I'm kinda stuck between either continuing to reverse engineer the idex macros to apply to DDEX or get just the fans configs to work or just develop a new one from scratch.
[fan_generic part_fan0]
pin: !fan_part_cooling_pin
cycle_time: 0.01
enable_pin: PB10

[fan_generic part_fan1]
pin: !fan1_part_cooling_pin
cycle_time: 0.01
enable_pin: PB11

[gcode_macro M106]
variable_swap_speed: -1
gcode:
# parameters
{% set s = [[params.S|default(255)|int, 255]|min, 0]|max %}
{% set p = params.P|default(-1)|int %}
{% set speed = s / 255 %}

# Set speed to -1 by default
SET_GCODE_VARIABLE MACRO=M106 VARIABLE=swap_speed VALUE=-1

# Set speed
{% if params.P is defined %}
{% if params.S is defined %}
SET_FAN_SPEED FAN=part_fan{params.P|int} SPEED={speed}
{% else %}
SET_FAN_SPEED FAN=part_fan{params.P|int} SPEED={speed}
{% endif %}
{% else %}
{% if params.S is defined %}
SET_FAN_SPEED FAN=part_fan0 SPEED={speed}
{% else %}
SET_FAN_SPEED FAN=part_fan0 SPEED=0
{% endif %}
{% endif %}

[gcode_macro M107]
rename_existing: M107.1
gcode:
{% set p = params.P|default(-1)|int %}
M106 S0 P{p}
[fan_generic part_fan0]
pin: !fan_part_cooling_pin
cycle_time: 0.01
enable_pin: PB10

[fan_generic part_fan1]
pin: !fan1_part_cooling_pin
cycle_time: 0.01
enable_pin: PB11

[gcode_macro M106]
variable_swap_speed: -1
gcode:
# parameters
{% set s = [[params.S|default(255)|int, 255]|min, 0]|max %}
{% set p = params.P|default(-1)|int %}
{% set speed = s / 255 %}

# Set speed to -1 by default
SET_GCODE_VARIABLE MACRO=M106 VARIABLE=swap_speed VALUE=-1

# Set speed
{% if params.P is defined %}
{% if params.S is defined %}
SET_FAN_SPEED FAN=part_fan{params.P|int} SPEED={speed}
{% else %}
SET_FAN_SPEED FAN=part_fan{params.P|int} SPEED={speed}
{% endif %}
{% else %}
{% if params.S is defined %}
SET_FAN_SPEED FAN=part_fan0 SPEED={speed}
{% else %}
SET_FAN_SPEED FAN=part_fan0 SPEED=0
{% endif %}
{% endif %}

[gcode_macro M107]
rename_existing: M107.1
gcode:
{% set p = params.P|default(-1)|int %}
M106 S0 P{p}
this is dumb and does not work wait no this... does work but I've definitely got the math wrong converting 255 to 1 wait I just did an S127 command and got 50% speed so no, the math is right this works I guess. huh... okay it does work part fan0 kicked on during the priming blob but right after the priming blob I get an error:
The value 'part_fan-1' is not valid for FAN
The value 'part_fan-1' is not valid for FAN
and the print is canceled. I know I didn't touch the start or priming macros okay, I can't recreate if I m106 without a P set, a P0, or a P1 but I can trigger it with an M107 oh, I see I'm not even calling p in the m106, but I am in m107. I don't think I need to convert P-1 into p at all.
Helge Keck
Helge Keck•6mo ago
this channel i so funny, its like i can listen to your thoughts kekw
Lemcott
Lemcott•6mo ago
sometimes I think I need help, but I think I'm finding out I just need more time lol now I'm fighting the slicer sending S244 to my sanyo denki and blasting a PLA test print with too much air lmao also I totally get now wanting to mess with an existing gcode command but god i wish klipper supported multiple part cooling fans easier
Helge Keck
Helge Keck•6mo ago
technically you could use 95% of the complete idex code its not so different from your setup
Lemcott
Lemcott•6mo ago
I really did think about it, but modifying this one macro seemed easier than trying to do the all of the idex macros I do eventually want parity also I'm dumb and using a 400 bed in a 400 frame so I can't do wipers/cameras
Helge Keck
Helge Keck•6mo ago
you can use a servo wiper camera doesnt need to be isntalled permanently
Lemcott
Lemcott•6mo ago
that is an idea, I also thought about just lining the edge of the print bed with one long wiper "bump", a few other things came to mind... but ultimately I want to be able to raise/lower the nozzles, and that requires a whole printhead redesign, which allows me to do other things like cutters and wipers mounted on the head. so this is where I'm spending most of my time.
Helge Keck
Helge Keck•6mo ago
definitly an interestng project did you considered a rotating toolhead? where only one nozzle points to he bed while the other is slightly offsetted
Lemcott
Lemcott•6mo ago
oh, I did see a project like that online somewhere
Helge Keck
Helge Keck•6mo ago
yes, there are some people who already did that, i mean it adds extra complexity to the system, but could work if well executed
Lemcott
Lemcott•6mo ago
yeah, complexity (and by proxy print head weight) is a big concern, every idea I've had so far includes a big risk of feature creep that will slow down development and print time. one main goal is to not add any additional servos/motors if possible, control most or all actions via cam slams