📝 Motion comments
Some checks are pending
CI - Build Tests / Build Test (push) Waiting to run
CI - Unit Tests / Unit Test (push) Waiting to run
CI - Validate Source Files / Validate Source Files (push) Waiting to run

w/r/t https://github.com/MarlinFirmware/Marlin/issues/27918#issuecomment-3145339116
This commit is contained in:
Scott Lahteine 2025-11-28 13:27:33 -06:00
parent 12ac094992
commit d061e6dbd6
3 changed files with 7 additions and 3 deletions

View file

@ -2542,6 +2542,8 @@ bool Planner::_populate_block(
xyze_float_t junction_unit_vec = unit_vec - prev_unit_vec;
normalize_junction_vector(junction_unit_vec);
// TODO: Don't limit acceleration on axes with very small distance relative to others
// See https://github.com/MarlinFirmware/Marlin/issues/27918#issuecomment-3145339116
const float junction_acceleration = limit_value_by_axis_maximum(block->acceleration, junction_unit_vec);
if (TERN0(HINTS_CURVE_RADIUS, hints.curve_radius)) {

View file

@ -1157,12 +1157,14 @@ class Planner {
vector *= RSQRT(magnitude_sq);
}
// max_value is block->acceleration
FORCE_INLINE static float limit_value_by_axis_maximum(const float max_value, xyze_float_t &unit_vec) {
float limit_value = max_value;
LOOP_LOGICAL_AXES(idx) {
if (unit_vec[idx]) {
if (limit_value * ABS(unit_vec[idx]) > settings.max_acceleration_mm_per_s2[idx])
limit_value = ABS(settings.max_acceleration_mm_per_s2[idx] / unit_vec[idx]);
const uint32_t abs_vec = ABS(unit_vec[idx]);
if (limit_value * abs_vec > settings.max_acceleration_mm_per_s2[idx])
limit_value = settings.max_acceleration_mm_per_s2[idx] / abs_vec;
}
}
return limit_value;

View file

@ -253,7 +253,7 @@ uint32_t Stepper::advance_divisor = 0,
#endif
/**
* Standard Motion Non-linear Exttrusion state
* Standard Motion Non-linear Extrusion state
*/
#if ENABLED(NONLINEAR_EXTRUSION)
nonlinear_t Stepper::ne; // Initialized by settings.load