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