diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2018-10-08 21:49:56 -0400 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2018-10-10 12:14:27 -0400 |
commit | d4bf51231a6e23e200f5fed536afa338ad681af6 (patch) | |
tree | 2eec987cba25e374577a4ff3728d8c2b2324807c /klippy/kinematics | |
parent | 3db483e2702771775b7ae099a7a2089cb60a0309 (diff) | |
download | kutter-d4bf51231a6e23e200f5fed536afa338ad681af6.tar.gz kutter-d4bf51231a6e23e200f5fed536afa338ad681af6.tar.xz kutter-d4bf51231a6e23e200f5fed536afa338ad681af6.zip |
homing: Implement second home from homing.py
Move the logic for performing the second home from the kinematics
classes to the generic homing code.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy/kinematics')
-rw-r--r-- | klippy/kinematics/cartesian.py | 38 | ||||
-rw-r--r-- | klippy/kinematics/corexy.py | 41 | ||||
-rw-r--r-- | klippy/kinematics/delta.py | 19 |
3 files changed, 28 insertions, 70 deletions
diff --git a/klippy/kinematics/cartesian.py b/klippy/kinematics/cartesian.py index e6882061..6e971fb5 100644 --- a/klippy/kinematics/cartesian.py +++ b/klippy/kinematics/cartesian.py @@ -55,38 +55,24 @@ class CartKinematics: if i in homing_axes: self.limits[i] = rail.get_range() def _home_axis(self, homing_state, axis, rail): - # Determine moves + # Determine movement position_min, position_max = rail.get_range() hi = rail.get_homing_info() + homepos = [None, None, None, None] + homepos[axis] = hi.position_endstop + forcepos = list(homepos) if hi.positive_dir: - pos = hi.position_endstop - 1.5*(hi.position_endstop - position_min) - rpos = hi.position_endstop - hi.retract_dist - r2pos = rpos - hi.retract_dist + forcepos[axis] -= 1.5 * (hi.position_endstop - position_min) else: - pos = hi.position_endstop + 1.5*(position_max - hi.position_endstop) - rpos = hi.position_endstop + hi.retract_dist - r2pos = rpos + hi.retract_dist - # Initial homing - homing_speed = hi.speed - second_homing_speed = hi.second_homing_speed + forcepos[axis] += 1.5 * (position_max - hi.position_endstop) + # Perform homing + limit_speed = None if axis == 2: - homing_speed = min(homing_speed, self.max_z_velocity) - second_homing_speed = min(second_homing_speed, self.max_z_velocity) - homepos = [None, None, None, None] - homepos[axis] = hi.position_endstop - coord = [None, None, None, None] - coord[axis] = pos - homing_state.home(coord, homepos, rail.get_endstops(), homing_speed) - # Retract - coord[axis] = rpos - homing_state.retract(coord, homing_speed) - # Home again - coord[axis] = r2pos - homing_state.home(coord, homepos, rail.get_endstops(), - second_homing_speed, second_home=True) + limit_speed = self.max_z_velocity + homing_state.home_rails([rail], forcepos, homepos, limit_speed) # Set final homed position - coord[axis] = hi.position_endstop + rail.get_homed_offset() - homing_state.set_homed_position(coord) + forcepos[axis] = hi.position_endstop + rail.get_homed_offset() + homing_state.set_homed_position(forcepos) def home(self, homing_state): # Each axis is homed independently and in order for axis in homing_state.get_axes(): diff --git a/klippy/kinematics/corexy.py b/klippy/kinematics/corexy.py index 4121c4b6..99f48fbf 100644 --- a/klippy/kinematics/corexy.py +++ b/klippy/kinematics/corexy.py @@ -48,42 +48,25 @@ class CoreXYKinematics: # Each axis is homed independently and in order for axis in homing_state.get_axes(): rail = self.rails[axis] - # Determine moves + # Determine movement position_min, position_max = rail.get_range() hi = rail.get_homing_info() + homepos = [None, None, None, None] + homepos[axis] = hi.position_endstop + forcepos = list(homepos) if hi.positive_dir: - pos = hi.position_endstop - 1.5*( - hi.position_endstop - position_min) - rpos = hi.position_endstop - hi.retract_dist - r2pos = rpos - hi.retract_dist + forcepos[axis] -= 1.5 * (hi.position_endstop - position_min) else: - pos = hi.position_endstop + 1.5*( - position_max - hi.position_endstop) - rpos = hi.position_endstop + hi.retract_dist - r2pos = rpos + hi.retract_dist - # Initial homing - homing_speed = hi.speed - second_homing_speed = hi.second_homing_speed + forcepos[axis] += 1.5 * (position_max - hi.position_endstop) + # Perform homing + limit_speed = None if axis == 2: - homing_speed = min(homing_speed, self.max_z_velocity) - second_homing_speed = min(second_homing_speed, - self.max_z_velocity) - homepos = [None, None, None, None] - homepos[axis] = hi.position_endstop - coord = [None, None, None, None] - coord[axis] = pos - homing_state.home(coord, homepos, rail.get_endstops(), homing_speed) - # Retract - coord[axis] = rpos - homing_state.retract(coord, homing_speed) - # Home again - coord[axis] = r2pos - homing_state.home(coord, homepos, rail.get_endstops(), - second_homing_speed, second_home=True) + limit_speed = self.max_z_velocity + homing_state.home_rails([rail], forcepos, homepos, limit_speed) if axis == 2: # Support endstop phase detection on Z axis - coord[axis] = hi.position_endstop + rail.get_homed_offset() - homing_state.set_homed_position(coord) + forcepos[axis] = hi.position_endstop + rail.get_homed_offset() + homing_state.set_homed_position(forcepos) def motor_off(self, print_time): self.limits = [(1.0, -1.0)] * 3 for rail in self.rails: diff --git a/klippy/kinematics/delta.py b/klippy/kinematics/delta.py index f340f9b4..6be91661 100644 --- a/klippy/kinematics/delta.py +++ b/klippy/kinematics/delta.py @@ -97,22 +97,11 @@ class DeltaKinematics: def home(self, homing_state): # All axes are homed simultaneously homing_state.set_axes([0, 1, 2]) - endstops = [es for rail in self.rails for es in rail.get_endstops()] - # Initial homing - assume homing speed same for all steppers - hi = self.rails[0].get_homing_info() - homing_speed = min(hi.speed, self.max_z_velocity) - second_homing_speed = min(hi.second_homing_speed, self.max_z_velocity) homepos = [0., 0., self.max_z, None] - coord = list(homepos) - coord[2] = -1.5 * math.sqrt(max(self.arm2)-self.max_xy2) - homing_state.home(coord, homepos, endstops, homing_speed) - # Retract - coord[2] = homepos[2] - hi.retract_dist - homing_state.retract(coord, homing_speed) - # Home again - coord[2] -= hi.retract_dist - homing_state.home(coord, homepos, endstops, - second_homing_speed, second_home=True) + forcepos = list(homepos) + forcepos[2] = -1.5 * math.sqrt(max(self.arm2)-self.max_xy2) + homing_state.home_rails(self.rails, forcepos, homepos, + limit_speed=self.max_z_velocity) # Set final homed position spos = [ep + rail.get_homed_offset() for ep, rail in zip(self.abs_endstops, self.rails)] |