Fix mixing extruder feedrate (#15905)
This commit is contained in:
parent
12417d087b
commit
077eeaa0f4
@ -2007,28 +2007,38 @@ bool Planner::_populate_block(block_t * const block, bool split_move,
|
||||
filwidth.advance_e(delta_mm.e);
|
||||
#endif
|
||||
|
||||
// Calculate and limit speed in mm/sec for each axis
|
||||
// Calculate and limit speed in mm/sec
|
||||
|
||||
xyze_float_t current_speed;
|
||||
float speed_factor = 1.0f; // factor <1 decreases speed
|
||||
LOOP_XYZE(i) {
|
||||
#if BOTH(MIXING_EXTRUDER, RETRACT_SYNC_MIXING)
|
||||
// In worst case, only one extruder running, no change is needed.
|
||||
// In best case, all extruders run the same amount, we can divide by MIXING_STEPPERS
|
||||
float delta_mm_i = 0;
|
||||
if (i == E_AXIS && mixer.get_current_vtool() == MIXER_AUTORETRACT_TOOL)
|
||||
delta_mm_i = delta_mm.e / MIXING_STEPPERS;
|
||||
else
|
||||
delta_mm_i = delta_mm.e;
|
||||
#else
|
||||
const float delta_mm_i = delta_mm[i];
|
||||
#endif
|
||||
const feedRate_t cs = ABS(current_speed[i] = delta_mm_i * inverse_secs);
|
||||
#if ENABLED(DISTINCT_E_FACTORS)
|
||||
if (i == E_AXIS) i += extruder;
|
||||
#endif
|
||||
if (cs > settings.max_feedrate_mm_s[i]) NOMORE(speed_factor, settings.max_feedrate_mm_s[i] / cs);
|
||||
|
||||
// Linear axes first with less logic
|
||||
LOOP_XYZ(i) {
|
||||
current_speed[i] = delta_mm[i] * inverse_secs;
|
||||
const feedRate_t cs = ABS(current_speed[i]),
|
||||
max_fr = settings.max_feedrate_mm_s[i];
|
||||
if (cs > max_fr) NOMORE(speed_factor, max_fr / cs);
|
||||
}
|
||||
|
||||
// Limit speed on extruders, if any
|
||||
#if EXTRUDERS
|
||||
{
|
||||
current_speed.e = delta_mm.e * inverse_secs;
|
||||
#if BOTH(MIXING_EXTRUDER, RETRACT_SYNC_MIXING)
|
||||
// Move all mixing extruders at the specified rate
|
||||
if (mixer.get_current_vtool() == MIXER_AUTORETRACT_TOOL)
|
||||
current_speed.e *= MIXING_STEPPERS;
|
||||
#endif
|
||||
const feedRate_t cs = ABS(current_speed.e),
|
||||
max_fr = (settings.max_feedrate_mm_s[E_AXIS_N(extruder)]
|
||||
#if BOTH(MIXING_EXTRUDER, RETRACT_SYNC_MIXING)
|
||||
* MIXING_STEPPERS
|
||||
#endif
|
||||
);
|
||||
if (cs > max_fr) NOMORE(speed_factor, max_fr / cs);
|
||||
}
|
||||
#endif
|
||||
|
||||
// Max segment time in µs.
|
||||
#ifdef XY_FREQUENCY_LIMIT
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user