Browse Source

🐛 Fix kinematic feedrate (#24568)

DerAndere 1 year ago
parent
commit
d8df9ffd61
No account linked to committer's email address
2 changed files with 6 additions and 4 deletions
  1. 1
    1
      Marlin/src/module/motion.cpp
  2. 5
    3
      Marlin/src/module/planner.cpp

+ 1
- 1
Marlin/src/module/motion.cpp View File

@@ -1084,7 +1084,7 @@ FORCE_INLINE void segment_idle(millis_t &next_idle_ms) {
1084 1084
     if (!position_is_reachable(destination)) return true;
1085 1085
 
1086 1086
     // Get the linear distance in XYZ
1087
-    float cartesian_mm = diff.magnitude();
1087
+    float cartesian_mm = xyz_float_t(diff).magnitude();
1088 1088
 
1089 1089
     // If the move is very short, check the E move distance
1090 1090
     TERN_(HAS_EXTRUDERS, if (UNEAR_ZERO(cartesian_mm)) cartesian_mm = ABS(diff.e));

+ 5
- 3
Marlin/src/module/planner.cpp View File

@@ -2195,7 +2195,7 @@ bool Planner::_populate_block(
2195 2195
       );
2196 2196
 
2197 2197
       #if SECONDARY_LINEAR_AXES >= 1 && NONE(FOAMCUTTER_XYUV, ARTICULATED_ROBOT_ARM)
2198
-        if (NEAR_ZERO(distance_sqr)) {
2198
+        if (UNEAR_ZERO(distance_sqr)) {
2199 2199
           // Move does not involve any primary linear axes (xyz) but might involve secondary linear axes
2200 2200
           distance_sqr = (0.0f
2201 2201
             SECONDARY_AXIS_GANG(
@@ -2211,7 +2211,7 @@ bool Planner::_populate_block(
2211 2211
       #endif
2212 2212
 
2213 2213
       #if HAS_ROTATIONAL_AXES && NONE(FOAMCUTTER_XYUV, ARTICULATED_ROBOT_ARM)
2214
-        if (NEAR_ZERO(distance_sqr)) {
2214
+        if (UNEAR_ZERO(distance_sqr)) {
2215 2215
           // Move involves only rotational axes. Calculate angular distance in accordance with LinuxCNC
2216 2216
           TERN_(INCH_MODE_SUPPORT, cartesian_move = false);
2217 2217
           distance_sqr = ROTATIONAL_AXIS_GANG(sq(steps_dist_mm.i), + sq(steps_dist_mm.j), + sq(steps_dist_mm.k), + sq(steps_dist_mm.u), + sq(steps_dist_mm.v), + sq(steps_dist_mm.w));
@@ -3154,7 +3154,9 @@ bool Planner::buffer_line(const xyze_pos_t &cart, const_feedRate_t fr_mm_s
3154 3154
 
3155 3155
     PlannerHints ph = hints;
3156 3156
     if (!hints.millimeters)
3157
-      ph.millimeters = (cart_dist_mm.x || cart_dist_mm.y) ? cart_dist_mm.magnitude() : TERN0(HAS_Z_AXIS, ABS(cart_dist_mm.z));
3157
+      ph.millimeters = (cart_dist_mm.x || cart_dist_mm.y)
3158
+        ? xyz_pos_t(cart_dist_mm).magnitude()
3159
+        : TERN0(HAS_Z_AXIS, ABS(cart_dist_mm.z));
3158 3160
 
3159 3161
     #if ENABLED(SCARA_FEEDRATE_SCALING)
3160 3162
       // For SCARA scale the feedrate from mm/s to degrees/s

Loading…
Cancel
Save