mirror of
https://github.com/Klipper3d/klipper.git
synced 2025-07-16 11:17:52 -06:00
itersolve: Move tracking of commanded position to itersolve code
Track the commanded position in just the itersolve.c code instead of in mcu.py. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
parent
8f747e2720
commit
926829e737
3 changed files with 23 additions and 20 deletions
|
@ -18,8 +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 = self._mcu_position_offset = 0.
|
||||
self._step_dist = self._inv_step_dist = 1.
|
||||
self._mcu_position_offset = 0.
|
||||
self._step_dist = 0.
|
||||
self._min_stop_interval = 0.
|
||||
self._reset_cmd_id = self._get_position_cmd = None
|
||||
ffi_main, self._ffi_lib = chelper.get_ffi()
|
||||
|
@ -39,7 +39,6 @@ class MCU_stepper:
|
|||
self._min_stop_interval = min_stop_interval
|
||||
def setup_step_distance(self, step_dist):
|
||||
self._step_dist = step_dist
|
||||
self._inv_step_dist = 1. / step_dist
|
||||
def setup_itersolve(self, sk):
|
||||
old_sk = self._stepper_kinematics
|
||||
self._stepper_kinematics = sk
|
||||
|
@ -73,16 +72,14 @@ class MCU_stepper:
|
|||
def get_step_dist(self):
|
||||
return self._step_dist
|
||||
def set_position(self, pos):
|
||||
if self._stepper_kinematics is not None:
|
||||
self._ffi_lib.itersolve_set_commanded_pos(
|
||||
self._stepper_kinematics, pos)
|
||||
steppos = pos * self._inv_step_dist
|
||||
self._mcu_position_offset += self._commanded_pos - steppos
|
||||
self._commanded_pos = steppos
|
||||
self._mcu_position_offset += self.get_commanded_position() - pos
|
||||
self._ffi_lib.itersolve_set_commanded_pos(self._stepper_kinematics, pos)
|
||||
def get_commanded_position(self):
|
||||
return self._commanded_pos * self._step_dist
|
||||
return self._ffi_lib.itersolve_get_commanded_pos(
|
||||
self._stepper_kinematics)
|
||||
def get_mcu_position(self):
|
||||
mcu_pos = self._commanded_pos + self._mcu_position_offset
|
||||
pos_delta = self.get_commanded_position() + self._mcu_position_offset
|
||||
mcu_pos = pos_delta / self._step_dist
|
||||
if mcu_pos >= 0.:
|
||||
return int(mcu_pos + 0.5)
|
||||
return int(mcu_pos - 0.5)
|
||||
|
@ -115,15 +112,15 @@ class MCU_stepper:
|
|||
return
|
||||
params = self._get_position_cmd.send_with_response(
|
||||
[self._oid], response='stepper_position', response_oid=self._oid)
|
||||
pos = params['pos']
|
||||
pos = params['pos'] * self._step_dist
|
||||
if self._invert_dir:
|
||||
pos = -pos
|
||||
self._commanded_pos = pos - self._mcu_position_offset
|
||||
self._ffi_lib.itersolve_set_commanded_pos(
|
||||
self._stepper_kinematics, pos - self._mcu_position_offset)
|
||||
def step_itersolve(self, cmove):
|
||||
count = self._itersolve_gen_steps(self._stepper_kinematics, cmove)
|
||||
if count == STEPCOMPRESS_ERROR_RET:
|
||||
ret = self._itersolve_gen_steps(self._stepper_kinematics, cmove)
|
||||
if ret:
|
||||
raise error("Internal error in stepcompress")
|
||||
self._commanded_pos += count
|
||||
|
||||
class MCU_endstop:
|
||||
class TimeoutError(Exception):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue