diff options
author | Master92 <Nils.Friedchen@googlemail.com> | 2019-01-10 18:12:15 +0100 |
---|---|---|
committer | KevinOConnor <kevin@koconnor.net> | 2019-01-10 12:12:15 -0500 |
commit | a27838bc052d98f3328371f87868f1d365ba623a (patch) | |
tree | 27c61e71c5be176d12b4bc92cdceb00c294264fa /klippy | |
parent | 0ba1f5109d639ce92b7efe3ab88057e15694f4c4 (diff) | |
download | kutter-a27838bc052d98f3328371f87868f1d365ba623a.tar.gz kutter-a27838bc052d98f3328371f87868f1d365ba623a.tar.xz kutter-a27838bc052d98f3328371f87868f1d365ba623a.zip |
controller_fan: Add support for a fan cooling the controller-board (#1070)
Whenever a stepper driver or a heater becomes active, it is desirable to turn on a fan cooling the associated parts on the controller board. This module implements such a fan that turns on whenever a stepper or specified heater turns on, decelerates to a configurable speed when all of the watched parts turn off, and returns to an off-speed, when a user-defined timeout is met.
Signed-off-by: Nils Friedchen <Nils.Friedchen@googlemail.com>
Diffstat (limited to 'klippy')
-rw-r--r-- | klippy/extras/controller_fan.py | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/klippy/extras/controller_fan.py b/klippy/extras/controller_fan.py new file mode 100644 index 00000000..05897e3b --- /dev/null +++ b/klippy/extras/controller_fan.py @@ -0,0 +1,53 @@ +# Support a fan for cooling the MCU whenever a stepper or heater is on +# +# Copyright (C) 2019 Nils Friedchen <nils.friedchen@googlemail.com> +# +# This file may be distributed under the terms of the GNU GPLv3 license. +import fan + +PIN_MIN_TIME = 0.100 + +class ControllerFan: + def __init__(self, config): + self.printer = config.get_printer() + self.printer.register_event_handler("klippy:ready", self.handle_ready) + self.steppers = [] + self.fan = fan.PrinterFan(config) + self.mcu = self.fan.mcu_fan.get_mcu() + self.max_power = config.getfloat( + 'max_power', 1., minval=0., maxval=1.) + self.idle_speed = config.getfloat( + 'idle_speed', self.max_power, minval=0., maxval=self.max_power) + self.idle_timeout = config.getint("idle_timeout", 30, minval=0) + self.heater_name = config.get("heater", "extruder") + self.last_on = self.idle_timeout + def handle_ready(self): + pheater = self.printer.lookup_object('heater') + self.heaters = [pheater.lookup_heater(n.strip()) + for n in self.heater_name.split(',')] + kin = self.printer.lookup_object('toolhead').get_kinematics() + self.steppers = kin.get_steppers() + reactor = self.printer.get_reactor() + reactor.register_timer(self.callback, reactor.NOW) + def callback(self, eventtime): + power = 0. + active = False + for stepper in self.steppers: + active |= stepper.is_motor_enabled() + for heater in self.heaters: + currentTemp, targetTemp = heater.get_temp(eventtime) + if targetTemp: + active = True + if active: + self.last_on = 0 + power = self.max_power + else: + if self.last_on < self.idle_timeout: + power = self.idle_speed + self.last_on += 1 + print_time = self.mcu.estimated_print_time(eventtime) + PIN_MIN_TIME + self.fan.set_speed(print_time, power) + return eventtime + 1. + +def load_config(config): + return ControllerFan(config) |