A Klipper tudja kezelni a háromvezetékes, fordulatszám visszajelzős ventilátorokat is:
https://www.klipper3d.org/Config_Reference.html#heater_fan
Gyakran posztolgatják mostanában Ellis leírását, ami erősen javasolja az ilyen HotEnd ventilátor használatát:
https://ellis3dp.com/Print-Tuning-Guide/articles/useful_macros/hotend_fan_monitoring.html
Ha leáll a HotEnd ventilátor, akkor felmelegszik a torok és eldugol a HotEnd, de erről ha nem értesül a nyomtató, akkor tolja tovább az alapanyagot. Hűtés nélkül felforrosodhat és megolvadhat az egész fej, így nem biztos, hogy leáll az extrudálás. Szóval okozhat ez gondot.
Nekem pont így nem ment még tönkre ventilátorom, de hibás krimpelést már követtem el Umbilical PCB csatlakozójánál, ami éppen okozhat ventilátor leállást.

A megvalósításhoz három vezetékes ventilátort kell használni, amiből sajnos 24V nem nagyon van. Ha az alaplap nem tud többféle feszültséget adni a ventilátoroknak, akkor 12V-al szemben az 5V jobb választás, mert 5V van kéznél például a Raspberry táplálásánál. Az alaplapok úgy vannak elkészítve, hogy a PWM szabályzás a GND kivezetésen megy, így megtehetjük, hogy a ventilátor piros vezetékét rákötjük egy 5V kivezetésre, a feketét pedig az eredeti ventilátor "-" kivezetésére tesszük. A Voron V0.1 HotEnd ventilátora is 5V feszültségű volt a spéci mérete miatt, így a manuál is mutat erre egy lehetőséget SKR E3 mini alaplapon:

A sárga vezetékhez keresnünk kell egy szabad PIN-t, én a FAN1 melletti PS-ON-t választottam, a konfugurációba pedig ezt az sort kell a HotEnd ventilátorhoz írni:
tachometer_pin: ^PC13
A ^ is fontos! Ennyi beállítás után meg is jelenik a felhasználói felületen a HotEnd ventilátor fordulatszáma:

A Klippert különösebben nem foglalkoztatja ez az érték, de Ellis leírásában hivatkozott alábbi makró segítségével kontrol alatt tarthatjuk a ventilátort. A makró három másodpercenként lefut és ha egymás után három alkalommal is 3000-es fordulatszám alatt látja a HotEnd ventilátort, miközben fűt a HotEnd, akkor gyorsan két dolgot csinál:
- leállítja a fűtést
- meghívja a PAUSE makrót
# Author: alch3my#9819
# Requires a 3-wire fan with tachometer_pin defined. https://www.klipper3d.org/Config_Reference.html#heater_fan
# The tach wire can be connected to a spare endstop pin.
# Don't forget a pullup (^) on the tach pin (example: tachometer_pin: ^P1.29)
# Monitoring loop. Begins at Klipper start.
[delayed_gcode CHECK_ALL_FANS]
initial_duration: 1
gcode:
HOTEND_FAN_CHECK
UPDATE_DELAYED_GCODE ID=CHECK_ALL_FANS DURATION=3
# Change min_rpm and max_consecutive_stops to your desired values.
[gcode_macro HOTEND_FAN_CHECK]
variable_he_stop_count: 0
gcode:
{% set min_rpm = 3000|float %}
{% set max_consecutive_stops = 3 %}
{% set rpm = printer['heater_fan hotend_fan'].rpm|float %}
{% set he_target = printer[printer.toolhead.extruder].target|float %}
{% set he_temp = printer[printer.toolhead.extruder].temperature|float %}
{% set fan_on_temp = printer.configfile.settings['heater_fan hotend_fan'].heater_temp|float %}
{% set he_stop_count = printer["gcode_macro HOTEND_FAN_CHECK"].he_stop_count|int %}
{% if (he_target >= fan_on_temp) and (rpm < min_rpm) and (he_temp >= fan_on_temp) %}
SET_GCODE_VARIABLE MACRO=HOTEND_FAN_CHECK VARIABLE=he_stop_count VALUE={he_stop_count + 1}
M118 WARNING: Fan stoppage detected ({he_stop_count+1}/{max_consecutive_stops}).
M400
{% if printer["gcode_macro HOTEND_FAN_CHECK"].he_stop_count|int >= max_consecutive_stops-1 %}
FAN_STOPPAGE_ROUTINE
{% endif %}
{% else %}
SET_GCODE_VARIABLE MACRO=HOTEND_FAN_CHECK VARIABLE=he_stop_count VALUE=0
{% endif %}
# Insert the gcode that you want to run when a fan stoppage is detected.
# This runs every ~3 seconds until the stop conditions are cleared.
[gcode_macro FAN_STOPPAGE_ROUTINE]
gcode:
# If not already paused
{% if printer['pause_resume'].is_paused|int == 0 %}
M117 !!FAN STOPPAGE!!
M118 FAN STOPPAGE DETECTED. PAUSING...
PAUSE
# Turn off the hotend.
# !! Don't forget to turn your hotend back on before resume. !!
# -- If using this guide's pause/resume macros (in useful_macros.html), the hotend will automatically reheat on resume
# -- (as long as the hotend is not turned off BEFORE pause is called)
SET_HEATER_TEMPERATURE HEATER=extruder TARGET=0
{% endif %}