aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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