|
@ -467,8 +467,8 @@ void _internal_move_to_destination(const_feedRate_t fr_mm_s/*=0.0f*/ |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/**
|
|
|
/**
|
|
|
* Plan a move to (X, Y, Z, [I, [J, [K]]]) and set the current_position |
|
|
* Plan a move to (X, Y, Z, [I, [J, [K...]]]) and set the current_position |
|
|
* Plan a move to (X, Y, Z) with separation of Z from other components. |
|
|
* Plan a move to (X, Y, Z, [I, [J, [K...]]]) with separation of Z from other components. |
|
|
* |
|
|
* |
|
|
* - If Z is moving up, the Z move is done before XY, etc. |
|
|
* - If Z is moving up, the Z move is done before XY, etc. |
|
|
* - If Z is moving down, the Z move is done after XY, etc. |
|
|
* - If Z is moving down, the Z move is done after XY, etc. |
|
@ -484,6 +484,15 @@ void do_blocking_move_to(LINEAR_AXIS_ARGS(const float), const_feedRate_t fr_mm_s |
|
|
#if HAS_Z_AXIS |
|
|
#if HAS_Z_AXIS |
|
|
const feedRate_t z_feedrate = fr_mm_s ?: homing_feedrate(Z_AXIS); |
|
|
const feedRate_t z_feedrate = fr_mm_s ?: homing_feedrate(Z_AXIS); |
|
|
#endif |
|
|
#endif |
|
|
|
|
|
#if HAS_I_AXIS |
|
|
|
|
|
const feedRate_t i_feedrate = fr_mm_s ?: homing_feedrate(I_AXIS); |
|
|
|
|
|
#endif |
|
|
|
|
|
#if HAS_J_AXIS |
|
|
|
|
|
const feedRate_t j_feedrate = fr_mm_s ?: homing_feedrate(J_AXIS); |
|
|
|
|
|
#endif |
|
|
|
|
|
#if HAS_K_AXIS |
|
|
|
|
|
const feedRate_t k_feedrate = fr_mm_s ?: homing_feedrate(K_AXIS); |
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
#if IS_KINEMATIC |
|
|
#if IS_KINEMATIC |
|
|
if (!position_is_reachable(x, y)) return; |
|
|
if (!position_is_reachable(x, y)) return; |
|
@ -498,8 +507,8 @@ void do_blocking_move_to(LINEAR_AXIS_ARGS(const float), const_feedRate_t fr_mm_s |
|
|
|
|
|
|
|
|
// when in the danger zone
|
|
|
// when in the danger zone
|
|
|
if (current_position.z > delta_clip_start_height) { |
|
|
if (current_position.z > delta_clip_start_height) { |
|
|
if (z > delta_clip_start_height) { // staying in the danger zone
|
|
|
if (z > delta_clip_start_height) { // staying in the danger zone
|
|
|
destination.set(x, y, z); // move directly (uninterpolated)
|
|
|
destination.set(x, y, z); // move directly (uninterpolated)
|
|
|
prepare_internal_fast_move_to_destination(); // set current_position from destination
|
|
|
prepare_internal_fast_move_to_destination(); // set current_position from destination
|
|
|
if (DEBUGGING(LEVELING)) DEBUG_POS("danger zone move", current_position); |
|
|
if (DEBUGGING(LEVELING)) DEBUG_POS("danger zone move", current_position); |
|
|
return; |
|
|
return; |
|
@ -509,7 +518,7 @@ void do_blocking_move_to(LINEAR_AXIS_ARGS(const float), const_feedRate_t fr_mm_s |
|
|
if (DEBUGGING(LEVELING)) DEBUG_POS("zone border move", current_position); |
|
|
if (DEBUGGING(LEVELING)) DEBUG_POS("zone border move", current_position); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if (z > current_position.z) { // raising?
|
|
|
if (z > current_position.z) { // raising?
|
|
|
destination.z = z; |
|
|
destination.z = z; |
|
|
prepare_internal_fast_move_to_destination(z_feedrate); // set current_position from destination
|
|
|
prepare_internal_fast_move_to_destination(z_feedrate); // set current_position from destination
|
|
|
if (DEBUGGING(LEVELING)) DEBUG_POS("z raise move", current_position); |
|
|
if (DEBUGGING(LEVELING)) DEBUG_POS("z raise move", current_position); |
|
@ -519,7 +528,7 @@ void do_blocking_move_to(LINEAR_AXIS_ARGS(const float), const_feedRate_t fr_mm_s |
|
|
prepare_internal_move_to_destination(); // set current_position from destination
|
|
|
prepare_internal_move_to_destination(); // set current_position from destination
|
|
|
if (DEBUGGING(LEVELING)) DEBUG_POS("xy move", current_position); |
|
|
if (DEBUGGING(LEVELING)) DEBUG_POS("xy move", current_position); |
|
|
|
|
|
|
|
|
if (z < current_position.z) { // lowering?
|
|
|
if (z < current_position.z) { // lowering?
|
|
|
destination.z = z; |
|
|
destination.z = z; |
|
|
prepare_internal_fast_move_to_destination(z_feedrate); // set current_position from destination
|
|
|
prepare_internal_fast_move_to_destination(z_feedrate); // set current_position from destination
|
|
|
if (DEBUGGING(LEVELING)) DEBUG_POS("z lower move", current_position); |
|
|
if (DEBUGGING(LEVELING)) DEBUG_POS("z lower move", current_position); |
|
@ -528,39 +537,32 @@ void do_blocking_move_to(LINEAR_AXIS_ARGS(const float), const_feedRate_t fr_mm_s |
|
|
#elif IS_SCARA |
|
|
#elif IS_SCARA |
|
|
|
|
|
|
|
|
// If Z needs to raise, do it before moving XY
|
|
|
// If Z needs to raise, do it before moving XY
|
|
|
if (destination.z < z) { |
|
|
if (destination.z < z) { destination.z = z; prepare_internal_fast_move_to_destination(z_feedrate); } |
|
|
destination.z = z; |
|
|
|
|
|
prepare_internal_fast_move_to_destination(z_feedrate); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
destination.set(x, y); |
|
|
destination.set(x, y); prepare_internal_fast_move_to_destination(xy_feedrate); |
|
|
prepare_internal_fast_move_to_destination(xy_feedrate); |
|
|
|
|
|
|
|
|
|
|
|
// If Z needs to lower, do it after moving XY
|
|
|
// If Z needs to lower, do it after moving XY
|
|
|
if (destination.z > z) { |
|
|
if (destination.z > z) { destination.z = z; prepare_internal_fast_move_to_destination(z_feedrate); } |
|
|
destination.z = z; |
|
|
|
|
|
prepare_internal_fast_move_to_destination(z_feedrate); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
#else |
|
|
#else |
|
|
|
|
|
|
|
|
#if HAS_Z_AXIS |
|
|
#if HAS_Z_AXIS // If Z needs to raise, do it before moving XY
|
|
|
// If Z needs to raise, do it before moving XY
|
|
|
if (current_position.z < z) { current_position.z = z; line_to_current_position(z_feedrate); } |
|
|
if (current_position.z < z) { |
|
|
|
|
|
current_position.z = z; |
|
|
|
|
|
line_to_current_position(z_feedrate); |
|
|
|
|
|
} |
|
|
|
|
|
#endif |
|
|
#endif |
|
|
|
|
|
|
|
|
current_position.set(x, y); |
|
|
current_position.set(x, y); line_to_current_position(xy_feedrate); |
|
|
line_to_current_position(xy_feedrate); |
|
|
|
|
|
|
|
|
|
|
|
#if HAS_Z_AXIS |
|
|
#if HAS_I_AXIS |
|
|
// If Z needs to lower, do it after moving XY
|
|
|
current_position.i = i; line_to_current_position(i_feedrate); |
|
|
if (current_position.z > z) { |
|
|
#endif |
|
|
current_position.z = z; |
|
|
#if HAS_J_AXIS |
|
|
line_to_current_position(z_feedrate); |
|
|
current_position.j = j; line_to_current_position(j_feedrate); |
|
|
} |
|
|
#endif |
|
|
|
|
|
#if HAS_K_AXIS |
|
|
|
|
|
current_position.k = k; line_to_current_position(k_feedrate); |
|
|
|
|
|
#endif |
|
|
|
|
|
#if HAS_Z_AXIS // If Z needs to lower, do it after moving XY...
|
|
|
|
|
|
if (current_position.z > z) { current_position.z = z; line_to_current_position(z_feedrate); } |
|
|
#endif |
|
|
#endif |
|
|
|
|
|
|
|
|
#endif |
|
|
#endif |
|
@ -1402,6 +1404,15 @@ void prepare_line_to_destination() { |
|
|
#endif |
|
|
#endif |
|
|
break; |
|
|
break; |
|
|
#endif |
|
|
#endif |
|
|
|
|
|
#if I_SENSORLESS |
|
|
|
|
|
case I_AXIS: stealth_states.i = tmc_enable_stallguard(stepperI); break; |
|
|
|
|
|
#endif |
|
|
|
|
|
#if J_SENSORLESS |
|
|
|
|
|
case J_AXIS: stealth_states.j = tmc_enable_stallguard(stepperJ); break; |
|
|
|
|
|
#endif |
|
|
|
|
|
#if K_SENSORLESS |
|
|
|
|
|
case K_AXIS: stealth_states.k = tmc_enable_stallguard(stepperK); break; |
|
|
|
|
|
#endif |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
#if ENABLED(SPI_ENDSTOPS) |
|
|
#if ENABLED(SPI_ENDSTOPS) |
|
@ -1479,6 +1490,15 @@ void prepare_line_to_destination() { |
|
|
#endif |
|
|
#endif |
|
|
break; |
|
|
break; |
|
|
#endif |
|
|
#endif |
|
|
|
|
|
#if I_SENSORLESS |
|
|
|
|
|
case I_AXIS: tmc_disable_stallguard(stepperI, enable_stealth.i); break; |
|
|
|
|
|
#endif |
|
|
|
|
|
#if J_SENSORLESS |
|
|
|
|
|
case J_AXIS: tmc_disable_stallguard(stepperJ, enable_stealth.j); break; |
|
|
|
|
|
#endif |
|
|
|
|
|
#if K_SENSORLESS |
|
|
|
|
|
case K_AXIS: tmc_disable_stallguard(stepperK, enable_stealth.k); break; |
|
|
|
|
|
#endif |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
#if ENABLED(SPI_ENDSTOPS) |
|
|
#if ENABLED(SPI_ENDSTOPS) |
|
@ -1815,8 +1835,12 @@ void prepare_line_to_destination() { |
|
|
switch (axis) { |
|
|
switch (axis) { |
|
|
default: |
|
|
default: |
|
|
case X_AXIS: es = X_ENDSTOP; break; |
|
|
case X_AXIS: es = X_ENDSTOP; break; |
|
|
case Y_AXIS: es = Y_ENDSTOP; break; |
|
|
#if HAS_Y_AXIS |
|
|
case Z_AXIS: es = Z_ENDSTOP; break; |
|
|
case Y_AXIS: es = Y_ENDSTOP; break; |
|
|
|
|
|
#endif |
|
|
|
|
|
#if HAS_Z_AXIS |
|
|
|
|
|
case Z_AXIS: es = Z_ENDSTOP; break; |
|
|
|
|
|
#endif |
|
|
#if HAS_I_AXIS |
|
|
#if HAS_I_AXIS |
|
|
case I_AXIS: es = I_ENDSTOP; break; |
|
|
case I_AXIS: es = I_ENDSTOP; break; |
|
|
#endif |
|
|
#endif |
|
|