Moved corexy implementation from stepper to planner
(Thanks iquizzle)
This commit is contained in:
@ -564,8 +564,16 @@ void plan_buffer_line(const float &x, const float &y, const float &z, const floa
|
||||
block->busy = false;
|
||||
|
||||
// Number of steps for each axis
|
||||
block->steps_x = labs(target[X_AXIS]-position[X_AXIS]);
|
||||
block->steps_y = labs(target[Y_AXIS]-position[Y_AXIS]);
|
||||
#ifndef COREXY
|
||||
// default non-h-bot planning
|
||||
block->steps_x = labs(target[X_AXIS]-position[X_AXIS]);
|
||||
block->steps_y = labs(target[Y_AXIS]-position[Y_AXIS]);
|
||||
#else
|
||||
// corexy planning
|
||||
// these equations follow the form of the dA and dB equations on http://www.corexy.com/theory.html
|
||||
block->steps_x = labs((target[X_AXIS]-position[X_AXIS]) + (target[Y_AXIS]-position[Y_AXIS]));
|
||||
block->steps_y = labs((target[X_AXIS]-position[X_AXIS]) - (target[Y_AXIS]-position[Y_AXIS]));
|
||||
#endif
|
||||
block->steps_z = labs(target[Z_AXIS]-position[Z_AXIS]);
|
||||
block->steps_e = labs(target[E_AXIS]-position[E_AXIS]);
|
||||
block->steps_e *= extrudemultiply;
|
||||
@ -586,6 +594,7 @@ void plan_buffer_line(const float &x, const float &y, const float &z, const floa
|
||||
|
||||
// Compute direction bits for this block
|
||||
block->direction_bits = 0;
|
||||
#ifndef COREXY
|
||||
if (target[X_AXIS] < position[X_AXIS])
|
||||
{
|
||||
block->direction_bits |= (1<<X_AXIS);
|
||||
@ -594,6 +603,16 @@ void plan_buffer_line(const float &x, const float &y, const float &z, const floa
|
||||
{
|
||||
block->direction_bits |= (1<<Y_AXIS);
|
||||
}
|
||||
#else
|
||||
if ((target[X_AXIS]-position[X_AXIS]) + (target[Y_AXIS]-position[Y_AXIS]) < 0)
|
||||
{
|
||||
block->direction_bits |= (1<<X_AXIS);
|
||||
}
|
||||
if ((target[X_AXIS]-position[X_AXIS]) - (target[Y_AXIS]-position[Y_AXIS]) < 0)
|
||||
{
|
||||
block->direction_bits |= (1<<Y_AXIS);
|
||||
}
|
||||
#endif
|
||||
if (target[Z_AXIS] < position[Z_AXIS])
|
||||
{
|
||||
block->direction_bits |= (1<<Z_AXIS);
|
||||
@ -638,8 +657,13 @@ void plan_buffer_line(const float &x, const float &y, const float &z, const floa
|
||||
}
|
||||
|
||||
float delta_mm[4];
|
||||
delta_mm[X_AXIS] = (target[X_AXIS]-position[X_AXIS])/axis_steps_per_unit[X_AXIS];
|
||||
delta_mm[Y_AXIS] = (target[Y_AXIS]-position[Y_AXIS])/axis_steps_per_unit[Y_AXIS];
|
||||
#ifndef COREXY
|
||||
delta_mm[X_AXIS] = (target[X_AXIS]-position[X_AXIS])/axis_steps_per_unit[X_AXIS];
|
||||
delta_mm[Y_AXIS] = (target[Y_AXIS]-position[Y_AXIS])/axis_steps_per_unit[Y_AXIS];
|
||||
#else
|
||||
delta_mm[X_AXIS] = ((target[X_AXIS]-position[X_AXIS]) + (target[Y_AXIS]-position[Y_AXIS]))/axis_steps_per_unit[X_AXIS];
|
||||
delta_mm[Y_AXIS] = ((target[X_AXIS]-position[X_AXIS]) - (target[Y_AXIS]-position[Y_AXIS]))/axis_steps_per_unit[Y_AXIS];
|
||||
#endif
|
||||
delta_mm[Z_AXIS] = (target[Z_AXIS]-position[Z_AXIS])/axis_steps_per_unit[Z_AXIS];
|
||||
delta_mm[E_AXIS] = ((target[E_AXIS]-position[E_AXIS])/axis_steps_per_unit[E_AXIS])*extrudemultiply/100.0;
|
||||
if ( block->steps_x <=dropsegments && block->steps_y <=dropsegments && block->steps_z <=dropsegments )
|
||||
|
Reference in New Issue
Block a user