aboutsummaryrefslogtreecommitdiffstats
path: root/klippy
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2017-10-01 16:31:05 -0400
committerKevin O'Connor <kevin@koconnor.net>2017-10-01 19:15:55 -0400
commitece1f71c645da7115f497642c16278417a1f5292 (patch)
tree31b3e6d8a21f83be6be4ca14d03fc9277e330449 /klippy
parent776d8f9f79761fb3e9ae633290738a7c86118016 (diff)
downloadkutter-ece1f71c645da7115f497642c16278417a1f5292.tar.gz
kutter-ece1f71c645da7115f497642c16278417a1f5292.tar.xz
kutter-ece1f71c645da7115f497642c16278417a1f5292.zip
endstop: Support oversampling of the endstop
Some printers can show occasional noise on the endstop pin. Support sampling the endstop pin multiple times to attempt to filter out this noise. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy')
-rw-r--r--klippy/mcu.py9
-rw-r--r--klippy/stepper.py5
2 files changed, 14 insertions, 0 deletions
diff --git a/klippy/mcu.py b/klippy/mcu.py
index a2f742cc..a24a3ba3 100644
--- a/klippy/mcu.py
+++ b/klippy/mcu.py
@@ -137,6 +137,8 @@ class MCU_endstop:
self._pin = pin_params['pin']
self._pullup = pin_params['pullup']
self._invert = pin_params['invert']
+ self._oversample_count = 0
+ self._oversample_time = 0.
self._cmd_queue = mcu.alloc_command_queue()
self._oid = self._home_cmd = self._query_cmd = None
self._homing = False
@@ -144,6 +146,9 @@ class MCU_endstop:
self._last_state = {}
def get_mcu(self):
return self._mcu
+ def setup_oversample(self, oversample_count, oversample_time):
+ self._oversample_count = oversample_count
+ self._oversample_time = oversample_time
def add_stepper(self, stepper):
self._steppers.append(stepper)
def build_config(self):
@@ -155,6 +160,10 @@ class MCU_endstop:
self._mcu.add_config_cmd(
"end_stop_set_stepper oid=%d pos=%d stepper_oid=%d" % (
self._oid, i, s.get_oid()), is_init=True)
+ self._mcu.add_config_cmd(
+ "end_stop_set_oversample oid=%d sample_ticks=%d sample_count=%d" % (
+ self._oid, self._mcu.seconds_to_clock(self._oversample_time),
+ self._oversample_count), is_init=True)
self._home_cmd = self._mcu.lookup_command(
"end_stop_home oid=%c clock=%u rest_ticks=%u pin_value=%c")
self._query_cmd = self._mcu.lookup_command("end_stop_query oid=%c")
diff --git a/klippy/stepper.py b/klippy/stepper.py
index ab1af2ba..5040ce9e 100644
--- a/klippy/stepper.py
+++ b/klippy/stepper.py
@@ -6,6 +6,9 @@
import math, logging
import homing, pins
+ENDSTOP_OVERSAMPLE_COUNT = 4
+ENDSTOP_OVERSAMPLE_TIME = .000015
+
class PrinterStepper:
def __init__(self, printer, config, name):
self.name = name
@@ -52,6 +55,8 @@ class PrinterHomingStepper(PrinterStepper):
self.mcu_endstop = pins.setup_pin(
printer, 'endstop', config.get('endstop_pin'))
+ self.mcu_endstop.setup_oversample(
+ ENDSTOP_OVERSAMPLE_COUNT, ENDSTOP_OVERSAMPLE_TIME)
self.mcu_endstop.add_stepper(self.mcu_stepper)
self.position_min = config.getfloat('position_min', 0.)
self.position_max = config.getfloat(