@ -715,11 +715,21 @@ block->steps_y = labs((target[X_AXIS]-position[X_AXIS]) - (target[Y_AXIS]-positi
if ( feed_rate < minimumfeedrate ) feed_rate = minimumfeedrate ;
if ( feed_rate < minimumfeedrate ) feed_rate = minimumfeedrate ;
}
}
float delta_mm [ 4 ] ;
/* This part of the code calculates the total length of the movement.
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 .
*/
# ifndef COREXY
# ifndef COREXY
float delta_mm [ 4 ] ;
delta_mm [ X_AXIS ] = ( target [ X_AXIS ] - position [ X_AXIS ] ) / axis_steps_per_unit [ X_AXIS ] ;
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 ] ;
delta_mm [ Y_AXIS ] = ( target [ Y_AXIS ] - position [ Y_AXIS ] ) / axis_steps_per_unit [ Y_AXIS ] ;
# else
# else
float delta_mm [ 6 ] ;
delta_mm [ X_HEAD ] = ( target [ X_AXIS ] - position [ X_AXIS ] ) / axis_steps_per_unit [ X_AXIS ] ;
delta_mm [ Y_HEAD ] = ( target [ Y_AXIS ] - position [ Y_AXIS ] ) / axis_steps_per_unit [ Y_AXIS ] ;
delta_mm [ X_AXIS ] = ( ( target [ X_AXIS ] - position [ X_AXIS ] ) + ( target [ Y_AXIS ] - position [ Y_AXIS ] ) ) / axis_steps_per_unit [ X_AXIS ] ;
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 ] ;
delta_mm [ Y_AXIS ] = ( ( target [ X_AXIS ] - position [ X_AXIS ] ) - ( target [ Y_AXIS ] - position [ Y_AXIS ] ) ) / axis_steps_per_unit [ Y_AXIS ] ;
# endif
# endif
@ -731,7 +741,11 @@ block->steps_y = labs((target[X_AXIS]-position[X_AXIS]) - (target[Y_AXIS]-positi
}
}
else
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
float inverse_millimeters = 1.0 / block - > millimeters ; // Inverse millimeters to remove multiple divides