Ultimate CPAP (with FLAP valve) part cooling module
We calculate the final price from your selected file. You review and accept it before payment.
Saved on this device.
Model information
- Source
- Printables
- Category
- Voron Parts & Upgrades
- License
- Creative Commons — Attribution — Noncommercial — Share Alike
This design improves and adapts the attached original models to my needs — hopefully, it will be useful for you too 🙂
Improvements
1) Simplified
It is now fully 3D printed.
Most parts are designed to be tight push fits.
Can be assembled and mounted with only 6× M3 screws (4 for the stepper and 2 for mounting) and 1× grub screw — although using an additional 4 screws and heat inserts provides better sealing and slightly reduced noise.
Sensorless homing (macro modified to perform 6 homing operations for 100% reliability with TMC5160) replaces the endstop, eliminating extra wiring.
CPAP blower speed is adjusted in Orca using the Auxiliary Part Cooling setting for convenience, while keeping the exhaust fan settings available for other purposes.
2) Compact
Designed to be as compact as possible while maintaining performance, allowing it to be mounted inside the chamber.
The goal was to mount it on the back gantry extrusion of my custom Voron 2.4 / Doomscube, but it can be mounted elsewhere as well.
This was achieved without any noticeable loss of performance.
3) Quieter (drastically!)
The noise difference is significant and achieved through multiple design choices:
a) Intake Muffler — simple, compact, and effective.
Initial tests (using a small piece of foam in the narrowest part of the muffler) suggest that some higher frequencies are reduced by ~15 dB from the muffler alone (see the comparison bar graph in the photo).
Measurements using a Kestrel 5700 Elite show no loss in airflow due to the muffler.
b) Exhaust Muffler (two versions)
A closed-loop version redirects exhaust air back to the intake, allowing for higher airflow and slightly improved noise reduction. However, it increases the cooling air temperature — at 99% recirculation and 100% blower speed, the temperature rose from 29 °C to 37 °C over 30 minutes before stabilizing. This elevated temperature may reduce cooling efficiency and potentially shorten blower lifespan.
An open-loop version vents exhaust air to the outside through a muffler and directs it toward the stepper motor. While it provides slightly less noise reduction and does not increase airflow, it offers improved part cooling and, as an additional benefit, aids in cooling the CPAP stepper motor.
c) Mounted inside the chamber — simply closing the doors significantly reduces noise. The extent of reduction depends on chamber sealing, panel type, and other factors.
Keep in mind that elevated chamber temperatures will shorten the blower’s service life.
Config:
Octopus Max EZ + EZ5160 / TMC5160
[tmc5160 manual_stepper flap_stepper]
cs_pin: PG12
diag1_pin: ^!PF4
spi_bus: spi4
run_current: 0.4
sense_resistor: 0.075
driver_SGT: 1 [manual_stepper flap_stepper]
step_pin: PE1
dir_pin: !PE0
enable_pin: !PE2
microsteps: 64
rotation_distance: 1600
velocity: 32000
accel: 1280000
endstop_pin: tmc5160_flap_stepper:virtual_endstop
homing_speed: 80
[fan_generic CPAP_Source] # Cpap Blower
pin: PA2
hardware_pwm: True
shutdown_speed: 0
cycle_time: 0.01
[fan_generic CPAP_Flap] # Dummy Fan to show current Flap possition.
pin: PF8
hardware_pwm: True
shutdown_speed: 0
cycle_time: 0.01
[fan] # Dummy fan to control flap stepper
pin: PF13
Macros:
[gcode_macro _SET_FLAP_ENABLED]
variable_enabled: 0
gcode:
{% set e=params.ENABLED|int %}
{% if e != printer["gcode_macro _SET_FLAP_ENABLED"].enabled|int %}
SET_GCODE_VARIABLE MACRO=_SET_FLAP_ENABLED VARIABLE=enabled VALUE={e}
{% if e %}
MANUAL_STEPPER STEPPER=flap_stepper ENABLE=1
{% for _ in range(6) %} ; Six homing operations for 100% reliability with TMC5160 sensorless homing.
MANUAL_STEPPER STEPPER=flap_stepper MOVE=-255 STOP_ON_ENDSTOP=1 SPEED=120
MANUAL_STEPPER STEPPER=flap_stepper SET_POSITION=0
{% endfor %}
{% else %}
MANUAL_STEPPER STEPPER=flap_stepper MOVE=0 ENABLE=0
MANUAL_STEPPER STEPPER=flap_stepper ENABLE=0
{% endif %}
{% endif %}
[gcode_macro M106]
rename_existing: M106.1
gcode:
{% set f='fan'+(params.P|default(0)|int)|string %}
{% set s=params.S|default(255)|float/255 %}
{% if f == 'fan0' or params.P is not defined %}
_SET_FLAP_ENABLED ENABLED=1
MANUAL_STEPPER STEPPER=flap_stepper MOVE={params.S} SYNC=0
SET_FAN_SPEED FAN='CPAP_Flap' SPEED={s}
{% elif f == 'fan2' %}
SET_FAN_SPEED FAN='CPAP_Source' SPEED={s}
{% else %}
M106.1 {rawparams}
{% endif %}
[gcode_macro M107]
rename_existing: M107.1
gcode:
{% set f='fan'+(params.P|default(0)|int)|string %}
{% if f == 'fan0' or params.P is not defined %}
_SET_FLAP_ENABLED ENABLED=0
SET_FAN_SPEED FAN='CPAP_Flap' SPEED=0
{% elif f == 'fan2' %}
SET_FAN_SPEED FAN='CPAP_Source' SPEED=0
{% else %}
M107.1 {rawparams}
{% endif %}
gcode_macro PRINT_START]
gcode:
_SET_FLAP_ENABLED ENABLED=1 ; enable CPAP Flaps
[gcode_macro PRINT_END]
gcode:
_SET_FLAP_ENABLED ENABLED=0 ; disable CPAP Flaps
[gcode_macro CANCEL_PRINT]
gcode:
_SET_FLAP_ENABLED ENABLED=0 ; disable CPAP Flaps
[Edit: 22 Oct 2025]
Open-loop muffler added.
Vitals (@vitals78_1747561) suggested that the closed-loop system increases air temperature, which proved to be true. I’ve therefore uploaded an open-loop version for those who prefer it.