Support SWITCHING_NOZZLE with 2 servos (#13054)
This commit is contained in:
committed by
Scott Lahteine
parent
3c88cac2e9
commit
5cfc1cdacc
@ -100,11 +100,30 @@
|
||||
#endif // DO_SWITCH_EXTRUDER
|
||||
|
||||
#if ENABLED(SWITCHING_NOZZLE)
|
||||
void move_nozzle_servo(const uint8_t e) {
|
||||
planner.synchronize();
|
||||
MOVE_SERVO(SWITCHING_NOZZLE_SERVO_NR, servo_angles[SWITCHING_NOZZLE_SERVO_NR][e]);
|
||||
safe_delay(500);
|
||||
}
|
||||
|
||||
#if SWITCHING_NOZZLE_TWO_SERVOS
|
||||
|
||||
inline void _move_nozzle_servo(const uint8_t e, const uint8_t angle_index) {
|
||||
constexpr int8_t sns_index[2] = { SWITCHING_NOZZLE_SERVO_NR, SWITCHING_NOZZLE_E1_SERVO_NR };
|
||||
constexpr int16_t sns_angles[2] = SWITCHING_NOZZLE_SERVO_ANGLES;
|
||||
planner.synchronize();
|
||||
MOVE_SERVO(sns_index[e], sns_angles[angle_index]);
|
||||
safe_delay(500);
|
||||
}
|
||||
|
||||
void lower_nozzle(const uint8_t e) { _move_nozzle_servo(e, 0); }
|
||||
void raise_nozzle(const uint8_t e) { _move_nozzle_servo(e, 1); }
|
||||
|
||||
#else
|
||||
|
||||
void move_nozzle_servo(const uint8_t angle_index) {
|
||||
planner.synchronize();
|
||||
MOVE_SERVO(SWITCHING_NOZZLE_SERVO_NR, servo_angles[SWITCHING_NOZZLE_SERVO_NR][e]);
|
||||
safe_delay(500);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#endif // SWITCHING_NOZZLE
|
||||
|
||||
#if ENABLED(PARKING_EXTRUDER)
|
||||
@ -581,6 +600,11 @@ void tool_change(const uint8_t tmp_extruder, const float fr_mm_s/*=0.0*/, bool n
|
||||
#endif // TOOLCHANGE_FILAMENT_SWAP
|
||||
|
||||
if (tmp_extruder != active_extruder) {
|
||||
|
||||
#if SWITCHING_NOZZLE_TWO_SERVOS
|
||||
raise_nozzle(active_extruder);
|
||||
#endif
|
||||
|
||||
const float old_feedrate_mm_s = fr_mm_s > 0.0 ? fr_mm_s : feedrate_mm_s;
|
||||
feedrate_mm_s = fr_mm_s > 0.0 ? fr_mm_s : XY_PROBE_FEEDRATE_MM_S;
|
||||
|
||||
@ -639,8 +663,9 @@ void tool_change(const uint8_t tmp_extruder, const float fr_mm_s/*=0.0*/, bool n
|
||||
parking_extruder_tool_change(tmp_extruder, no_move);
|
||||
#elif ENABLED(SWITCHING_TOOLHEAD) // Switching Toolhead
|
||||
switching_toolhead_tool_change(tmp_extruder, fr_mm_s, no_move);
|
||||
#elif ENABLED(SWITCHING_NOZZLE)
|
||||
// Always raise by a configured distance to avoid workpiece
|
||||
#elif ENABLED(SWITCHING_NOZZLE) && !SWITCHING_NOZZLE_TWO_SERVOS
|
||||
// Raise by a configured distance to avoid workpiece, except with
|
||||
// SWITCHING_NOZZLE_TWO_SERVOS, as both nozzles will lift instead.
|
||||
current_position[Z_AXIS] += MAX(-zdiff, 0.0) + toolchange_settings.z_raise;
|
||||
#if HAS_SOFTWARE_ENDSTOPS
|
||||
NOMORE(current_position[Z_AXIS], soft_endstop_max[Z_AXIS]);
|
||||
@ -729,6 +754,9 @@ void tool_change(const uint8_t tmp_extruder, const float fr_mm_s/*=0.0*/, bool n
|
||||
mmu2.toolChange(tmp_extruder);
|
||||
#endif
|
||||
|
||||
#if SWITCHING_NOZZLE_TWO_SERVOS
|
||||
lower_nozzle(active_extruder);
|
||||
#endif
|
||||
} // (tmp_extruder != active_extruder)
|
||||
|
||||
planner.synchronize();
|
||||
|
@ -45,7 +45,12 @@
|
||||
#endif
|
||||
|
||||
#if ENABLED(SWITCHING_NOZZLE)
|
||||
void move_nozzle_servo(const uint8_t e);
|
||||
#if SWITCHING_NOZZLE_TWO_SERVOS
|
||||
void lower_nozzle(const uint8_t e);
|
||||
void raise_nozzle(const uint8_t e);
|
||||
#else
|
||||
void move_nozzle_servo(const uint8_t angle_index);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if ENABLED(PARKING_EXTRUDER)
|
||||
|
Reference in New Issue
Block a user