supermerill / SuperSlicer

G-code generator for 3D printers (Prusa, Voron, Creality, etc.)
4.14k stars 522 forks source link

Fan speed advance doesn't work as intended #4476

Open CuredPrusa opened 3 weeks ago

CuredPrusa commented 3 weeks ago

Version 2,5,59,13 when disabling fan advance features speedup/kickstart, all perimeters have fan value as set. But when i put 1 second at speedup and kickstart, it is trying to do the job, but half of the perimeter runs without required speed. Outer perimeter is set to 100%. Top of the tube has outer perimeters only: image Version 2,5,60,0 makes it even worse.

Besides that , "only for overhangs" seems to be reversed. Result: Speed on top of the tube is 25mms to provide a lot of cooling. One side of a model is melted too much. I can't use this feature.

I think there is something wrong when layer is fast, e.g. small perimeters only. On larger perimeters, longer layers, it seems to work fine.

CuredPrusa commented 3 weeks ago

I think there something about the reset of fan speed advance timer, in my case 1 sec. This is the example of top surface in shape of triangle. Fan settings say top surface should have 100% cooling fan speed. image image

CuredPrusa commented 3 weeks ago

It seems that 100% kick works also when changing to lower fan speed, that doesn't make sense. In this example first perimeter is 100%, others 70%.

image image

When kick engaged: image image

CuredPrusa commented 3 weeks ago

Also, I don't see that layers are connected in this function. If layer is ending with 20% of fan speed, I don't see fan advanced speed if next layer is starting with 100%. For example, ending with sparse infill, starting with outer perimeter.

CuredPrusa commented 3 weeks ago

I have just realized the fan advance speed change is changing speed in advance even if fan is slowing down. That doesn't make any sense. I guess this is the reason of problems I have reported. Slowing down the fan should not be considered in that calculation because slowing is much quicker than speeding up. Also, it would be smart to automatically adapt the speed up timer considering the delta T

CuredPrusa commented 1 week ago

I have noticed there is no buffer for fan speed change, which makes fan twitching. If infill has no anchor, it turns to travel at the end of every line. This triggers the fan timer for each line every time, both start and stop. It would be better if "infill" segment includes those travels, because this in fact is the part of the infill. The fan should keep running until whole infill segment gets completed. When advanced fan speed is not used, this problem is not noticeable due to fan inertia. The same problem is noticeable when having short layer, like small radius vertical tube, as explained before already. Maybe the same logic as for retraction could be used: "if travel is shorter than X - do not retract". But here there's no need to set it by user, a fixed percentage of line width (250-300%?) could be just fine.