Browse Source

🐛 Fix kinematic feedrate (#24568)

DerAndere 2 years 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
     if (!position_is_reachable(destination)) return true;
1084
     if (!position_is_reachable(destination)) return true;
1085
 
1085
 
1086
     // Get the linear distance in XYZ
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
     // If the move is very short, check the E move distance
1089
     // If the move is very short, check the E move distance
1090
     TERN_(HAS_EXTRUDERS, if (UNEAR_ZERO(cartesian_mm)) cartesian_mm = ABS(diff.e));
1090
     TERN_(HAS_EXTRUDERS, if (UNEAR_ZERO(cartesian_mm)) cartesian_mm = ABS(diff.e));

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

2195
       );
2195
       );
2196
 
2196
 
2197
       #if SECONDARY_LINEAR_AXES >= 1 && NONE(FOAMCUTTER_XYUV, ARTICULATED_ROBOT_ARM)
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
           // Move does not involve any primary linear axes (xyz) but might involve secondary linear axes
2199
           // Move does not involve any primary linear axes (xyz) but might involve secondary linear axes
2200
           distance_sqr = (0.0f
2200
           distance_sqr = (0.0f
2201
             SECONDARY_AXIS_GANG(
2201
             SECONDARY_AXIS_GANG(
2211
       #endif
2211
       #endif
2212
 
2212
 
2213
       #if HAS_ROTATIONAL_AXES && NONE(FOAMCUTTER_XYUV, ARTICULATED_ROBOT_ARM)
2213
       #if HAS_ROTATIONAL_AXES && NONE(FOAMCUTTER_XYUV, ARTICULATED_ROBOT_ARM)
2214
-        if (NEAR_ZERO(distance_sqr)) {
2214
+        if (UNEAR_ZERO(distance_sqr)) {
2215
           // Move involves only rotational axes. Calculate angular distance in accordance with LinuxCNC
2215
           // Move involves only rotational axes. Calculate angular distance in accordance with LinuxCNC
2216
           TERN_(INCH_MODE_SUPPORT, cartesian_move = false);
2216
           TERN_(INCH_MODE_SUPPORT, cartesian_move = false);
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));
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
 
3154
 
3155
     PlannerHints ph = hints;
3155
     PlannerHints ph = hints;
3156
     if (!hints.millimeters)
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
     #if ENABLED(SCARA_FEEDRATE_SCALING)
3161
     #if ENABLED(SCARA_FEEDRATE_SCALING)
3160
       // For SCARA scale the feedrate from mm/s to degrees/s
3162
       // For SCARA scale the feedrate from mm/s to degrees/s

Loading…
Cancel
Save