From 95126c09c0ffbea8f15ba74105f403d8c36683cf Mon Sep 17 00:00:00 2001 From: Erik van der Zalm Date: Mon, 14 Nov 2011 20:04:29 +0100 Subject: [PATCH] Added slowdown --- Marlin/Configuration.h | 7 +++++-- Marlin/planner.cpp | 32 +++++++++++++++++++------------- 2 files changed, 24 insertions(+), 15 deletions(-) diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index 89104fd..5a6fc47 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -18,6 +18,9 @@ // if unwanted behavior is observed on a user's machine when running at very slow speeds. #define MINIMUM_PLANNER_SPEED 2.0 // (mm/sec) +// If defined the movements slow down when the look ahead buffer is only half full +#define SLOWDOWN + // BASIC SETTINGS: select your board type, thermistor type, axis scaling, and endstop configuration //// The following define selects which electronics board you have. Please choose the one that matches your setup @@ -210,7 +213,7 @@ const bool ENDSTOPS_INVERTING = true; // set to true to invert the logic of the #define DEFAULT_MINTRAVELFEEDRATE 0 // minimum time in microseconds that a movement needs to take if the buffer is emptied. Increase this number if you see blobs while printing high speed & high detail. It will slowdown on the detailed stuff. -#define DEFAULT_MINSEGMENTTIME 20000 +#define DEFAULT_MINSEGMENTTIME 20000 // Obsolete delete this #define DEFAULT_XYJERK 30.0 // (mm/sec) #define DEFAULT_ZJERK 0.4 // (mm/sec) @@ -269,7 +272,7 @@ const bool ENDSTOPS_INVERTING = true; // set to true to invert the logic of the #define ULTIPANEL #ifdef ULTIPANEL - #define NEWPANEL //enable this if you have a click-encoder panel +// #define NEWPANEL //enable this if you have a click-encoder panel #define SDSUPPORT #define ULTRA_LCD #define LCD_WIDTH 20 diff --git a/Marlin/planner.cpp b/Marlin/planner.cpp index 998a609..8dfa44f 100644 --- a/Marlin/planner.cpp +++ b/Marlin/planner.cpp @@ -499,31 +499,37 @@ void plan_buffer_line(const float &x, const float &y, const float &z, const floa block->nominal_speed = block->millimeters * inverse_second; // (mm/sec) Always > 0 block->nominal_rate = ceil(block->step_event_count * inverse_second); // (step/sec) Always > 0 -// unsigned long microseconds; -#if 0 + // segment time im micro seconds + long segment_time = lround(1000000.0/inverse_second); + + if (block->steps_e == 0) { if(feed_ratemillimeters/feed_rate)*1000000); - + +#ifdef SLOWDOWN // slow down when de buffer starts to empty, rather than wait at the corner for a buffer refill - // reduces/removes corner blobs as the machine won't come to a full stop. - int blockcount=(block_buffer_head-block_buffer_tail + BLOCK_BUFFER_SIZE) & (BLOCK_BUFFER_SIZE - 1); + int moves_queued=(block_buffer_head-block_buffer_tail + BLOCK_BUFFER_SIZE) & (BLOCK_BUFFER_SIZE - 1); + + if(moves_queued < (BLOCK_BUFFER_SIZE * 0.5)) feed_rate = feed_rate / ((BLOCK_BUFFER_SIZE * 0.5)/moves_queued); +#endif + +/* + if ((blockcount>0) && (blockcount < (BLOCK_BUFFER_SIZE - 4))) { - if (microsecondsdirection_bits ^ old_direction_bits; old_direction_bits = block->direction_bits; - long segment_time = lround(1000000.0/inverse_second); + if((direction_change & (1<