This work is based on the VzBoT RSCS system. Big thanks to the VzBoT crew, especially Simon Vezina for providing all of the CAD drawings and awesome videos for information, inspiration, and acceleration!
- 12/04/22 - Improved fan bracket airflow, and eliminated the need for the extension. Made shorter duct and increased inner cavity for improved airflow. Added a 'press-fit' Z for some flair.
- 7/11/22 - Updated fan bracket and shroud to cover more of the fans output. Increase overall fan bracket thickness improving mounting stability. Thanks to dansxmods#0246 (ZeroG Discord Server) for the suggestion!
- 5/26/22 - Initial Release
This is a system that's meant to cool top layer 3D printed extrusions quickly, helping you up the brrrr with better quality prints.
I found that as I tried to print at the higher end of my printers mechanical and extruder capabilities inevitably my print quality would suffer. Especially challenging were overhangs, even 45 degree outer layers, and models with short layer print times (smaller single parts).
I moved to a dual 5015 cooling setup (EVA) for my part cooling which helped though at higher volumetric flows (~17mm3/sec), certain model features would become problematic (Benchy bow sag, ~45-50 degree overhangs in vase mode would deform at moderate speed, etc... ).
After watching and tuning for these scenarios it became clearer that cooling solutions that travel with the hot end have their limits. I think the main challenge is in that when printing at low layer times (<3sec), the fan ducts are generally not providing adequate cooling to the parts top layer surface because the hot end cooling fan is directly focused over the traveling nozzle.
More science necessary, though I believe cooling time could be calculated for a given material - helpful in determining quality print speed.
First I want to mention that the only reason I have this cooling problem is largely due to the Zero-G Mercury project. By converting my heretofore fairly well tuned Ender 5 Pro printing at ~75mm/sec into something more 'moderately dangerous' - currently approaching 350mm/sec and 40mms3 volumetric flow.
After watching the VzBoT video on cooling solutions I was convinced to try this myself.
My hypothesis is that by adding additional top layer cooling, you'll be able to achieve higher speed/higher quality 3D prints.
If you're game, help me evaluate!
All printed files are found in the STL folder, CAD files *soon
This design works for the Ender 5 Pro, just fits between the top 2020 extrusion and a 300mm bed. If you have a smaller bed, or the Ender 5 Plus it should fit, though for the plus it may be a bit too far away from the bed, or not provide great part coverage... Drop an issue in Github if you get a chance to test it!
You will need M3 screws, 2 fans, and the ability to print 15mm overhangs clearly - you can do it - or your money back!
- 2x 120x32 centrifugal fans - make sure they match the voltage and pin configuration your board can work with!
- Ability to crimp, solder, or otherwise connect the fans to your 3D printer controller board
- Various M3 bolts/nuts:
- 2x 40mm bolts to affix fan and shroud to mount
- 2x 6mm M3 bolts to connect the fan shroud to the fan extension
- 2x 16mm M3 bolts to connect the entire system to the underside of 2020 Aluminum extrusion
- Roll In Spring T-Nuts for mounting the blower to the top 2020 extrusions- - something like these
I recommend using the the following print settings:
- 3 Perimeters and 4 bottom/top solid layers
- 40% infill
All printed parts are included in the STL folder - there are 5 parts:
- Thread the M3 6mm screws that will be used to attach the fan duct, let the screws protude slightly from the top so it's easier to mount the duct later. The screws will thread directly into the duct housing - no nuts necessary.
- Insert the M3 16mm screws that will be used to mount the system to the underside of the 2020 extrusion, thread the t-nuts
- Using roll-in t-nuts will allow you to tilt the duct and get them inserted under the 2020 extrusion
- Center the duct so that it's in the middle of your print bed
- Once the duct is hanging from the 2020 extrusions, insert the spacers between the the extrusion and the duct mount, and tighten the bolts
- Mount the Fan Duct Output on top of the Fan Extension.
- Mount the fan and the shroud
The base of Fan Duct Output should align with the base of your print bed - the idea is for the air to blow onto the top layer of your print, if it's too high above the bed, it won't be as effective.
You may need to adjust the height of the spacers to achieve optimal alignment for your printer. [TODO] Add a few more spacer sizes to accommodate
Configure Klipper to control the fans and expose a GCode macro so it can be controlled by your slicer.
[output_pin Bed-Blower-R]
# BED BLOWER RIGHT
pin: PD12
pwm: true
[output_pin Bed-Blower-L]
# BED BLOWER LEFT
pin: PD13
pwm: true
[gcode_macro BED_BLOWER]
gcode:
# Use a default fan speed to off - expecting an INT as input
{% set S = (params.S)|default(0)|float %}
{% if S > 0 %}
{% set S = (S/100) %}
{% endif %}
SET_PIN PIN=Bed-Blower-R VALUE={S}
SET_PIN PIN=Bed-Blower-L VALUE={S}
Alternatively you can configure ports as fan_generic
[fan_generic Bed-Blower-R]
# BED BLOWER RIGHT
pin: PD12
max_power: 1.0
shutdown_speed: 0
off_below: 0.0
kick_start_time: 0.100
[fan_generic Bed-Blower-L]
# BED BLOWER LEFT
pin: PD13
max_power: 1.0
shutdown_speed: 0
off_below: 0.0
kick_start_time: 0.100
[gcode_macro BED_BLOWER]
gcode:
# Use a default fan speed to off - expecting an INT as input
{% set S = (params.S)|default(0)|float %}
{% if S > 0 %}
{% set S = (S/100) %}
{% endif %}
SET_FAN_SPEED FAN=Bed-Blower-R SPEED={S}
SET_FAN_SPEED FAN=Bed-Blower-L SPEED={S}
[gcode_macro M106]
rename_existing: M106.1
gcode:
M106.1 { rawparams }
{% set bed_blower_speed = params.S|float * 100/255 %}
SET_FAN_SPEED FAN=Bed-Blower-R SPEED={ bed_blower_speed/100 }
SET_FAN_SPEED FAN=Bed-Blower-L SPEED={ bed_blower_speed/100 }
This macro will set your SCS Fans to the same value your slicer sets the part cooling fans to, making it more dynamic. There are probably some advantages to having an 'always on' static setting, vs a dynamically adjusted setting such as this.
[gcode_macro M106]
rename_existing: M106.1
gcode:
M106.1 { rawparams }
{% set bed_blower_speed = params.S|float * 100/255 %}
SET_PIN PIN=Bed-Blower-R VALUE={ bed_blower_speed/100 }
SET_PIN PIN=Bed-Blower-L VALUE={ bed_blower_speed/100 }
In order to automatically turn on the SCS fans at a specific layer height, you need to add some custom Before Layer Change G-code
section under the 'Printer Settings' in SuperSlicer.
; Set SCS fans to 40% when you reach the 3rd layer
{if layer_num == 2} BED_BLOWER S=40{endif}
- Lots of bridging in this print!! I tried to keep the bridge distance low, around 15mm or so... It's a bummer, but hopefully it's doable.
- There are only 2 points to connect the fan to the bracket and it isn't as secure as I'd like. I'll probably look to add another mount point and potentially strengthen the hole on the point of the triangle...
Here are some pictures of benchys printed using the same g-code, but with different cooling solutions.
Slicer configuration 2 Perimeters, 3 Top/Bottom solid .2mm layer height 18% gyroid infill Internal Perimeter Speed 250mm/s - External - 125mm/s Max Volumetric Speed 43mm/s
- Single 5015 Part cooling Fans at 100%
- Dual 5015 Part cooling Fans at 100%
- Dual 5015 Part cooling fans at 100% plus SCS fans at 100%
My interpretation of these results:
- Short layer times require increased cooling capacity
- Certain features (like overhangs) will degrade more than others when cooling isn't sufficient
- Layer times and cooling requirements are correlated - faster layer times will require more Cooling
- Prints that have more surface area may have a bit more time to cool before the next layer is applied, however, nozzle based cooling solutions will be less effective because they are only in a position to cool a section for a very short amount of time (as the filament is extruded from the nozzle)
- Smaller prints can benefit somewhat from increased nozzle based cooling systems because the ducts are likely to cover more surface area of the print for a more sustained period of time. Unfortunately smaller parts will likely have very short layer times and nozzle based cooling will probably not be sufficient
I found a nice tutorial / overview from Teaching Tech that showed how to do some Computational Fluid Dynamics simulations using a site called Simscale. I quite literally have no idea if I'm using this tool correctly or not! With that said, it seems to provide some good visualizations of air flow, and reflects the changes I'd expect to see as I refined the CAD model.
Here is my SimScale project, take the data for what it's worth - mostly for the neat visualization of airflow =)
It's been great to be able to make updates to a CAD model like this and run a simulation against the updated model to see if it has the intended effects - all before printing the part! Running the simulations take about an hour, so there's not tons of time savings, however, I do save quite a bit of filament!
Made some updates to the duct output in an attempt to better distribute the airflow across the bed, and keep it focused on the top layer of the print. It looks like the bed coverage has improved, perhaps at the cost of some velocity. All good gains I think.
As much as I enjoy running simulations and updating CAD, I've decided to pause the iteration and get some real world print time under my belt with the current design as published here in GitHub.
Some data to back up the physical observations (places hand in front of the vents). Looks like most of the air is flowing through the center of the duct, not much is getting to the outside edges...