Merge pull request #5934 from thinkyhead/rc_advance_ed_ratio
LIN_ADVANCE: Fixed E/D ratio option
This commit is contained in:
		
						commit
						5065636023
					
				| @ -592,6 +592,31 @@ | ||||
| 
 | ||||
| #if ENABLED(LIN_ADVANCE) | ||||
|   #define LIN_ADVANCE_K 75 | ||||
| 
 | ||||
|   /**
 | ||||
|    * Some Slicers produce Gcode with randomly jumping extrusion widths occasionally. | ||||
|    * For example within a 0.4mm perimeter it may produce a single segment of 0.05mm width. | ||||
|    * While this is harmless for normal printing (the fluid nature of the filament will | ||||
|    * close this very, very tiny gap), it throws off the LIN_ADVANCE pressure adaption. | ||||
|    * | ||||
|    * For this case LIN_ADVANCE_E_D_RATIO can be used to set the extrusion:distance ratio | ||||
|    * to a fixed value. Note that using a fixed ratio will lead to wrong nozzle pressures | ||||
|    * if the slicer is using variable widths or layer heights within one print! | ||||
|    * | ||||
|    * This option sets the default E:D ratio at startup. Use `M905` to override this value. | ||||
|    * | ||||
|    * Example: `M905 W0.4 H0.2 D1.75`, where: | ||||
|    *   - W is the extrusion width in mm | ||||
|    *   - H is the layer height in mm | ||||
|    *   - D is the filament diameter in mm | ||||
|    * | ||||
|    * Set to 0 to auto-detect the ratio based on given Gcode G1 print moves. | ||||
|    * | ||||
|    * Slic3r (including Prusa Slic3r) produces Gcode compatible with the automatic mode. | ||||
|    * Cura (as of this writing) may produce Gcode incompatible with the automatic mode. | ||||
|    */ | ||||
|   #define LIN_ADVANCE_E_D_RATIO 0 // The calculated ratio (or 0) according to the formula W * H / ((D / 2) ^ 2 * PI)
 | ||||
|                                   // Example: 0.4 * 0.2 / ((1.75 / 2) ^ 2 * PI) = 0.033260135
 | ||||
| #endif | ||||
| 
 | ||||
| // @section leveling
 | ||||
|  | ||||
| @ -7601,7 +7601,24 @@ inline void gcode_M503() { | ||||
|    */ | ||||
|   inline void gcode_M905() { | ||||
|     stepper.synchronize(); | ||||
|     planner.advance_M905(code_seen('K') ? code_value_float() : -1.0); | ||||
| 
 | ||||
|     const float newK = code_seen('K') ? code_value_float() : -1, | ||||
|                 newD = code_seen('D') ? code_value_float() : -1, | ||||
|                 newW = code_seen('W') ? code_value_float() : -1, | ||||
|                 newH = code_seen('H') ? code_value_float() : -1; | ||||
| 
 | ||||
|     if (newK >= 0.0) planner.set_extruder_advance_k(newK); | ||||
| 
 | ||||
|     SERIAL_ECHO_START; | ||||
|     SERIAL_ECHOLNPAIR("Advance factor: ", planner.get_extruder_advance_k()); | ||||
| 
 | ||||
|     if (newD >= 0 || newW >= 0 || newH >= 0) { | ||||
|       const float ratio = (!newD || !newW || !newH) ? 0 : (newW * newH) / (sq(newD * 0.5) * M_PI); | ||||
|       planner.set_advance_ed_ratio(ratio); | ||||
|       SERIAL_ECHO_START; | ||||
|       SERIAL_ECHOPGM("E/D ratio: "); | ||||
|       if (ratio) SERIAL_ECHOLN(ratio); else SERIAL_ECHOLNPGM("Automatic"); | ||||
|     } | ||||
|   } | ||||
| #endif | ||||
| 
 | ||||
|  | ||||
| @ -589,6 +589,31 @@ | ||||
| 
 | ||||
| #if ENABLED(LIN_ADVANCE) | ||||
|   #define LIN_ADVANCE_K 75 | ||||
| 
 | ||||
|   /**
 | ||||
|    * Some Slicers produce Gcode with randomly jumping extrusion widths occasionally. | ||||
|    * For example within a 0.4mm perimeter it may produce a single segment of 0.05mm width. | ||||
|    * While this is harmless for normal printing (the fluid nature of the filament will | ||||
|    * close this very, very tiny gap), it throws off the LIN_ADVANCE pressure adaption. | ||||
|    * | ||||
|    * For this case LIN_ADVANCE_E_D_RATIO can be used to set the extrusion:distance ratio | ||||
|    * to a fixed value. Note that using a fixed ratio will lead to wrong nozzle pressures | ||||
|    * if the slicer is using variable widths or layer heights within one print! | ||||
|    * | ||||
|    * This option sets the default E:D ratio at startup. Use `M905` to override this value. | ||||
|    * | ||||
|    * Example: `M905 W0.4 H0.2 D1.75`, where: | ||||
|    *   - W is the extrusion width in mm | ||||
|    *   - H is the layer height in mm | ||||
|    *   - D is the filament diameter in mm | ||||
|    * | ||||
|    * Set to 0 to auto-detect the ratio based on given Gcode G1 print moves. | ||||
|    * | ||||
|    * Slic3r (including Prusa Slic3r) produces Gcode compatible with the automatic mode. | ||||
|    * Cura (as of this writing) may produce Gcode incompatible with the automatic mode. | ||||
|    */ | ||||
|   #define LIN_ADVANCE_E_D_RATIO 0 // The calculated ratio (or 0) according to the formula W * H / ((D / 2) ^ 2 * PI)
 | ||||
|                                   // Example: 0.4 * 0.2 / ((1.75 / 2) ^ 2 * PI) = 0.033260135
 | ||||
| #endif | ||||
| 
 | ||||
| // @section leveling
 | ||||
|  | ||||
| @ -589,6 +589,31 @@ | ||||
| 
 | ||||
| #if ENABLED(LIN_ADVANCE) | ||||
|   #define LIN_ADVANCE_K 75 | ||||
| 
 | ||||
|   /**
 | ||||
|    * Some Slicers produce Gcode with randomly jumping extrusion widths occasionally. | ||||
|    * For example within a 0.4mm perimeter it may produce a single segment of 0.05mm width. | ||||
|    * While this is harmless for normal printing (the fluid nature of the filament will | ||||
|    * close this very, very tiny gap), it throws off the LIN_ADVANCE pressure adaption. | ||||
|    * | ||||
|    * For this case LIN_ADVANCE_E_D_RATIO can be used to set the extrusion:distance ratio | ||||
|    * to a fixed value. Note that using a fixed ratio will lead to wrong nozzle pressures | ||||
|    * if the slicer is using variable widths or layer heights within one print! | ||||
|    * | ||||
|    * This option sets the default E:D ratio at startup. Use `M905` to override this value. | ||||
|    * | ||||
|    * Example: `M905 W0.4 H0.2 D1.75`, where: | ||||
|    *   - W is the extrusion width in mm | ||||
|    *   - H is the layer height in mm | ||||
|    *   - D is the filament diameter in mm | ||||
|    * | ||||
|    * Set to 0 to auto-detect the ratio based on given Gcode G1 print moves. | ||||
|    * | ||||
|    * Slic3r (including Prusa Slic3r) produces Gcode compatible with the automatic mode. | ||||
|    * Cura (as of this writing) may produce Gcode incompatible with the automatic mode. | ||||
|    */ | ||||
|   #define LIN_ADVANCE_E_D_RATIO 0 // The calculated ratio (or 0) according to the formula W * H / ((D / 2) ^ 2 * PI)
 | ||||
|                                   // Example: 0.4 * 0.2 / ((1.75 / 2) ^ 2 * PI) = 0.033260135
 | ||||
| #endif | ||||
| 
 | ||||
| // @section leveling
 | ||||
|  | ||||
| @ -589,6 +589,31 @@ | ||||
| 
 | ||||
| #if ENABLED(LIN_ADVANCE) | ||||
|   #define LIN_ADVANCE_K 75 | ||||
| 
 | ||||
|   /**
 | ||||
|    * Some Slicers produce Gcode with randomly jumping extrusion widths occasionally. | ||||
|    * For example within a 0.4mm perimeter it may produce a single segment of 0.05mm width. | ||||
|    * While this is harmless for normal printing (the fluid nature of the filament will | ||||
|    * close this very, very tiny gap), it throws off the LIN_ADVANCE pressure adaption. | ||||
|    * | ||||
|    * For this case LIN_ADVANCE_E_D_RATIO can be used to set the extrusion:distance ratio | ||||
|    * to a fixed value. Note that using a fixed ratio will lead to wrong nozzle pressures | ||||
|    * if the slicer is using variable widths or layer heights within one print! | ||||
|    * | ||||
|    * This option sets the default E:D ratio at startup. Use `M905` to override this value. | ||||
|    * | ||||
|    * Example: `M905 W0.4 H0.2 D1.75`, where: | ||||
|    *   - W is the extrusion width in mm | ||||
|    *   - H is the layer height in mm | ||||
|    *   - D is the filament diameter in mm | ||||
|    * | ||||
|    * Set to 0 to auto-detect the ratio based on given Gcode G1 print moves. | ||||
|    * | ||||
|    * Slic3r (including Prusa Slic3r) produces Gcode compatible with the automatic mode. | ||||
|    * Cura (as of this writing) may produce Gcode incompatible with the automatic mode. | ||||
|    */ | ||||
|   #define LIN_ADVANCE_E_D_RATIO 0 // The calculated ratio (or 0) according to the formula W * H / ((D / 2) ^ 2 * PI)
 | ||||
|                                   // Example: 0.4 * 0.2 / ((1.75 / 2) ^ 2 * PI) = 0.033260135
 | ||||
| #endif | ||||
| 
 | ||||
| // @section leveling
 | ||||
|  | ||||
| @ -572,6 +572,31 @@ | ||||
| 
 | ||||
| #if ENABLED(LIN_ADVANCE) | ||||
|   #define LIN_ADVANCE_K 75 | ||||
| 
 | ||||
|   /**
 | ||||
|    * Some Slicers produce Gcode with randomly jumping extrusion widths occasionally. | ||||
|    * For example within a 0.4mm perimeter it may produce a single segment of 0.05mm width. | ||||
|    * While this is harmless for normal printing (the fluid nature of the filament will | ||||
|    * close this very, very tiny gap), it throws off the LIN_ADVANCE pressure adaption. | ||||
|    * | ||||
|    * For this case LIN_ADVANCE_E_D_RATIO can be used to set the extrusion:distance ratio | ||||
|    * to a fixed value. Note that using a fixed ratio will lead to wrong nozzle pressures | ||||
|    * if the slicer is using variable widths or layer heights within one print! | ||||
|    * | ||||
|    * This option sets the default E:D ratio at startup. Use `M905` to override this value. | ||||
|    * | ||||
|    * Example: `M905 W0.4 H0.2 D1.75`, where: | ||||
|    *   - W is the extrusion width in mm | ||||
|    *   - H is the layer height in mm | ||||
|    *   - D is the filament diameter in mm | ||||
|    * | ||||
|    * Set to 0 to auto-detect the ratio based on given Gcode G1 print moves. | ||||
|    * | ||||
|    * Slic3r (including Prusa Slic3r) produces Gcode compatible with the automatic mode. | ||||
|    * Cura (as of this writing) may produce Gcode incompatible with the automatic mode. | ||||
|    */ | ||||
|   #define LIN_ADVANCE_E_D_RATIO 0 // The calculated ratio (or 0) according to the formula W * H / ((D / 2) ^ 2 * PI)
 | ||||
|                                   // Example: 0.4 * 0.2 / ((1.75 / 2) ^ 2 * PI) = 0.033260135
 | ||||
| #endif | ||||
| 
 | ||||
| // @section leveling
 | ||||
|  | ||||
| @ -602,6 +602,31 @@ | ||||
| 
 | ||||
| #if ENABLED(LIN_ADVANCE) | ||||
|   #define LIN_ADVANCE_K 140 // start value for PLA on K8200
 | ||||
| 
 | ||||
|   /**
 | ||||
|    * Some Slicers produce Gcode with randomly jumping extrusion widths occasionally. | ||||
|    * For example within a 0.4mm perimeter it may produce a single segment of 0.05mm width. | ||||
|    * While this is harmless for normal printing (the fluid nature of the filament will | ||||
|    * close this very, very tiny gap), it throws off the LIN_ADVANCE pressure adaption. | ||||
|    * | ||||
|    * For this case LIN_ADVANCE_E_D_RATIO can be used to set the extrusion:distance ratio | ||||
|    * to a fixed value. Note that using a fixed ratio will lead to wrong nozzle pressures | ||||
|    * if the slicer is using variable widths or layer heights within one print! | ||||
|    * | ||||
|    * This option sets the default E:D ratio at startup. Use `M905` to override this value. | ||||
|    * | ||||
|    * Example: `M905 W0.4 H0.2 D1.75`, where: | ||||
|    *   - W is the extrusion width in mm | ||||
|    *   - H is the layer height in mm | ||||
|    *   - D is the filament diameter in mm | ||||
|    * | ||||
|    * Set to 0 to auto-detect the ratio based on given Gcode G1 print moves. | ||||
|    * | ||||
|    * Slic3r (including Prusa Slic3r) produces Gcode compatible with the automatic mode. | ||||
|    * Cura (as of this writing) may produce Gcode incompatible with the automatic mode. | ||||
|    */ | ||||
|   #define LIN_ADVANCE_E_D_RATIO 0 // The calculated ratio (or 0) according to the formula W * H / ((D / 2) ^ 2 * PI)
 | ||||
|                                   // Example: 0.4 * 0.2 / ((1.75 / 2) ^ 2 * PI) = 0.033260135
 | ||||
| #endif | ||||
| 
 | ||||
| // @section leveling
 | ||||
|  | ||||
| @ -589,6 +589,31 @@ | ||||
| 
 | ||||
| #if ENABLED(LIN_ADVANCE) | ||||
|   #define LIN_ADVANCE_K 75 | ||||
| 
 | ||||
|   /**
 | ||||
|    * Some Slicers produce Gcode with randomly jumping extrusion widths occasionally. | ||||
|    * For example within a 0.4mm perimeter it may produce a single segment of 0.05mm width. | ||||
|    * While this is harmless for normal printing (the fluid nature of the filament will | ||||
|    * close this very, very tiny gap), it throws off the LIN_ADVANCE pressure adaption. | ||||
|    * | ||||
|    * For this case LIN_ADVANCE_E_D_RATIO can be used to set the extrusion:distance ratio | ||||
|    * to a fixed value. Note that using a fixed ratio will lead to wrong nozzle pressures | ||||
|    * if the slicer is using variable widths or layer heights within one print! | ||||
|    * | ||||
|    * This option sets the default E:D ratio at startup. Use `M905` to override this value. | ||||
|    * | ||||
|    * Example: `M905 W0.4 H0.2 D1.75`, where: | ||||
|    *   - W is the extrusion width in mm | ||||
|    *   - H is the layer height in mm | ||||
|    *   - D is the filament diameter in mm | ||||
|    * | ||||
|    * Set to 0 to auto-detect the ratio based on given Gcode G1 print moves. | ||||
|    * | ||||
|    * Slic3r (including Prusa Slic3r) produces Gcode compatible with the automatic mode. | ||||
|    * Cura (as of this writing) may produce Gcode incompatible with the automatic mode. | ||||
|    */ | ||||
|   #define LIN_ADVANCE_E_D_RATIO 0 // The calculated ratio (or 0) according to the formula W * H / ((D / 2) ^ 2 * PI)
 | ||||
|                                   // Example: 0.4 * 0.2 / ((1.75 / 2) ^ 2 * PI) = 0.033260135
 | ||||
| #endif | ||||
| 
 | ||||
| // @section leveling
 | ||||
|  | ||||
| @ -589,6 +589,31 @@ | ||||
| 
 | ||||
| #if ENABLED(LIN_ADVANCE) | ||||
|   #define LIN_ADVANCE_K 75 | ||||
| 
 | ||||
|   /**
 | ||||
|    * Some Slicers produce Gcode with randomly jumping extrusion widths occasionally. | ||||
|    * For example within a 0.4mm perimeter it may produce a single segment of 0.05mm width. | ||||
|    * While this is harmless for normal printing (the fluid nature of the filament will | ||||
|    * close this very, very tiny gap), it throws off the LIN_ADVANCE pressure adaption. | ||||
|    * | ||||
|    * For this case LIN_ADVANCE_E_D_RATIO can be used to set the extrusion:distance ratio | ||||
|    * to a fixed value. Note that using a fixed ratio will lead to wrong nozzle pressures | ||||
|    * if the slicer is using variable widths or layer heights within one print! | ||||
|    * | ||||
|    * This option sets the default E:D ratio at startup. Use `M905` to override this value. | ||||
|    * | ||||
|    * Example: `M905 W0.4 H0.2 D1.75`, where: | ||||
|    *   - W is the extrusion width in mm | ||||
|    *   - H is the layer height in mm | ||||
|    *   - D is the filament diameter in mm | ||||
|    * | ||||
|    * Set to 0 to auto-detect the ratio based on given Gcode G1 print moves. | ||||
|    * | ||||
|    * Slic3r (including Prusa Slic3r) produces Gcode compatible with the automatic mode. | ||||
|    * Cura (as of this writing) may produce Gcode incompatible with the automatic mode. | ||||
|    */ | ||||
|   #define LIN_ADVANCE_E_D_RATIO 0 // The calculated ratio (or 0) according to the formula W * H / ((D / 2) ^ 2 * PI)
 | ||||
|                                   // Example: 0.4 * 0.2 / ((1.75 / 2) ^ 2 * PI) = 0.033260135
 | ||||
| #endif | ||||
| 
 | ||||
| // @section leveling
 | ||||
|  | ||||
| @ -589,6 +589,31 @@ | ||||
| 
 | ||||
| #if ENABLED(LIN_ADVANCE) | ||||
|   #define LIN_ADVANCE_K 75 | ||||
| 
 | ||||
|   /**
 | ||||
|    * Some Slicers produce Gcode with randomly jumping extrusion widths occasionally. | ||||
|    * For example within a 0.4mm perimeter it may produce a single segment of 0.05mm width. | ||||
|    * While this is harmless for normal printing (the fluid nature of the filament will | ||||
|    * close this very, very tiny gap), it throws off the LIN_ADVANCE pressure adaption. | ||||
|    * | ||||
|    * For this case LIN_ADVANCE_E_D_RATIO can be used to set the extrusion:distance ratio | ||||
|    * to a fixed value. Note that using a fixed ratio will lead to wrong nozzle pressures | ||||
|    * if the slicer is using variable widths or layer heights within one print! | ||||
|    * | ||||
|    * This option sets the default E:D ratio at startup. Use `M905` to override this value. | ||||
|    * | ||||
|    * Example: `M905 W0.4 H0.2 D1.75`, where: | ||||
|    *   - W is the extrusion width in mm | ||||
|    *   - H is the layer height in mm | ||||
|    *   - D is the filament diameter in mm | ||||
|    * | ||||
|    * Set to 0 to auto-detect the ratio based on given Gcode G1 print moves. | ||||
|    * | ||||
|    * Slic3r (including Prusa Slic3r) produces Gcode compatible with the automatic mode. | ||||
|    * Cura (as of this writing) may produce Gcode incompatible with the automatic mode. | ||||
|    */ | ||||
|   #define LIN_ADVANCE_E_D_RATIO 0 // The calculated ratio (or 0) according to the formula W * H / ((D / 2) ^ 2 * PI)
 | ||||
|                                   // Example: 0.4 * 0.2 / ((1.75 / 2) ^ 2 * PI) = 0.033260135
 | ||||
| #endif | ||||
| 
 | ||||
| // @section leveling
 | ||||
|  | ||||
| @ -597,6 +597,31 @@ | ||||
| 
 | ||||
| #if ENABLED(LIN_ADVANCE) | ||||
|   #define LIN_ADVANCE_K 75 | ||||
| 
 | ||||
|   /**
 | ||||
|    * Some Slicers produce Gcode with randomly jumping extrusion widths occasionally. | ||||
|    * For example within a 0.4mm perimeter it may produce a single segment of 0.05mm width. | ||||
|    * While this is harmless for normal printing (the fluid nature of the filament will | ||||
|    * close this very, very tiny gap), it throws off the LIN_ADVANCE pressure adaption. | ||||
|    * | ||||
|    * For this case LIN_ADVANCE_E_D_RATIO can be used to set the extrusion:distance ratio | ||||
|    * to a fixed value. Note that using a fixed ratio will lead to wrong nozzle pressures | ||||
|    * if the slicer is using variable widths or layer heights within one print! | ||||
|    * | ||||
|    * This option sets the default E:D ratio at startup. Use `M905` to override this value. | ||||
|    * | ||||
|    * Example: `M905 W0.4 H0.2 D1.75`, where: | ||||
|    *   - W is the extrusion width in mm | ||||
|    *   - H is the layer height in mm | ||||
|    *   - D is the filament diameter in mm | ||||
|    * | ||||
|    * Set to 0 to auto-detect the ratio based on given Gcode G1 print moves. | ||||
|    * | ||||
|    * Slic3r (including Prusa Slic3r) produces Gcode compatible with the automatic mode. | ||||
|    * Cura (as of this writing) may produce Gcode incompatible with the automatic mode. | ||||
|    */ | ||||
|   #define LIN_ADVANCE_E_D_RATIO 0 // The calculated ratio (or 0) according to the formula W * H / ((D / 2) ^ 2 * PI)
 | ||||
|                                   // Example: 0.4 * 0.2 / ((1.75 / 2) ^ 2 * PI) = 0.033260135
 | ||||
| #endif | ||||
| 
 | ||||
| // @section leveling
 | ||||
|  | ||||
| @ -589,6 +589,31 @@ | ||||
| 
 | ||||
| #if ENABLED(LIN_ADVANCE) | ||||
|   #define LIN_ADVANCE_K 75 | ||||
| 
 | ||||
|   /**
 | ||||
|    * Some Slicers produce Gcode with randomly jumping extrusion widths occasionally. | ||||
|    * For example within a 0.4mm perimeter it may produce a single segment of 0.05mm width. | ||||
|    * While this is harmless for normal printing (the fluid nature of the filament will | ||||
|    * close this very, very tiny gap), it throws off the LIN_ADVANCE pressure adaption. | ||||
|    * | ||||
|    * For this case LIN_ADVANCE_E_D_RATIO can be used to set the extrusion:distance ratio | ||||
|    * to a fixed value. Note that using a fixed ratio will lead to wrong nozzle pressures | ||||
|    * if the slicer is using variable widths or layer heights within one print! | ||||
|    * | ||||
|    * This option sets the default E:D ratio at startup. Use `M905` to override this value. | ||||
|    * | ||||
|    * Example: `M905 W0.4 H0.2 D1.75`, where: | ||||
|    *   - W is the extrusion width in mm | ||||
|    *   - H is the layer height in mm | ||||
|    *   - D is the filament diameter in mm | ||||
|    * | ||||
|    * Set to 0 to auto-detect the ratio based on given Gcode G1 print moves. | ||||
|    * | ||||
|    * Slic3r (including Prusa Slic3r) produces Gcode compatible with the automatic mode. | ||||
|    * Cura (as of this writing) may produce Gcode incompatible with the automatic mode. | ||||
|    */ | ||||
|   #define LIN_ADVANCE_E_D_RATIO 0 // The calculated ratio (or 0) according to the formula W * H / ((D / 2) ^ 2 * PI)
 | ||||
|                                   // Example: 0.4 * 0.2 / ((1.75 / 2) ^ 2 * PI) = 0.033260135
 | ||||
| #endif | ||||
| 
 | ||||
| // @section leveling
 | ||||
|  | ||||
| @ -591,6 +591,31 @@ | ||||
| 
 | ||||
| #if ENABLED(LIN_ADVANCE) | ||||
|   #define LIN_ADVANCE_K 75 | ||||
| 
 | ||||
|   /**
 | ||||
|    * Some Slicers produce Gcode with randomly jumping extrusion widths occasionally. | ||||
|    * For example within a 0.4mm perimeter it may produce a single segment of 0.05mm width. | ||||
|    * While this is harmless for normal printing (the fluid nature of the filament will | ||||
|    * close this very, very tiny gap), it throws off the LIN_ADVANCE pressure adaption. | ||||
|    * | ||||
|    * For this case LIN_ADVANCE_E_D_RATIO can be used to set the extrusion:distance ratio | ||||
|    * to a fixed value. Note that using a fixed ratio will lead to wrong nozzle pressures | ||||
|    * if the slicer is using variable widths or layer heights within one print! | ||||
|    * | ||||
|    * This option sets the default E:D ratio at startup. Use `M905` to override this value. | ||||
|    * | ||||
|    * Example: `M905 W0.4 H0.2 D1.75`, where: | ||||
|    *   - W is the extrusion width in mm | ||||
|    *   - H is the layer height in mm | ||||
|    *   - D is the filament diameter in mm | ||||
|    * | ||||
|    * Set to 0 to auto-detect the ratio based on given Gcode G1 print moves. | ||||
|    * | ||||
|    * Slic3r (including Prusa Slic3r) produces Gcode compatible with the automatic mode. | ||||
|    * Cura (as of this writing) may produce Gcode incompatible with the automatic mode. | ||||
|    */ | ||||
|   #define LIN_ADVANCE_E_D_RATIO 0 // The calculated ratio (or 0) according to the formula W * H / ((D / 2) ^ 2 * PI)
 | ||||
|                                   // Example: 0.4 * 0.2 / ((1.75 / 2) ^ 2 * PI) = 0.033260135
 | ||||
| #endif | ||||
| 
 | ||||
| // @section leveling
 | ||||
|  | ||||
| @ -591,6 +591,31 @@ | ||||
| 
 | ||||
| #if ENABLED(LIN_ADVANCE) | ||||
|   #define LIN_ADVANCE_K 75 | ||||
| 
 | ||||
|   /**
 | ||||
|    * Some Slicers produce Gcode with randomly jumping extrusion widths occasionally. | ||||
|    * For example within a 0.4mm perimeter it may produce a single segment of 0.05mm width. | ||||
|    * While this is harmless for normal printing (the fluid nature of the filament will | ||||
|    * close this very, very tiny gap), it throws off the LIN_ADVANCE pressure adaption. | ||||
|    * | ||||
|    * For this case LIN_ADVANCE_E_D_RATIO can be used to set the extrusion:distance ratio | ||||
|    * to a fixed value. Note that using a fixed ratio will lead to wrong nozzle pressures | ||||
|    * if the slicer is using variable widths or layer heights within one print! | ||||
|    * | ||||
|    * This option sets the default E:D ratio at startup. Use `M905` to override this value. | ||||
|    * | ||||
|    * Example: `M905 W0.4 H0.2 D1.75`, where: | ||||
|    *   - W is the extrusion width in mm | ||||
|    *   - H is the layer height in mm | ||||
|    *   - D is the filament diameter in mm | ||||
|    * | ||||
|    * Set to 0 to auto-detect the ratio based on given Gcode G1 print moves. | ||||
|    * | ||||
|    * Slic3r (including Prusa Slic3r) produces Gcode compatible with the automatic mode. | ||||
|    * Cura (as of this writing) may produce Gcode incompatible with the automatic mode. | ||||
|    */ | ||||
|   #define LIN_ADVANCE_E_D_RATIO 0 // The calculated ratio (or 0) according to the formula W * H / ((D / 2) ^ 2 * PI)
 | ||||
|                                   // Example: 0.4 * 0.2 / ((1.75 / 2) ^ 2 * PI) = 0.033260135
 | ||||
| #endif | ||||
| 
 | ||||
| // @section leveling
 | ||||
|  | ||||
| @ -596,6 +596,31 @@ | ||||
| 
 | ||||
| #if ENABLED(LIN_ADVANCE) | ||||
|   #define LIN_ADVANCE_K 75 | ||||
| 
 | ||||
|   /**
 | ||||
|    * Some Slicers produce Gcode with randomly jumping extrusion widths occasionally. | ||||
|    * For example within a 0.4mm perimeter it may produce a single segment of 0.05mm width. | ||||
|    * While this is harmless for normal printing (the fluid nature of the filament will | ||||
|    * close this very, very tiny gap), it throws off the LIN_ADVANCE pressure adaption. | ||||
|    * | ||||
|    * For this case LIN_ADVANCE_E_D_RATIO can be used to set the extrusion:distance ratio | ||||
|    * to a fixed value. Note that using a fixed ratio will lead to wrong nozzle pressures | ||||
|    * if the slicer is using variable widths or layer heights within one print! | ||||
|    * | ||||
|    * This option sets the default E:D ratio at startup. Use `M905` to override this value. | ||||
|    * | ||||
|    * Example: `M905 W0.4 H0.2 D1.75`, where: | ||||
|    *   - W is the extrusion width in mm | ||||
|    *   - H is the layer height in mm | ||||
|    *   - D is the filament diameter in mm | ||||
|    * | ||||
|    * Set to 0 to auto-detect the ratio based on given Gcode G1 print moves. | ||||
|    * | ||||
|    * Slic3r (including Prusa Slic3r) produces Gcode compatible with the automatic mode. | ||||
|    * Cura (as of this writing) may produce Gcode incompatible with the automatic mode. | ||||
|    */ | ||||
|   #define LIN_ADVANCE_E_D_RATIO 0 // The calculated ratio (or 0) according to the formula W * H / ((D / 2) ^ 2 * PI)
 | ||||
|                                   // Example: 0.4 * 0.2 / ((1.75 / 2) ^ 2 * PI) = 0.033260135
 | ||||
| #endif | ||||
| 
 | ||||
| // @section leveling
 | ||||
|  | ||||
| @ -591,6 +591,31 @@ | ||||
| 
 | ||||
| #if ENABLED(LIN_ADVANCE) | ||||
|   #define LIN_ADVANCE_K 75 | ||||
| 
 | ||||
|   /**
 | ||||
|    * Some Slicers produce Gcode with randomly jumping extrusion widths occasionally. | ||||
|    * For example within a 0.4mm perimeter it may produce a single segment of 0.05mm width. | ||||
|    * While this is harmless for normal printing (the fluid nature of the filament will | ||||
|    * close this very, very tiny gap), it throws off the LIN_ADVANCE pressure adaption. | ||||
|    * | ||||
|    * For this case LIN_ADVANCE_E_D_RATIO can be used to set the extrusion:distance ratio | ||||
|    * to a fixed value. Note that using a fixed ratio will lead to wrong nozzle pressures | ||||
|    * if the slicer is using variable widths or layer heights within one print! | ||||
|    * | ||||
|    * This option sets the default E:D ratio at startup. Use `M905` to override this value. | ||||
|    * | ||||
|    * Example: `M905 W0.4 H0.2 D1.75`, where: | ||||
|    *   - W is the extrusion width in mm | ||||
|    *   - H is the layer height in mm | ||||
|    *   - D is the filament diameter in mm | ||||
|    * | ||||
|    * Set to 0 to auto-detect the ratio based on given Gcode G1 print moves. | ||||
|    * | ||||
|    * Slic3r (including Prusa Slic3r) produces Gcode compatible with the automatic mode. | ||||
|    * Cura (as of this writing) may produce Gcode incompatible with the automatic mode. | ||||
|    */ | ||||
|   #define LIN_ADVANCE_E_D_RATIO 0 // The calculated ratio (or 0) according to the formula W * H / ((D / 2) ^ 2 * PI)
 | ||||
|                                   // Example: 0.4 * 0.2 / ((1.75 / 2) ^ 2 * PI) = 0.033260135
 | ||||
| #endif | ||||
| 
 | ||||
| // @section leveling
 | ||||
|  | ||||
| @ -589,6 +589,31 @@ | ||||
| 
 | ||||
| #if ENABLED(LIN_ADVANCE) | ||||
|   #define LIN_ADVANCE_K 75 | ||||
| 
 | ||||
|   /**
 | ||||
|    * Some Slicers produce Gcode with randomly jumping extrusion widths occasionally. | ||||
|    * For example within a 0.4mm perimeter it may produce a single segment of 0.05mm width. | ||||
|    * While this is harmless for normal printing (the fluid nature of the filament will | ||||
|    * close this very, very tiny gap), it throws off the LIN_ADVANCE pressure adaption. | ||||
|    * | ||||
|    * For this case LIN_ADVANCE_E_D_RATIO can be used to set the extrusion:distance ratio | ||||
|    * to a fixed value. Note that using a fixed ratio will lead to wrong nozzle pressures | ||||
|    * if the slicer is using variable widths or layer heights within one print! | ||||
|    * | ||||
|    * This option sets the default E:D ratio at startup. Use `M905` to override this value. | ||||
|    * | ||||
|    * Example: `M905 W0.4 H0.2 D1.75`, where: | ||||
|    *   - W is the extrusion width in mm | ||||
|    *   - H is the layer height in mm | ||||
|    *   - D is the filament diameter in mm | ||||
|    * | ||||
|    * Set to 0 to auto-detect the ratio based on given Gcode G1 print moves. | ||||
|    * | ||||
|    * Slic3r (including Prusa Slic3r) produces Gcode compatible with the automatic mode. | ||||
|    * Cura (as of this writing) may produce Gcode incompatible with the automatic mode. | ||||
|    */ | ||||
|   #define LIN_ADVANCE_E_D_RATIO 0 // The calculated ratio (or 0) according to the formula W * H / ((D / 2) ^ 2 * PI)
 | ||||
|                                   // Example: 0.4 * 0.2 / ((1.75 / 2) ^ 2 * PI) = 0.033260135
 | ||||
| #endif | ||||
| 
 | ||||
| // @section leveling
 | ||||
|  | ||||
| @ -589,6 +589,31 @@ | ||||
| 
 | ||||
| #if ENABLED(LIN_ADVANCE) | ||||
|   #define LIN_ADVANCE_K 75 | ||||
| 
 | ||||
|   /**
 | ||||
|    * Some Slicers produce Gcode with randomly jumping extrusion widths occasionally. | ||||
|    * For example within a 0.4mm perimeter it may produce a single segment of 0.05mm width. | ||||
|    * While this is harmless for normal printing (the fluid nature of the filament will | ||||
|    * close this very, very tiny gap), it throws off the LIN_ADVANCE pressure adaption. | ||||
|    * | ||||
|    * For this case LIN_ADVANCE_E_D_RATIO can be used to set the extrusion:distance ratio | ||||
|    * to a fixed value. Note that using a fixed ratio will lead to wrong nozzle pressures | ||||
|    * if the slicer is using variable widths or layer heights within one print! | ||||
|    * | ||||
|    * This option sets the default E:D ratio at startup. Use `M905` to override this value. | ||||
|    * | ||||
|    * Example: `M905 W0.4 H0.2 D1.75`, where: | ||||
|    *   - W is the extrusion width in mm | ||||
|    *   - H is the layer height in mm | ||||
|    *   - D is the filament diameter in mm | ||||
|    * | ||||
|    * Set to 0 to auto-detect the ratio based on given Gcode G1 print moves. | ||||
|    * | ||||
|    * Slic3r (including Prusa Slic3r) produces Gcode compatible with the automatic mode. | ||||
|    * Cura (as of this writing) may produce Gcode incompatible with the automatic mode. | ||||
|    */ | ||||
|   #define LIN_ADVANCE_E_D_RATIO 0 // The calculated ratio (or 0) according to the formula W * H / ((D / 2) ^ 2 * PI)
 | ||||
|                                   // Example: 0.4 * 0.2 / ((1.75 / 2) ^ 2 * PI) = 0.033260135
 | ||||
| #endif | ||||
| 
 | ||||
| // @section leveling
 | ||||
|  | ||||
| @ -142,6 +142,7 @@ float Planner::previous_speed[NUM_AXIS], | ||||
| 
 | ||||
| #if ENABLED(LIN_ADVANCE) | ||||
|   float Planner::extruder_advance_k = LIN_ADVANCE_K, | ||||
|         Planner::advance_ed_ratio = LIN_ADVANCE_E_D_RATIO, | ||||
|         Planner::position_float[NUM_AXIS] = { 0 }; | ||||
| #endif | ||||
| 
 | ||||
| @ -1324,7 +1325,12 @@ void Planner::_buffer_line(const float &a, const float &b, const float &c, const | ||||
|                             && (uint32_t)esteps != block->step_event_count | ||||
|                             && de_float > 0.0; | ||||
|     if (block->use_advance_lead) | ||||
|       block->abs_adv_steps_multiplier8 = lround(extruder_advance_k * (de_float / mm_D_float) * block->nominal_speed / (float)block->nominal_rate * axis_steps_per_mm[E_AXIS_N] * 256.0); | ||||
|       block->abs_adv_steps_multiplier8 = lround( | ||||
|         extruder_advance_k | ||||
|         * (UNEAR_ZERO(advance_ed_ratio) ? de_float / mm_D_float : advance_ed_ratio) // Use the fixed ratio, if set
 | ||||
|         * (block->nominal_speed / (float)block->nominal_rate) | ||||
|         * axis_steps_per_mm[E_AXIS_N] * 256.0 | ||||
|       ); | ||||
| 
 | ||||
|   #elif ENABLED(ADVANCE) | ||||
| 
 | ||||
| @ -1478,14 +1484,3 @@ void Planner::refresh_positioning() { | ||||
|   } | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
| #if ENABLED(LIN_ADVANCE) | ||||
| 
 | ||||
|   void Planner::advance_M905(const float &k) { | ||||
|     if (k >= 0.0) extruder_advance_k = k; | ||||
|     SERIAL_ECHO_START; | ||||
|     SERIAL_ECHOPAIR("Advance factor: ", extruder_advance_k); | ||||
|     SERIAL_EOL; | ||||
|   } | ||||
| 
 | ||||
| #endif | ||||
|  | ||||
| @ -210,6 +210,7 @@ class Planner { | ||||
|     #if ENABLED(LIN_ADVANCE) | ||||
|       static float position_float[NUM_AXIS]; | ||||
|       static float extruder_advance_k; | ||||
|       static float advance_ed_ratio; | ||||
|     #endif | ||||
| 
 | ||||
|     #if ENABLED(ULTRA_LCD) | ||||
| @ -266,7 +267,9 @@ class Planner { | ||||
|     #endif | ||||
| 
 | ||||
|     #if ENABLED(LIN_ADVANCE) | ||||
|       void advance_M905(const float &k); | ||||
|       static void set_extruder_advance_k(const float &k) { extruder_advance_k = k; }; | ||||
|       static float get_extruder_advance_k() { return extruder_advance_k; }; | ||||
|       static void set_advance_ed_ratio(const float &ratio) { advance_ed_ratio = ratio; }; | ||||
|     #endif | ||||
| 
 | ||||
|     /**
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user