Best way to implement cooling dwell in gcode?
February 26, 2015 12:13AM
I want to post process the g code that Slic3r generates to add some dwells for cooling. On parts with tall items that end up with a small XY area for upper layers, I get too much heat on the part. Bottom layers will look great while those upper layers that have small areas are terrible. The issue is obviously that there is too much heat for too long that sometimes results in the plastic remaining molten. I don't think it's a temperature setting issue (quality ABS filament laying down at 228 with a bed reduced to 95 after print starts); I just think it's the nature of printing items with those characteristics. Some have suggested printing mulitple instances of the same object to give the layer time to cool. I've started adding tall structures away from the intended print just to give the extruder something to do. I feel like even this is a waste of filament and insufficient.

I intend to write a little program that allows the user (well, me and anyone else interested in using it) to specify starting and ending layers for dwell, dwell period, dwell frequency (ie: go dwell every X layers), and dwell position. The program itself doesn't seem too difficult even for a fly by night programmer like me, but there are some things that I need to know to get started (still just a few weeks into 3d printing).

I've briefly looking through some G-code.

Is there an established way to identify layer changes programatically? "Lift Z" in Slic3r may muddy the water a bit, but I think I may just have the program look for G1's with Z paramaters, extract the Z value, and see if the difference between that Z value and the previously found Z value is equal to a layer height.

Any problems with this? Will the G code EVER move Z down during a print except to return to the layer it was working on before a "Lift Z" (as in retraction Lift Z) generated nozzle raise? Will slic3r ever put a layer down, lift Z, then start the next layer before dropping down to the layer it was at before it performed a "Lift Z."???

I also thought about letting Slic3r identify problematic layers based on layer time through the cooling feature settings. I'd just search for an M106 and use that as a trigger for a dwell. What problems are there with this?

What is the best time to start a dwell? I am thinking it would be before a layer change. If I initiated dwells only at a layer change, would I have to worry about anything in respect to E position? I feel like with longer dwells I am going to have oozing issues if I didn't add some extra retraction. How much retraction is appropriate? I anticipate the added filament retraction would be a function of time, temp, and material at the very least. Is there a hard and fast rule?

Thanks in advance. Please let me know if I'm trying to reinvent any wheels here!
Re: Best way to implement cooling dwell in gcode?
February 26, 2015 01:44AM
I'm not an expert in Slic3r innerds, you may want to post this in the Slic3r forum below.

Cura has this feature, but it has a blobbing problem due to ooze. So I'd add "dwell retraction amount", then you don't need to worry about what different printers need, since every hot end will ooze differently. I know that longer retraction (9mm) on my delta eliminated oozing, but I don't know if all hot ends behave that way, or if that would be enough for a given dwell time. Only testing would tell...

Hope it goes well.
Sorry, only registered users may post in this forum.

Click here to login