diff --git a/Firmware/Configuration.h b/Firmware/Configuration.h index 33612be27..7874313fa 100644 --- a/Firmware/Configuration.h +++ b/Firmware/Configuration.h @@ -276,7 +276,6 @@ your extruder heater takes 2 minutes to hit the target on heating. #define DISABLE_Y 0 #define DISABLE_Z 0 #define DISABLE_E 0// For all extruders -#define DISABLE_INACTIVE_EXTRUDER 1 //disable only inactive extruders and keep active extruder enabled // ENDSTOP SETTINGS: diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 9048e3dc3..af134ac3a 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -1975,7 +1975,7 @@ static void run_z_probe() { // move down until you find the bed float zPosition = -10; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], zPosition, current_position[E_AXIS], feedrate/60, active_extruder); + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], zPosition, current_position[E_AXIS], feedrate/60); st_synchronize(); // we have to let the planner know where we are right now as it is not where we said to go. @@ -1984,13 +1984,13 @@ static void run_z_probe() { // move up the retract distance zPosition += home_retract_mm(Z_AXIS); - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], zPosition, current_position[E_AXIS], feedrate/60, active_extruder); + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], zPosition, current_position[E_AXIS], feedrate/60); st_synchronize(); // move back down slowly to find bed feedrate = homing_feedrate[Z_AXIS]/4; zPosition -= home_retract_mm(Z_AXIS) * 2; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], zPosition, current_position[E_AXIS], feedrate/60, active_extruder); + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], zPosition, current_position[E_AXIS], feedrate/60); st_synchronize(); current_position[Z_AXIS] = st_get_position_mm(Z_AXIS); @@ -3615,11 +3615,11 @@ static void gcode_M600(bool automatic, float x_position, float y_position, float } // Move XY back - plan_buffer_line(lastpos[X_AXIS], lastpos[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], FILAMENTCHANGE_XYFEED, active_extruder); + plan_buffer_line(lastpos[X_AXIS], lastpos[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], FILAMENTCHANGE_XYFEED); st_synchronize(); // Move Z back - plan_buffer_line(lastpos[X_AXIS], lastpos[Y_AXIS], lastpos[Z_AXIS], current_position[E_AXIS], FILAMENTCHANGE_ZFEED, active_extruder); + plan_buffer_line(lastpos[X_AXIS], lastpos[Y_AXIS], lastpos[Z_AXIS], current_position[E_AXIS], FILAMENTCHANGE_ZFEED); st_synchronize(); // Set E position to original @@ -5678,7 +5678,7 @@ void process_commands() world2machine_revert_to_uncorrected(); // Move the print head close to the bed. current_position[Z_AXIS] = MESH_HOME_Z_SEARCH; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS],current_position[Z_AXIS] , current_position[E_AXIS], homing_feedrate[Z_AXIS]/40, active_extruder); + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS],current_position[Z_AXIS] , current_position[E_AXIS], homing_feedrate[Z_AXIS]/40); st_synchronize(); // Home in the XY plane. set_destination_to_current(); @@ -5694,7 +5694,7 @@ void process_commands() clean_up_after_endstop_move(l_feedmultiply); // Print head up. current_position[Z_AXIS] = MESH_HOME_Z_SEARCH; - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS],current_position[Z_AXIS] , current_position[E_AXIS], homing_feedrate[Z_AXIS]/40, active_extruder); + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS],current_position[Z_AXIS] , current_position[E_AXIS], homing_feedrate[Z_AXIS]/40); st_synchronize(); lcd_update_enable(true); break; @@ -5799,8 +5799,7 @@ void process_commands() plan_bed_level_matrix.set_to_identity(); plan_buffer_line( X_current, Y_current, Z_start_location, ext_position, - homing_feedrate[Z_AXIS]/60, - active_extruder); + homing_feedrate[Z_AXIS]/60); st_synchronize(); // @@ -5813,8 +5812,7 @@ void process_commands() plan_buffer_line( X_probe_location, Y_probe_location, Z_start_location, ext_position, - homing_feedrate[X_AXIS]/60, - active_extruder); + homing_feedrate[X_AXIS]/60); st_synchronize(); current_position[X_AXIS] = X_current = st_get_position_mm(X_AXIS); @@ -5835,8 +5833,7 @@ void process_commands() plan_buffer_line( X_probe_location, Y_probe_location, Z_start_location, ext_position, - homing_feedrate[X_AXIS]/60, - active_extruder); + homing_feedrate[X_AXIS]/60); st_synchronize(); current_position[Z_AXIS] = Z_current = st_get_position_mm(Z_AXIS); @@ -5935,7 +5932,7 @@ void process_commands() SERIAL_PROTOCOLPGM("\n"); plan_buffer_line( X_probe_location, Y_probe_location, Z_start_location, - current_position[E_AXIS], homing_feedrate[Z_AXIS]/60, active_extruder); + current_position[E_AXIS], homing_feedrate[Z_AXIS]/60); st_synchronize(); } @@ -9179,7 +9176,7 @@ uint16_t restore_interrupted_gcode() { } #ifdef MESH_BED_LEVELING -void mesh_plan_buffer_line(const float &x, const float &y, const float &z, const float &e, const float &feed_rate, const uint8_t extruder, uint16_t start_segment_idx = 0) { +void mesh_plan_buffer_line(const float &x, const float &y, const float &z, const float &e, const float &feed_rate, uint16_t start_segment_idx = 0) { float dx = x - current_position[X_AXIS]; float dy = y - current_position[Y_AXIS]; uint16_t n_segments = 0; @@ -9202,13 +9199,13 @@ void mesh_plan_buffer_line(const float &x, const float &y, const float &z, const current_position[Y_AXIS] + t * dy, current_position[Z_AXIS] + t * dz, current_position[E_AXIS] + t * de, - feed_rate, extruder, current_position, i); + feed_rate, current_position, i); if (planner_aborted) return; } } // The rest of the path. - plan_buffer_line(x, y, z, e, feed_rate, extruder, current_position); + plan_buffer_line(x, y, z, e, feed_rate, current_position); } #endif // MESH_BED_LEVELING @@ -9223,7 +9220,7 @@ void prepare_move(uint16_t start_segment_idx) } else { #ifdef MESH_BED_LEVELING - mesh_plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate*feedmultiply*(1./(60.f*100.f)), active_extruder, start_segment_idx); + mesh_plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate*feedmultiply*(1./(60.f*100.f)), start_segment_idx); #else plan_buffer_line_destinationXYZE(feedrate*feedmultiply*(1./(60.f*100.f))); #endif @@ -9235,7 +9232,7 @@ void prepare_move(uint16_t start_segment_idx) void prepare_arc_move(bool isclockwise, uint16_t start_segment_idx) { float r = hypot(offset[X_AXIS], offset[Y_AXIS]); // Compute arc radius for mc_arc // Trace the arc - mc_arc(current_position, destination, offset, feedrate * feedmultiply / 60 / 100.0, r, isclockwise, active_extruder, start_segment_idx); + mc_arc(current_position, destination, offset, feedrate * feedmultiply / 60 / 100.0, r, isclockwise, start_segment_idx); // As far as the parser is concerned, the position is now == target. In reality the // motion control system might still be processing the action and the real tool position // in any intermediate location. @@ -9403,7 +9400,7 @@ void manage_inactivity(bool ignore_stepper_queue/*=false*/) //default argument s float oldedes=destination[E_AXIS]; plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS]+EXTRUDER_RUNOUT_EXTRUDE*EXTRUDER_RUNOUT_ESTEPS/cs.axis_steps_per_unit[E_AXIS], - EXTRUDER_RUNOUT_SPEED/60.*EXTRUDER_RUNOUT_ESTEPS/cs.axis_steps_per_unit[E_AXIS], active_extruder); + EXTRUDER_RUNOUT_SPEED/60.*EXTRUDER_RUNOUT_ESTEPS/cs.axis_steps_per_unit[E_AXIS]); current_position[E_AXIS]=oldepos; destination[E_AXIS]=oldedes; plan_set_e_position(oldepos); @@ -10275,7 +10272,7 @@ static void temp_compensation_apply() { z_shift_mm = temp_comp_interpolation(target_temperature_bed) / cs.axis_steps_per_unit[Z_AXIS]; } printf_P(_N("\nZ shift applied:%.3f\n"), z_shift_mm); - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS] - z_shift_mm, current_position[E_AXIS], homing_feedrate[Z_AXIS] / 40, active_extruder); + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS] - z_shift_mm, current_position[E_AXIS], homing_feedrate[Z_AXIS] / 40); st_synchronize(); plan_set_z_position(current_position[Z_AXIS]); } @@ -11208,11 +11205,11 @@ void restore_print_from_ram_and_continue(float e_move) } //first move print head in XY to the saved position: - plan_buffer_line(saved_pos[X_AXIS], saved_pos[Y_AXIS], current_position[Z_AXIS], saved_pos[E_AXIS] - e_move, homing_feedrate[Z_AXIS]/13, active_extruder); + plan_buffer_line(saved_pos[X_AXIS], saved_pos[Y_AXIS], current_position[Z_AXIS], saved_pos[E_AXIS] - e_move, homing_feedrate[Z_AXIS]/13); //then move Z - plan_buffer_line(saved_pos[X_AXIS], saved_pos[Y_AXIS], saved_pos[Z_AXIS], saved_pos[E_AXIS] - e_move, homing_feedrate[Z_AXIS]/13, active_extruder); + plan_buffer_line(saved_pos[X_AXIS], saved_pos[Y_AXIS], saved_pos[Z_AXIS], saved_pos[E_AXIS] - e_move, homing_feedrate[Z_AXIS]/13); //and finaly unretract (35mm/s) - plan_buffer_line(saved_pos[X_AXIS], saved_pos[Y_AXIS], saved_pos[Z_AXIS], saved_pos[E_AXIS], FILAMENTCHANGE_RFEED, active_extruder); + plan_buffer_line(saved_pos[X_AXIS], saved_pos[Y_AXIS], saved_pos[Z_AXIS], saved_pos[E_AXIS], FILAMENTCHANGE_RFEED); st_synchronize(); #ifdef FANCHECK diff --git a/Firmware/mesh_bed_calibration.cpp b/Firmware/mesh_bed_calibration.cpp index e1ff47aca..308421010 100644 --- a/Firmware/mesh_bed_calibration.cpp +++ b/Firmware/mesh_bed_calibration.cpp @@ -912,13 +912,13 @@ void world2machine_update_current() static inline void go_xyz(float x, float y, float z, float fr) { - plan_buffer_line(x, y, z, current_position[E_AXIS], fr, active_extruder); + plan_buffer_line(x, y, z, current_position[E_AXIS], fr); st_synchronize(); } static inline void go_xy(float x, float y, float fr) { - plan_buffer_line(x, y, current_position[Z_AXIS], current_position[E_AXIS], fr, active_extruder); + plan_buffer_line(x, y, current_position[Z_AXIS], current_position[E_AXIS], fr); st_synchronize(); } @@ -3029,7 +3029,7 @@ bool scan_bed_induction_points(int8_t verbosity_level) // To replace loading of the babystep correction. static void shift_z(float delta) { - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS] - delta, current_position[E_AXIS], homing_feedrate[Z_AXIS]/40, active_extruder); + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS] - delta, current_position[E_AXIS], homing_feedrate[Z_AXIS]/40); st_synchronize(); plan_set_z_position(current_position[Z_AXIS]); } diff --git a/Firmware/motion_control.cpp b/Firmware/motion_control.cpp index 78e9f4976..142d2efa8 100644 --- a/Firmware/motion_control.cpp +++ b/Firmware/motion_control.cpp @@ -26,7 +26,7 @@ // The arc is approximated by generating a huge number of tiny, linear segments. The length of each // segment is configured in settings.mm_per_arc_segment. -void mc_arc(const float* position, float* target, const float* offset, float feed_rate, float radius, bool isclockwise, uint8_t extruder, uint16_t start_segment_idx) +void mc_arc(const float* position, float* target, const float* offset, float feed_rate, float radius, bool isclockwise, uint16_t start_segment_idx) { float start_position[4]; memcpy(start_position, position, sizeof(start_position)); @@ -153,7 +153,7 @@ void mc_arc(const float* position, float* target, const float* offset, float fee clamp_to_software_endstops(start_position); // Insert the segment into the buffer if (i >= start_segment_idx) - plan_buffer_line(start_position[X_AXIS], start_position[Y_AXIS], start_position[Z_AXIS], start_position[E_AXIS], feed_rate, extruder, position, i); + plan_buffer_line(start_position[X_AXIS], start_position[Y_AXIS], start_position[Z_AXIS], start_position[E_AXIS], feed_rate, position, i); // Handle the situation where the planner is aborted hard. if (planner_aborted) return; @@ -162,5 +162,5 @@ void mc_arc(const float* position, float* target, const float* offset, float fee // Clamp to the target position. clamp_to_software_endstops(target); // Ensure last segment arrives at target location. - plan_buffer_line(target[X_AXIS], target[Y_AXIS], target[Z_AXIS], target[E_AXIS], feed_rate, extruder, position, 0); + plan_buffer_line(target[X_AXIS], target[Y_AXIS], target[Z_AXIS], target[E_AXIS], feed_rate, position, 0); } diff --git a/Firmware/motion_control.h b/Firmware/motion_control.h index bc6780290..f81f37d04 100644 --- a/Firmware/motion_control.h +++ b/Firmware/motion_control.h @@ -26,6 +26,6 @@ // offset == offset from current xyz, axis_XXX defines circle plane in tool space, axis_linear is // the direction of helical travel, radius == circle radius, isclockwise boolean. Used // for vector transformation direction. -void mc_arc(const float *position, float *target, const float *offset, float feed_rate, float radius, bool isclockwise, uint8_t extruder, uint16_t start_segment_idx); +void mc_arc(const float *position, float *target, const float *offset, float feed_rate, float radius, bool isclockwise, uint16_t start_segment_idx); #endif diff --git a/Firmware/planner.cpp b/Firmware/planner.cpp index 6206af7bf..f4271d6ad 100644 --- a/Firmware/planner.cpp +++ b/Firmware/planner.cpp @@ -106,8 +106,6 @@ float autotemp_factor=0.1; bool autotemp_enabled=false; #endif -unsigned char g_uc_extruder_last_move[3] = {0,0,0}; - //=========================================================================== //=================semi-private variables, used in inline functions ===== //=========================================================================== @@ -686,11 +684,11 @@ void planner_abort_hard() } void plan_buffer_line_curposXYZE(float feed_rate) { - plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], feed_rate, active_extruder ); + plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], feed_rate); } void plan_buffer_line_destinationXYZE(float feed_rate) { - plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feed_rate, active_extruder); + plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feed_rate); } void plan_set_position_curposXYZE(){ @@ -701,7 +699,7 @@ float junction_deviation = 0.1; // Add a new linear movement to the buffer. steps_x, _y and _z is the absolute position in // mm. Microseconds specify how many microseconds the move should take to perform. To aid acceleration // calculation the caller must also provide the physical length of the line in millimeters. -void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate, uint8_t extruder, const float* gcode_start_position, uint16_t segment_idx) +void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate, const float* gcode_start_position, uint16_t segment_idx) { // CRITICAL_SECTION_START; //prevent stack overflow in ISR // printf_P(PSTR("plan_buffer_line(%f, %f, %f, %f, %f, %u, [%f,%f,%f,%f], %u)\n"), x, y, z, e, feed_rate, extruder, gcode_start_position[0], gcode_start_position[1], gcode_start_position[2], gcode_start_position[3], segment_idx); @@ -924,47 +922,10 @@ block->steps_y.wide = labs((target[X_AXIS]-position[X_AXIS]) - (target[Y_AXIS]-p #endif if(block->steps_z.wide != 0) enable_z(); - // Enable extruder(s) + // Enable extruder if(block->steps_e.wide != 0) { - if (DISABLE_INACTIVE_EXTRUDER) //enable only selected extruder - { - - if(g_uc_extruder_last_move[0] > 0) g_uc_extruder_last_move[0]--; - if(g_uc_extruder_last_move[1] > 0) g_uc_extruder_last_move[1]--; - if(g_uc_extruder_last_move[2] > 0) g_uc_extruder_last_move[2]--; - - switch(extruder) - { - case 0: - enable_e0(); - g_uc_extruder_last_move[0] = BLOCK_BUFFER_SIZE*2; - - if(g_uc_extruder_last_move[1] == 0) {disable_e1();} - if(g_uc_extruder_last_move[2] == 0) {disable_e2();} - break; - case 1: - enable_e1(); - g_uc_extruder_last_move[1] = BLOCK_BUFFER_SIZE*2; - - if(g_uc_extruder_last_move[0] == 0) {disable_e0();} - if(g_uc_extruder_last_move[2] == 0) {disable_e2();} - break; - case 2: - enable_e2(); - g_uc_extruder_last_move[2] = BLOCK_BUFFER_SIZE*2; - - if(g_uc_extruder_last_move[0] == 0) {disable_e0();} - if(g_uc_extruder_last_move[1] == 0) {disable_e1();} - break; - } - } - else //enable all - { - enable_e0(); - enable_e1(); - enable_e2(); - } + enable_e0(); } if (block->steps_e.wide == 0) diff --git a/Firmware/planner.h b/Firmware/planner.h index 09cb6152c..27664aefa 100644 --- a/Firmware/planner.h +++ b/Firmware/planner.h @@ -143,7 +143,7 @@ void plan_init(); // millimaters. Feed rate specifies the speed of the motion. #ifdef ENABLE_AUTO_BED_LEVELING -void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate, const uint8_t &extruder); +void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate); // Get the position applying the bed level matrix if enabled vector_3 plan_get_position(); @@ -159,7 +159,7 @@ void plan_buffer_line_destinationXYZE(float feed_rate); void plan_set_position_curposXYZE(); -void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate, uint8_t extruder, const float* gcode_start_position = NULL, uint16_t segment_idx = 0); +void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate, const float* gcode_start_position = NULL, uint16_t segment_idx = 0); //void plan_buffer_line(const float &x, const float &y, const float &z, const float &e, float feed_rate, const uint8_t &extruder); #endif // ENABLE_AUTO_BED_LEVELING