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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 QH{IRR?`Ccsteps_e != 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];