-
-
Notifications
You must be signed in to change notification settings - Fork 5.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
docs: dual_carriage #4508
docs: dual_carriage #4508
Conversation
If anyone knows how dual carriage works with bed level, please let me know. That's the other big question I wanted to answer but couldn't because I don't have one on my idex printer. |
I didn't test a bed_mesh or z_tilt myself on a IDEX but for what I know it works. Ankurv, tester of hybrid-corexz, uses the bed_mesh. I am a little embarrassed because #4464 will overwrite the M106 macro totally. In addition I don't agree on some points:
Concerning the documentation I have a few comments too:
|
Can you tell me more about how #4464 will overwrite the M106 macro? I just took a look at it and I can see this comment mentions the fan things but I didn't see anything about where or how to configure multiple part cooling fans so each extruder can have it's own fan speed. At this time, Using g-code offsets to calibrate an IDEX printer seems like the wrong tool for the job and is a bad idea in my mind for a couple of reasons.
I believe all 3d-printer owners should have calipers that go down to .01mm anyway for calculating flow. But even if you didn't already have them, I don't think the solution is a printable vernier. First of all, I'm not sure how the part you linked would achieve any accuracy beyond .1mm so step 2 could accomplish that without any need to slice and with much less filament. Without a .1mm nozzle or some really fine slicer tuning, or a lot of filament and a big bed, I'm not sure a .01mm printed vernier could achieve the accuracy of a calipers either. No matter whether you're going for multiple colors in a model, or soluble supports in a functional part, you're gonna need the precision that you can only get with a dedicated measuring tool. And tbh if you have a printer with dual extruders, I think you can afford a .01mm calipers. |
4464 is still a work in progress concerning the macros and documentation. You can have a preview of the macros in DrumClock's comment. We are currently testing and improving the macros in order to use all idex modes.
That's a forget, thank you to pointed out. Since #4296 is merged, hybrid-corexy and hybrid-corexz have a dual_carriage ability too.
This is however the typical use of SET_GCODE_OFFSET according to the documentation G-Codes.md. G-Code offsets are still needed for Y and probably Z, so why not X too?
True. In your documentation you advise the user to modify the limits after doing the adjustments. This last step should avoid collision.
One can use the
No need, it is typicaly set in the T1 macro. You will find this command in the current sample-idex.cfg. To be clear, I don't advise to set all the X adjustement in offset. IMHO the endstop_position adjustment should be the tool for the precision range of the tape measure (>2mm), then use the G-code offset for fine tuning. |
77f1e1a
to
79ccba0
Compare
I haven't tested these new macros yet, don't merge |
60c9acd
to
08a17e0
Compare
Using the adjust commands for g-code offsets might be a bit easier if you were expecting to make multiple adjustments in a row but you shouldn't need to. You should start with an idea of how big your printer is I think, after the first test you'll likely need to configure the macro for step 2, which will require a restart, and if you were to put your tuning into gcode offsets in t0 and t1 macros, you'd still need to restart again to get your new macros to take effect before running step 3 anyway. Where it says gcode offsets are useful in tool change macros is referencing when you have 2 extruders fixed relative to each other, not an idex. I think you should use the config options for what they're meant to do. Position_endstop exists so Klipper knows where the endstop is and can accurately place the limits that protect the printer from itself and yourself, and who knows what else will be dependent on the position_endstop value down the line. You wouldn't write a macro to replace M104 or M140 to compensate for a weird thermistor, you would define a new thermistor. I've fixed the fan macros I think, will test them in about an hour when my FlashForge is done printing something. |
they work |
Hi, just read this issue as I'm myself interested into IDEX machines. Coming from the professional CNC industry world, I can only second that using SET_GCODE_OFFSET in tool change macros (like T0, T1, Tx) is THE WAY to do it properly if you want to follow industrial standards from for example Fanuc or Siemens. And I also second that using a calibration part is easier if you don't have the proper precise caliper tool. Everybody is able to print a part but not everyone have the proper caliper. |
I never said that was a bad idea. In fact that is what step 2 is. What I said is to achieve the precision necessary to make an IDEX actually make sense, you need to calibrate the machine down to tolerances that you cannot see with the naked eye and would require too large a build area for something like a printed vernier in some cases. You have to remember that typically on an idex, both extruders cannot reach the entire build area which shrinks your available build area. Just like how Marlin and Klipper have different suggested ways of tuning linear/pressure advance, I'm sure someone else is going to come up with another way to do this. Maybe you print a vernier that isn't all in one line. Maybe you print a vernier that goes up the Z axis and uses Klipper's tuning tower command. Maybe you use sensorless homing to home the right one into the left one. There are other docs here that recommend using a calipers for various things and I still stand behind that if you have money for an IDEX printer you should have a calipers anyway.
This is literally the reason I recommend using the If we wanted to truly match the best practices of the CNC world then we should have something like another configuration option for dual_carriage just for this that is tuned like a probe offset. This would be managed by Klipper with the |
Alright, I have an idea that might make people happy but it's gonna take a while to test so I'm converting to draft for now |
3c0c11d
to
a3ee140
Compare
I can provide a little feedback! I just went through setting up a hybridcorexy IDEX printer in the last few days and love that this functionality is being improved in Klipper. I did initially use the X_max endstop position as a way to get the toolheads relatively close to aligned (within 0.5mm or so), but after that I used the vernier test print to get X and Y offsets. I wasn't expecting to need a Y offset but I ended up needing one--likely just tolerance stickup and assembly of both my toolheads. It took me a try or two to figure out the test print but it was super easy to read and visually see what offsets I needed. I wouldn't have wanted to try to measure with a caliper, once you're in the fractions of a mm range it's hard to be very precise. The results are pretty good I think--I probably could adjust alignment a little bit (I was streaming on YouTube and just wanted to get to a test print) but it's functional. |
Same, I am realizing that a Y offset is also necessary. So I am working on a system that uses [save_variables] to define the offsets and apply them as necessary. |
What's the status of this PR? -Kevin |
I just had to go through figuring out the fan situation for fans on an IDEX, and right now the best solution is to have a sacrificial # Sacrificial "main" fan
[fan]
pin: rpi:gpio20
[fan_generic fan_extruder]
pin: PC6
[fan_generic fan_extruder1]
pin: yz:PC6
[gcode_macro _SET_TOOL_FAN]
variable_speed: 0
gcode:
SET_FAN_SPEED FAN=fan_{printer.toolhead.extruder} SPEED={params.SPEED}
# Store the fan speed so that we can carry it over during toolchanges.
SET_GCODE_VARIABLE MACRO=_SET_TOOL_FAN VARIABLE=speed VALUE={params.SPEED}
[gcode_macro M106]
rename_existing: M106.1
gcode:
{% set s = params.S|default(255)|int %}
_SET_TOOL_FAN SPEED={s / 255}
# Set the original fan speed pin, else Klipper itself thinks the fan isn't on.
M106.1 S{s}
[gcode_macro M107]
rename_existing: M107.1
gcode:
M106 S0 I did not yet use #4464, but once that lands these macro's will have to be updated to sync the fans when in duplicate/mirrored mode. |
@KevinOConnor - regarding fans, I've been printing with double fan_generic sections and custom m106 and m107 macros and it's worked great for me. @grigi did you have an issue with this implementation that forced you to go about it the way you did? |
The issue for me is that without having a sacrificial/dummy For example, mainsail only shows the separate fan controls, but not a combo one, and in the display the fan speed is always reported as 0% (and the menu options to change fan speed is missing). Thus just restoring the functionality that is there standard for single-tool printers. Ideally I would like to completely virtualise it, instead of having to have a real pin. Hence me using a pin on the RPi host, as I don't have those connected. Another thing is I wanted my default fan to automatically apply to the active toolhead only, for when printing gcode that has no knowledge of multiple toolheads. (e.g. not using P) This may be a bad assumption on my part, or not. Now that I think of it, I should:
I will have a go at this, this weekend. Disclaimer: Note this is my first IDEX (and its built from spare parts), and I don't have much experience on how best an IDEX should be used yet. If you believe that I'm missing a point here, please tell me. |
Minor update to a misunderstanding: According to spec here: https://www.reprap.org/wiki/G-code#M107:_Fan_Off M107 should just be an alias to M106 S0, but that it needs to disable all fans if P is not specified. |
Hi, Apologies for not getting back when I said I would. I have been reworking my config a lot to try and keep the macros I propose as simple as possible. For getting a polished IDEX experience there is docs that wasn't clear re:
I feel the IDEX docs should make these gotchas clearer. Another thing, having "perfect" docs is not a requirement, this PR significantly improves the situation already. |
When I started working on this, Regarding your comments on screens, I do not have a display on my printer, I use klipperscreen. I assume this will involve custom glyphs or menus or something but I literally have no knowledge of how the klipper menus work so someone else will have to introduce config examples/documentation in another pr. Regarding m107, I am trying to follow the reprap spec so when I revisit the fans macros after 4464 I will review those before undrafting this pr. Apart from that, I'm sure there's someone who will want the macro to work differently, and they can do that in their own config, which is the beauty of Klipper. |
d1c1d90
to
f2928f6
Compare
@grigi can you check that I integrated your fan work correctly? |
@charlespick The fan macros look good 👍 One other comment, I found that printing this: https://www.thingiverse.com/thing:6632 and both measuring the height and then looking at the first layer visually, so that they are identical, helped me dial in the Z offset very well. It's important to also mention Y offset tuning, as for example, even though I have 2 v6-clone hotends (probably different manufacturers) and mounted in the same way, I have a colossal Y offset of 1.23mm |
I mentioned y offset tuning a couple of times 👌 |
Retroactively signing off some commits of mine. This squash consists of: commit 9831cf20d4cc08731e6d3d24989293e1085a74d1 Author: Charles Pickering <17918019+charlespick@users.noreply.github.com> Date: Mon Oct 4 14:56:17 2021 -0700 white space and fans commit d1c1d90 Author: Charles Pickering <17918019+charlespick@users.noreply.github.com> Date: Fri Sep 17 17:58:04 2021 -0700 minor changes todo: [fan] section commit f6eac58 Author: Charles Pickering <17918019+charlespick@users.noreply.github.com> Date: Fri Sep 17 17:20:53 2021 -0700 update docs commit 414e2d7 Author: Charles Pickering <17918019+charlespick@users.noreply.github.com> Date: Fri Sep 17 16:22:24 2021 -0700 update toolchange macros with offset management syste commit a3ee140 Author: charlespick <17918019+charlespick@users.noreply.github.com> Date: Tue Jul 27 11:22:29 2021 -0700 well that didn't go as expected Signed-off-by: Charles Pickering <charles.pickering@live.com> commit 4c73e6d Author: charlespick <17918019+charlespick@users.noreply.github.com> Date: Tue Jul 27 10:53:22 2021 -0700 changes_1 Signed-off-by: Charles Pickering <charles.pickering@live.com> commit 9d43291 Author: charlespick <17918019+charlespick@users.noreply.github.com> Date: Wed Jul 21 14:17:45 2021 -0700 docs: dual_carriage Added an STL for calibration, some gcode macros to the sample idex config, and an entire document on configuring an idex printer. Signed-off-by: Charles Pickering <charles.pickering@live.com> Signed-off-by: Charles Pickering <charles.pickering@live.com>
f2928f6
to
f2cfa70
Compare
Hi @KevinOConnor , this PR is ready for another review round from you. 😄 |
It looks like this GitHub Pull Request has become inactive. If there are any further updates, you can add a comment here or open a new ticket. Best regards, PS: I'm just an automated script, not a human being. |
You know after the work that I put in to help @charlespick to get this ready, and it just getting ignored like this is quite discouraging. |
I apologize. The ticket should not have been closed as there was feedback provided after I asked for it. Unfortunately, I'm severely backlogged on reviews and I fear I have to face the reality that I can not review all the PRs that Klipper receives. At this point, I'm going to try to focus on changing the PR review process (ideally by getting others to help with reviews) instead of trying to review all the current PRs. I know this is slow and discouraging, but I don't know of a good alternative at this time. -Kevin |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please be advised that I do not own an IDEX printer. So, I looked at the PR from the theoretical point of view. So, take my comments with a grain of salt :)
G90 | ||
M83 | ||
T0 ; test T0 | ||
G1 X120 Y150 Z.2 F4800 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The way the tuning guide goes is that the Z height for the hotends is calibrated (step 4) after this macro is used (step 2). And the step 4 says "To print with low layer thicknesses, you'll probably find that the error between your nozzles in the Z axis is more than your layer height itself." I'm thinking if the layer height .2 is too small at this point?
# Only rename_existing if you have a sacrificial [fan] section | ||
rename_existing: M106.1 | ||
# The variable that controls fan speed swopping if not specifying P parameter | ||
# -1 means the control is disabled, a value of 0-1 is the requested fan speed. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It could be just me, I got confused a bit at first by a description of P parameter. Maybe you could say that P is the index of a fan (0-1)? *And -1 is the active extruder fan.
{% set p = params.P|default(-1)|int %} | ||
M106 S0 P{p} | ||
|
||
[gcode_macro M107] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is duplicate?
|
||
# Update core Klipper's fan speed | ||
# Only do this if you have a sacrificial [fan] section | ||
M106.1 S{s} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@grigorig so, this is only useful for reporting?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If you are talking of the unused fan pin, then it also allows you to alter the fan speed for the active tool from the display menu(or a webUI).
Most of the benefit is seeing the fan speed correctly reflect on the 12864 display for me though.
{% endif %} | ||
{% set fan_speed = printer["gcode_macro M106"].swap_speed %} | ||
{% if fan_speed != -1 %} | ||
SET_FAN_SPEED FAN=fan_extruder SPEED={fan_speed} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I wonder what is supposed to happen to the fan speed of the other extruder? Would it make sense to really swap their speeds, so that the fan of the parked extruder get the fan speed of the previously parked extruder?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
So, using CURA, if you tell it you have separate tools it will set the fan speed of each manually and the variable_swap_speed will stay -1 (Because P is set) and let CURA control everything.
If using PrusaSlicer, it won't emit the P{n} so it expects the active tool's part fan to be controlled.
Currently having the part fan of the parked extruder run will cool somewhere on the bed that isn't where printing is happening. In theory this unnecessary draft could cause part warping so I set it to turn off entirely to minimize risks.
This is based on the assumption that the heatsink fan is adequate to not cause the tool to melt.
# The variable that controls fan speed swopping if not specifying P parameter | ||
# -1 means the control is disabled, a value of 0-1 is the requested fan speed. | ||
# Access via {printer["gcode_macro M106"].swap_speed} | ||
variable_swap_speed: -1 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe this would be more like 'active_fan_speed' ? Because the active fan gets this speed. But I do not insist on this.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I do like that name convention. Ultimately @charlespick will have to alter this PR to have that change, so it's up to him.
# create the file and insert the folloring content (without the #) to start | ||
# | ||
# [Variables] | ||
# xoffset = 0.0 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I didn't try it myself, but would it be possible to use |default(0.0)
at the place of their use? Or is defined
. So that the user does not have to manually add this section to the save variable file. But maybe it doesn't work that way.
|
||
{% if params.Z_ADJUST is defined %} | ||
{% set newZ = params.Z_ADJUST|float + oldZ %} | ||
SAVE_VARIABLE VARIABLE=yoffset VALUE={ newZ|float } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yoffset
should probably be zoffset
= )
Hi @charlespick there are a lot of bugs in sample-idex.cfg ..... e.g. you define: [fan_generic part_fan_1] but you use: |
this pull request has gotten really confusing to me as more and more code snippets keep getting piled on. right now I am too busy with work and school to keep contributing to this pr that I started in the summer, especially since my idex printer is the one I use for school so I can't be tinkering around with it constantly. when spring break comes around I might make one last push to get it to a workable state. |
My IDEX is not working after sitting in the closet. Not exactly sure what's going on and I don't know when I'll be getting back to it. I'm going to close this now but I encourage @grigi and @dmbutyugin to take what they are comfortable working on from here and charlespick/klipperconf to start a new discussion. Sorry it has to end this way :( I really appreciate everyone else who contributed to this. |
Sigh, timing isn't great. I'll only have a look at it in probably 3 months. Goods and people are not traveling together during emigration 🤷 |
Finally basically settled again. I have started on this, can I just copy what I like and credit you in the PR? |
@grigi Go ahead I don't have a dual carriage printer anymore so I don't have anything to contribute beyond what I have already published here |
Adds documentation for IDEX printers. This includes: * Offset calibration macros, docs and prints * Fan control improvements * Tool changing macros * Sample config * Some extra comments around IDEX printers Based on Klipper3d#4508 Signed-off-by: Nickolas Grigoriadis <nagrigoriadis@gmail.com>
Added an STL for calibration, some gcode macros to the sample idex config, and an entire document on configuring an idex printer.
Signed-off-by: Charles Pickering charles.pickering@live.com