From 422a958a34a415af196a40db90096206fe3b8c91 Mon Sep 17 00:00:00 2001 From: Alex Borro Date: Tue, 6 Jan 2015 16:39:48 -0200 Subject: [PATCH] Fix CoreXY speed calculation For cartesian bots, the X_AXIS is the real X movement and same for Y_AXIS. But for corexy bots, that is not true. The "X_AXIS" and "Y_AXIS" motors (that should be named to A_AXIS and B_AXIS) cannot be used for X and Y length, because A=X+Y and B=X-Y. So we need to create other 2 "AXIS", named X_HEAD and Y_HEAD, meaning the real displacement of the Head. Having the real displacement of the head, we can calculate the total movement length and apply the desired speed. --- Marlin/Marlin.h | 2 +- Marlin/planner.cpp | 18 ++++++++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/Marlin/Marlin.h b/Marlin/Marlin.h index 13e555236..7a1afa351 100644 --- a/Marlin/Marlin.h +++ b/Marlin/Marlin.h @@ -171,7 +171,7 @@ void manage_inactivity(bool ignore_stepper_queue=false); #endif -enum AxisEnum {X_AXIS=0, Y_AXIS=1, Z_AXIS=2, E_AXIS=3}; +enum AxisEnum {X_AXIS=0, Y_AXIS=1, Z_AXIS=2, E_AXIS=3, X_HEAD=4, Y_HEAD=5}; void FlushSerialRequestResend(); diff --git a/Marlin/planner.cpp b/Marlin/planner.cpp index c8942251e..5d9fba948 100644 --- a/Marlin/planner.cpp +++ b/Marlin/planner.cpp @@ -715,11 +715,21 @@ block->steps_y = labs((target[X_AXIS]-position[X_AXIS]) - (target[Y_AXIS]-positi if(feed_ratesteps_y = labs((target[X_AXIS]-position[X_AXIS]) - (target[Y_AXIS]-positi } else { - block->millimeters = sqrt(square(delta_mm[X_AXIS]) + square(delta_mm[Y_AXIS]) + square(delta_mm[Z_AXIS])); + #ifndef COREXY + block->millimeters = sqrt(square(delta_mm[X_AXIS]) + square(delta_mm[Y_AXIS]) + square(delta_mm[Z_AXIS])); + #else + block->millimeters = sqrt(square(delta_mm[X_HEAD]) + square(delta_mm[Y_HEAD]) + square(delta_mm[Z_AXIS])); + #endif } float inverse_millimeters = 1.0/block->millimeters; // Inverse millimeters to remove multiple divides