Added E-Jerk
This commit is contained in:
		| @@ -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_XYJERK                20.0    // (mm/sec) | ||||||
| #define DEFAULT_ZJERK                 0.4     // (mm/sec) | #define DEFAULT_ZJERK                 0.4     // (mm/sec) | ||||||
|  | #define DEFAULT_EJERK                 5.0    // (mm/sec) | ||||||
|  |  | ||||||
| //=========================================================================== | //=========================================================================== | ||||||
| //=============================Additional Features=========================== | //=============================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 ULTRA_LCD  //general lcd support, also 16x2 | ||||||
| //#define SDSUPPORT // Enable SD Card Support in Hardware Console | //#define SDSUPPORT // Enable SD Card Support in Hardware Console | ||||||
|  |  | ||||||
| //#define ULTIPANEL | #define ULTIPANEL | ||||||
| #ifdef 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 SDSUPPORT | ||||||
|   | |||||||
| @@ -38,7 +38,7 @@ template <class T> int EEPROM_readAnything(int &ee, T& value) | |||||||
| // the default values are used whenever there is a change to the data, to prevent | // the default values are used whenever there is a change to the data, to prevent | ||||||
| // wrong data being written to the variables. | // wrong data being written to the variables. | ||||||
| // ALSO:  always make sure the variables in the Store and retrieve sections are in the same order. | // 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()  | inline void EEPROM_StoreSettings()  | ||||||
| { | { | ||||||
| @@ -56,6 +56,7 @@ inline void EEPROM_StoreSettings() | |||||||
|   EEPROM_writeAnything(i,minsegmenttime); |   EEPROM_writeAnything(i,minsegmenttime); | ||||||
|   EEPROM_writeAnything(i,max_xy_jerk); |   EEPROM_writeAnything(i,max_xy_jerk); | ||||||
|   EEPROM_writeAnything(i,max_z_jerk); |   EEPROM_writeAnything(i,max_z_jerk); | ||||||
|  |   EEPROM_writeAnything(i,max_e_jerk); | ||||||
|   #ifdef PIDTEMP |   #ifdef PIDTEMP | ||||||
|     EEPROM_writeAnything(i,Kp); |     EEPROM_writeAnything(i,Kp); | ||||||
|     EEPROM_writeAnything(i,Ki); |     EEPROM_writeAnything(i,Ki); | ||||||
| @@ -116,6 +117,7 @@ inline void EEPROM_printSettings() | |||||||
|       SERIAL_ECHOPAIR(" B" ,minsegmenttime );  |       SERIAL_ECHOPAIR(" B" ,minsegmenttime );  | ||||||
|       SERIAL_ECHOPAIR(" X" ,max_xy_jerk );  |       SERIAL_ECHOPAIR(" X" ,max_xy_jerk );  | ||||||
|       SERIAL_ECHOPAIR(" Z" ,max_z_jerk); |       SERIAL_ECHOPAIR(" Z" ,max_z_jerk); | ||||||
|  |       SERIAL_ECHOPAIR(" E" ,max_e_jerk); | ||||||
|       SERIAL_ECHOLN("");  |       SERIAL_ECHOLN("");  | ||||||
|     #ifdef PIDTEMP |     #ifdef PIDTEMP | ||||||
|       SERIAL_ECHO_START; |       SERIAL_ECHO_START; | ||||||
| @@ -150,6 +152,7 @@ inline void EEPROM_RetrieveSettings(bool def=false) | |||||||
|       EEPROM_readAnything(i,minsegmenttime); |       EEPROM_readAnything(i,minsegmenttime); | ||||||
|       EEPROM_readAnything(i,max_xy_jerk); |       EEPROM_readAnything(i,max_xy_jerk); | ||||||
|       EEPROM_readAnything(i,max_z_jerk); |       EEPROM_readAnything(i,max_z_jerk); | ||||||
|  |       EEPROM_readAnything(i,max_e_jerk); | ||||||
|       #ifndef PIDTEMP |       #ifndef PIDTEMP | ||||||
|         float Kp,Ki,Kd; |         float Kp,Ki,Kd; | ||||||
|       #endif |       #endif | ||||||
| @@ -179,6 +182,7 @@ inline void EEPROM_RetrieveSettings(bool def=false) | |||||||
|       mintravelfeedrate=DEFAULT_MINTRAVELFEEDRATE; |       mintravelfeedrate=DEFAULT_MINTRAVELFEEDRATE; | ||||||
|       max_xy_jerk=DEFAULT_XYJERK; |       max_xy_jerk=DEFAULT_XYJERK; | ||||||
|       max_z_jerk=DEFAULT_ZJERK; |       max_z_jerk=DEFAULT_ZJERK; | ||||||
|  |       max_e_jerk=DEFAULT_EJERK; | ||||||
|       SERIAL_ECHO_START; |       SERIAL_ECHO_START; | ||||||
|       SERIAL_ECHOLN("Using Default settings:"); |       SERIAL_ECHOLN("Using Default settings:"); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -97,7 +97,7 @@ | |||||||
| // M202 - Set max acceleration in units/s^2 for travel moves (M202 X1000 Y1000) Unused in Marlin!! | // 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 | // 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 | // 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 | // M206 - set additional homeing offset | ||||||
| // M220 S<factor in percent>- set speed factor override percentage | // M220 S<factor in percent>- set speed factor override percentage | ||||||
| // M221 S<factor in percent>- set extrude factor override percentage | // M221 S<factor in percent>- set extrude factor override percentage | ||||||
| @@ -1116,6 +1116,7 @@ void process_commands() | |||||||
|       if(code_seen('B')) minsegmenttime = code_value() ; |       if(code_seen('B')) minsegmenttime = code_value() ; | ||||||
|       if(code_seen('X')) max_xy_jerk = code_value() ; |       if(code_seen('X')) max_xy_jerk = code_value() ; | ||||||
|       if(code_seen('Z')) max_z_jerk = code_value() ; |       if(code_seen('Z')) max_z_jerk = code_value() ; | ||||||
|  |       if(code_seen('E')) max_e_jerk = code_value() ; | ||||||
|     } |     } | ||||||
|     break; |     break; | ||||||
|     case 206: // M206 additional homeing offset |     case 206: // M206 additional homeing offset | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							| @@ -74,6 +74,7 @@ float acceleration;         // Normal acceleration mm/s^2  THIS IS THE DEFAULT A | |||||||
| float retract_acceleration; //  mm/s^2   filament pull-pack and push-forward  while standing still in the other axis M204 TXXXX | float retract_acceleration; //  mm/s^2   filament pull-pack and push-forward  while standing still in the other axis M204 TXXXX | ||||||
| float max_xy_jerk; //speed than can be stopped at once, if i understand correctly. | float max_xy_jerk; //speed than can be stopped at once, if i understand correctly. | ||||||
| float max_z_jerk; | float max_z_jerk; | ||||||
|  | float max_e_jerk; | ||||||
| float mintravelfeedrate; | float mintravelfeedrate; | ||||||
| unsigned long axis_steps_per_sqr_second[NUM_AXIS]; | unsigned long axis_steps_per_sqr_second[NUM_AXIS]; | ||||||
|  |  | ||||||
| @@ -531,6 +532,13 @@ void plan_buffer_line(const float &x, const float &y, const float &z, const floa | |||||||
|   if(block->steps_e != 0) { enable_e0();enable_e1();enable_e2(); } |   if(block->steps_e != 0) { enable_e0();enable_e1();enable_e2(); } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |   if (block->steps_e == 0) { | ||||||
|  |         if(feed_rate<mintravelfeedrate) feed_rate=mintravelfeedrate; | ||||||
|  |   } | ||||||
|  |   else { | ||||||
|  |     	if(feed_rate<minimumfeedrate) feed_rate=minimumfeedrate; | ||||||
|  |   }  | ||||||
|  |    | ||||||
|   // slow down when de buffer starts to empty, rather than wait at the corner for a buffer refill |   // slow down when de buffer starts to empty, rather than wait at the corner for a buffer refill | ||||||
|   int moves_queued=(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); | ||||||
|   #ifdef SLOWDOWN |   #ifdef SLOWDOWN | ||||||
| @@ -555,12 +563,6 @@ 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_speed = block->millimeters * inverse_second; // (mm/sec) Always > 0 | ||||||
|   block->nominal_rate = ceil(block->step_event_count * inverse_second); // (step/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<mintravelfeedrate) feed_rate=mintravelfeedrate; |  | ||||||
|   } |  | ||||||
|   else { |  | ||||||
|     	if(feed_rate<minimumfeedrate) feed_rate=minimumfeedrate; |  | ||||||
|   }  |  | ||||||
|  |  | ||||||
| /* | /* | ||||||
|   //  segment time im micro seconds |   //  segment time im micro seconds | ||||||
| @@ -705,7 +707,9 @@ void plan_buffer_line(const float &x, const float &y, const float &z, const floa | |||||||
|   if(abs(current_speed[Z_AXIS]) > max_z_jerk/2)  |   if(abs(current_speed[Z_AXIS]) > max_z_jerk/2)  | ||||||
|     vmax_junction = max_z_jerk/2; |     vmax_junction = max_z_jerk/2; | ||||||
|   vmax_junction = min(vmax_junction, block->nominal_speed); |   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)) { |   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)); |     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)) { |     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) { |     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])); |       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; |   block->max_entry_speed = vmax_junction; | ||||||
|      |      | ||||||
|   | |||||||
| @@ -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 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_xy_jerk; //speed than can be stopped at once, if i understand correctly. | ||||||
| extern float max_z_jerk; | extern float max_z_jerk; | ||||||
|  | extern float max_e_jerk; | ||||||
| extern float mintravelfeedrate; | extern float mintravelfeedrate; | ||||||
| extern unsigned long axis_steps_per_sqr_second[NUM_AXIS]; | extern unsigned long axis_steps_per_sqr_second[NUM_AXIS]; | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user