From e056bf8081a942335a2e097d36a2fb35a4c34eba Mon Sep 17 00:00:00 2001 From: Erik van der Zalm Date: Sun, 4 Mar 2012 16:34:58 +0100 Subject: [PATCH] Added E-Jerk --- Marlin/Configuration.h | 3 ++- Marlin/EEPROMwrite.h | 6 +++++- Marlin/Marlin.pde | 3 ++- Marlin/Marlin.suo | Bin 12288 -> 0 bytes Marlin/planner.cpp | 21 ++++++++++++++------- Marlin/planner.h | 1 + 6 files changed, 24 insertions(+), 10 deletions(-) delete mode 100644 Marlin/Marlin.suo diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index 74c03eb04c..379aa1953b 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -171,6 +171,7 @@ const bool Z_ENDSTOPS_INVERTING = true; // set to true to invert the logic of th // #define DEFAULT_XYJERK 20.0 // (mm/sec) #define DEFAULT_ZJERK 0.4 // (mm/sec) +#define DEFAULT_EJERK 5.0 // (mm/sec) //=========================================================================== //=============================Additional Features=========================== @@ -191,7 +192,7 @@ const bool Z_ENDSTOPS_INVERTING = true; // set to true to invert the logic of th //#define ULTRA_LCD //general lcd support, also 16x2 //#define SDSUPPORT // Enable SD Card Support in Hardware Console -//#define ULTIPANEL +#define ULTIPANEL #ifdef ULTIPANEL #define NEWPANEL //enable this if you have a click-encoder panel #define SDSUPPORT diff --git a/Marlin/EEPROMwrite.h b/Marlin/EEPROMwrite.h index bb25ae8960..d639e56399 100644 --- a/Marlin/EEPROMwrite.h +++ b/Marlin/EEPROMwrite.h @@ -38,7 +38,7 @@ template int EEPROM_readAnything(int &ee, T& value) // the default values are used whenever there is a change to the data, to prevent // wrong data being written to the variables. // ALSO: always make sure the variables in the Store and retrieve sections are in the same order. -#define EEPROM_VERSION "V04" +#define EEPROM_VERSION "V05" inline void EEPROM_StoreSettings() { @@ -56,6 +56,7 @@ inline void EEPROM_StoreSettings() EEPROM_writeAnything(i,minsegmenttime); EEPROM_writeAnything(i,max_xy_jerk); EEPROM_writeAnything(i,max_z_jerk); + EEPROM_writeAnything(i,max_e_jerk); #ifdef PIDTEMP EEPROM_writeAnything(i,Kp); EEPROM_writeAnything(i,Ki); @@ -116,6 +117,7 @@ inline void EEPROM_printSettings() SERIAL_ECHOPAIR(" B" ,minsegmenttime ); SERIAL_ECHOPAIR(" X" ,max_xy_jerk ); SERIAL_ECHOPAIR(" Z" ,max_z_jerk); + SERIAL_ECHOPAIR(" E" ,max_e_jerk); SERIAL_ECHOLN(""); #ifdef PIDTEMP SERIAL_ECHO_START; @@ -150,6 +152,7 @@ inline void EEPROM_RetrieveSettings(bool def=false) EEPROM_readAnything(i,minsegmenttime); EEPROM_readAnything(i,max_xy_jerk); EEPROM_readAnything(i,max_z_jerk); + EEPROM_readAnything(i,max_e_jerk); #ifndef PIDTEMP float Kp,Ki,Kd; #endif @@ -179,6 +182,7 @@ inline void EEPROM_RetrieveSettings(bool def=false) mintravelfeedrate=DEFAULT_MINTRAVELFEEDRATE; max_xy_jerk=DEFAULT_XYJERK; max_z_jerk=DEFAULT_ZJERK; + max_e_jerk=DEFAULT_EJERK; SERIAL_ECHO_START; SERIAL_ECHOLN("Using Default settings:"); } diff --git a/Marlin/Marlin.pde b/Marlin/Marlin.pde index de02c88024..e82afabd48 100644 --- a/Marlin/Marlin.pde +++ b/Marlin/Marlin.pde @@ -97,7 +97,7 @@ // M202 - Set max acceleration in units/s^2 for travel moves (M202 X1000 Y1000) Unused in Marlin!! // M203 - Set maximum feedrate that your machine can sustain (M203 X200 Y200 Z300 E10000) in mm/sec // M204 - Set default acceleration: S normal moves T filament only moves (M204 S3000 T7000) im mm/sec^2 also sets minimum segment time in ms (B20000) to prevent buffer underruns and M20 minimum feedrate -// M205 - advanced settings: minimum travel speed S=while printing T=travel only, B=minimum segment time X= maximum xy jerk, Z=maximum Z jerk +// M205 - advanced settings: minimum travel speed S=while printing T=travel only, B=minimum segment time X= maximum xy jerk, Z=maximum Z jerk, E=maximum E jerk // M206 - set additional homeing offset // M220 S- set speed factor override percentage // M221 S- set extrude factor override percentage @@ -1116,6 +1116,7 @@ void process_commands() if(code_seen('B')) minsegmenttime = code_value() ; if(code_seen('X')) max_xy_jerk = code_value() ; if(code_seen('Z')) max_z_jerk = code_value() ; + if(code_seen('E')) max_e_jerk = code_value() ; } break; case 206: // M206 additional homeing offset diff --git a/Marlin/Marlin.suo b/Marlin/Marlin.suo deleted file mode 100644 index 4aca6fed8d686cdd38cac7ac6fb2afd527ff510b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 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 != 0) { enable_e0();enable_e1();enable_e2(); } + if (block->steps_e == 0) { + if(feed_ratenominal_speed = block->millimeters * inverse_second; // (mm/sec) Always > 0 block->nominal_rate = ceil(block->step_event_count * inverse_second); // (step/sec) Always > 0 - if (block->steps_e == 0) { - if(feed_rate max_z_jerk/2) vmax_junction = max_z_jerk/2; vmax_junction = min(vmax_junction, block->nominal_speed); - + if(abs(current_speed[E_AXIS]) > max_e_jerk/2) + vmax_junction = min(vmax_junction, max_z_jerk/2); + if ((moves_queued > 1) && (previous_nominal_speed > 0.0)) { float jerk = sqrt(pow((current_speed[X_AXIS]-previous_speed[X_AXIS]), 2)+pow((current_speed[Y_AXIS]-previous_speed[Y_AXIS]), 2)); if((previous_speed[X_AXIS] != 0.0) || (previous_speed[Y_AXIS] != 0.0)) { @@ -717,6 +721,9 @@ void plan_buffer_line(const float &x, const float &y, const float &z, const floa if(abs(current_speed[Z_AXIS] - previous_speed[Z_AXIS]) > max_z_jerk) { vmax_junction *= (max_z_jerk/abs(current_speed[Z_AXIS] - previous_speed[Z_AXIS])); } + if(abs(current_speed[E_AXIS] - previous_speed[E_AXIS]) > max_e_jerk) { + vmax_junction *= (max_e_jerk/abs(current_speed[E_AXIS] - previous_speed[E_AXIS])); + } } block->max_entry_speed = vmax_junction; diff --git a/Marlin/planner.h b/Marlin/planner.h index 8fa4d4ec34..873441bb05 100644 --- a/Marlin/planner.h +++ b/Marlin/planner.h @@ -88,6 +88,7 @@ extern float acceleration; // Normal acceleration mm/s^2 THIS IS THE DE extern float retract_acceleration; // mm/s^2 filament pull-pack and push-forward while standing still in the other axis M204 TXXXX extern float max_xy_jerk; //speed than can be stopped at once, if i understand correctly. extern float max_z_jerk; +extern float max_e_jerk; extern float mintravelfeedrate; extern unsigned long axis_steps_per_sqr_second[NUM_AXIS];