137 float entry_speed_sqr;
160 if (entry_speed_sqr < current->max_entry_speed_sqr) {
183 if (entry_speed_sqr < next->entry_speed_sqr) {
277 if (nominal_speed > prev_nominal_speed) { block->
max_entry_speed_sqr = prev_nominal_speed*prev_nominal_speed; }
294 prev_nominal_speed = nominal_speed;
321 #ifdef VARIABLE_SPINDLE
324 #ifdef USE_LINE_NUMBERS
325 block->line_number = pl_data->line_number;
330 float unit_vec[
N_AXIS], delta_mm;
351 for (idx=0; idx<
N_AXIS; idx++) {
356 if ( !(idx == A_MOTOR) && !(idx == B_MOTOR) ) {
358 block->
steps[idx] = labs(target_steps[idx]-position_steps[idx]);
361 if (idx == A_MOTOR) {
363 }
else if (idx == B_MOTOR) {
370 block->
steps[idx] = labs(target_steps[idx]-position_steps[idx]);
374 unit_vec[idx] = delta_mm;
429 float junction_unit_vec[
N_AXIS];
430 float junction_cos_theta = 0.0;
431 for (idx=0; idx<
N_AXIS; idx++) {
437 if (junction_cos_theta > 0.999999) {
441 if (junction_cos_theta < -0.999999) {
447 float sin_theta_d2 = sqrt(0.5*(1.0-junction_cos_theta));
462 memcpy(
pl.
position, target_steps,
sizeof(target_steps));
481 for (idx=0; idx<
N_AXIS; idx++) {
#define MINIMUM_FEED_RATE
#define MINIMUM_JUNCTION_SPEED
int32_t sys_position[N_AXIS]
float convert_delta_vector_to_unit_vector(float *vector)
float limit_value_by_axis_maximum(float *max_value, float *unit_vec)
static uint8_t block_buffer_planned
void plan_discard_current_block()
plan_block_t * plan_get_current_block()
static uint8_t next_buffer_head
void plan_sync_position()
float plan_compute_profile_nominal_speed(plan_block_t *block)
uint8_t plan_get_block_buffer_count()
static uint8_t block_buffer_head
static void planner_recalculate()
static uint8_t plan_prev_block_index(uint8_t block_index)
static plan_block_t block_buffer[BLOCK_BUFFER_SIZE]
float plan_get_exec_block_exit_speed_sqr()
void plan_cycle_reinitialize()
plan_block_t * plan_get_system_motion_block()
uint8_t plan_get_block_buffer_available()
void plan_update_velocity_profile_parameters()
uint8_t plan_buffer_line(float *target, plan_line_data_t *pl_data)
uint8_t plan_next_block_index(uint8_t block_index)
uint8_t plan_check_full_buffer()
static void plan_compute_profile_parameters(plan_block_t *block, float nominal_speed, float prev_nominal_speed)
static uint8_t block_buffer_tail
#define PL_COND_FLAG_INVERSE_TIME
#define PL_COND_FLAG_SYSTEM_MOTION
#define PL_COND_FLAG_RAPID_MOTION
#define BLOCK_BUFFER_SIZE
#define PL_COND_FLAG_NO_FEED_OVERRIDE
uint8_t get_direction_pin_mask(uint8_t axis_idx)
void st_update_plan_block_parameters()
float max_entry_speed_sqr
float max_junction_speed_sqr
uint32_t step_event_count
float previous_nominal_speed
float previous_unit_vec[N_AXIS]
float steps_per_mm[N_AXIS]
float acceleration[N_AXIS]