@@ -1225,8 +1225,6 @@ void tool_change(const uint8_t new_tool, bool no_move/*=false*/) {
1225
1225
}
1226
1226
#endif
1227
1227
1228
- TERN_ (SWITCHING_NOZZLE_TWO_SERVOS, raise_nozzle (old_tool));
1229
-
1230
1228
REMEMBER (fr, feedrate_mm_s, XY_PROBE_FEEDRATE_MM_S);
1231
1229
1232
1230
#if HAS_SOFTWARE_ENDSTOPS
@@ -1290,20 +1288,23 @@ void tool_change(const uint8_t new_tool, bool no_move/*=false*/) {
1290
1288
magnetic_switching_toolhead_tool_change (new_tool, no_move);
1291
1289
#elif ENABLED(ELECTROMAGNETIC_SWITCHING_TOOLHEAD) // Magnetic Switching ToolChanger
1292
1290
em_switching_toolhead_tool_change (new_tool, no_move);
1293
- #elif ENABLED(SWITCHING_NOZZLE) && !SWITCHING_NOZZLE_TWO_SERVOS // Switching Nozzle (single servo)
1291
+ #elif ENABLED(SWITCHING_NOZZLE) // Switching Nozzle
1294
1292
// Raise by a configured distance to avoid workpiece, except with
1295
1293
// SWITCHING_NOZZLE_TWO_SERVOS, as both nozzles will lift instead.
1294
+ TERN_ (SWITCHING_NOZZLE_TWO_SERVOS, raise_nozzle (old_tool));
1296
1295
if (!no_move) {
1297
1296
const float newz = current_position.z + _MAX (-diff.z , 0.0 );
1298
-
1299
1297
// Check if Z has space to compensate at least z_offset, and if not, just abort now
1300
1298
const float maxz = _MIN (TERN (HAS_SOFTWARE_ENDSTOPS, soft_endstop.max .z , Z_MAX_POS), Z_MAX_POS);
1301
1299
if (newz > maxz) return ;
1302
-
1303
1300
current_position.z = _MIN (newz + toolchange_settings.z_raise , maxz);
1304
1301
fast_line_to_current (Z_AXIS);
1305
1302
}
1306
- move_nozzle_servo (new_tool);
1303
+ #if SWITCHING_NOZZLE_TWO_SERVOS // Switching Nozzle with two servos
1304
+ lower_nozzle (new_tool);
1305
+ #else
1306
+ move_nozzle_servo (new_tool);
1307
+ #endif
1307
1308
#elif ANY(MECHANICAL_SWITCHING_EXTRUDER, MECHANICAL_SWITCHING_NOZZLE)
1308
1309
if (!no_move) {
1309
1310
current_position.z = _MIN (current_position.z + toolchange_settings.z_raise , _MIN (TERN (HAS_SOFTWARE_ENDSTOPS, soft_endstop.max .z , Z_MAX_POS), Z_MAX_POS));
@@ -1372,7 +1373,7 @@ void tool_change(const uint8_t new_tool, bool no_move/*=false*/) {
1372
1373
#if ENABLED(TOOLCHANGE_PARK)
1373
1374
if (toolchange_settings.enable_park ) do_blocking_move_to_xy_z (destination, destination.z , MMM_TO_MMS (TOOLCHANGE_PARK_XY_FEEDRATE));
1374
1375
#else
1375
- do_blocking_move_to_xy (destination, planner.settings .max_feedrate_mm_s [X_AXIS]);
1376
+ do_blocking_move_to_xy (destination, planner.settings .max_feedrate_mm_s [X_AXIS]* 0 . 5f );
1376
1377
1377
1378
// If using MECHANICAL_SWITCHING extruder/nozzle, set HOTEND_OFFSET in Z axis after running EVENT_GCODE_TOOLCHANGE below.
1378
1379
#if NONE(MECHANICAL_SWITCHING_EXTRUDER, MECHANICAL_SWITCHING_NOZZLE)
@@ -1405,16 +1406,14 @@ void tool_change(const uint8_t new_tool, bool no_move/*=false*/) {
1405
1406
#endif
1406
1407
1407
1408
TERN_ (DUAL_X_CARRIAGE, idex_set_parked (false ));
1408
- }
1409
+ } // should_move
1409
1410
1410
1411
#if HAS_SWITCHING_NOZZLE
1411
1412
// Move back down. (Including when the new tool is higher.)
1412
1413
if (!should_move)
1413
1414
do_blocking_move_to_z (destination.z , planner.settings .max_feedrate_mm_s [Z_AXIS]);
1414
1415
#endif
1415
1416
1416
- TERN_ (SWITCHING_NOZZLE_TWO_SERVOS, lower_nozzle (new_tool));
1417
-
1418
1417
} // (new_tool != old_tool)
1419
1418
1420
1419
planner.synchronize ();
@@ -1510,7 +1509,8 @@ void tool_change(const uint8_t new_tool, bool no_move/*=false*/) {
1510
1509
if (TERN1 (DUAL_X_CARRIAGE, dual_x_carriage_mode == DXC_AUTO_PARK_MODE))
1511
1510
gcode.process_subcommands_now (F (EVENT_GCODE_AFTER_TOOLCHANGE));
1512
1511
#endif
1513
- }
1512
+
1513
+ } // !no_move
1514
1514
1515
1515
SERIAL_ECHOLNPGM (STR_ACTIVE_EXTRUDER, active_extruder);
1516
1516
0 commit comments