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

Fan and cooling #110

Closed
triffid opened this issue Dec 10, 2011 · 36 comments
Closed

Fan and cooling #110

triffid opened this issue Dec 10, 2011 · 36 comments
Labels
Done This issue is implemented and considered complete. Feature request This is an idea for a new feature in Slic3r Needs testing

Comments

@triffid
Copy link
Contributor

triffid commented Dec 10, 2011

with speed inversely proportional to layer area, ie small layers = full speed, large layers = less speed.

special cases:
first (and possibly second) layer should have no fan at all, and bridges should have full speed fan.

@alranel
Copy link
Member

alranel commented Dec 10, 2011

Can you suggest what options should we expose to the user?

@triffid
Copy link
Contributor Author

triffid commented Dec 10, 2011

I've heard calls for a maximum and minimum value.

If using PWM then most fans won't start below 50% and will stall if dropped below 30%.

Some printers have difficulty maintaining nozzle temperature if the fan runs at 100%.

We also theoretically need some way of choosing a particular fan PWM value given the layer area.

Given PWM min, PWM max, min layer area (where fan is at max) and max layer area (where fan runs at minimum) you could just start with a straight linear interpolation and improve the algorithm later, perhaps to a model of airflow vs layer print time using a bezier curve or something.

You'll need a special case in the minimum enforcement code so we can actually turn the fan off completely

Perhaps we should ditch the layer area idea altogether and just go by layer print time, since that's probably a more direct contributor to the need for a fan.

If we hit the minimum layer print time where the fan is at max, we should possibly slow down a bit, like sfact cool. Remember a minimum speed!

@alranel
Copy link
Member

alranel commented Dec 10, 2011

People are discussing cooling features on the RepRap forums too:
http://forums.reprap.org/read.php?263,109253

@alranel
Copy link
Member

alranel commented Dec 14, 2011

So, three user options:

  • enable fan (yes/no)
  • minimum PWM (0-255)
  • maximum PWM (1-255)

Logic is just:

  1. detect layer printing time
  2. interpolate that with a minimum time (max PWM) and maximum time (min PWM) function
  3. apply that PWM during the print of the whole layer

Question is: how to determine the min and max time to compare the layer's time with?

Also: is PWM important? Does it make difference in print results? Why not have the fan always at a constant value? I have poor experience with fans.

@triffid
Copy link
Contributor Author

triffid commented Dec 14, 2011

The user will have to specify min and max times too I suppose.

For defaults, I would suggest that 10-15s is a sensible minimum below which the fan should run full speed, and up at around 60s the fan can run at idle speed. Idle PWM can probably be 40% by default, and full PWM can default to 100%

Yes, PWM is important. I have an 80mm fan that I adjust manually at the moment. if I have it running when I print first layer, the object doesn't stick properly and I get corners curling up. I need it running at a low speed for most prints, but small parts and bridges need it to run full blast. if it runs full blast all the time, I get poor layer adhesion because the printed object gets /too/ cold between layers, also my nozzle struggles to maintain temperature.

Currently I switch this fan from 7v (idle) to 12v (full) and point it away from the bed for first layers

@Pointedstick
Copy link

FWIW, I have a desk fan pointed at my print area at all times running at full blast and my Makergear hot end doesn't have much trouble staying hot. If this feature existed, I'd add a 40mm fan, but probably keep it on all the time.

@rtgoodwin
Copy link

I have a 40mm fan on my hot end that runs at full speed all the time (it's wired to an extra extruder port), and have no trouble maintaining heat, but that's the Mosaic design. The 50mm angled at the print, I usually run at either half or full (S125 or S255 I believe) with buttons in print run.

That's for PLA. I NEVER use it for ABS except at the end to cool the print so I can pop it off easier. But, it's powerful enough at S255 that it WILL cool down the HBP if I'm near the threshold of what my power supply can hold (about 115C).

So, either min/max settings, or code in an Off/Low/High drop down (simplicity!). The default for Cool in SF I believe is...well I keep it down around 20secs but I want to say it defaults to 30. So, 15-20 makes sense to me, but it needs to be clear to the newb not to use it during ABS unless they want warp city (in some cases).

@sam-wright
Copy link

Since first reading this, I've started playing with a small fan that I had laying around;

Honestly, any fan for me creates huge curl and warpage, but a slight amount does help my bridges. So I'd recommend it when performing bridges.

Somehow the thought to use a fan never occurred to me, but its only ~19C where Im printing so its probably cooler than where most people are.

@TinHead
Copy link

TinHead commented Jan 25, 2012

Don't want to push I know you have other things to work on, but can we have this feature added in some form or another ?

A delay or orbit around the print for layers smaller than X mm in area or taking less then Y seconds to print, would be great.

I have two 80 mm fans on the machine controlled trough PWM, located at the opposite sides or the X carriage. Even with them at full power blowing at each other, with 10mm/s speed and 0.1mm layers I'm still unable to get an 8mm in diameter gear (8 tooth 2.5 mm diametral pitch) to print ... I just can't get it to cool fast enough using PLA at 185 degrees.

Maybe I'm pushing the limits of the printer way too far, but still I think a cooling feature would help and I really don't want to go trough the crazy time learning how to use/calibrate skeinforge.

@triffid
Copy link
Contributor Author

triffid commented Jan 25, 2012

TinHead, print 4 or more at a time then :)

I'm thinking I might have a crack at doing this as a postprocessing script- see my fork for the framework around that.

Unfortunately I don't have a PWMable fan set up at the moment so I'd be shooting in the dark

@TinHead
Copy link

TinHead commented Jan 26, 2012

@triffid: yeah printing more than 4 at a time might work but it is kind of wasteful on the let's say "not cheap" plastics :)
Also it does not really solve printing for example a stacked gear.
I'll have a look at the postprocessing script you mentioned, thanks for reminding me.
I thought at having a shot at adding this feature but my perl-fu is not good at all :(

@alranel
Copy link
Member

alranel commented Jan 28, 2012

We need to figure out the big picture about cooling features before starting to implement any of them.

So far, multiple ideas have been expressed:

  • minimum layer time => slow down all feed rates
  • minimum layer time => orbit before moving to next layer (with or without fan)
  • PWM fan (settings: min/max speed; min/max layer time)
  • temperature control

I hereby ask for your help to design a good unitary logic for all this, including a good layout of user options.

My main concern is with the layer printing time. We know that no time estimation will be right; any logic we may choose will possibly return wrong results without knowing the firmware acceleration logic and its configuration values (which is something we'll never implement inside Slic3r). Thus, I'm worried about having a setting that talks about "time", expressed as an absolute value. That would be wrong and it would lead to confusion and endless "bug" reports. So, I'm very oriented towards a setting that doesn't take time into account. Layer area, for example, or total extruded length for each layer.

@alranel
Copy link
Member

alranel commented Jan 29, 2012

Okay, here's my proposal.

Cooling options:

  • Cooling mode: none/slowdown/orbit
  • Minimum print speed: if slowdown is used, this setting will make sure that print speed doesn't go below this one
  • Extrusion length threshold (better name needed): only activate cool when the total extrusion length for this layer is <= this value
  • Fan PWM during orbit

Fan options:

  • Number of bottom layers to force fan to be inactive
  • Bridge fan PWM
  • Default fan PWM: this will apply to the whole print
  • Extrusion length threshold for max fan (better name needed)
  • Max fan PWM: this will apply for layers having less extrusion than the value defined in the above setting

Temperature options:

  • Default temperature: we already have this one
  • Bed temperature
  • First layer temperature
  • First layer bed temperature

How does slowdown work: if your layer has, say, half the Extrusion length threshold specified, all its feed rates will be halved. No feed rates will go below the Minimum print speed value however.

@triffid, the above solution for fan control doesn't interpolate PWMs. That would require a couple more options, and I think it's too complicated to calibrate and very little benefit would come from such a feature. I think we can just live with a threshold for low speed vs. high speed. Fan options should be used in combination with slowdown.

Is there anyone who actually uses orbit? I have no experience with that, but it looks like a huge ooze-generator.

@sam-wright
Copy link

Suggestion, just my opinion:

Orbit has never been useful for me, as you noticed, it is a huge ooze-generator and my tip oozes less than the average tip. (Maybe other had it better configured than me?)

Also, under your temperature options, I wouldn't play too much with bed temps/first layer temps/etc... as some machines are over-powered and can control those temps very directly and rapidly, while other machines have a much slower response time. Seems like it may become more of a headache generator, unless I'm not interpreting intent properly.

Based on this, I would recommend the following for Cooling mode:
Cooling mode: none/slowdown/FAN (Maybe as checkboxes as to allow a person to slowdown and/or use a fan)

Finally, using a simple threshold for low-speed vs. high-speed seems really coarse. At a minimum you would want the user to be able to configure that setting as different machines have different fans. I use a ~50mm fan, while other use a 20-80mm fan. I've even seen some using 2 fans to get the print area from both sides. I'm not sure why interpolating the pwm values would be too problematic. You should just need to get a solid metric to calculate from. Length threshold should work. I may be missing something here why it would be difficult.

Hope the added opinion was of some use.

@triffid
Copy link
Contributor Author

triffid commented Jan 30, 2012

Cool Proposal

based on

  • Min PWM (default 90)
  • Max PWM (default 255)
  • Idle "jiffies" (default 60)
  • Critical "jiffies" (default 15)
  • Min Feedrate (default 10)

Max feedrate comes from existing perimeter/bridge/fill speeds

then we add

  • Do not activate fan for first n layers (default 1)
  • Bridge PWM (so we can force it full speed, or some other value that works. should default to Max PWM)

and definitely skip orbit please!

@kelow
Copy link
Contributor

kelow commented Feb 17, 2012

Nice job with Slic3r Alex ;)
I don't think it's important to know exact time of each layer. You can take some default value of acceleration (2000mm/s2 ?) cause everyone needs to figure out minimum time value not by measuring actual layer time but by changing Slic3r's layer time to achieve good results.
Triffid's comment is really what I think it should look like. And one more thing: please leave travel feed unchanged as it may produce lots of ooze when printing small islands far apart.

I don't want to start a new issue before asking: is it normal that Slic3r produces two paths over one perimeter in single-walled objects? I've just tried to slice bearing guide from Prusa Mendel and each perimeter prints twice giving thicker walls.

@alranel
Copy link
Member

alranel commented Feb 23, 2012

Okay, here I'm translating @triffid's proposal into an user-friendly set of options:

  • Min fan speed (%): defaults to 35%
  • Max fan speed (%): defaults to 100%
  • Bridge fan speed (%): defaults to 100%
  • Enable fan if layer print time is below (seconds): defaults to 60 seconds
  • Slow down print if layer print time is below (seconds): defaults to 15 seconds
  • Min print speed (mm/s): defaults to 10mm/s
  • Disable fan for the first 'n' layers: defaults to 1

@triffid, perhaps we can ditch Max fan speed, can't we?

@TinHead
Copy link

TinHead commented Feb 23, 2012

Hey this looks great :)

@rtgoodwin
Copy link

Seconded. All of the benefits of Cool without the worries of slow
movement and plastic pooling.

@triffid
Copy link
Contributor Author

triffid commented Feb 23, 2012

all thumbs up here :)

suggest using PWM instead of speed in descriptions since PWM doesn't directly correlate to airflow or speed and people will be confused as to why 30% "speed" doesn't cause the fan to move at all

I'd suggest keeping max fan speed for odd setups, but feel free to cull it from the gui, ie another command line interface only option.

alranel added a commit that referenced this issue Feb 25, 2012
@alranel
Copy link
Member

alranel commented Feb 25, 2012

Implemented! Go grab the lastest git HEAD and please test test test!

@TinHead
Copy link

TinHead commented Feb 25, 2012

Aye! Fetching!

@rtgoodwin
Copy link

Initial tests looking good! Note to others, if using RAMPS 1.3/1.4 and
Marlin RC1 and single extruder, you need to fix your pins.h to turn fan
back on properly OR move to Test branch at this time, which fixes it back.

On Sat, Feb 25, 2012 at 3:07 PM, TinHead <
reply@reply.github.com

wrote:

Aye! Fetching!


Reply to this email directly or view it on GitHub:
#110 (comment)

@triffid
Copy link
Contributor Author

triffid commented Feb 25, 2012

hm, sounds like time to get my fan under software control! It's wired direct to my power supply at the moment..

@cakeller98
Copy link
Contributor

yay! tests commencing!

@TinHead
Copy link

TinHead commented Feb 26, 2012

Hey first test worked great! Thanks !

@alranel
Copy link
Member

alranel commented Feb 28, 2012

What we really need now about fan and cooling is a wiki page describing the cooling logic. It should contain Triffid's graph and some explanation for users. Any volunteer? ;)

@Intrinsically-Sublime
Copy link

Cooling seems to work well. Except it puts WAY to many M107's in. I would rather it never turn the fan off but rather just turn it down to the min speed set. I also don't find having the M107 at the end is really needed or wanted. I like to run my fan for a minute when the model is finished. I use M106 Snn , G4 S60, M107 in my end code to solve the M107 at the end.

You can see the results http://geometricobjectdepositiontool.blogspot.com/2012/02/tantillus-progress-update-and-videos.html

@simonkuehling
Copy link

Really great job with the new cooling feature - works really well so far!

But i would like to suggest a minor change: Could you implement a general "Fan MIN PWM", that is always used (except during the defined first layer(s) of course)? I see a noticeable quality improvement on the perimeters when my fan is always blowing a little bit - but setting "Enable fan if layer print time is below ..." to values like 500sec to keep it running on a fully-packed printbed is only a inelegant workaround...

btw - I am amazed by the development speed of slic3r so far. Keep up the great work!

@triffid
Copy link
Contributor Author

triffid commented Mar 1, 2012

@simonkuehling see #241

@cakeller98
Copy link
Contributor

One thing that bugs me about the slowing down on small layers is when you have say.. a tower, or 2 or however many... that are say 3mm x 3mm or smaller even, then slowing down doesn't allow the heat to dissipate. the nozzle is hot, and radiating that heat down into the plastic. in fact, I think it's better for that situation to build it fast on a solid previous layer, than to slow down and keep the previous layers all hot and bothered (and woozy)... It would be better for short layers to be able to pull upward, and blow on the layer for 15 seconds, or even 5... let it dissipate the heat, and quickly build on that.... minimizing the heat transfer to the existing build.

slowing down makes sense if the layer is big enough to allow regions to cool, but not if it just means more heat transfer into the part.

@triffid
Copy link
Contributor Author

triffid commented Mar 2, 2012

we considered that, the problem is that the nozzle then oozes plastic while
it's waiting.

This means that we can no longer accurately meter the volume of plastic
extruded until the melt chamber has been purged and the nozzle wiped.

Without the purge and wipe cycle, you get large blobs on the outside of
your objects and holes in the perimeters.

Historically, both approaches have been thoroughly tried, and the slow-down
method has been categorically shown to cause fewer problems, although it's
still not ideal as you point out.

If you're in the habit of printing small towers, I suggest you print
several at a time so each one has a chance to cool. There's no solution
that works perfectly for a single small tower, there are only compromises.

@cakeller98
Copy link
Contributor

Crud... blobs suck too. but small features at the top do need to be fixed
and printing lots isn't a great solution - but as you pointed out it's a
work around, so better than no solution. I'll just add one more thing to
manually add to the model to get it to print correctly... which is - a thin
wall that will, in essence cause the fan to blow over where I want it to.
too bad it WASTES plastic!

@triffid
Copy link
Contributor Author

triffid commented Mar 2, 2012

so does throwing out prints that don't have a good enough finish for your
liking. So, which wastes more?

btw, welcome to the wonderful world of compromises known as engineering ;)

@cakeller98
Copy link
Contributor

I wasnt disagreeing with you. Doesnt mean i have to like wasting... And as i said i can modify the model for a much better solution than multiple prints.

Of course im referring to prints that take on order of hours and a large portion of the bed so... Multi print = non-option

@cakeller98
Copy link
Contributor

Also esier to remove blobs from a surface than to fill voids left by the towers being shifted around because they are still soft.

But as mentioned adding an extra wall that causes a good delay between layers and positions the fan over the meeded spots will be a very serviceable work around...

alranel added a commit that referenced this issue Mar 3, 2012
@alranel alranel closed this as completed Mar 3, 2012
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Done This issue is implemented and considered complete. Feature request This is an idea for a new feature in Slic3r Needs testing
Projects
None yet
Development

No branches or pull requests

10 participants