Browse Source

Fix: Junction Deviation calculates wrong cos(theta) on CoreXY (#12879)

HackingGulliver 6 years ago
parent
commit
1fd8e2c649
1 changed files with 9 additions and 0 deletions
  1. 9
    0
      Marlin/src/module/planner.cpp

+ 9
- 0
Marlin/src/module/planner.cpp View File

@@ -2392,6 +2392,15 @@ bool Planner::_populate_block(block_t * const block, bool split_move,
2392 2392
       };
2393 2393
     #endif
2394 2394
 
2395
+    #if IS_CORE && ENABLED(JUNCTION_DEVIATION)
2396
+      /**
2397
+       * On CoreXY the length of the vector [A,B] is SQRT(2) times the length of the head movement vector [X,Y].
2398
+       * So taking Z and E into account, we cannot scale to a unit vector with "inverse_millimeters".
2399
+       * => normalize the complete junction vector
2400
+       */
2401
+      normalize_junction_vector(unit_vec);
2402
+    #endif
2403
+
2395 2404
     // Skip first block or when previous_nominal_speed is used as a flag for homing and offset cycles.
2396 2405
     if (moves_queued && !UNEAR_ZERO(previous_nominal_speed_sqr)) {
2397 2406
       // Compute cosine of angle between previous and current path. (prev_unit_vec is negative)

Loading…
Cancel
Save