this->seek_rate = this->kernel->config->value(default_seek_rate_checksum )->by_default(100)->as_number()/60;
this->mm_per_line_segment = this->kernel->config->value(mm_per_line_segment_checksum)->by_default(0.1)->as_number();
this->mm_per_arc_segment = this->kernel->config->value(mm_per_arc_segment_checksum )->by_default(10 )->as_number();
- this->arc_correction = this->kernel->config->value(arc_correction_checksum )->by_default(5 )->as_number();
+ this->arc_correction = this->kernel->config->value(arc_correction_checksum )->by_default(5 )->as_number();
+ this->max_speeds[X_AXIS] = this->kernel->config->value(x_axis_max_speed_checksum )->by_default(0 )->as_number();
+ this->max_speeds[Y_AXIS] = this->kernel->config->value(y_axis_max_speed_checksum )->by_default(0 )->as_number();
+ this->max_speeds[Z_AXIS] = this->kernel->config->value(z_axis_max_speed_checksum )->by_default(0 )->as_number();
}
//A GCode has been received
double millimeters_of_travel = sqrt( pow( deltas[X_AXIS], 2 ) + pow( deltas[Y_AXIS], 2 ) + pow( deltas[Z_AXIS], 2 ) );
if( millimeters_of_travel < 0.001 ){ return; }
double duration = millimeters_of_travel / rate;
+
+ for(int axis=X_AXIS;axis<=Z_AXIS;axis++){
+ if( this->max_speeds[axis] > 0 ){
+ double axis_speed = ( fabs(deltas[axis]) / ( millimeters_of_travel / rate )) * 60;
+ rate = rate * ( this->max_speeds[axis] / axis_speed );
+ }
+ }
+
//this->kernel->serial->printf("dur: %f mm: %f rate: %f target_z: %f steps_z: %d deltas_z: %f \r\n", duration, millimeters_of_travel, rate, target[2], steps[2], deltas[2] );
this->kernel->planner->append_block( steps, rate*60, millimeters_of_travel, deltas );
#define mm_per_line_segment_checksum 30176
#define mm_per_arc_segment_checksum 15470
#define arc_correction_checksum 5074
-
+#define x_axis_max_speed_checksum 64935
+#define y_axis_max_speed_checksum 3752
+#define z_axis_max_speed_checksum 7849
#define NEXT_ACTION_DEFAULT 0
#define NEXT_ACTION_DWELL 1
// of grbl, and should be on the order or greater than the size of the buffer to help with the
// computational efficiency of generating arcs.
int arc_correction; // Setting : how often to rectify arc computation
+ double max_speeds[3]; // Setting : max allowable speed in mm/m for each axis
};