|
|
|
@ -931,18 +931,18 @@ float junction_deviation = 0.1;
|
|
|
|
|
float safe_speed = vmax_junction;
|
|
|
|
|
|
|
|
|
|
if ((moves_queued > 1) && (previous_nominal_speed > 0.0001)) {
|
|
|
|
|
float dx = current_speed[X_AXIS] - previous_speed[X_AXIS],
|
|
|
|
|
dy = current_speed[Y_AXIS] - previous_speed[Y_AXIS],
|
|
|
|
|
dz = fabs(csz - previous_speed[Z_AXIS]),
|
|
|
|
|
de = fabs(cse - previous_speed[E_AXIS]),
|
|
|
|
|
jerk = sqrt(dx * dx + dy * dy);
|
|
|
|
|
float dsx = current_speed[X_AXIS] - previous_speed[X_AXIS],
|
|
|
|
|
dsy = current_speed[Y_AXIS] - previous_speed[Y_AXIS],
|
|
|
|
|
dsz = fabs(csz - previous_speed[Z_AXIS]),
|
|
|
|
|
dse = fabs(cse - previous_speed[E_AXIS]),
|
|
|
|
|
jerk = sqrt(dsx * dsx + dsy * dsy);
|
|
|
|
|
|
|
|
|
|
// if ((fabs(previous_speed[X_AXIS]) > 0.0001) || (fabs(previous_speed[Y_AXIS]) > 0.0001)) {
|
|
|
|
|
vmax_junction = block->nominal_speed;
|
|
|
|
|
// }
|
|
|
|
|
if (jerk > max_xy_jerk) vmax_junction_factor = max_xy_jerk / jerk;
|
|
|
|
|
if (dz > max_z_jerk) vmax_junction_factor = min(vmax_junction_factor, max_z_jerk / dz);
|
|
|
|
|
if (de > max_e_jerk) vmax_junction_factor = min(vmax_junction_factor, max_e_jerk / de);
|
|
|
|
|
if (dsz > max_z_jerk) vmax_junction_factor = min(vmax_junction_factor, max_z_jerk / dsz);
|
|
|
|
|
if (dse > max_e_jerk) vmax_junction_factor = min(vmax_junction_factor, max_e_jerk / dse);
|
|
|
|
|
|
|
|
|
|
vmax_junction = min(previous_nominal_speed, vmax_junction * vmax_junction_factor); // Limit speed to max previous speed
|
|
|
|
|
}
|
|
|
|
|