aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2017-03-08 20:00:27 -0500
committerKevin O'Connor <kevin@koconnor.net>2017-03-08 20:23:09 -0500
commitbcaf818c0e2bc6b92a579318b9ac97911d0104bf (patch)
tree50ce5f15e290ea56a9d1658f9ef834bff64af9a7
parent37bac916e7dd7159fe731f313859e31e743f7f23 (diff)
downloadkutter-bcaf818c0e2bc6b92a579318b9ac97911d0104bf.tar.gz
kutter-bcaf818c0e2bc6b92a579318b9ac97911d0104bf.tar.xz
kutter-bcaf818c0e2bc6b92a579318b9ac97911d0104bf.zip
fan: Default to using software PWM
Not all hardware has PWM support and there is no compelling reason to use hardware PWM for fans. Change the default to use software PWM. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
-rw-r--r--config/avrsim.cfg1
-rw-r--r--config/example-delta.cfg1
-rw-r--r--config/example.cfg7
-rw-r--r--config/makergear-m2-2012.cfg1
-rw-r--r--klippy/fan.py6
-rw-r--r--klippy/heater.py3
-rw-r--r--klippy/mcu.py10
7 files changed, 15 insertions, 14 deletions
diff --git a/config/avrsim.cfg b/config/avrsim.cfg
index 83afde34..6a50ae80 100644
--- a/config/avrsim.cfg
+++ b/config/avrsim.cfg
@@ -65,7 +65,6 @@ max_temp: 110
[fan]
pin: ar14
-hard_pwm: 1
[mcu]
serial: /tmp/pseudoserial
diff --git a/config/example-delta.cfg b/config/example-delta.cfg
index 1eb96b3c..90f8c8b5 100644
--- a/config/example-delta.cfg
+++ b/config/example-delta.cfg
@@ -67,7 +67,6 @@ max_temp: 130
# Extruder print fan (omit section if fan not present)
#[fan]
#pin: ar9
-#hard_pwm: 1
[mcu]
serial: /dev/ttyACM0
diff --git a/config/example.cfg b/config/example.cfg
index afa14082..9037d919 100644
--- a/config/example.cfg
+++ b/config/example.cfg
@@ -219,11 +219,12 @@ max_temp: 110
pin: ar14
# PWM output pin controlling the fan. This parameter must be
# provided.
-hard_pwm: 1
+#hard_pwm: 0
# Set this value to force hardware PWM instead of software PWM. Set
# to 1 to force a hardware PWM at the fastest rate; set to a higher
-# number (eg, 1024) to force hardware PWM with the given cycle time
-# in clock ticks. The default is 128 clock ticks.
+# number to force hardware PWM with the given cycle time in clock
+# ticks. The default is 0 which enables software PWM with a cycle
+# time of 10ms.
#kick_start_time: 0.100
# Time (in seconds) to run the fan at full speed when first enabling
# it (helps get the fan spinning). The default is 0.100 seconds.
diff --git a/config/makergear-m2-2012.cfg b/config/makergear-m2-2012.cfg
index 833ea72a..845e64b0 100644
--- a/config/makergear-m2-2012.cfg
+++ b/config/makergear-m2-2012.cfg
@@ -71,7 +71,6 @@ max_temp: 100
[fan]
pin: PH5
-hard_pwm: 1
[mcu]
serial: /dev/ttyACM0
diff --git a/klippy/fan.py b/klippy/fan.py
index 739af2f1..2f9fb7a5 100644
--- a/klippy/fan.py
+++ b/klippy/fan.py
@@ -5,6 +5,7 @@
# This file may be distributed under the terms of the GNU GPLv3 license.
FAN_MIN_TIME = 0.1
+PWM_CYCLE_TIME = 0.010
class PrinterFan:
def __init__(self, printer, config):
@@ -16,8 +17,9 @@ class PrinterFan:
self.kick_start_time = config.getfloat('kick_start_time', 0.1)
def build_config(self):
pin = self.config.get('pin')
- hard_pwm = self.config.getint('hard_pwm', 128)
- self.mcu_fan = self.printer.mcu.create_pwm(pin, hard_pwm, 0)
+ hard_pwm = self.config.getint('hard_pwm', 0)
+ self.mcu_fan = self.printer.mcu.create_pwm(
+ pin, PWM_CYCLE_TIME, hard_pwm, 0.)
# External commands
def set_speed(self, print_time, value):
value = max(0., min(1., value))
diff --git a/klippy/heater.py b/klippy/heater.py
index 77cb659f..66d2db91 100644
--- a/klippy/heater.py
+++ b/klippy/heater.py
@@ -16,6 +16,7 @@ Thermistors = {
SAMPLE_TIME = 0.001
SAMPLE_COUNT = 8
REPORT_TIME = 0.300
+PWM_CYCLE_TIME = 0.100
KELVIN_TO_CELCIUS = -273.15
MAX_HEAT_TIME = 5.0
AMBIENT_TEMP = 25.
@@ -55,7 +56,7 @@ class PrinterHeater:
heater_pin, MAX_HEAT_TIME)
else:
self.mcu_pwm = self.printer.mcu.create_pwm(
- heater_pin, 0, MAX_HEAT_TIME)
+ heater_pin, PWM_CYCLE_TIME, 0, MAX_HEAT_TIME)
self.mcu_adc = self.printer.mcu.create_adc(thermistor_pin)
min_adc = self.calc_adc(self.max_temp)
max_adc = self.calc_adc(self.min_temp)
diff --git a/klippy/mcu.py b/klippy/mcu.py
index 129024ba..38e34270 100644
--- a/klippy/mcu.py
+++ b/klippy/mcu.py
@@ -251,7 +251,7 @@ class MCU_digital_out:
class MCU_pwm:
PWM_MAX = 255.
- def __init__(self, mcu, pin, cycle_ticks, max_duration, hard_pwm=True):
+ def __init__(self, mcu, pin, cycle_ticks, max_duration, hard_pwm=False):
self._mcu = mcu
self._oid = mcu.create_oid()
self._last_clock = 0
@@ -510,14 +510,14 @@ class MCU:
def create_digital_out(self, pin, max_duration=2.):
max_duration = int(max_duration * self._mcu_freq)
return MCU_digital_out(self, pin, max_duration)
- def create_pwm(self, pin, hard_cycle_ticks, max_duration=2.):
+ def create_pwm(self, pin, cycle_time, hard_cycle_ticks=0, max_duration=2.):
max_duration = int(max_duration * self._mcu_freq)
if hard_cycle_ticks:
- return MCU_pwm(self, pin, hard_cycle_ticks, max_duration)
+ return MCU_pwm(self, pin, hard_cycle_ticks, max_duration, True)
if hard_cycle_ticks < 0:
return MCU_digital_out(self, pin, max_duration)
- cycle_ticks = int(self._mcu_freq / 10.)
- return MCU_pwm(self, pin, cycle_ticks, max_duration, hard_pwm=False)
+ cycle_ticks = int(cycle_time * self._mcu_freq)
+ return MCU_pwm(self, pin, cycle_ticks, max_duration, False)
def create_adc(self, pin):
return MCU_adc(self, pin)
# Clock syncing