diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2018-01-29 12:54:06 -0500 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2018-01-29 13:08:15 -0500 |
commit | 21df21b7af2759aa577eb8d39d8215471956c25c (patch) | |
tree | 8d36f02176a2d1b817e2e2159791035d91e4282f /klippy | |
parent | b7b216af7f49995f816f326c08f721b3814c9685 (diff) | |
download | kutter-21df21b7af2759aa577eb8d39d8215471956c25c.tar.gz kutter-21df21b7af2759aa577eb8d39d8215471956c25c.tar.xz kutter-21df21b7af2759aa577eb8d39d8215471956c25c.zip |
fan: Clarify hardware_pwm and allow cycle_time to be set on software pwm
Specify hardware pwm cycle times using the same method as software pwm
(in seconds, not clock ticks). Allow the fan code to be configured
with an explicit cycle time even when using software pwm.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy')
-rw-r--r-- | klippy/chipmisc.py | 9 | ||||
-rw-r--r-- | klippy/extras/fan.py | 8 | ||||
-rw-r--r-- | klippy/extras/multi_pin.py | 7 | ||||
-rw-r--r-- | klippy/extras/replicape.py | 12 | ||||
-rw-r--r-- | klippy/mcu.py | 21 |
5 files changed, 24 insertions, 33 deletions
diff --git a/klippy/chipmisc.py b/klippy/chipmisc.py index 611823ec..575f0664 100644 --- a/klippy/chipmisc.py +++ b/klippy/chipmisc.py @@ -25,12 +25,9 @@ class PrinterPin: self.is_pwm = 'pwm' in config.get_name().split()[0] if self.is_pwm: self.mcu_pin = pins.setup_pin(printer, 'pwm', config.get('pin')) - hard_pwm = config.getint('hard_pwm', None, minval=1) - if hard_pwm is None: - self.mcu_pin.setup_cycle_time(config.getfloat( - 'cycle_time', 0.100, above=0.)) - else: - self.mcu_pin.setup_hard_pwm(hard_pwm) + cycle_time = config.getfloat('cycle_time', 0.100, above=0.) + hardware_pwm = config.getboolean('hardware_pwm', False) + self.mcu_pin.setup_cycle_time(cycle_time, hardware_pwm) self.scale = config.getfloat('scale', 1., above=0.) else: self.mcu_pin = pins.setup_pin( diff --git a/klippy/extras/fan.py b/klippy/extras/fan.py index c7434ca5..7bc4a26d 100644 --- a/klippy/extras/fan.py +++ b/klippy/extras/fan.py @@ -5,8 +5,7 @@ # This file may be distributed under the terms of the GNU GPLv3 license. import pins -FAN_MIN_TIME = 0.1 -PWM_CYCLE_TIME = 0.010 +FAN_MIN_TIME = 0.100 class PrinterFan: def __init__(self, config): @@ -17,8 +16,9 @@ class PrinterFan: printer = config.get_printer() self.mcu_fan = pins.setup_pin(printer, 'pwm', config.get('pin')) self.mcu_fan.setup_max_duration(0.) - self.mcu_fan.setup_cycle_time(PWM_CYCLE_TIME) - self.mcu_fan.setup_hard_pwm(config.getint('hard_pwm', 0)) + cycle_time = config.getfloat('cycle_time', 0.010, above=0.) + hardware_pwm = config.getboolean('hardware_pwm', False) + self.mcu_fan.setup_cycle_time(cycle_time, hardware_pwm) def set_speed(self, print_time, value): value = max(0., min(self.max_power, value)) if value == self.last_fan_value: diff --git a/klippy/extras/multi_pin.py b/klippy/extras/multi_pin.py index 3e033a86..5ffaed80 100644 --- a/klippy/extras/multi_pin.py +++ b/klippy/extras/multi_pin.py @@ -40,12 +40,9 @@ class PrinterMultiPin: def setup_start_value(self, start_value, shutdown_value): for mcu_pin in self.mcu_pins: mcu_pin.setup_start_value(start_value, shutdown_value) - def setup_cycle_time(self, cycle_time): + def setup_cycle_time(self, cycle_time, hardware_pwm=False): for mcu_pin in self.mcu_pins: - mcu_pin.setup_cycle_time(cycle_time) - def setup_hard_pwm(self, hard_cycle_ticks): - for mcu_pin in self.mcu_pins: - mcu_pin.setup_hard_pwm(hard_cycle_ticks) + mcu_pin.setup_cycle_time(cycle_time, hardware_pwm) def set_digital(self, print_time, value): for mcu_pin in self.mcu_pins: mcu_pin.set_digital(print_time, value) diff --git a/klippy/extras/replicape.py b/klippy/extras/replicape.py index 72ab45e9..742607c5 100644 --- a/klippy/extras/replicape.py +++ b/klippy/extras/replicape.py @@ -3,6 +3,7 @@ # Copyright (C) 2017,2018 Kevin O'Connor <kevin@koconnor.net> # # This file may be distributed under the terms of the GNU GPLv3 license. +import logging import pins, mcu REPLICAPE_MAX_CURRENT = 3.84 @@ -37,11 +38,12 @@ class pca9685_pwm: return self._mcu def setup_max_duration(self, max_duration): self._max_duration = max_duration - def setup_cycle_time(self, cycle_time): - pass - def setup_hard_pwm(self, hard_cycle_ticks): - if hard_cycle_ticks: - raise pins.error("pca9685 does not support hard_pwm parameter") + def setup_cycle_time(self, cycle_time, hardware_pwm=False): + if hardware_pwm: + raise pins.error("pca9685 does not support hardware_pwm parameter") + if cycle_time != self._cycle_time: + logging.info("Ignoring pca9685 cycle time of %.6f (using %.6f)", + cycle_time, self._cycle_time) def setup_start_value(self, start_value, shutdown_value, is_static=False): if is_static and start_value != shutdown_value: raise pins.error("Static pin can not have shutdown value") diff --git a/klippy/mcu.py b/klippy/mcu.py index d91e6314..87c590a8 100644 --- a/klippy/mcu.py +++ b/klippy/mcu.py @@ -275,7 +275,7 @@ class MCU_digital_out: class MCU_pwm: def __init__(self, mcu, pin_params): self._mcu = mcu - self._hard_pwm = False + self._hardware_pwm = False self._cycle_time = 0.100 self._max_duration = 2. self._oid = None @@ -291,14 +291,9 @@ class MCU_pwm: return self._mcu def setup_max_duration(self, max_duration): self._max_duration = max_duration - def setup_cycle_time(self, cycle_time): + def setup_cycle_time(self, cycle_time, hardware_pwm=False): self._cycle_time = cycle_time - self._hard_pwm = False - def setup_hard_pwm(self, hard_cycle_ticks): - if not hard_cycle_ticks: - return - self._cycle_time = hard_cycle_ticks - self._hard_pwm = True + self._hardware_pwm = hardware_pwm def setup_start_value(self, start_value, shutdown_value, is_static=False): if is_static and start_value != shutdown_value: raise pins.error("Static pin can not have shutdown value") @@ -309,19 +304,20 @@ class MCU_pwm: self._shutdown_value = max(0., min(1., shutdown_value)) self._is_static = is_static def build_config(self): - if self._hard_pwm: + cycle_ticks = self._mcu.seconds_to_clock(self._cycle_time) + if self._hardware_pwm: self._pwm_max = self._mcu.get_constant_float("PWM_MAX") if self._is_static: self._mcu.add_config_cmd( "set_pwm_out pin=%s cycle_ticks=%d value=%d" % ( - self._pin, self._cycle_time, + self._pin, cycle_ticks, self._static_value * self._pwm_max)) return self._oid = self._mcu.create_oid() self._mcu.add_config_cmd( "config_pwm_out oid=%d pin=%s cycle_ticks=%d value=%d" " default_value=%d max_duration=%d" % ( - self._oid, self._pin, self._cycle_time, + self._oid, self._pin, cycle_ticks, self._start_value * self._pwm_max, self._shutdown_value * self._pwm_max, self._mcu.seconds_to_clock(self._max_duration))) @@ -341,8 +337,7 @@ class MCU_pwm: self._mcu.add_config_cmd( "config_soft_pwm_out oid=%d pin=%s cycle_ticks=%d value=%d" " default_value=%d max_duration=%d" % ( - self._oid, self._pin, - self._mcu.seconds_to_clock(self._cycle_time), + self._oid, self._pin, cycle_ticks, self._start_value >= 0.5, self._shutdown_value >= 0.5, self._mcu.seconds_to_clock(self._max_duration))) self._set_cmd = self._mcu.lookup_command( |