Add support for Triple-Z steppers/endstops
This commit is contained in:
committed by
Scott Lahteine
parent
bc06406d7d
commit
1a6f2b29b8
@ -1313,7 +1313,7 @@ void homeaxis(const AxisEnum axis) {
|
||||
#endif
|
||||
|
||||
// Set flags for X, Y, Z motor locking
|
||||
#if ENABLED(X_DUAL_ENDSTOPS) || ENABLED(Y_DUAL_ENDSTOPS) || ENABLED(Z_DUAL_ENDSTOPS)
|
||||
#if ENABLED(X_DUAL_ENDSTOPS) || ENABLED(Y_DUAL_ENDSTOPS) || Z_MULTI_ENDSTOPS
|
||||
switch (axis) {
|
||||
#if ENABLED(X_DUAL_ENDSTOPS)
|
||||
case X_AXIS:
|
||||
@ -1324,7 +1324,17 @@ void homeaxis(const AxisEnum axis) {
|
||||
#if ENABLED(Z_DUAL_ENDSTOPS)
|
||||
case Z_AXIS:
|
||||
#endif
|
||||
stepper.set_homing_dual_axis(true);
|
||||
stepper.set_separate_multi_axis(true);
|
||||
default: break;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if ENABLED(Z_TRIPLE_ENDSTOPS)
|
||||
switch (axis) {
|
||||
#if ENABLED(Z_TRIPLE_ENDSTOPS)
|
||||
case Z_AXIS:
|
||||
#endif
|
||||
stepper.set_separate_multi_axis(true);
|
||||
default: break;
|
||||
}
|
||||
#endif
|
||||
@ -1384,13 +1394,13 @@ void homeaxis(const AxisEnum axis) {
|
||||
#endif
|
||||
}
|
||||
|
||||
#if ENABLED(X_DUAL_ENDSTOPS) || ENABLED(Y_DUAL_ENDSTOPS) || ENABLED(Z_DUAL_ENDSTOPS)
|
||||
#if ENABLED(X_DUAL_ENDSTOPS) || ENABLED(Y_DUAL_ENDSTOPS) || Z_MULTI_ENDSTOPS
|
||||
const bool pos_dir = axis_home_dir > 0;
|
||||
#if ENABLED(X_DUAL_ENDSTOPS)
|
||||
if (axis == X_AXIS) {
|
||||
const float adj = ABS(endstops.x_endstop_adj);
|
||||
const float adj = ABS(endstops.x2_endstop_adj);
|
||||
if (adj) {
|
||||
if (pos_dir ? (endstops.x_endstop_adj > 0) : (endstops.x_endstop_adj < 0)) stepper.set_x_lock(true); else stepper.set_x2_lock(true);
|
||||
if (pos_dir ? (endstops.x2_endstop_adj > 0) : (endstops.x2_endstop_adj < 0)) stepper.set_x_lock(true); else stepper.set_x2_lock(true);
|
||||
do_homing_move(axis, pos_dir ? -adj : adj);
|
||||
stepper.set_x_lock(false);
|
||||
stepper.set_x2_lock(false);
|
||||
@ -1399,9 +1409,9 @@ void homeaxis(const AxisEnum axis) {
|
||||
#endif
|
||||
#if ENABLED(Y_DUAL_ENDSTOPS)
|
||||
if (axis == Y_AXIS) {
|
||||
const float adj = ABS(endstops.y_endstop_adj);
|
||||
const float adj = ABS(endstops.y2_endstop_adj);
|
||||
if (adj) {
|
||||
if (pos_dir ? (endstops.y_endstop_adj > 0) : (endstops.y_endstop_adj < 0)) stepper.set_y_lock(true); else stepper.set_y2_lock(true);
|
||||
if (pos_dir ? (endstops.y2_endstop_adj > 0) : (endstops.y2_endstop_adj < 0)) stepper.set_y_lock(true); else stepper.set_y2_lock(true);
|
||||
do_homing_move(axis, pos_dir ? -adj : adj);
|
||||
stepper.set_y_lock(false);
|
||||
stepper.set_y2_lock(false);
|
||||
@ -1410,16 +1420,62 @@ void homeaxis(const AxisEnum axis) {
|
||||
#endif
|
||||
#if ENABLED(Z_DUAL_ENDSTOPS)
|
||||
if (axis == Z_AXIS) {
|
||||
const float adj = ABS(endstops.z_endstop_adj);
|
||||
const float adj = ABS(endstops.z2_endstop_adj);
|
||||
if (adj) {
|
||||
if (pos_dir ? (endstops.z_endstop_adj > 0) : (endstops.z_endstop_adj < 0)) stepper.set_z_lock(true); else stepper.set_z2_lock(true);
|
||||
if (pos_dir ? (endstops.z2_endstop_adj > 0) : (endstops.z2_endstop_adj < 0)) stepper.set_z_lock(true); else stepper.set_z2_lock(true);
|
||||
do_homing_move(axis, pos_dir ? -adj : adj);
|
||||
stepper.set_z_lock(false);
|
||||
stepper.set_z2_lock(false);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
stepper.set_homing_dual_axis(false);
|
||||
#if ENABLED(Z_TRIPLE_ENDSTOPS)
|
||||
if (axis == Z_AXIS) {
|
||||
// we push the function pointers for the stepper lock function into an array
|
||||
void (*lock[3]) (bool)= {&stepper.set_z_lock, &stepper.set_z2_lock, &stepper.set_z3_lock};
|
||||
float adj[3] = {0, endstops.z2_endstop_adj, endstops.z3_endstop_adj};
|
||||
|
||||
void (*tempLock) (bool);
|
||||
float tempAdj;
|
||||
|
||||
// manual bubble sort by adjust value
|
||||
if (adj[1] < adj[0]) {
|
||||
tempLock = lock[0], tempAdj = adj[0];
|
||||
lock[0] = lock[1], adj[0] = adj[1];
|
||||
lock[1] = tempLock, adj[1] = tempAdj;
|
||||
}
|
||||
if (adj[2] < adj[1]) {
|
||||
tempLock = lock[1], tempAdj = adj[1];
|
||||
lock[1] = lock[2], adj[1] = adj[2];
|
||||
lock[2] = tempLock, adj[2] = tempAdj;
|
||||
}
|
||||
if (adj[1] < adj[0]) {
|
||||
tempLock = lock[0], tempAdj = adj[0];
|
||||
lock[0] = lock[1], adj[0] = adj[1];
|
||||
lock[1] = tempLock, adj[1] = tempAdj;
|
||||
}
|
||||
|
||||
if (pos_dir) {
|
||||
// normalize adj to smallest value and do the first move
|
||||
(*lock[0])(true);
|
||||
do_homing_move(axis, adj[1] - adj[0]);
|
||||
// lock the second stepper for the final correction
|
||||
(*lock[1])(true);
|
||||
do_homing_move(axis, adj[2] - adj[1]);
|
||||
}
|
||||
else {
|
||||
(*lock[2])(true);
|
||||
do_homing_move(axis, adj[1] - adj[2]);
|
||||
(*lock[1])(true);
|
||||
do_homing_move(axis, adj[0] - adj[1]);
|
||||
}
|
||||
|
||||
stepper.set_z_lock(false);
|
||||
stepper.set_z2_lock(false);
|
||||
stepper.set_z3_lock(false);
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#if IS_SCARA
|
||||
|
Reference in New Issue
Block a user