|
@@ -499,31 +499,37 @@ void plan_buffer_line(const float &x, const float &y, const float &z, const floa
|
499
|
499
|
block->nominal_speed = block->millimeters * inverse_second; // (mm/sec) Always > 0
|
500
|
500
|
block->nominal_rate = ceil(block->step_event_count * inverse_second); // (step/sec) Always > 0
|
501
|
501
|
|
502
|
|
-// unsigned long microseconds;
|
503
|
|
-#if 0
|
|
502
|
+ // segment time im micro seconds
|
|
503
|
+ long segment_time = lround(1000000.0/inverse_second);
|
|
504
|
+
|
|
505
|
+
|
504
|
506
|
if (block->steps_e == 0) {
|
505
|
507
|
if(feed_rate<mintravelfeedrate) feed_rate=mintravelfeedrate;
|
506
|
508
|
}
|
507
|
509
|
else {
|
508
|
510
|
if(feed_rate<minimumfeedrate) feed_rate=minimumfeedrate;
|
509
|
511
|
}
|
|
512
|
+
|
|
513
|
+#ifdef SLOWDOWN
|
|
514
|
+ // slow down when de buffer starts to empty, rather than wait at the corner for a buffer refill
|
|
515
|
+ int moves_queued=(block_buffer_head-block_buffer_tail + BLOCK_BUFFER_SIZE) & (BLOCK_BUFFER_SIZE - 1);
|
|
516
|
+
|
|
517
|
+ if(moves_queued < (BLOCK_BUFFER_SIZE * 0.5)) feed_rate = feed_rate / ((BLOCK_BUFFER_SIZE * 0.5)/moves_queued);
|
|
518
|
+#endif
|
510
|
519
|
|
511
|
|
- microseconds = lround((block->millimeters/feed_rate)*1000000);
|
|
520
|
+/*
|
512
|
521
|
|
513
|
|
- // slow down when de buffer starts to empty, rather than wait at the corner for a buffer refill
|
514
|
|
- // reduces/removes corner blobs as the machine won't come to a full stop.
|
515
|
|
- int blockcount=(block_buffer_head-block_buffer_tail + BLOCK_BUFFER_SIZE) & (BLOCK_BUFFER_SIZE - 1);
|
516
|
522
|
|
517
|
523
|
if ((blockcount>0) && (blockcount < (BLOCK_BUFFER_SIZE - 4))) {
|
518
|
|
- if (microseconds<minsegmenttime) { // buffer is draining, add extra time. The amount of time added increases if the buffer is still emptied more.
|
519
|
|
- microseconds=microseconds+lround(2*(minsegmenttime-microseconds)/blockcount);
|
|
524
|
+ if (segment_time<minsegmenttime) { // buffer is draining, add extra time. The amount of time added increases if the buffer is still emptied more.
|
|
525
|
+ segment_time=segment_time+lround(2*(minsegmenttime-segment_time)/blockcount);
|
520
|
526
|
}
|
521
|
527
|
}
|
522
|
528
|
else {
|
523
|
|
- if (microseconds<minsegmenttime) microseconds=minsegmenttime;
|
|
529
|
+ if (segment_time<minsegmenttime) segment_time=minsegmenttime;
|
524
|
530
|
}
|
525
|
|
- // END OF SLOW DOWN SECTION
|
526
|
|
-#endif
|
|
531
|
+ // END OF SLOW DOWN SECTION
|
|
532
|
+*/
|
527
|
533
|
|
528
|
534
|
// Calculate speed in mm/sec for each axis
|
529
|
535
|
float current_speed[4];
|
|
@@ -546,7 +552,7 @@ void plan_buffer_line(const float &x, const float &y, const float &z, const floa
|
546
|
552
|
// Check and limit the xy direction change frequency
|
547
|
553
|
unsigned char direction_change = block->direction_bits ^ old_direction_bits;
|
548
|
554
|
old_direction_bits = block->direction_bits;
|
549
|
|
- long segment_time = lround(1000000.0/inverse_second);
|
|
555
|
+
|
550
|
556
|
if((direction_change & (1<<X_AXIS)) == 0) {
|
551
|
557
|
x_segment_time[0] += segment_time;
|
552
|
558
|
}
|