Skip to content
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

Feature Request: Independent fan speed for exterior perimeters #2776

Open
jschuh opened this issue Aug 18, 2019 · 11 comments
Open

Feature Request: Independent fan speed for exterior perimeters #2776

jschuh opened this issue Aug 18, 2019 · 11 comments

Comments

@jschuh
Copy link
Contributor

jschuh commented Aug 18, 2019

Version

2.0.0

Operating system type + version

N/A

3D printer brand / version + firmware version (if known)

N/A

Behavior

I want to be able to specify an independent fan speed for external perimeters (where more cooling improves finish) versus internal perimeters, infil, etc. (where minimal cooling improves layer adhesion and part strength).

Is this a new feature request?
Yes

More information

I looked at the CoolingBuffer and PrintConfig source, and it looks like I could code this up pretty quickly if there's any interest.

@ManuGithubSteam
Copy link

Very good idea!

jschuh added a commit to jschuh/PrusaSlicer that referenced this issue Aug 19, 2019
Adds a new seting and plumbs through the UI to independently control
the fan speed for external perimeters. Filed as issue prusa3d#2776.
@jschuh
Copy link
Contributor Author

jschuh commented Aug 19, 2019

I coded up a change here. I'm not sure exactly what the appropriate etiquette is (haven't contributed to anything on github before), but I'm happy to do a pull request if this is reasonable.

@jschuh
Copy link
Contributor Author

jschuh commented Aug 19, 2019

Here's a bit more context for why this change is important. CNC Kitchen recently posted a video demonstrating how reduced cooling levels significantly increase layer adhesion (and thus strength) of printed parts. However, doing so also negatively impacts the surface finish and resulting appearance. So, this change should allow tuning the exterior and interior to get the best of both worlds (i.e. strong layer adhesion with good surface finish).

@Mithrandil
Copy link

it seems like something is wrong, according to https://www.gcodeanalyser.com/ it triggers the 100% fan speed (when External Perimeters Fan Speed is set to 100%) in the internal part and not the external perimeter
image

@jschuh
Copy link
Contributor Author

jschuh commented Sep 15, 2019

Thanks, I couldn't find a tool that would actually show me fan speed. I had patched the source to keep the _EXTERNAL_PERIMETER comment in and was manually reading the gcode to verify the fan kicked in where I expected. It turns out "external perimeter" isn't exactly what I understood it to be (and my gcode reading skills could use some work).

I'm going to do a little code spelunking and try to understand if the information I need is already propagated or if I will need to figure out how to do so. Any suggestions?

@jschuh
Copy link
Contributor Author

jschuh commented Sep 15, 2019

Well, that was a fun exploration, and I think I can now authoritatively state that the fan speed rendering at www.gcodeanalyser.com is simply wrong. I reviewed the relevant Prusa Slicer code paths, and as far as I could tell my patch should work correctly since it relies on the same attributes as the logic for external perimeter speed rate. So, I then manually reviewed fresh gcode output from my patch, keying off the G1 F#### commands to verify that the reduced feed rate for external perimeters also matched the runs where my patch adjusts the fan speed. Everything checked out, so I dug deeper.

I searched around for another slicer that would let me visualize fan speed (should I offer to add such a visualization to Prusa Slicer?). I found out that www.canvas3d.io provides a fan speed visualization and allows you to set an independent perimeter speed (although it's for all perimeters, not just the external ones). So I sliced a calibration cube there with 10% base fan speed and 100% perimeter fan speed. The results show similar, wild discrepancies between the Canvas and G-Code Analyzer visualizations (images below).

Finally, I decided I should just print a calibration cube with my patch at 10% base fan and 100% for external perimeters, so I could watch and listen for the fan to spike on external perimeters. As far as I could tell it did so correctly every time—running at 10% everywhere except external perimeters, where I could hear the fan rev up to 100% (tested on my CR-10S, because the Prusa was busy printing other stuff).

So, I'm pretty sure my patch is correct and what you're seeing is just a bug in G-Code Analyzer, but perhaps there's something I'm missing?

Visualization Discrepancies:

canvas_cube
This is Canvas at layer 81 with perimeter fan speed at 100% (all perimeters, not just external) and base fan speed at 10% (notice the color coding).

gcode_analyzer_cube
Here's the exact same layer in G-Code Analyzer, with fan speeds that just don't make sense.

@Mithrandil
Copy link

That's a great news, I will try it again then!

BTW: I'm still wondering if the higher layer adhesion on CNCKitchen is due to printing on a "still hot" lower layer, or to depositing a new layer which cools down slowly.
In the former case layer adhesion would be better for smaller parts respect to bigger parts, and bigger parts would be much les affected from having no fan at all since they have time to colld down even without the fan.

@jschuh
Copy link
Contributor Author

jschuh commented Sep 15, 2019

I've uploaded this patch as a PR, which adds a preview for fan speeds (since I couldn't find a better way to get accurate visualizations).

Update 1 October 2019:
My fan speed visualization patch was merged last week, so if you're building with this patch you can now verify correctness of the output from within Prusa Slicer.

jschuh added a commit to jschuh/PrusaSlicer that referenced this issue Sep 15, 2019
Adds a new seting and plumbs through the UI to independently control
the fan speed for external perimeters. Filed as issue prusa3d#2776.
supermerill referenced this issue in supermerill/SuperSlicer Jun 5, 2020
Adds a new setting and plumbs through the UI to independently control
the fan speed for external perimeters. Filed as issue #2776.

merill note: i only picked the setting definition, as the other part will need an almost compete re-write
jschuh added a commit to jschuh/PrusaSlicer that referenced this issue Jun 28, 2020
Adds a new setting and plumbs through the UI to independently control
the fan speed for external perimeters. Filed as issue prusa3d#2776.
jschuh added a commit to jschuh/PrusaSlicer that referenced this issue Oct 17, 2020
Adds a new seting and plumbs through the UI to independently control
the fan speed for external perimeters. Filed as issue prusa3d#2776.
jschuh added a commit to jschuh/PrusaSlicer that referenced this issue Oct 25, 2020
Adds a new seting and plumbs through the UI to independently control
the fan speed for external perimeters. Filed as issue prusa3d#2776.
jschuh added a commit to jschuh/PrusaSlicer that referenced this issue Jul 17, 2021
Adds a new setting and plumbs through the UI to independently control
the fan speed for external perimeters. Filed as issue prusa3d#2776.
@Bumblebiber
Copy link

Hi,

this seems a very cool(ing) feature to me, but I don't get how I can actually use it. Do I have to modify some files myself?

@jschuh
Copy link
Contributor Author

jschuh commented Feb 6, 2023

@Bumblebiber, sorry, but it's probably not something you can try out unless you'd be comfortable checking out the Prusa Slicer source, applying the patch in #2921, and then building your own binaries (e.g. here are the instructions for building on Windows).

@AssiveMass
Copy link

Please add this feature, would be useful for PLA where fan speed has particularly high impact on surface finish and layer adhesion.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants