From 51a3cae056e7c46145e3f1557301b8c136ebf3d1 Mon Sep 17 00:00:00 2001 From: Patrick F Date: Mon, 20 Dec 2021 13:13:29 +0100 Subject: [PATCH] Bugfix corexy #80 --- grbl/Limits.c | 18 +++++++++--------- grbl/Planner.c | 14 +++++++------- grbl/util.h | 2 -- 3 files changed, 16 insertions(+), 18 deletions(-) diff --git a/grbl/Limits.c b/grbl/Limits.c index f9e0807..1b3899d 100644 --- a/grbl/Limits.c +++ b/grbl/Limits.c @@ -174,7 +174,7 @@ void Limits_GoHome(uint8_t cycle_mask) step_pin[idx] = Settings_GetStepPinMask(idx); #ifdef COREXY - if((idx == A_AXIS) || (idx == B_AXIS)) + if((idx == A_MOTOR) || (idx == B_MOTOR)) { step_pin[idx] = (Settings_GetStepPinMask(X_AXIS) | Settings_GetStepPinMask(Y_AXIS)); } @@ -210,13 +210,13 @@ void Limits_GoHome(uint8_t cycle_mask) if(idx == X_AXIS) { int32_t axis_position = system_convert_corexy_to_y_axis_steps(sys_position); - sys_position[A_AXIS] = axis_position; - sys_position[B_AXIS] = -axis_position; + sys_position[A_MOTOR] = axis_position; + sys_position[B_MOTOR] = -axis_position; } else if (idx == Y_AXIS) { int32_t axis_position = system_convert_corexy_to_x_axis_steps(sys_position); - sys_position[A_AXIS] = sys_position[B_AXIS] = axis_position; + sys_position[A_MOTOR] = sys_position[B_MOTOR] = axis_position; } else { @@ -285,7 +285,7 @@ void Limits_GoHome(uint8_t cycle_mask) } else { - axislock &= ~(step_pin[A_AXIS]|step_pin[B_AXIS]); + axislock &= ~(step_pin[A_MOTOR]|step_pin[B_MOTOR]); } #else axislock &= ~(step_pin[idx]); @@ -393,14 +393,14 @@ void Limits_GoHome(uint8_t cycle_mask) if(idx == X_AXIS) { int32_t off_axis_position = system_convert_corexy_to_y_axis_steps(sys_position); - sys_position[A_AXIS] = set_axis_position + off_axis_position; - sys_position[B_AXIS] = set_axis_position - off_axis_position; + sys_position[A_MOTOR] = set_axis_position + off_axis_position; + sys_position[B_MOTOR] = set_axis_position - off_axis_position; } else if(idx == Y_AXIS) { int32_t off_axis_position = system_convert_corexy_to_x_axis_steps(sys_position); - sys_position[A_AXIS] = off_axis_position + set_axis_position; - sys_position[B_AXIS] = off_axis_position - set_axis_position; + sys_position[A_MOTOR] = off_axis_position + set_axis_position; + sys_position[B_MOTOR] = off_axis_position - set_axis_position; } else { diff --git a/grbl/Planner.c b/grbl/Planner.c index e56777a..a6c4c99 100644 --- a/grbl/Planner.c +++ b/grbl/Planner.c @@ -124,10 +124,10 @@ uint8_t Planner_BufferLine(float *target, Planner_LineData_t *pl_data) } #ifdef COREXY - target_steps[A_AXIS] = lround(target[A_AXIS]*settings.steps_per_mm[A_AXIS]); - target_steps[B_AXIS] = lround(target[B_AXIS]*settings.steps_per_mm[B_AXIS]); - block->steps[A_AXIS] = labs((target_steps[X_AXIS]-position_steps[X_AXIS]) + (target_steps[Y_AXIS]-position_steps[Y_AXIS])); - block->steps[B_AXIS] = labs((target_steps[X_AXIS]-position_steps[X_AXIS]) - (target_steps[Y_AXIS]-position_steps[Y_AXIS])); + target_steps[A_MOTOR] = lround(target[A_MOTOR]*settings.steps_per_mm[A_MOTOR]); + target_steps[B_MOTOR] = lround(target[B_MOTOR]*settings.steps_per_mm[B_MOTOR]); + block->steps[A_MOTOR] = labs((target_steps[X_AXIS]-position_steps[X_AXIS]) + (target_steps[Y_AXIS]-position_steps[Y_AXIS])); + block->steps[B_MOTOR] = labs((target_steps[X_AXIS]-position_steps[X_AXIS]) - (target_steps[Y_AXIS]-position_steps[Y_AXIS])); #endif for(idx = 0; idx < N_AXIS; idx++) @@ -136,7 +136,7 @@ uint8_t Planner_BufferLine(float *target, Planner_LineData_t *pl_data) // Also, compute individual axes distance for move and prep unit vector calculations. // NOTE: Computes true distance from converted step values. #ifdef COREXY - if(!(idx == A_AXIS) && !(idx == B_AXIS)) + if(!(idx == A_MOTOR) && !(idx == B_MOTOR)) { target_steps[idx] = lround(target[idx]*settings.steps_per_mm[idx]); block->steps[idx] = labs(target_steps[idx]-position_steps[idx]); @@ -144,11 +144,11 @@ uint8_t Planner_BufferLine(float *target, Planner_LineData_t *pl_data) block->step_event_count = max(block->step_event_count, block->steps[idx]); - if(idx == A_AXIS) + if(idx == A_MOTOR) { delta_mm = (target_steps[X_AXIS]-position_steps[X_AXIS] + target_steps[Y_AXIS]-position_steps[Y_AXIS])/settings.steps_per_mm[idx]; } - else if(idx == B_AXIS) + else if(idx == B_MOTOR) { delta_mm = (target_steps[X_AXIS]-position_steps[X_AXIS] - target_steps[Y_AXIS]+position_steps[Y_AXIS])/settings.steps_per_mm[idx]; } diff --git a/grbl/util.h b/grbl/util.h index 27a9687..0cf3afb 100644 --- a/grbl/util.h +++ b/grbl/util.h @@ -90,10 +90,8 @@ // CoreXY motor assignments. DO NOT ALTER. // NOTE: If the A and B motor axis bindings are changed, this effects the CoreXY equations. -#ifdef COREXY #define A_MOTOR X_AXIS // Must be X_AXIS #define B_MOTOR Y_AXIS // Must be Y_AXIS -#endif // Conversions