diff --git a/Marlin/Conditionals_post.h b/Marlin/Conditionals_post.h index 797be835b..f0735e60f 100644 --- a/Marlin/Conditionals_post.h +++ b/Marlin/Conditionals_post.h @@ -184,7 +184,7 @@ */ #if ENABLED(ADVANCE) #define EXTRUSION_AREA (0.25 * (D_FILAMENT) * (D_FILAMENT) * M_PI) - #define STEPS_PER_CUBIC_MM_E (axis_steps_per_mm[E_AXIS] / (EXTRUSION_AREA)) + #define STEPS_PER_CUBIC_MM_E (axis_steps_per_mm[E_AXIS_N] / (EXTRUSION_AREA)) #endif #if ENABLED(ULTIPANEL) && DISABLED(ELB_FULL_GRAPHIC_CONTROLLER) diff --git a/Marlin/planner.cpp b/Marlin/planner.cpp index ec81cd300..879aef34c 100644 --- a/Marlin/planner.cpp +++ b/Marlin/planner.cpp @@ -1062,6 +1062,9 @@ void Planner::_buffer_line(const float &a, const float &b, const float &c, const float current_speed[NUM_AXIS], speed_factor = 1.0; // factor <1 decreases speed LOOP_XYZE(i) { const float cs = fabs(current_speed[i] = delta_mm[i] * inverse_mm_s); + #if ENABLED(DISTINCT_E_FACTORS) + if (i == E_AXIS) i += extruder; + #endif if (cs > max_feedrate_mm_s[i]) NOMORE(speed_factor, max_feedrate_mm_s[i] / cs); } @@ -1135,18 +1138,24 @@ void Planner::_buffer_line(const float &a, const float &b, const float &c, const // Start with print or travel acceleration accel = ceil((esteps ? acceleration : travel_acceleration) * steps_per_mm); + #if ENABLED(DISTINCT_E_FACTORS) + #define ACCEL_IDX extruder + #else + #define ACCEL_IDX 0 + #endif + // Limit acceleration per axis if (block->step_event_count <= cutoff_long) { LIMIT_ACCEL_LONG(X_AXIS,0); LIMIT_ACCEL_LONG(Y_AXIS,0); LIMIT_ACCEL_LONG(Z_AXIS,0); - LIMIT_ACCEL_LONG(E_AXIS,extruder); + LIMIT_ACCEL_LONG(E_AXIS,ACCEL_IDX); } else { LIMIT_ACCEL_FLOAT(X_AXIS,0); LIMIT_ACCEL_FLOAT(Y_AXIS,0); LIMIT_ACCEL_FLOAT(Z_AXIS,0); - LIMIT_ACCEL_FLOAT(E_AXIS,extruder); + LIMIT_ACCEL_FLOAT(E_AXIS,ACCEL_IDX); } } block->acceleration_steps_per_s2 = accel; diff --git a/Marlin/stepper.cpp b/Marlin/stepper.cpp index da2ee14cc..6ac55de17 100644 --- a/Marlin/stepper.cpp +++ b/Marlin/stepper.cpp @@ -147,7 +147,7 @@ volatile long Stepper::endstops_trigsteps[XYZ]; X2_STEP_WRITE(v); \ } \ else { \ - if (current_block->active_extruder != 0) X2_STEP_WRITE(v); else X_STEP_WRITE(v); \ + if (current_block->active_extruder) X2_STEP_WRITE(v); else X_STEP_WRITE(v); \ } #else #define X_APPLY_DIR(v,Q) X_DIR_WRITE(v)