From e0c947e1888ce8dd5b6948afc3d4782469fe5f28 Mon Sep 17 00:00:00 2001 From: Kevin O'Connor Date: Thu, 7 Dec 2017 18:12:06 -0500 Subject: [PATCH] mcu: Store MCU_stepper commanded_pos as a float It's valid to consider the stepper at a position that is not on a step interval - only the "mcu position" needs to be an integer. Signed-off-by: Kevin O'Connor --- klippy/mcu.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/klippy/mcu.py b/klippy/mcu.py index db330759..64ecb79c 100644 --- a/klippy/mcu.py +++ b/klippy/mcu.py @@ -18,9 +18,8 @@ class MCU_stepper: self._step_pin = pin_params['pin'] self._invert_step = pin_params['invert'] self._dir_pin = self._invert_dir = None - self._commanded_pos = 0 + self._commanded_pos = self._mcu_position_offset = 0. self._step_dist = self._inv_step_dist = 1. - self._mcu_position_offset = 0 self._min_stop_interval = 0. self._reset_cmd = self._get_position_cmd = None self._ffi_lib = self._stepqueue = None @@ -66,16 +65,16 @@ class MCU_stepper: def get_step_dist(self): return self._step_dist def set_position(self, pos): - if pos >= 0.: - steppos = int(pos * self._inv_step_dist + 0.5) - else: - steppos = int(pos * self._inv_step_dist - 0.5) + steppos = pos * self._inv_step_dist self._mcu_position_offset += self._commanded_pos - steppos self._commanded_pos = steppos def get_commanded_position(self): return self._commanded_pos * self._step_dist def get_mcu_position(self): - return self._commanded_pos + self._mcu_position_offset + mcu_pos = self._commanded_pos + self._mcu_position_offset + if mcu_pos >= 0.: + return int(mcu_pos + 0.5) + return int(mcu_pos - 0.5) def note_homing_start(self, homing_clock): ret = self._ffi_lib.stepcompress_set_homing( self._stepqueue, homing_clock)