|
@ -1794,7 +1794,7 @@ bool Planner::_buffer_steps(const xyze_long_t &target |
|
|
if (cleaning_buffer_counter) return false; |
|
|
if (cleaning_buffer_counter) return false; |
|
|
|
|
|
|
|
|
// Fill the block with the specified movement
|
|
|
// Fill the block with the specified movement
|
|
|
if (!_populate_block(block, false, target |
|
|
if (!_populate_block(block, target |
|
|
OPTARG(HAS_POSITION_FLOAT, target_float) |
|
|
OPTARG(HAS_POSITION_FLOAT, target_float) |
|
|
OPTARG(HAS_DIST_MM_ARG, cart_dist_mm) |
|
|
OPTARG(HAS_DIST_MM_ARG, cart_dist_mm) |
|
|
, fr_mm_s, extruder, millimeters |
|
|
, fr_mm_s, extruder, millimeters |
|
@ -1826,17 +1826,24 @@ bool Planner::_buffer_steps(const xyze_long_t &target |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/**
|
|
|
/**
|
|
|
* Planner::_populate_block |
|
|
* @brief Populate a block in preparation for insertion |
|
|
|
|
|
* @details Populate the fields of a new linear movement block |
|
|
|
|
|
* that will be added to the queue and processed soon |
|
|
|
|
|
* by the Stepper ISR. |
|
|
* |
|
|
* |
|
|
* Fills a new linear movement in the block (in terms of steps). |
|
|
* @param block A block to populate |
|
|
|
|
|
* @param target Target position in steps units |
|
|
|
|
|
* @param target_float Target position in native mm |
|
|
|
|
|
* @param cart_dist_mm The pre-calculated move lengths for all axes, in mm |
|
|
|
|
|
* @param fr_mm_s (target) speed of the move |
|
|
|
|
|
* @param extruder target extruder |
|
|
|
|
|
* @param millimeters A pre-calculated linear distance for the move, in mm, |
|
|
|
|
|
* or 0.0 to have the distance calculated here. |
|
|
* |
|
|
* |
|
|
* target - target position in steps units |
|
|
* @return true if movement is acceptable, false otherwise |
|
|
* fr_mm_s - (target) speed of the move |
|
|
|
|
|
* extruder - target extruder |
|
|
|
|
|
* |
|
|
|
|
|
* Returns true if movement is acceptable, false otherwise |
|
|
|
|
|
*/ |
|
|
*/ |
|
|
bool Planner::_populate_block(block_t * const block, bool split_move, |
|
|
bool Planner::_populate_block( |
|
|
|
|
|
block_t * const block, |
|
|
const abce_long_t &target |
|
|
const abce_long_t &target |
|
|
OPTARG(HAS_POSITION_FLOAT, const xyze_pos_t &target_float) |
|
|
OPTARG(HAS_POSITION_FLOAT, const xyze_pos_t &target_float) |
|
|
OPTARG(HAS_DIST_MM_ARG, const xyze_float_t &cart_dist_mm) |
|
|
OPTARG(HAS_DIST_MM_ARG, const xyze_float_t &cart_dist_mm) |
|
@ -2849,9 +2856,8 @@ bool Planner::_populate_block(block_t * const block, bool split_move, |
|
|
// Initialize block entry speed. Compute based on deceleration to user-defined MINIMUM_PLANNER_SPEED.
|
|
|
// Initialize block entry speed. Compute based on deceleration to user-defined MINIMUM_PLANNER_SPEED.
|
|
|
const float v_allowable_sqr = max_allowable_speed_sqr(-block->acceleration, sq(float(MINIMUM_PLANNER_SPEED)), block->millimeters); |
|
|
const float v_allowable_sqr = max_allowable_speed_sqr(-block->acceleration, sq(float(MINIMUM_PLANNER_SPEED)), block->millimeters); |
|
|
|
|
|
|
|
|
// If we are trying to add a split block, start with the
|
|
|
// Start with the minimum allowed speed
|
|
|
// max. allowed speed to avoid an interrupted first move.
|
|
|
block->entry_speed_sqr = sq(float(MINIMUM_PLANNER_SPEED)); |
|
|
block->entry_speed_sqr = !split_move ? sq(float(MINIMUM_PLANNER_SPEED)) : _MIN(vmax_junction_sqr, v_allowable_sqr); |
|
|
|
|
|
|
|
|
|
|
|
// Initialize planner efficiency flags
|
|
|
// Initialize planner efficiency flags
|
|
|
// Set flag if block will always reach maximum junction speed regardless of entry/exit speeds.
|
|
|
// Set flag if block will always reach maximum junction speed regardless of entry/exit speeds.
|
|
|