[2.0.x] LIN_ADVANCE v1.5 (#9712)
This commit is contained in:
parent
90fa423737
commit
2bd252b501
@ -711,43 +711,25 @@
|
|||||||
// @section extruder
|
// @section extruder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of linear pressure control
|
* Linear Pressure Control v1.5
|
||||||
*
|
*
|
||||||
* Assumption: advance = k * (delta velocity)
|
* Assumption: advance [steps] = k * (delta velocity [steps/s])
|
||||||
* K=0 means advance disabled.
|
* K=0 means advance disabled.
|
||||||
* See Marlin documentation for calibration instructions.
|
*
|
||||||
|
* NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!
|
||||||
|
*
|
||||||
|
* Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
|
||||||
|
* Larger K values will be needed for flexible filament and greater distances.
|
||||||
|
* If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
|
||||||
|
* print acceleration will be reduced during the affected moves to keep within the limit.
|
||||||
|
*
|
||||||
|
* See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
|
||||||
|
* Mention @Sebastianv650 on GitHub to alert the author of any issues.
|
||||||
*/
|
*/
|
||||||
//#define LIN_ADVANCE
|
//#define LIN_ADVANCE
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
#define LIN_ADVANCE_K 75
|
#define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
|
||||||
|
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
||||||
/**
|
|
||||||
* 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 `M900` to override this value.
|
|
||||||
*
|
|
||||||
* Example: `M900 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
|
|
||||||
*
|
|
||||||
* Example: `M900 R0.0458` to set the ratio directly.
|
|
||||||
*
|
|
||||||
* Set to 0 to auto-detect the ratio based on given Gcode G1 print moves.
|
|
||||||
*
|
|
||||||
* Slic3r (including Průša Control) 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
|
#endif
|
||||||
|
|
||||||
// @section leveling
|
// @section leveling
|
||||||
|
@ -711,43 +711,25 @@
|
|||||||
// @section extruder
|
// @section extruder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of linear pressure control
|
* Linear Pressure Control v1.5
|
||||||
*
|
*
|
||||||
* Assumption: advance = k * (delta velocity)
|
* Assumption: advance [steps] = k * (delta velocity [steps/s])
|
||||||
* K=0 means advance disabled.
|
* K=0 means advance disabled.
|
||||||
* See Marlin documentation for calibration instructions.
|
*
|
||||||
|
* NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!
|
||||||
|
*
|
||||||
|
* Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
|
||||||
|
* Larger K values will be needed for flexible filament and greater distances.
|
||||||
|
* If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
|
||||||
|
* print acceleration will be reduced during the affected moves to keep within the limit.
|
||||||
|
*
|
||||||
|
* See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
|
||||||
|
* Mention @Sebastianv650 on GitHub to alert the author of any issues.
|
||||||
*/
|
*/
|
||||||
//#define LIN_ADVANCE
|
//#define LIN_ADVANCE
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
#define LIN_ADVANCE_K 75
|
#define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
|
||||||
|
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
||||||
/**
|
|
||||||
* 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 `M900` to override this value.
|
|
||||||
*
|
|
||||||
* Example: `M900 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
|
|
||||||
*
|
|
||||||
* Example: `M900 R0.0458` to set the ratio directly.
|
|
||||||
*
|
|
||||||
* Set to 0 to auto-detect the ratio based on given Gcode G1 print moves.
|
|
||||||
*
|
|
||||||
* Slic3r (including Průša Control) 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
|
#endif
|
||||||
|
|
||||||
// @section leveling
|
// @section leveling
|
||||||
|
@ -711,43 +711,25 @@
|
|||||||
// @section extruder
|
// @section extruder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of linear pressure control
|
* Linear Pressure Control v1.5
|
||||||
*
|
*
|
||||||
* Assumption: advance = k * (delta velocity)
|
* Assumption: advance [steps] = k * (delta velocity [steps/s])
|
||||||
* K=0 means advance disabled.
|
* K=0 means advance disabled.
|
||||||
* See Marlin documentation for calibration instructions.
|
*
|
||||||
|
* NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!
|
||||||
|
*
|
||||||
|
* Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
|
||||||
|
* Larger K values will be needed for flexible filament and greater distances.
|
||||||
|
* If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
|
||||||
|
* print acceleration will be reduced during the affected moves to keep within the limit.
|
||||||
|
*
|
||||||
|
* See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
|
||||||
|
* Mention @Sebastianv650 on GitHub to alert the author of any issues.
|
||||||
*/
|
*/
|
||||||
//#define LIN_ADVANCE
|
//#define LIN_ADVANCE
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
#define LIN_ADVANCE_K 75
|
#define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
|
||||||
|
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
||||||
/**
|
|
||||||
* 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 `M900` to override this value.
|
|
||||||
*
|
|
||||||
* Example: `M900 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
|
|
||||||
*
|
|
||||||
* Example: `M900 R0.0458` to set the ratio directly.
|
|
||||||
*
|
|
||||||
* Set to 0 to auto-detect the ratio based on given Gcode G1 print moves.
|
|
||||||
*
|
|
||||||
* Slic3r (including Průša Control) 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
|
#endif
|
||||||
|
|
||||||
// @section leveling
|
// @section leveling
|
||||||
|
@ -711,43 +711,25 @@
|
|||||||
// @section extruder
|
// @section extruder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of linear pressure control
|
* Linear Pressure Control v1.5
|
||||||
*
|
*
|
||||||
* Assumption: advance = k * (delta velocity)
|
* Assumption: advance [steps] = k * (delta velocity [steps/s])
|
||||||
* K=0 means advance disabled.
|
* K=0 means advance disabled.
|
||||||
* See Marlin documentation for calibration instructions.
|
*
|
||||||
|
* NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!
|
||||||
|
*
|
||||||
|
* Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
|
||||||
|
* Larger K values will be needed for flexible filament and greater distances.
|
||||||
|
* If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
|
||||||
|
* print acceleration will be reduced during the affected moves to keep within the limit.
|
||||||
|
*
|
||||||
|
* See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
|
||||||
|
* Mention @Sebastianv650 on GitHub to alert the author of any issues.
|
||||||
*/
|
*/
|
||||||
//#define LIN_ADVANCE
|
//#define LIN_ADVANCE
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
#define LIN_ADVANCE_K 75
|
#define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
|
||||||
|
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
||||||
/**
|
|
||||||
* 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 `M900` to override this value.
|
|
||||||
*
|
|
||||||
* Example: `M900 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
|
|
||||||
*
|
|
||||||
* Example: `M900 R0.0458` to set the ratio directly.
|
|
||||||
*
|
|
||||||
* Set to 0 to auto-detect the ratio based on given Gcode G1 print moves.
|
|
||||||
*
|
|
||||||
* Slic3r (including Průša Control) 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
|
#endif
|
||||||
|
|
||||||
// @section leveling
|
// @section leveling
|
||||||
|
@ -711,43 +711,25 @@
|
|||||||
// @section extruder
|
// @section extruder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of linear pressure control
|
* Linear Pressure Control v1.5
|
||||||
*
|
*
|
||||||
* Assumption: advance = k * (delta velocity)
|
* Assumption: advance [steps] = k * (delta velocity [steps/s])
|
||||||
* K=0 means advance disabled.
|
* K=0 means advance disabled.
|
||||||
* See Marlin documentation for calibration instructions.
|
*
|
||||||
|
* NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!
|
||||||
|
*
|
||||||
|
* Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
|
||||||
|
* Larger K values will be needed for flexible filament and greater distances.
|
||||||
|
* If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
|
||||||
|
* print acceleration will be reduced during the affected moves to keep within the limit.
|
||||||
|
*
|
||||||
|
* See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
|
||||||
|
* Mention @Sebastianv650 on GitHub to alert the author of any issues.
|
||||||
*/
|
*/
|
||||||
//#define LIN_ADVANCE
|
//#define LIN_ADVANCE
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
#define LIN_ADVANCE_K 75
|
#define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
|
||||||
|
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
||||||
/**
|
|
||||||
* 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 `M900` to override this value.
|
|
||||||
*
|
|
||||||
* Example: `M900 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
|
|
||||||
*
|
|
||||||
* Example: `M900 R0.0458` to set the ratio directly.
|
|
||||||
*
|
|
||||||
* Set to 0 to auto-detect the ratio based on given Gcode G1 print moves.
|
|
||||||
*
|
|
||||||
* Slic3r (including Průša Control) 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
|
#endif
|
||||||
|
|
||||||
// @section leveling
|
// @section leveling
|
||||||
|
@ -712,43 +712,25 @@
|
|||||||
// @section extruder
|
// @section extruder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of linear pressure control
|
* Linear Pressure Control v1.5
|
||||||
*
|
*
|
||||||
* Assumption: advance = k * (delta velocity)
|
* Assumption: advance [steps] = k * (delta velocity [steps/s])
|
||||||
* K=0 means advance disabled.
|
* K=0 means advance disabled.
|
||||||
* See Marlin documentation for calibration instructions.
|
*
|
||||||
|
* NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!
|
||||||
|
*
|
||||||
|
* Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
|
||||||
|
* Larger K values will be needed for flexible filament and greater distances.
|
||||||
|
* If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
|
||||||
|
* print acceleration will be reduced during the affected moves to keep within the limit.
|
||||||
|
*
|
||||||
|
* See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
|
||||||
|
* Mention @Sebastianv650 on GitHub to alert the author of any issues.
|
||||||
*/
|
*/
|
||||||
//#define LIN_ADVANCE
|
//#define LIN_ADVANCE
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
#define LIN_ADVANCE_K 75
|
#define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
|
||||||
|
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
||||||
/**
|
|
||||||
* 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 `M900` to override this value.
|
|
||||||
*
|
|
||||||
* Example: `M900 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
|
|
||||||
*
|
|
||||||
* Example: `M900 R0.0458` to set the ratio directly.
|
|
||||||
*
|
|
||||||
* Set to 0 to auto-detect the ratio based on given Gcode G1 print moves.
|
|
||||||
*
|
|
||||||
* Slic3r (including Průša Control) 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
|
#endif
|
||||||
|
|
||||||
// @section leveling
|
// @section leveling
|
||||||
|
@ -711,43 +711,25 @@
|
|||||||
// @section extruder
|
// @section extruder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of linear pressure control
|
* Linear Pressure Control v1.5
|
||||||
*
|
*
|
||||||
* Assumption: advance = k * (delta velocity)
|
* Assumption: advance [steps] = k * (delta velocity [steps/s])
|
||||||
* K=0 means advance disabled.
|
* K=0 means advance disabled.
|
||||||
* See Marlin documentation for calibration instructions.
|
*
|
||||||
|
* NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!
|
||||||
|
*
|
||||||
|
* Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
|
||||||
|
* Larger K values will be needed for flexible filament and greater distances.
|
||||||
|
* If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
|
||||||
|
* print acceleration will be reduced during the affected moves to keep within the limit.
|
||||||
|
*
|
||||||
|
* See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
|
||||||
|
* Mention @Sebastianv650 on GitHub to alert the author of any issues.
|
||||||
*/
|
*/
|
||||||
//#define LIN_ADVANCE
|
//#define LIN_ADVANCE
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
#define LIN_ADVANCE_K 75
|
#define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
|
||||||
|
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
||||||
/**
|
|
||||||
* 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 `M900` to override this value.
|
|
||||||
*
|
|
||||||
* Example: `M900 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
|
|
||||||
*
|
|
||||||
* Example: `M900 R0.0458` to set the ratio directly.
|
|
||||||
*
|
|
||||||
* Set to 0 to auto-detect the ratio based on given Gcode G1 print moves.
|
|
||||||
*
|
|
||||||
* Slic3r (including Průša Control) 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
|
#endif
|
||||||
|
|
||||||
// @section leveling
|
// @section leveling
|
||||||
|
@ -711,43 +711,25 @@
|
|||||||
// @section extruder
|
// @section extruder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of linear pressure control
|
* Linear Pressure Control v1.5
|
||||||
*
|
*
|
||||||
* Assumption: advance = k * (delta velocity)
|
* Assumption: advance [steps] = k * (delta velocity [steps/s])
|
||||||
* K=0 means advance disabled.
|
* K=0 means advance disabled.
|
||||||
* See Marlin documentation for calibration instructions.
|
*
|
||||||
|
* NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!
|
||||||
|
*
|
||||||
|
* Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
|
||||||
|
* Larger K values will be needed for flexible filament and greater distances.
|
||||||
|
* If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
|
||||||
|
* print acceleration will be reduced during the affected moves to keep within the limit.
|
||||||
|
*
|
||||||
|
* See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
|
||||||
|
* Mention @Sebastianv650 on GitHub to alert the author of any issues.
|
||||||
*/
|
*/
|
||||||
//#define LIN_ADVANCE
|
//#define LIN_ADVANCE
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
#define LIN_ADVANCE_K 75
|
#define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
|
||||||
|
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
||||||
/**
|
|
||||||
* 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 `M900` to override this value.
|
|
||||||
*
|
|
||||||
* Example: `M900 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
|
|
||||||
*
|
|
||||||
* Example: `M900 R0.0458` to set the ratio directly.
|
|
||||||
*
|
|
||||||
* Set to 0 to auto-detect the ratio based on given Gcode G1 print moves.
|
|
||||||
*
|
|
||||||
* Slic3r (including Průša Control) 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
|
#endif
|
||||||
|
|
||||||
// @section leveling
|
// @section leveling
|
||||||
|
@ -711,43 +711,25 @@
|
|||||||
// @section extruder
|
// @section extruder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of linear pressure control
|
* Linear Pressure Control v1.5
|
||||||
*
|
*
|
||||||
* Assumption: advance = k * (delta velocity)
|
* Assumption: advance [steps] = k * (delta velocity [steps/s])
|
||||||
* K=0 means advance disabled.
|
* K=0 means advance disabled.
|
||||||
* See Marlin documentation for calibration instructions.
|
*
|
||||||
|
* NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!
|
||||||
|
*
|
||||||
|
* Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
|
||||||
|
* Larger K values will be needed for flexible filament and greater distances.
|
||||||
|
* If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
|
||||||
|
* print acceleration will be reduced during the affected moves to keep within the limit.
|
||||||
|
*
|
||||||
|
* See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
|
||||||
|
* Mention @Sebastianv650 on GitHub to alert the author of any issues.
|
||||||
*/
|
*/
|
||||||
//#define LIN_ADVANCE
|
//#define LIN_ADVANCE
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
#define LIN_ADVANCE_K 75
|
#define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
|
||||||
|
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
||||||
/**
|
|
||||||
* 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 `M900` to override this value.
|
|
||||||
*
|
|
||||||
* Example: `M900 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
|
|
||||||
*
|
|
||||||
* Example: `M900 R0.0458` to set the ratio directly.
|
|
||||||
*
|
|
||||||
* Set to 0 to auto-detect the ratio based on given Gcode G1 print moves.
|
|
||||||
*
|
|
||||||
* Slic3r (including Průša Control) 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
|
#endif
|
||||||
|
|
||||||
// @section leveling
|
// @section leveling
|
||||||
|
@ -711,43 +711,25 @@
|
|||||||
// @section extruder
|
// @section extruder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of linear pressure control
|
* Linear Pressure Control v1.5
|
||||||
*
|
*
|
||||||
* Assumption: advance = k * (delta velocity)
|
* Assumption: advance [steps] = k * (delta velocity [steps/s])
|
||||||
* K=0 means advance disabled.
|
* K=0 means advance disabled.
|
||||||
* See Marlin documentation for calibration instructions.
|
*
|
||||||
|
* NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!
|
||||||
|
*
|
||||||
|
* Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
|
||||||
|
* Larger K values will be needed for flexible filament and greater distances.
|
||||||
|
* If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
|
||||||
|
* print acceleration will be reduced during the affected moves to keep within the limit.
|
||||||
|
*
|
||||||
|
* See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
|
||||||
|
* Mention @Sebastianv650 on GitHub to alert the author of any issues.
|
||||||
*/
|
*/
|
||||||
//#define LIN_ADVANCE
|
//#define LIN_ADVANCE
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
#define LIN_ADVANCE_K 75
|
#define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
|
||||||
|
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
||||||
/**
|
|
||||||
* 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 `M900` to override this value.
|
|
||||||
*
|
|
||||||
* Example: `M900 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
|
|
||||||
*
|
|
||||||
* Example: `M900 R0.0458` to set the ratio directly.
|
|
||||||
*
|
|
||||||
* Set to 0 to auto-detect the ratio based on given Gcode G1 print moves.
|
|
||||||
*
|
|
||||||
* Slic3r (including Průša Control) 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
|
#endif
|
||||||
|
|
||||||
// @section leveling
|
// @section leveling
|
||||||
|
@ -711,43 +711,25 @@
|
|||||||
// @section extruder
|
// @section extruder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of linear pressure control
|
* Linear Pressure Control v1.5
|
||||||
*
|
*
|
||||||
* Assumption: advance = k * (delta velocity)
|
* Assumption: advance [steps] = k * (delta velocity [steps/s])
|
||||||
* K=0 means advance disabled.
|
* K=0 means advance disabled.
|
||||||
* See Marlin documentation for calibration instructions.
|
*
|
||||||
|
* NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!
|
||||||
|
*
|
||||||
|
* Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
|
||||||
|
* Larger K values will be needed for flexible filament and greater distances.
|
||||||
|
* If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
|
||||||
|
* print acceleration will be reduced during the affected moves to keep within the limit.
|
||||||
|
*
|
||||||
|
* See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
|
||||||
|
* Mention @Sebastianv650 on GitHub to alert the author of any issues.
|
||||||
*/
|
*/
|
||||||
//#define LIN_ADVANCE
|
//#define LIN_ADVANCE
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
#define LIN_ADVANCE_K 75
|
#define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
|
||||||
|
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
||||||
/**
|
|
||||||
* 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 `M900` to override this value.
|
|
||||||
*
|
|
||||||
* Example: `M900 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
|
|
||||||
*
|
|
||||||
* Example: `M900 R0.0458` to set the ratio directly.
|
|
||||||
*
|
|
||||||
* Set to 0 to auto-detect the ratio based on given Gcode G1 print moves.
|
|
||||||
*
|
|
||||||
* Slic3r (including Průša Control) 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
|
#endif
|
||||||
|
|
||||||
// @section leveling
|
// @section leveling
|
||||||
|
@ -711,43 +711,25 @@
|
|||||||
// @section extruder
|
// @section extruder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of linear pressure control
|
* Linear Pressure Control v1.5
|
||||||
*
|
*
|
||||||
* Assumption: advance = k * (delta velocity)
|
* Assumption: advance [steps] = k * (delta velocity [steps/s])
|
||||||
* K=0 means advance disabled.
|
* K=0 means advance disabled.
|
||||||
* See Marlin documentation for calibration instructions.
|
*
|
||||||
|
* NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!
|
||||||
|
*
|
||||||
|
* Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
|
||||||
|
* Larger K values will be needed for flexible filament and greater distances.
|
||||||
|
* If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
|
||||||
|
* print acceleration will be reduced during the affected moves to keep within the limit.
|
||||||
|
*
|
||||||
|
* See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
|
||||||
|
* Mention @Sebastianv650 on GitHub to alert the author of any issues.
|
||||||
*/
|
*/
|
||||||
//#define LIN_ADVANCE
|
//#define LIN_ADVANCE
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
#define LIN_ADVANCE_K 75
|
#define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
|
||||||
|
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
||||||
/**
|
|
||||||
* 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 `M900` to override this value.
|
|
||||||
*
|
|
||||||
* Example: `M900 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
|
|
||||||
*
|
|
||||||
* Example: `M900 R0.0458` to set the ratio directly.
|
|
||||||
*
|
|
||||||
* Set to 0 to auto-detect the ratio based on given Gcode G1 print moves.
|
|
||||||
*
|
|
||||||
* Slic3r (including Průša Control) 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
|
#endif
|
||||||
|
|
||||||
// @section leveling
|
// @section leveling
|
||||||
|
@ -711,43 +711,25 @@
|
|||||||
// @section extruder
|
// @section extruder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of linear pressure control
|
* Linear Pressure Control v1.5
|
||||||
*
|
*
|
||||||
* Assumption: advance = k * (delta velocity)
|
* Assumption: advance [steps] = k * (delta velocity [steps/s])
|
||||||
* K=0 means advance disabled.
|
* K=0 means advance disabled.
|
||||||
* See Marlin documentation for calibration instructions.
|
*
|
||||||
|
* NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!
|
||||||
|
*
|
||||||
|
* Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
|
||||||
|
* Larger K values will be needed for flexible filament and greater distances.
|
||||||
|
* If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
|
||||||
|
* print acceleration will be reduced during the affected moves to keep within the limit.
|
||||||
|
*
|
||||||
|
* See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
|
||||||
|
* Mention @Sebastianv650 on GitHub to alert the author of any issues.
|
||||||
*/
|
*/
|
||||||
//#define LIN_ADVANCE
|
//#define LIN_ADVANCE
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
#define LIN_ADVANCE_K 75
|
#define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
|
||||||
|
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
||||||
/**
|
|
||||||
* 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 `M900` to override this value.
|
|
||||||
*
|
|
||||||
* Example: `M900 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
|
|
||||||
*
|
|
||||||
* Example: `M900 R0.0458` to set the ratio directly.
|
|
||||||
*
|
|
||||||
* Set to 0 to auto-detect the ratio based on given Gcode G1 print moves.
|
|
||||||
*
|
|
||||||
* Slic3r (including Průša Control) 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
|
#endif
|
||||||
|
|
||||||
// @section leveling
|
// @section leveling
|
||||||
|
@ -711,43 +711,25 @@
|
|||||||
// @section extruder
|
// @section extruder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of linear pressure control
|
* Linear Pressure Control v1.5
|
||||||
*
|
*
|
||||||
* Assumption: advance = k * (delta velocity)
|
* Assumption: advance [steps] = k * (delta velocity [steps/s])
|
||||||
* K=0 means advance disabled.
|
* K=0 means advance disabled.
|
||||||
* See Marlin documentation for calibration instructions.
|
*
|
||||||
|
* NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!
|
||||||
|
*
|
||||||
|
* Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
|
||||||
|
* Larger K values will be needed for flexible filament and greater distances.
|
||||||
|
* If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
|
||||||
|
* print acceleration will be reduced during the affected moves to keep within the limit.
|
||||||
|
*
|
||||||
|
* See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
|
||||||
|
* Mention @Sebastianv650 on GitHub to alert the author of any issues.
|
||||||
*/
|
*/
|
||||||
//#define LIN_ADVANCE
|
//#define LIN_ADVANCE
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
#define LIN_ADVANCE_K 75
|
#define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
|
||||||
|
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
||||||
/**
|
|
||||||
* 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 `M900` to override this value.
|
|
||||||
*
|
|
||||||
* Example: `M900 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
|
|
||||||
*
|
|
||||||
* Example: `M900 R0.0458` to set the ratio directly.
|
|
||||||
*
|
|
||||||
* Set to 0 to auto-detect the ratio based on given Gcode G1 print moves.
|
|
||||||
*
|
|
||||||
* Slic3r (including Průša Control) 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
|
#endif
|
||||||
|
|
||||||
// @section leveling
|
// @section leveling
|
||||||
|
@ -711,43 +711,25 @@
|
|||||||
// @section extruder
|
// @section extruder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of linear pressure control
|
* Linear Pressure Control v1.5
|
||||||
*
|
*
|
||||||
* Assumption: advance = k * (delta velocity)
|
* Assumption: advance [steps] = k * (delta velocity [steps/s])
|
||||||
* K=0 means advance disabled.
|
* K=0 means advance disabled.
|
||||||
* See Marlin documentation for calibration instructions.
|
*
|
||||||
|
* NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!
|
||||||
|
*
|
||||||
|
* Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
|
||||||
|
* Larger K values will be needed for flexible filament and greater distances.
|
||||||
|
* If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
|
||||||
|
* print acceleration will be reduced during the affected moves to keep within the limit.
|
||||||
|
*
|
||||||
|
* See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
|
||||||
|
* Mention @Sebastianv650 on GitHub to alert the author of any issues.
|
||||||
*/
|
*/
|
||||||
//#define LIN_ADVANCE
|
//#define LIN_ADVANCE
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
#define LIN_ADVANCE_K 75
|
#define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
|
||||||
|
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
||||||
/**
|
|
||||||
* 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 `M900` to override this value.
|
|
||||||
*
|
|
||||||
* Example: `M900 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
|
|
||||||
*
|
|
||||||
* Example: `M900 R0.0458` to set the ratio directly.
|
|
||||||
*
|
|
||||||
* Set to 0 to auto-detect the ratio based on given Gcode G1 print moves.
|
|
||||||
*
|
|
||||||
* Slic3r (including Průša Control) 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
|
#endif
|
||||||
|
|
||||||
// @section leveling
|
// @section leveling
|
||||||
|
@ -711,43 +711,25 @@
|
|||||||
// @section extruder
|
// @section extruder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of linear pressure control
|
* Linear Pressure Control v1.5
|
||||||
*
|
*
|
||||||
* Assumption: advance = k * (delta velocity)
|
* Assumption: advance [steps] = k * (delta velocity [steps/s])
|
||||||
* K=0 means advance disabled.
|
* K=0 means advance disabled.
|
||||||
* See Marlin documentation for calibration instructions.
|
*
|
||||||
|
* NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!
|
||||||
|
*
|
||||||
|
* Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
|
||||||
|
* Larger K values will be needed for flexible filament and greater distances.
|
||||||
|
* If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
|
||||||
|
* print acceleration will be reduced during the affected moves to keep within the limit.
|
||||||
|
*
|
||||||
|
* See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
|
||||||
|
* Mention @Sebastianv650 on GitHub to alert the author of any issues.
|
||||||
*/
|
*/
|
||||||
//#define LIN_ADVANCE
|
//#define LIN_ADVANCE
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
#define LIN_ADVANCE_K 75
|
#define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
|
||||||
|
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
||||||
/**
|
|
||||||
* 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 `M900` to override this value.
|
|
||||||
*
|
|
||||||
* Example: `M900 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
|
|
||||||
*
|
|
||||||
* Example: `M900 R0.0458` to set the ratio directly.
|
|
||||||
*
|
|
||||||
* Set to 0 to auto-detect the ratio based on given Gcode G1 print moves.
|
|
||||||
*
|
|
||||||
* Slic3r (including Průša Control) 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
|
#endif
|
||||||
|
|
||||||
// @section leveling
|
// @section leveling
|
||||||
|
@ -711,43 +711,25 @@
|
|||||||
// @section extruder
|
// @section extruder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of linear pressure control
|
* Linear Pressure Control v1.5
|
||||||
*
|
*
|
||||||
* Assumption: advance = k * (delta velocity)
|
* Assumption: advance [steps] = k * (delta velocity [steps/s])
|
||||||
* K=0 means advance disabled.
|
* K=0 means advance disabled.
|
||||||
* See Marlin documentation for calibration instructions.
|
*
|
||||||
|
* NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!
|
||||||
|
*
|
||||||
|
* Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
|
||||||
|
* Larger K values will be needed for flexible filament and greater distances.
|
||||||
|
* If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
|
||||||
|
* print acceleration will be reduced during the affected moves to keep within the limit.
|
||||||
|
*
|
||||||
|
* See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
|
||||||
|
* Mention @Sebastianv650 on GitHub to alert the author of any issues.
|
||||||
*/
|
*/
|
||||||
//#define LIN_ADVANCE
|
//#define LIN_ADVANCE
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
#define LIN_ADVANCE_K 75
|
#define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
|
||||||
|
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
||||||
/**
|
|
||||||
* 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 `M900` to override this value.
|
|
||||||
*
|
|
||||||
* Example: `M900 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
|
|
||||||
*
|
|
||||||
* Example: `M900 R0.0458` to set the ratio directly.
|
|
||||||
*
|
|
||||||
* Set to 0 to auto-detect the ratio based on given Gcode G1 print moves.
|
|
||||||
*
|
|
||||||
* Slic3r (including Průša Control) 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
|
#endif
|
||||||
|
|
||||||
// @section leveling
|
// @section leveling
|
||||||
|
@ -711,43 +711,25 @@
|
|||||||
// @section extruder
|
// @section extruder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of linear pressure control
|
* Linear Pressure Control v1.5
|
||||||
*
|
*
|
||||||
* Assumption: advance = k * (delta velocity)
|
* Assumption: advance [steps] = k * (delta velocity [steps/s])
|
||||||
* K=0 means advance disabled.
|
* K=0 means advance disabled.
|
||||||
* See Marlin documentation for calibration instructions.
|
*
|
||||||
|
* NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!
|
||||||
|
*
|
||||||
|
* Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
|
||||||
|
* Larger K values will be needed for flexible filament and greater distances.
|
||||||
|
* If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
|
||||||
|
* print acceleration will be reduced during the affected moves to keep within the limit.
|
||||||
|
*
|
||||||
|
* See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
|
||||||
|
* Mention @Sebastianv650 on GitHub to alert the author of any issues.
|
||||||
*/
|
*/
|
||||||
//#define LIN_ADVANCE
|
//#define LIN_ADVANCE
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
#define LIN_ADVANCE_K 75
|
#define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
|
||||||
|
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
||||||
/**
|
|
||||||
* 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 `M900` to override this value.
|
|
||||||
*
|
|
||||||
* Example: `M900 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
|
|
||||||
*
|
|
||||||
* Example: `M900 R0.0458` to set the ratio directly.
|
|
||||||
*
|
|
||||||
* Set to 0 to auto-detect the ratio based on given Gcode G1 print moves.
|
|
||||||
*
|
|
||||||
* Slic3r (including Průša Control) 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
|
#endif
|
||||||
|
|
||||||
// @section leveling
|
// @section leveling
|
||||||
|
@ -711,43 +711,25 @@
|
|||||||
// @section extruder
|
// @section extruder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of linear pressure control
|
* Linear Pressure Control v1.5
|
||||||
*
|
*
|
||||||
* Assumption: advance = k * (delta velocity)
|
* Assumption: advance [steps] = k * (delta velocity [steps/s])
|
||||||
* K=0 means advance disabled.
|
* K=0 means advance disabled.
|
||||||
* See Marlin documentation for calibration instructions.
|
*
|
||||||
|
* NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!
|
||||||
|
*
|
||||||
|
* Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
|
||||||
|
* Larger K values will be needed for flexible filament and greater distances.
|
||||||
|
* If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
|
||||||
|
* print acceleration will be reduced during the affected moves to keep within the limit.
|
||||||
|
*
|
||||||
|
* See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
|
||||||
|
* Mention @Sebastianv650 on GitHub to alert the author of any issues.
|
||||||
*/
|
*/
|
||||||
//#define LIN_ADVANCE
|
//#define LIN_ADVANCE
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
#define LIN_ADVANCE_K 75
|
#define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
|
||||||
|
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
||||||
/**
|
|
||||||
* 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 `M900` to override this value.
|
|
||||||
*
|
|
||||||
* Example: `M900 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
|
|
||||||
*
|
|
||||||
* Example: `M900 R0.0458` to set the ratio directly.
|
|
||||||
*
|
|
||||||
* Set to 0 to auto-detect the ratio based on given Gcode G1 print moves.
|
|
||||||
*
|
|
||||||
* Slic3r (including Průša Control) 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
|
#endif
|
||||||
|
|
||||||
// @section leveling
|
// @section leveling
|
||||||
|
@ -711,43 +711,25 @@
|
|||||||
// @section extruder
|
// @section extruder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of linear pressure control
|
* Linear Pressure Control v1.5
|
||||||
*
|
*
|
||||||
* Assumption: advance = k * (delta velocity)
|
* Assumption: advance [steps] = k * (delta velocity [steps/s])
|
||||||
* K=0 means advance disabled.
|
* K=0 means advance disabled.
|
||||||
* See Marlin documentation for calibration instructions.
|
*
|
||||||
|
* NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!
|
||||||
|
*
|
||||||
|
* Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
|
||||||
|
* Larger K values will be needed for flexible filament and greater distances.
|
||||||
|
* If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
|
||||||
|
* print acceleration will be reduced during the affected moves to keep within the limit.
|
||||||
|
*
|
||||||
|
* See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
|
||||||
|
* Mention @Sebastianv650 on GitHub to alert the author of any issues.
|
||||||
*/
|
*/
|
||||||
//#define LIN_ADVANCE
|
//#define LIN_ADVANCE
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
#define LIN_ADVANCE_K 75
|
#define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
|
||||||
|
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
||||||
/**
|
|
||||||
* 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 `M900` to override this value.
|
|
||||||
*
|
|
||||||
* Example: `M900 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
|
|
||||||
*
|
|
||||||
* Example: `M900 R0.0458` to set the ratio directly.
|
|
||||||
*
|
|
||||||
* Set to 0 to auto-detect the ratio based on given Gcode G1 print moves.
|
|
||||||
*
|
|
||||||
* Slic3r (including Průša Control) 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
|
#endif
|
||||||
|
|
||||||
// @section leveling
|
// @section leveling
|
||||||
|
@ -711,43 +711,25 @@
|
|||||||
// @section extruder
|
// @section extruder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of linear pressure control
|
* Linear Pressure Control v1.5
|
||||||
*
|
*
|
||||||
* Assumption: advance = k * (delta velocity)
|
* Assumption: advance [steps] = k * (delta velocity [steps/s])
|
||||||
* K=0 means advance disabled.
|
* K=0 means advance disabled.
|
||||||
* See Marlin documentation for calibration instructions.
|
*
|
||||||
|
* NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!
|
||||||
|
*
|
||||||
|
* Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
|
||||||
|
* Larger K values will be needed for flexible filament and greater distances.
|
||||||
|
* If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
|
||||||
|
* print acceleration will be reduced during the affected moves to keep within the limit.
|
||||||
|
*
|
||||||
|
* See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
|
||||||
|
* Mention @Sebastianv650 on GitHub to alert the author of any issues.
|
||||||
*/
|
*/
|
||||||
//#define LIN_ADVANCE
|
//#define LIN_ADVANCE
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
#define LIN_ADVANCE_K 75
|
#define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
|
||||||
|
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
||||||
/**
|
|
||||||
* 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 `M900` to override this value.
|
|
||||||
*
|
|
||||||
* Example: `M900 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
|
|
||||||
*
|
|
||||||
* Example: `M900 R0.0458` to set the ratio directly.
|
|
||||||
*
|
|
||||||
* Set to 0 to auto-detect the ratio based on given Gcode G1 print moves.
|
|
||||||
*
|
|
||||||
* Slic3r (including Průša Control) 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
|
#endif
|
||||||
|
|
||||||
// @section leveling
|
// @section leveling
|
||||||
|
@ -711,43 +711,25 @@
|
|||||||
// @section extruder
|
// @section extruder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of linear pressure control
|
* Linear Pressure Control v1.5
|
||||||
*
|
*
|
||||||
* Assumption: advance = k * (delta velocity)
|
* Assumption: advance [steps] = k * (delta velocity [steps/s])
|
||||||
* K=0 means advance disabled.
|
* K=0 means advance disabled.
|
||||||
* See Marlin documentation for calibration instructions.
|
*
|
||||||
|
* NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!
|
||||||
|
*
|
||||||
|
* Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
|
||||||
|
* Larger K values will be needed for flexible filament and greater distances.
|
||||||
|
* If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
|
||||||
|
* print acceleration will be reduced during the affected moves to keep within the limit.
|
||||||
|
*
|
||||||
|
* See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
|
||||||
|
* Mention @Sebastianv650 on GitHub to alert the author of any issues.
|
||||||
*/
|
*/
|
||||||
//#define LIN_ADVANCE
|
//#define LIN_ADVANCE
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
#define LIN_ADVANCE_K 75
|
#define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
|
||||||
|
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
||||||
/**
|
|
||||||
* 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 `M900` to override this value.
|
|
||||||
*
|
|
||||||
* Example: `M900 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
|
|
||||||
*
|
|
||||||
* Example: `M900 R0.0458` to set the ratio directly.
|
|
||||||
*
|
|
||||||
* Set to 0 to auto-detect the ratio based on given Gcode G1 print moves.
|
|
||||||
*
|
|
||||||
* Slic3r (including Průša Control) 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
|
#endif
|
||||||
|
|
||||||
// @section leveling
|
// @section leveling
|
||||||
|
@ -719,43 +719,25 @@
|
|||||||
// @section extruder
|
// @section extruder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of linear pressure control
|
* Linear Pressure Control v1.5
|
||||||
*
|
*
|
||||||
* Assumption: advance = k * (delta velocity)
|
* Assumption: advance [steps] = k * (delta velocity [steps/s])
|
||||||
* K=0 means advance disabled.
|
* K=0 means advance disabled.
|
||||||
* See Marlin documentation for calibration instructions.
|
*
|
||||||
|
* NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!
|
||||||
|
*
|
||||||
|
* Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
|
||||||
|
* Larger K values will be needed for flexible filament and greater distances.
|
||||||
|
* If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
|
||||||
|
* print acceleration will be reduced during the affected moves to keep within the limit.
|
||||||
|
*
|
||||||
|
* See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
|
||||||
|
* Mention @Sebastianv650 on GitHub to alert the author of any issues.
|
||||||
*/
|
*/
|
||||||
//#define LIN_ADVANCE
|
//#define LIN_ADVANCE
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
#define LIN_ADVANCE_K 75
|
#define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
|
||||||
|
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
||||||
/**
|
|
||||||
* 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 `M900` to override this value.
|
|
||||||
*
|
|
||||||
* Example: `M900 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
|
|
||||||
*
|
|
||||||
* Example: `M900 R0.0458` to set the ratio directly.
|
|
||||||
*
|
|
||||||
* Set to 0 to auto-detect the ratio based on given Gcode G1 print moves.
|
|
||||||
*
|
|
||||||
* Slic3r (including Průša Control) 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
|
#endif
|
||||||
|
|
||||||
// @section leveling
|
// @section leveling
|
||||||
|
@ -711,43 +711,25 @@
|
|||||||
// @section extruder
|
// @section extruder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of linear pressure control
|
* Linear Pressure Control v1.5
|
||||||
*
|
*
|
||||||
* Assumption: advance = k * (delta velocity)
|
* Assumption: advance [steps] = k * (delta velocity [steps/s])
|
||||||
* K=0 means advance disabled.
|
* K=0 means advance disabled.
|
||||||
* See Marlin documentation for calibration instructions.
|
*
|
||||||
|
* NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!
|
||||||
|
*
|
||||||
|
* Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
|
||||||
|
* Larger K values will be needed for flexible filament and greater distances.
|
||||||
|
* If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
|
||||||
|
* print acceleration will be reduced during the affected moves to keep within the limit.
|
||||||
|
*
|
||||||
|
* See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
|
||||||
|
* Mention @Sebastianv650 on GitHub to alert the author of any issues.
|
||||||
*/
|
*/
|
||||||
//#define LIN_ADVANCE
|
//#define LIN_ADVANCE
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
#define LIN_ADVANCE_K 75
|
#define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
|
||||||
|
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
||||||
/**
|
|
||||||
* 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 `M900` to override this value.
|
|
||||||
*
|
|
||||||
* Example: `M900 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
|
|
||||||
*
|
|
||||||
* Example: `M900 R0.0458` to set the ratio directly.
|
|
||||||
*
|
|
||||||
* Set to 0 to auto-detect the ratio based on given Gcode G1 print moves.
|
|
||||||
*
|
|
||||||
* Slic3r (including Průša Control) 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
|
#endif
|
||||||
|
|
||||||
// @section leveling
|
// @section leveling
|
||||||
|
@ -711,43 +711,25 @@
|
|||||||
// @section extruder
|
// @section extruder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of linear pressure control
|
* Linear Pressure Control v1.5
|
||||||
*
|
*
|
||||||
* Assumption: advance = k * (delta velocity)
|
* Assumption: advance [steps] = k * (delta velocity [steps/s])
|
||||||
* K=0 means advance disabled.
|
* K=0 means advance disabled.
|
||||||
* See Marlin documentation for calibration instructions.
|
*
|
||||||
|
* NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!
|
||||||
|
*
|
||||||
|
* Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
|
||||||
|
* Larger K values will be needed for flexible filament and greater distances.
|
||||||
|
* If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
|
||||||
|
* print acceleration will be reduced during the affected moves to keep within the limit.
|
||||||
|
*
|
||||||
|
* See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
|
||||||
|
* Mention @Sebastianv650 on GitHub to alert the author of any issues.
|
||||||
*/
|
*/
|
||||||
//#define LIN_ADVANCE
|
//#define LIN_ADVANCE
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
#define LIN_ADVANCE_K 75
|
#define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
|
||||||
|
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
||||||
/**
|
|
||||||
* 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 `M900` to override this value.
|
|
||||||
*
|
|
||||||
* Example: `M900 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
|
|
||||||
*
|
|
||||||
* Example: `M900 R0.0458` to set the ratio directly.
|
|
||||||
*
|
|
||||||
* Set to 0 to auto-detect the ratio based on given Gcode G1 print moves.
|
|
||||||
*
|
|
||||||
* Slic3r (including Průša Control) 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
|
#endif
|
||||||
|
|
||||||
// @section leveling
|
// @section leveling
|
||||||
|
@ -711,43 +711,25 @@
|
|||||||
// @section extruder
|
// @section extruder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of linear pressure control
|
* Linear Pressure Control v1.5
|
||||||
*
|
*
|
||||||
* Assumption: advance = k * (delta velocity)
|
* Assumption: advance [steps] = k * (delta velocity [steps/s])
|
||||||
* K=0 means advance disabled.
|
* K=0 means advance disabled.
|
||||||
* See Marlin documentation for calibration instructions.
|
*
|
||||||
|
* NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!
|
||||||
|
*
|
||||||
|
* Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
|
||||||
|
* Larger K values will be needed for flexible filament and greater distances.
|
||||||
|
* If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
|
||||||
|
* print acceleration will be reduced during the affected moves to keep within the limit.
|
||||||
|
*
|
||||||
|
* See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
|
||||||
|
* Mention @Sebastianv650 on GitHub to alert the author of any issues.
|
||||||
*/
|
*/
|
||||||
//#define LIN_ADVANCE
|
//#define LIN_ADVANCE
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
#define LIN_ADVANCE_K 75
|
#define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
|
||||||
|
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
||||||
/**
|
|
||||||
* 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 `M900` to override this value.
|
|
||||||
*
|
|
||||||
* Example: `M900 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
|
|
||||||
*
|
|
||||||
* Example: `M900 R0.0458` to set the ratio directly.
|
|
||||||
*
|
|
||||||
* Set to 0 to auto-detect the ratio based on given Gcode G1 print moves.
|
|
||||||
*
|
|
||||||
* Slic3r (including Průša Control) 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
|
#endif
|
||||||
|
|
||||||
// @section leveling
|
// @section leveling
|
||||||
|
@ -708,43 +708,25 @@
|
|||||||
// @section extruder
|
// @section extruder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of linear pressure control
|
* Linear Pressure Control v1.5
|
||||||
*
|
*
|
||||||
* Assumption: advance = k * (delta velocity)
|
* Assumption: advance [steps] = k * (delta velocity [steps/s])
|
||||||
* K=0 means advance disabled.
|
* K=0 means advance disabled.
|
||||||
* See Marlin documentation for calibration instructions.
|
*
|
||||||
|
* NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!
|
||||||
|
*
|
||||||
|
* Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
|
||||||
|
* Larger K values will be needed for flexible filament and greater distances.
|
||||||
|
* If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
|
||||||
|
* print acceleration will be reduced during the affected moves to keep within the limit.
|
||||||
|
*
|
||||||
|
* See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
|
||||||
|
* Mention @Sebastianv650 on GitHub to alert the author of any issues.
|
||||||
*/
|
*/
|
||||||
//#define LIN_ADVANCE
|
//#define LIN_ADVANCE
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
#define LIN_ADVANCE_K 75
|
#define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
|
||||||
|
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
||||||
/**
|
|
||||||
* 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 `M900` to override this value.
|
|
||||||
*
|
|
||||||
* Example: `M900 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
|
|
||||||
*
|
|
||||||
* Example: `M900 R0.0458` to set the ratio directly.
|
|
||||||
*
|
|
||||||
* Set to 0 to auto-detect the ratio based on given Gcode G1 print moves.
|
|
||||||
*
|
|
||||||
* Slic3r (including Průša Control) 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
|
#endif
|
||||||
|
|
||||||
// @section leveling
|
// @section leveling
|
||||||
|
@ -711,43 +711,25 @@
|
|||||||
// @section extruder
|
// @section extruder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of linear pressure control
|
* Linear Pressure Control v1.5
|
||||||
*
|
*
|
||||||
* Assumption: advance = k * (delta velocity)
|
* Assumption: advance [steps] = k * (delta velocity [steps/s])
|
||||||
* K=0 means advance disabled.
|
* K=0 means advance disabled.
|
||||||
* See Marlin documentation for calibration instructions.
|
*
|
||||||
|
* NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!
|
||||||
|
*
|
||||||
|
* Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
|
||||||
|
* Larger K values will be needed for flexible filament and greater distances.
|
||||||
|
* If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
|
||||||
|
* print acceleration will be reduced during the affected moves to keep within the limit.
|
||||||
|
*
|
||||||
|
* See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
|
||||||
|
* Mention @Sebastianv650 on GitHub to alert the author of any issues.
|
||||||
*/
|
*/
|
||||||
//#define LIN_ADVANCE
|
//#define LIN_ADVANCE
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
#define LIN_ADVANCE_K 75
|
#define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
|
||||||
|
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
||||||
/**
|
|
||||||
* 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 `M900` to override this value.
|
|
||||||
*
|
|
||||||
* Example: `M900 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
|
|
||||||
*
|
|
||||||
* Example: `M900 R0.0458` to set the ratio directly.
|
|
||||||
*
|
|
||||||
* Set to 0 to auto-detect the ratio based on given Gcode G1 print moves.
|
|
||||||
*
|
|
||||||
* Slic3r (including Průša Control) 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
|
#endif
|
||||||
|
|
||||||
// @section leveling
|
// @section leveling
|
||||||
|
@ -711,43 +711,25 @@
|
|||||||
// @section extruder
|
// @section extruder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of linear pressure control
|
* Linear Pressure Control v1.5
|
||||||
*
|
*
|
||||||
* Assumption: advance = k * (delta velocity)
|
* Assumption: advance [steps] = k * (delta velocity [steps/s])
|
||||||
* K=0 means advance disabled.
|
* K=0 means advance disabled.
|
||||||
* See Marlin documentation for calibration instructions.
|
*
|
||||||
|
* NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!
|
||||||
|
*
|
||||||
|
* Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
|
||||||
|
* Larger K values will be needed for flexible filament and greater distances.
|
||||||
|
* If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
|
||||||
|
* print acceleration will be reduced during the affected moves to keep within the limit.
|
||||||
|
*
|
||||||
|
* See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
|
||||||
|
* Mention @Sebastianv650 on GitHub to alert the author of any issues.
|
||||||
*/
|
*/
|
||||||
//#define LIN_ADVANCE
|
//#define LIN_ADVANCE
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
#define LIN_ADVANCE_K 75
|
#define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
|
||||||
|
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
||||||
/**
|
|
||||||
* 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 `M900` to override this value.
|
|
||||||
*
|
|
||||||
* Example: `M900 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
|
|
||||||
*
|
|
||||||
* Example: `M900 R0.0458` to set the ratio directly.
|
|
||||||
*
|
|
||||||
* Set to 0 to auto-detect the ratio based on given Gcode G1 print moves.
|
|
||||||
*
|
|
||||||
* Slic3r (including Průša Control) 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
|
#endif
|
||||||
|
|
||||||
// @section leveling
|
// @section leveling
|
||||||
|
@ -724,43 +724,25 @@
|
|||||||
// @section extruder
|
// @section extruder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of linear pressure control
|
* Linear Pressure Control v1.5
|
||||||
*
|
*
|
||||||
* Assumption: advance = k * (delta velocity)
|
* Assumption: advance [steps] = k * (delta velocity [steps/s])
|
||||||
* K=0 means advance disabled.
|
* K=0 means advance disabled.
|
||||||
* See Marlin documentation for calibration instructions.
|
*
|
||||||
|
* NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!
|
||||||
|
*
|
||||||
|
* Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
|
||||||
|
* Larger K values will be needed for flexible filament and greater distances.
|
||||||
|
* If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
|
||||||
|
* print acceleration will be reduced during the affected moves to keep within the limit.
|
||||||
|
*
|
||||||
|
* See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
|
||||||
|
* Mention @Sebastianv650 on GitHub to alert the author of any issues.
|
||||||
*/
|
*/
|
||||||
//#define LIN_ADVANCE
|
//#define LIN_ADVANCE
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
#define LIN_ADVANCE_K 140 // start value for PLA on K8200
|
#define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
|
||||||
|
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
||||||
/**
|
|
||||||
* 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 `M900` to override this value.
|
|
||||||
*
|
|
||||||
* Example: `M900 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
|
|
||||||
*
|
|
||||||
* Example: `M900 R0.0458` to set the ratio directly.
|
|
||||||
*
|
|
||||||
* Set to 0 to auto-detect the ratio based on given Gcode G1 print moves.
|
|
||||||
*
|
|
||||||
* Slic3r (including Průša Control) 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
|
#endif
|
||||||
|
|
||||||
// @section leveling
|
// @section leveling
|
||||||
|
@ -711,43 +711,25 @@
|
|||||||
// @section extruder
|
// @section extruder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of linear pressure control
|
* Linear Pressure Control v1.5
|
||||||
*
|
*
|
||||||
* Assumption: advance = k * (delta velocity)
|
* Assumption: advance [steps] = k * (delta velocity [steps/s])
|
||||||
* K=0 means advance disabled.
|
* K=0 means advance disabled.
|
||||||
* See Marlin documentation for calibration instructions.
|
*
|
||||||
|
* NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!
|
||||||
|
*
|
||||||
|
* Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
|
||||||
|
* Larger K values will be needed for flexible filament and greater distances.
|
||||||
|
* If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
|
||||||
|
* print acceleration will be reduced during the affected moves to keep within the limit.
|
||||||
|
*
|
||||||
|
* See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
|
||||||
|
* Mention @Sebastianv650 on GitHub to alert the author of any issues.
|
||||||
*/
|
*/
|
||||||
//#define LIN_ADVANCE
|
//#define LIN_ADVANCE
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
#define LIN_ADVANCE_K 75
|
#define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
|
||||||
|
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
||||||
/**
|
|
||||||
* 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 `M900` to override this value.
|
|
||||||
*
|
|
||||||
* Example: `M900 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
|
|
||||||
*
|
|
||||||
* Example: `M900 R0.0458` to set the ratio directly.
|
|
||||||
*
|
|
||||||
* Set to 0 to auto-detect the ratio based on given Gcode G1 print moves.
|
|
||||||
*
|
|
||||||
* Slic3r (including Průša Control) 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
|
#endif
|
||||||
|
|
||||||
// @section leveling
|
// @section leveling
|
||||||
|
@ -713,43 +713,25 @@
|
|||||||
// @section extruder
|
// @section extruder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of linear pressure control
|
* Linear Pressure Control v1.5
|
||||||
*
|
*
|
||||||
* Assumption: advance = k * (delta velocity)
|
* Assumption: advance [steps] = k * (delta velocity [steps/s])
|
||||||
* K=0 means advance disabled.
|
* K=0 means advance disabled.
|
||||||
* See Marlin documentation for calibration instructions.
|
*
|
||||||
|
* NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!
|
||||||
|
*
|
||||||
|
* Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
|
||||||
|
* Larger K values will be needed for flexible filament and greater distances.
|
||||||
|
* If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
|
||||||
|
* print acceleration will be reduced during the affected moves to keep within the limit.
|
||||||
|
*
|
||||||
|
* See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
|
||||||
|
* Mention @Sebastianv650 on GitHub to alert the author of any issues.
|
||||||
*/
|
*/
|
||||||
#define LIN_ADVANCE
|
#define LIN_ADVANCE
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
#define LIN_ADVANCE_K 0
|
#define LIN_ADVANCE_K 0 // Unit: mm compression per 1mm/s extruder speed
|
||||||
|
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
||||||
/**
|
|
||||||
* 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 `M900` to override this value.
|
|
||||||
*
|
|
||||||
* Example: `M900 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
|
|
||||||
*
|
|
||||||
* Example: `M900 R0.0458` to set the ratio directly.
|
|
||||||
*
|
|
||||||
* Set to 0 to auto-detect the ratio based on given Gcode G1 print moves.
|
|
||||||
*
|
|
||||||
* Slic3r (including Průša Control) 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
|
#endif
|
||||||
|
|
||||||
// @section leveling
|
// @section leveling
|
||||||
|
@ -713,43 +713,25 @@
|
|||||||
// @section extruder
|
// @section extruder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of linear pressure control
|
* Linear Pressure Control v1.5
|
||||||
*
|
*
|
||||||
* Assumption: advance = k * (delta velocity)
|
* Assumption: advance [steps] = k * (delta velocity [steps/s])
|
||||||
* K=0 means advance disabled.
|
* K=0 means advance disabled.
|
||||||
* See Marlin documentation for calibration instructions.
|
*
|
||||||
|
* NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!
|
||||||
|
*
|
||||||
|
* Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
|
||||||
|
* Larger K values will be needed for flexible filament and greater distances.
|
||||||
|
* If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
|
||||||
|
* print acceleration will be reduced during the affected moves to keep within the limit.
|
||||||
|
*
|
||||||
|
* See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
|
||||||
|
* Mention @Sebastianv650 on GitHub to alert the author of any issues.
|
||||||
*/
|
*/
|
||||||
//#define LIN_ADVANCE
|
//#define LIN_ADVANCE
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
#define LIN_ADVANCE_K 75
|
#define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
|
||||||
|
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
||||||
/**
|
|
||||||
* 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 `M900` to override this value.
|
|
||||||
*
|
|
||||||
* Example: `M900 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
|
|
||||||
*
|
|
||||||
* Example: `M900 R0.0458` to set the ratio directly.
|
|
||||||
*
|
|
||||||
* Set to 0 to auto-detect the ratio based on given Gcode G1 print moves.
|
|
||||||
*
|
|
||||||
* Slic3r (including Průša Control) 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
|
#endif
|
||||||
|
|
||||||
// @section leveling
|
// @section leveling
|
||||||
|
@ -713,43 +713,25 @@
|
|||||||
// @section extruder
|
// @section extruder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of linear pressure control
|
* Linear Pressure Control v1.5
|
||||||
*
|
*
|
||||||
* Assumption: advance = k * (delta velocity)
|
* Assumption: advance [steps] = k * (delta velocity [steps/s])
|
||||||
* K=0 means advance disabled.
|
* K=0 means advance disabled.
|
||||||
* See Marlin documentation for calibration instructions.
|
*
|
||||||
|
* NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!
|
||||||
|
*
|
||||||
|
* Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
|
||||||
|
* Larger K values will be needed for flexible filament and greater distances.
|
||||||
|
* If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
|
||||||
|
* print acceleration will be reduced during the affected moves to keep within the limit.
|
||||||
|
*
|
||||||
|
* See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
|
||||||
|
* Mention @Sebastianv650 on GitHub to alert the author of any issues.
|
||||||
*/
|
*/
|
||||||
//#define LIN_ADVANCE
|
//#define LIN_ADVANCE
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
#define LIN_ADVANCE_K 75
|
#define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
|
||||||
|
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
||||||
/**
|
|
||||||
* 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 `M900` to override this value.
|
|
||||||
*
|
|
||||||
* Example: `M900 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
|
|
||||||
*
|
|
||||||
* Example: `M900 R0.0458` to set the ratio directly.
|
|
||||||
*
|
|
||||||
* Set to 0 to auto-detect the ratio based on given Gcode G1 print moves.
|
|
||||||
*
|
|
||||||
* Slic3r (including Průša Control) 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
|
#endif
|
||||||
|
|
||||||
// @section leveling
|
// @section leveling
|
||||||
|
@ -713,43 +713,25 @@
|
|||||||
// @section extruder
|
// @section extruder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of linear pressure control
|
* Linear Pressure Control v1.5
|
||||||
*
|
*
|
||||||
* Assumption: advance = k * (delta velocity)
|
* Assumption: advance [steps] = k * (delta velocity [steps/s])
|
||||||
* K=0 means advance disabled.
|
* K=0 means advance disabled.
|
||||||
* See Marlin documentation for calibration instructions.
|
*
|
||||||
|
* NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!
|
||||||
|
*
|
||||||
|
* Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
|
||||||
|
* Larger K values will be needed for flexible filament and greater distances.
|
||||||
|
* If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
|
||||||
|
* print acceleration will be reduced during the affected moves to keep within the limit.
|
||||||
|
*
|
||||||
|
* See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
|
||||||
|
* Mention @Sebastianv650 on GitHub to alert the author of any issues.
|
||||||
*/
|
*/
|
||||||
//#define LIN_ADVANCE
|
//#define LIN_ADVANCE
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
#define LIN_ADVANCE_K 75
|
#define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
|
||||||
|
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
||||||
/**
|
|
||||||
* 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 `M900` to override this value.
|
|
||||||
*
|
|
||||||
* Example: `M900 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
|
|
||||||
*
|
|
||||||
* Example: `M900 R0.0458` to set the ratio directly.
|
|
||||||
*
|
|
||||||
* Set to 0 to auto-detect the ratio based on given Gcode G1 print moves.
|
|
||||||
*
|
|
||||||
* Slic3r (including Průša Control) 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
|
#endif
|
||||||
|
|
||||||
// @section leveling
|
// @section leveling
|
||||||
|
@ -713,43 +713,25 @@
|
|||||||
// @section extruder
|
// @section extruder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of linear pressure control
|
* Linear Pressure Control v1.5
|
||||||
*
|
*
|
||||||
* Assumption: advance = k * (delta velocity)
|
* Assumption: advance [steps] = k * (delta velocity [steps/s])
|
||||||
* K=0 means advance disabled.
|
* K=0 means advance disabled.
|
||||||
* See Marlin documentation for calibration instructions.
|
*
|
||||||
|
* NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!
|
||||||
|
*
|
||||||
|
* Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
|
||||||
|
* Larger K values will be needed for flexible filament and greater distances.
|
||||||
|
* If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
|
||||||
|
* print acceleration will be reduced during the affected moves to keep within the limit.
|
||||||
|
*
|
||||||
|
* See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
|
||||||
|
* Mention @Sebastianv650 on GitHub to alert the author of any issues.
|
||||||
*/
|
*/
|
||||||
//#define LIN_ADVANCE
|
//#define LIN_ADVANCE
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
#define LIN_ADVANCE_K 75
|
#define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
|
||||||
|
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
||||||
/**
|
|
||||||
* 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 `M900` to override this value.
|
|
||||||
*
|
|
||||||
* Example: `M900 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
|
|
||||||
*
|
|
||||||
* Example: `M900 R0.0458` to set the ratio directly.
|
|
||||||
*
|
|
||||||
* Set to 0 to auto-detect the ratio based on given Gcode G1 print moves.
|
|
||||||
*
|
|
||||||
* Slic3r (including Průša Control) 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
|
#endif
|
||||||
|
|
||||||
// @section leveling
|
// @section leveling
|
||||||
|
@ -713,43 +713,25 @@
|
|||||||
// @section extruder
|
// @section extruder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of linear pressure control
|
* Linear Pressure Control v1.5
|
||||||
*
|
*
|
||||||
* Assumption: advance = k * (delta velocity)
|
* Assumption: advance [steps] = k * (delta velocity [steps/s])
|
||||||
* K=0 means advance disabled.
|
* K=0 means advance disabled.
|
||||||
* See Marlin documentation for calibration instructions.
|
*
|
||||||
|
* NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!
|
||||||
|
*
|
||||||
|
* Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
|
||||||
|
* Larger K values will be needed for flexible filament and greater distances.
|
||||||
|
* If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
|
||||||
|
* print acceleration will be reduced during the affected moves to keep within the limit.
|
||||||
|
*
|
||||||
|
* See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
|
||||||
|
* Mention @Sebastianv650 on GitHub to alert the author of any issues.
|
||||||
*/
|
*/
|
||||||
//#define LIN_ADVANCE
|
//#define LIN_ADVANCE
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
#define LIN_ADVANCE_K 75
|
#define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
|
||||||
|
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
||||||
/**
|
|
||||||
* 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 `M900` to override this value.
|
|
||||||
*
|
|
||||||
* Example: `M900 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
|
|
||||||
*
|
|
||||||
* Example: `M900 R0.0458` to set the ratio directly.
|
|
||||||
*
|
|
||||||
* Set to 0 to auto-detect the ratio based on given Gcode G1 print moves.
|
|
||||||
*
|
|
||||||
* Slic3r (including Průša Control) 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
|
#endif
|
||||||
|
|
||||||
// @section leveling
|
// @section leveling
|
||||||
|
@ -718,43 +718,25 @@
|
|||||||
// @section extruder
|
// @section extruder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of linear pressure control
|
* Linear Pressure Control v1.5
|
||||||
*
|
*
|
||||||
* Assumption: advance = k * (delta velocity)
|
* Assumption: advance [steps] = k * (delta velocity [steps/s])
|
||||||
* K=0 means advance disabled.
|
* K=0 means advance disabled.
|
||||||
* See Marlin documentation for calibration instructions.
|
*
|
||||||
|
* NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!
|
||||||
|
*
|
||||||
|
* Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
|
||||||
|
* Larger K values will be needed for flexible filament and greater distances.
|
||||||
|
* If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
|
||||||
|
* print acceleration will be reduced during the affected moves to keep within the limit.
|
||||||
|
*
|
||||||
|
* See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
|
||||||
|
* Mention @Sebastianv650 on GitHub to alert the author of any issues.
|
||||||
*/
|
*/
|
||||||
//#define LIN_ADVANCE
|
//#define LIN_ADVANCE
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
#define LIN_ADVANCE_K 75
|
#define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
|
||||||
|
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
||||||
/**
|
|
||||||
* 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 `M900` to override this value.
|
|
||||||
*
|
|
||||||
* Example: `M900 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
|
|
||||||
*
|
|
||||||
* Example: `M900 R0.0458` to set the ratio directly.
|
|
||||||
*
|
|
||||||
* Set to 0 to auto-detect the ratio based on given Gcode G1 print moves.
|
|
||||||
*
|
|
||||||
* Slic3r (including Průša Control) 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
|
#endif
|
||||||
|
|
||||||
// @section leveling
|
// @section leveling
|
||||||
|
@ -713,43 +713,25 @@
|
|||||||
// @section extruder
|
// @section extruder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of linear pressure control
|
* Linear Pressure Control v1.5
|
||||||
*
|
*
|
||||||
* Assumption: advance = k * (delta velocity)
|
* Assumption: advance [steps] = k * (delta velocity [steps/s])
|
||||||
* K=0 means advance disabled.
|
* K=0 means advance disabled.
|
||||||
* See Marlin documentation for calibration instructions.
|
*
|
||||||
|
* NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!
|
||||||
|
*
|
||||||
|
* Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
|
||||||
|
* Larger K values will be needed for flexible filament and greater distances.
|
||||||
|
* If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
|
||||||
|
* print acceleration will be reduced during the affected moves to keep within the limit.
|
||||||
|
*
|
||||||
|
* See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
|
||||||
|
* Mention @Sebastianv650 on GitHub to alert the author of any issues.
|
||||||
*/
|
*/
|
||||||
//#define LIN_ADVANCE
|
//#define LIN_ADVANCE
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
#define LIN_ADVANCE_K 75
|
#define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
|
||||||
|
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
||||||
/**
|
|
||||||
* 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 `M900` to override this value.
|
|
||||||
*
|
|
||||||
* Example: `M900 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
|
|
||||||
*
|
|
||||||
* Example: `M900 R0.0458` to set the ratio directly.
|
|
||||||
*
|
|
||||||
* Set to 0 to auto-detect the ratio based on given Gcode G1 print moves.
|
|
||||||
*
|
|
||||||
* Slic3r (including Průša Control) 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
|
#endif
|
||||||
|
|
||||||
// @section leveling
|
// @section leveling
|
||||||
|
@ -711,43 +711,25 @@
|
|||||||
// @section extruder
|
// @section extruder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of linear pressure control
|
* Linear Pressure Control v1.5
|
||||||
*
|
*
|
||||||
* Assumption: advance = k * (delta velocity)
|
* Assumption: advance [steps] = k * (delta velocity [steps/s])
|
||||||
* K=0 means advance disabled.
|
* K=0 means advance disabled.
|
||||||
* See Marlin documentation for calibration instructions.
|
*
|
||||||
|
* NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!
|
||||||
|
*
|
||||||
|
* Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
|
||||||
|
* Larger K values will be needed for flexible filament and greater distances.
|
||||||
|
* If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
|
||||||
|
* print acceleration will be reduced during the affected moves to keep within the limit.
|
||||||
|
*
|
||||||
|
* See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
|
||||||
|
* Mention @Sebastianv650 on GitHub to alert the author of any issues.
|
||||||
*/
|
*/
|
||||||
//#define LIN_ADVANCE
|
//#define LIN_ADVANCE
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
#define LIN_ADVANCE_K 75
|
#define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
|
||||||
|
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
||||||
/**
|
|
||||||
* 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 `M900` to override this value.
|
|
||||||
*
|
|
||||||
* Example: `M900 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
|
|
||||||
*
|
|
||||||
* Example: `M900 R0.0458` to set the ratio directly.
|
|
||||||
*
|
|
||||||
* Set to 0 to auto-detect the ratio based on given Gcode G1 print moves.
|
|
||||||
*
|
|
||||||
* Slic3r (including Průša Control) 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
|
#endif
|
||||||
|
|
||||||
// @section leveling
|
// @section leveling
|
||||||
|
@ -711,43 +711,25 @@
|
|||||||
// @section extruder
|
// @section extruder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of linear pressure control
|
* Linear Pressure Control v1.5
|
||||||
*
|
*
|
||||||
* Assumption: advance = k * (delta velocity)
|
* Assumption: advance [steps] = k * (delta velocity [steps/s])
|
||||||
* K=0 means advance disabled.
|
* K=0 means advance disabled.
|
||||||
* See Marlin documentation for calibration instructions.
|
*
|
||||||
|
* NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!
|
||||||
|
*
|
||||||
|
* Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
|
||||||
|
* Larger K values will be needed for flexible filament and greater distances.
|
||||||
|
* If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
|
||||||
|
* print acceleration will be reduced during the affected moves to keep within the limit.
|
||||||
|
*
|
||||||
|
* See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
|
||||||
|
* Mention @Sebastianv650 on GitHub to alert the author of any issues.
|
||||||
*/
|
*/
|
||||||
//#define LIN_ADVANCE
|
//#define LIN_ADVANCE
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
#define LIN_ADVANCE_K 75
|
#define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
|
||||||
|
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
||||||
/**
|
|
||||||
* 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 `M900` to override this value.
|
|
||||||
*
|
|
||||||
* Example: `M900 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
|
|
||||||
*
|
|
||||||
* Example: `M900 R0.0458` to set the ratio directly.
|
|
||||||
*
|
|
||||||
* Set to 0 to auto-detect the ratio based on given Gcode G1 print moves.
|
|
||||||
*
|
|
||||||
* Slic3r (including Průša Control) 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
|
#endif
|
||||||
|
|
||||||
// @section leveling
|
// @section leveling
|
||||||
|
@ -711,43 +711,25 @@
|
|||||||
// @section extruder
|
// @section extruder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of linear pressure control
|
* Linear Pressure Control v1.5
|
||||||
*
|
*
|
||||||
* Assumption: advance = k * (delta velocity)
|
* Assumption: advance [steps] = k * (delta velocity [steps/s])
|
||||||
* K=0 means advance disabled.
|
* K=0 means advance disabled.
|
||||||
* See Marlin documentation for calibration instructions.
|
*
|
||||||
|
* NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!
|
||||||
|
*
|
||||||
|
* Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
|
||||||
|
* Larger K values will be needed for flexible filament and greater distances.
|
||||||
|
* If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
|
||||||
|
* print acceleration will be reduced during the affected moves to keep within the limit.
|
||||||
|
*
|
||||||
|
* See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
|
||||||
|
* Mention @Sebastianv650 on GitHub to alert the author of any issues.
|
||||||
*/
|
*/
|
||||||
//#define LIN_ADVANCE
|
//#define LIN_ADVANCE
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
#define LIN_ADVANCE_K 75
|
#define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
|
||||||
|
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
||||||
/**
|
|
||||||
* 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 `M900` to override this value.
|
|
||||||
*
|
|
||||||
* Example: `M900 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
|
|
||||||
*
|
|
||||||
* Example: `M900 R0.0458` to set the ratio directly.
|
|
||||||
*
|
|
||||||
* Set to 0 to auto-detect the ratio based on given Gcode G1 print moves.
|
|
||||||
*
|
|
||||||
* Slic3r (including Průša Control) 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
|
#endif
|
||||||
|
|
||||||
// @section leveling
|
// @section leveling
|
||||||
|
@ -712,43 +712,25 @@
|
|||||||
// @section extruder
|
// @section extruder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of linear pressure control
|
* Linear Pressure Control v1.5
|
||||||
*
|
*
|
||||||
* Assumption: advance = k * (delta velocity)
|
* Assumption: advance [steps] = k * (delta velocity [steps/s])
|
||||||
* K=0 means advance disabled.
|
* K=0 means advance disabled.
|
||||||
* See Marlin documentation for calibration instructions.
|
*
|
||||||
|
* NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions!
|
||||||
|
*
|
||||||
|
* Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
|
||||||
|
* Larger K values will be needed for flexible filament and greater distances.
|
||||||
|
* If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
|
||||||
|
* print acceleration will be reduced during the affected moves to keep within the limit.
|
||||||
|
*
|
||||||
|
* See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
|
||||||
|
* Mention @Sebastianv650 on GitHub to alert the author of any issues.
|
||||||
*/
|
*/
|
||||||
//#define LIN_ADVANCE
|
//#define LIN_ADVANCE
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
#define LIN_ADVANCE_K 75
|
#define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed
|
||||||
|
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
||||||
/**
|
|
||||||
* 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 `M900` to override this value.
|
|
||||||
*
|
|
||||||
* Example: `M900 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
|
|
||||||
*
|
|
||||||
* Example: `M900 R0.0458` to set the ratio directly.
|
|
||||||
*
|
|
||||||
* Set to 0 to auto-detect the ratio based on given Gcode G1 print moves.
|
|
||||||
*
|
|
||||||
* Slic3r (including Průša Control) 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
|
#endif
|
||||||
|
|
||||||
// @section leveling
|
// @section leveling
|
||||||
|
@ -29,34 +29,19 @@
|
|||||||
#include "../../../module/stepper.h"
|
#include "../../../module/stepper.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* M900: Set and/or Get advance K factor and WH/D ratio
|
* M900: Set and/or Get advance K factor
|
||||||
*
|
*
|
||||||
* K<factor> Set advance K factor
|
* K<factor> Set advance K factor
|
||||||
* R<ratio> Set ratio directly (overrides WH/D)
|
|
||||||
* W<width> H<height> D<diam> Set ratio from WH/D
|
|
||||||
*/
|
*/
|
||||||
void GcodeSuite::M900() {
|
void GcodeSuite::M900() {
|
||||||
stepper.synchronize();
|
stepper.synchronize();
|
||||||
|
|
||||||
const float newK = parser.floatval('K', -1);
|
const float newK = parser.floatval('K', -1);
|
||||||
if (newK >= 0) planner.extruder_advance_k = newK;
|
if (newK >= 0) planner.extruder_advance_K = newK;
|
||||||
|
|
||||||
float newR = parser.floatval('R', -1);
|
SERIAL_ECHO_START();
|
||||||
if (newR < 0) {
|
SERIAL_ECHOPAIR("Advance K=", planner.extruder_advance_K);
|
||||||
const float newD = parser.floatval('D', -1),
|
SERIAL_EOL();
|
||||||
newW = parser.floatval('W', -1),
|
|
||||||
newH = parser.floatval('H', -1);
|
|
||||||
if (newD >= 0 && newW >= 0 && newH >= 0)
|
|
||||||
newR = newD ? (newW * newH) / CIRCLE_AREA(newD * 0.5) : 0;
|
|
||||||
}
|
|
||||||
if (newR >= 0) planner.advance_ed_ratio = newR;
|
|
||||||
|
|
||||||
SERIAL_ECHO_START();
|
|
||||||
SERIAL_ECHOPAIR("Advance K=", planner.extruder_advance_k);
|
|
||||||
SERIAL_ECHOPGM(" E/D=");
|
|
||||||
const float ratio = planner.advance_ed_ratio;
|
|
||||||
if (ratio) SERIAL_ECHO(ratio); else SERIAL_ECHOPGM("Auto");
|
|
||||||
SERIAL_EOL();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // LIN_ADVANCE
|
#endif // LIN_ADVANCE
|
||||||
|
@ -399,7 +399,6 @@
|
|||||||
* HOTENDS - Number of hotends, whether connected or separate
|
* HOTENDS - Number of hotends, whether connected or separate
|
||||||
* E_STEPPERS - Number of actual E stepper motors
|
* E_STEPPERS - Number of actual E stepper motors
|
||||||
* E_MANUAL - Number of E steppers for LCD move options
|
* E_MANUAL - Number of E steppers for LCD move options
|
||||||
* TOOL_E_INDEX - Index to use when getting/setting the tool state
|
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#if ENABLED(SINGLENOZZLE) || ENABLED(MIXING_EXTRUDER) // One hotend, one thermistor, no XY offset
|
#if ENABLED(SINGLENOZZLE) || ENABLED(MIXING_EXTRUDER) // One hotend, one thermistor, no XY offset
|
||||||
@ -426,24 +425,19 @@
|
|||||||
#if EXTRUDERS > 4
|
#if EXTRUDERS > 4
|
||||||
#define E_STEPPERS 3
|
#define E_STEPPERS 3
|
||||||
#define E_MANUAL 3
|
#define E_MANUAL 3
|
||||||
#define TOOL_E_INDEX current_block->active_extruder
|
|
||||||
#elif EXTRUDERS > 2
|
#elif EXTRUDERS > 2
|
||||||
#define E_STEPPERS 2
|
#define E_STEPPERS 2
|
||||||
#define E_MANUAL 2
|
#define E_MANUAL 2
|
||||||
#define TOOL_E_INDEX current_block->active_extruder
|
|
||||||
#else
|
#else
|
||||||
#define E_STEPPERS 1
|
#define E_STEPPERS 1
|
||||||
#define TOOL_E_INDEX 0
|
|
||||||
#endif
|
#endif
|
||||||
#define E_MANUAL E_STEPPERS
|
#define E_MANUAL E_STEPPERS
|
||||||
#elif ENABLED(MIXING_EXTRUDER)
|
#elif ENABLED(MIXING_EXTRUDER)
|
||||||
#define E_STEPPERS MIXING_STEPPERS
|
#define E_STEPPERS MIXING_STEPPERS
|
||||||
#define E_MANUAL 1
|
#define E_MANUAL 1
|
||||||
#define TOOL_E_INDEX 0
|
|
||||||
#else
|
#else
|
||||||
#define E_STEPPERS EXTRUDERS
|
#define E_STEPPERS EXTRUDERS
|
||||||
#define E_MANUAL EXTRUDERS
|
#define E_MANUAL EXTRUDERS
|
||||||
#define TOOL_E_INDEX current_block->active_extruder
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -223,6 +223,8 @@
|
|||||||
#error "MIN_RETRACT is now MIN_AUTORETRACT and MAX_AUTORETRACT. Please update your Configuration_adv.h."
|
#error "MIN_RETRACT is now MIN_AUTORETRACT and MAX_AUTORETRACT. Please update your Configuration_adv.h."
|
||||||
#elif defined(ADVANCE)
|
#elif defined(ADVANCE)
|
||||||
#error "ADVANCE was removed in Marlin 1.1.6. Please use LIN_ADVANCE."
|
#error "ADVANCE was removed in Marlin 1.1.6. Please use LIN_ADVANCE."
|
||||||
|
#elif defined(LIN_ADVANCE_E_D_RATIO)
|
||||||
|
#error "LIN_ADVANCE (1.5) no longer uses LIN_ADVANCE_E_D_RATIO. Check your configuration."
|
||||||
#elif defined(NEOPIXEL_RGBW_LED)
|
#elif defined(NEOPIXEL_RGBW_LED)
|
||||||
#error "NEOPIXEL_RGBW_LED is now NEOPIXEL_LED. Please update your configuration."
|
#error "NEOPIXEL_RGBW_LED is now NEOPIXEL_LED. Please update your configuration."
|
||||||
#elif defined(UBL_MESH_INSET)
|
#elif defined(UBL_MESH_INSET)
|
||||||
@ -552,10 +554,6 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE && Y_MAX_LENGTH >= Y_BED_SIZE,
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE) && !IS_CARTESIAN
|
|
||||||
#error "Sorry! LIN_ADVANCE is only compatible with Cartesian."
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parking Extruder requirements
|
* Parking Extruder requirements
|
||||||
*/
|
*/
|
||||||
|
@ -3228,7 +3228,7 @@ void kill_screen(const char* lcd_msg) {
|
|||||||
#if DISABLED(NO_VOLUMETRICS) || ENABLED(ADVANCED_PAUSE_FEATURE)
|
#if DISABLED(NO_VOLUMETRICS) || ENABLED(ADVANCED_PAUSE_FEATURE)
|
||||||
MENU_ITEM(submenu, MSG_FILAMENT, lcd_control_filament_menu);
|
MENU_ITEM(submenu, MSG_FILAMENT, lcd_control_filament_menu);
|
||||||
#elif ENABLED(LIN_ADVANCE)
|
#elif ENABLED(LIN_ADVANCE)
|
||||||
MENU_ITEM_EDIT(float3, MSG_ADVANCE_K, &planner.extruder_advance_k, 0, 999);
|
MENU_ITEM_EDIT(float32, MSG_ADVANCE_K, &planner.extruder_advance_K, 0, 999);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if HAS_LCD_CONTRAST
|
#if HAS_LCD_CONTRAST
|
||||||
@ -3742,7 +3742,7 @@ void kill_screen(const char* lcd_msg) {
|
|||||||
MENU_BACK(MSG_CONTROL);
|
MENU_BACK(MSG_CONTROL);
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
MENU_ITEM_EDIT(float3, MSG_ADVANCE_K, &planner.extruder_advance_k, 0, 999);
|
MENU_ITEM_EDIT(float32, MSG_ADVANCE_K, &planner.extruder_advance_K, 0, 999);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if DISABLED(NO_VOLUMETRICS)
|
#if DISABLED(NO_VOLUMETRICS)
|
||||||
|
@ -37,7 +37,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
// Change EEPROM version if the structure changes
|
// Change EEPROM version if the structure changes
|
||||||
#define EEPROM_VERSION "V51"
|
#define EEPROM_VERSION "V52"
|
||||||
#define EEPROM_OFFSET 100
|
#define EEPROM_OFFSET 100
|
||||||
|
|
||||||
// Check the integrity of data offsets.
|
// Check the integrity of data offsets.
|
||||||
@ -225,8 +225,7 @@ typedef struct SettingsDataStruct {
|
|||||||
//
|
//
|
||||||
// LIN_ADVANCE
|
// LIN_ADVANCE
|
||||||
//
|
//
|
||||||
float planner_extruder_advance_k, // M900 K planner.extruder_advance_k
|
float planner_extruder_advance_K; // M900 K planner.extruder_advance_K
|
||||||
planner_advance_ed_ratio; // M900 WHD planner.advance_ed_ratio
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// HAS_MOTOR_CURRENT_PWM
|
// HAS_MOTOR_CURRENT_PWM
|
||||||
@ -751,15 +750,13 @@ void MarlinSettings::postprocess() {
|
|||||||
// Linear Advance
|
// Linear Advance
|
||||||
//
|
//
|
||||||
|
|
||||||
_FIELD_TEST(planner_extruder_advance_k);
|
_FIELD_TEST(planner_extruder_advance_K);
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
EEPROM_WRITE(planner.extruder_advance_k);
|
EEPROM_WRITE(planner.extruder_advance_K);
|
||||||
EEPROM_WRITE(planner.advance_ed_ratio);
|
|
||||||
#else
|
#else
|
||||||
dummy = 0.0f;
|
dummy = 0.0f;
|
||||||
EEPROM_WRITE(dummy);
|
EEPROM_WRITE(dummy);
|
||||||
EEPROM_WRITE(dummy);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
_FIELD_TEST(motor_current_setting);
|
_FIELD_TEST(motor_current_setting);
|
||||||
@ -1301,14 +1298,12 @@ void MarlinSettings::postprocess() {
|
|||||||
// Linear Advance
|
// Linear Advance
|
||||||
//
|
//
|
||||||
|
|
||||||
_FIELD_TEST(planner_extruder_advance_k);
|
_FIELD_TEST(planner_extruder_advance_K);
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
EEPROM_READ(planner.extruder_advance_k);
|
EEPROM_READ(planner.extruder_advance_K);
|
||||||
EEPROM_READ(planner.advance_ed_ratio);
|
|
||||||
#else
|
#else
|
||||||
EEPROM_READ(dummy);
|
EEPROM_READ(dummy);
|
||||||
EEPROM_READ(dummy);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -1832,8 +1827,7 @@ void MarlinSettings::reset(
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
planner.extruder_advance_k = LIN_ADVANCE_K;
|
planner.extruder_advance_K = LIN_ADVANCE_K;
|
||||||
planner.advance_ed_ratio = LIN_ADVANCE_E_D_RATIO;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if HAS_MOTOR_CURRENT_PWM
|
#if HAS_MOTOR_CURRENT_PWM
|
||||||
@ -2409,8 +2403,7 @@ void MarlinSettings::reset(
|
|||||||
SERIAL_ECHOLNPGM_P(port, "Linear Advance:");
|
SERIAL_ECHOLNPGM_P(port, "Linear Advance:");
|
||||||
}
|
}
|
||||||
CONFIG_ECHO_START;
|
CONFIG_ECHO_START;
|
||||||
SERIAL_ECHOPAIR_P(port, " M900 K", planner.extruder_advance_k);
|
SERIAL_ECHOLNPAIR_P(port, " M900 K", planner.extruder_advance_K);
|
||||||
SERIAL_ECHOLNPAIR_P(port, " R", planner.advance_ed_ratio);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if HAS_MOTOR_CURRENT_PWM
|
#if HAS_MOTOR_CURRENT_PWM
|
||||||
|
@ -185,11 +185,8 @@ float Planner::previous_speed[NUM_AXIS],
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
float Planner::extruder_advance_k, // Initialized by settings.load()
|
float Planner::extruder_advance_K, // Initialized by settings.load()
|
||||||
Planner::advance_ed_ratio, // Initialized by settings.load()
|
Planner::position_float[XYZE]; // Needed for accurate maths. Steps cannot be used!
|
||||||
Planner::position_float[XYZE], // Needed for accurate maths. Steps cannot be used!
|
|
||||||
Planner::lin_dist_xy,
|
|
||||||
Planner::lin_dist_e;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ENABLED(ULTRA_LCD)
|
#if ENABLED(ULTRA_LCD)
|
||||||
@ -364,6 +361,13 @@ void Planner::recalculate_trapezoids() {
|
|||||||
// NOTE: Entry and exit factors always > 0 by all previous logic operations.
|
// NOTE: Entry and exit factors always > 0 by all previous logic operations.
|
||||||
const float nomr = 1.0 / current->nominal_speed;
|
const float nomr = 1.0 / current->nominal_speed;
|
||||||
calculate_trapezoid_for_block(current, current->entry_speed * nomr, next->entry_speed * nomr);
|
calculate_trapezoid_for_block(current, current->entry_speed * nomr, next->entry_speed * nomr);
|
||||||
|
#if ENABLED(LIN_ADVANCE)
|
||||||
|
if (current->use_advance_lead) {
|
||||||
|
const float comp = current->e_D_ratio * extruder_advance_K * axis_steps_per_mm[E_AXIS];
|
||||||
|
current->max_adv_steps = current->nominal_speed * comp;
|
||||||
|
current->final_adv_steps = next->entry_speed * comp;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
CBI(current->flag, BLOCK_BIT_RECALCULATE); // Reset current only to ensure next trapezoid is computed
|
CBI(current->flag, BLOCK_BIT_RECALCULATE); // Reset current only to ensure next trapezoid is computed
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -373,6 +377,13 @@ void Planner::recalculate_trapezoids() {
|
|||||||
if (next) {
|
if (next) {
|
||||||
const float nomr = 1.0 / next->nominal_speed;
|
const float nomr = 1.0 / next->nominal_speed;
|
||||||
calculate_trapezoid_for_block(next, next->entry_speed * nomr, (MINIMUM_PLANNER_SPEED) * nomr);
|
calculate_trapezoid_for_block(next, next->entry_speed * nomr, (MINIMUM_PLANNER_SPEED) * nomr);
|
||||||
|
#if ENABLED(LIN_ADVANCE)
|
||||||
|
if (next->use_advance_lead) {
|
||||||
|
const float comp = next->e_D_ratio * extruder_advance_K * axis_steps_per_mm[E_AXIS];
|
||||||
|
next->max_adv_steps = next->nominal_speed * comp;
|
||||||
|
next->final_adv_steps = (MINIMUM_PLANNER_SPEED) * comp;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
CBI(next->flag, BLOCK_BIT_RECALCULATE);
|
CBI(next->flag, BLOCK_BIT_RECALCULATE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -730,7 +741,12 @@ void Planner::check_axes_activity() {
|
|||||||
* fr_mm_s - (target) speed of the move
|
* fr_mm_s - (target) speed of the move
|
||||||
* extruder - target extruder
|
* extruder - target extruder
|
||||||
*/
|
*/
|
||||||
void Planner::_buffer_steps(const int32_t (&target)[ABCE], float fr_mm_s, const uint8_t extruder, const float &millimeters /*= 0.0*/) {
|
void Planner::_buffer_steps(const int32_t (&target)[XYZE]
|
||||||
|
#if ENABLED(LIN_ADVANCE)
|
||||||
|
, const float (&target_float)[XYZE]
|
||||||
|
#endif
|
||||||
|
, float fr_mm_s, const uint8_t extruder, const float &millimeters/*=0.0*/
|
||||||
|
) {
|
||||||
|
|
||||||
const int32_t da = target[A_AXIS] - position[A_AXIS],
|
const int32_t da = target[A_AXIS] - position[A_AXIS],
|
||||||
db = target[B_AXIS] - position[B_AXIS],
|
db = target[B_AXIS] - position[B_AXIS],
|
||||||
@ -751,13 +767,14 @@ void Planner::_buffer_steps(const int32_t (&target)[ABCE], float fr_mm_s, const
|
|||||||
SERIAL_ECHOLNPGM(" steps)");
|
SERIAL_ECHOLNPGM(" steps)");
|
||||||
//*/
|
//*/
|
||||||
|
|
||||||
// If LIN_ADVANCE is disabled then do E move prevention with integers
|
#if ENABLED(PREVENT_COLD_EXTRUSION) || ENABLED(PREVENT_LENGTHY_EXTRUDE)
|
||||||
// Otherwise it's done in _buffer_segment.
|
|
||||||
#if DISABLED(LIN_ADVANCE) && (ENABLED(PREVENT_COLD_EXTRUSION) || ENABLED(PREVENT_LENGTHY_EXTRUDE))
|
|
||||||
if (de) {
|
if (de) {
|
||||||
#if ENABLED(PREVENT_COLD_EXTRUSION)
|
#if ENABLED(PREVENT_COLD_EXTRUSION)
|
||||||
if (thermalManager.tooColdToExtrude(extruder)) {
|
if (thermalManager.tooColdToExtrude(extruder)) {
|
||||||
position[E_AXIS] = target[E_AXIS]; // Behave as if the move really took place, but ignore E part
|
position[E_AXIS] = target[E_AXIS]; // Behave as if the move really took place, but ignore E part
|
||||||
|
#if ENABLED(LIN_ADVANCE)
|
||||||
|
position_float[E_AXIS] = target_float[E_AXIS];
|
||||||
|
#endif
|
||||||
de = 0; // no difference
|
de = 0; // no difference
|
||||||
SERIAL_ECHO_START();
|
SERIAL_ECHO_START();
|
||||||
SERIAL_ECHOLNPGM(MSG_ERR_COLD_EXTRUDE_STOP);
|
SERIAL_ECHOLNPGM(MSG_ERR_COLD_EXTRUDE_STOP);
|
||||||
@ -766,13 +783,16 @@ void Planner::_buffer_steps(const int32_t (&target)[ABCE], float fr_mm_s, const
|
|||||||
#if ENABLED(PREVENT_LENGTHY_EXTRUDE)
|
#if ENABLED(PREVENT_LENGTHY_EXTRUDE)
|
||||||
if (labs(de * e_factor[extruder]) > (int32_t)axis_steps_per_mm[E_AXIS_N] * (EXTRUDE_MAXLENGTH)) { // It's not important to get max. extrusion length in a precision < 1mm, so save some cycles and cast to int
|
if (labs(de * e_factor[extruder]) > (int32_t)axis_steps_per_mm[E_AXIS_N] * (EXTRUDE_MAXLENGTH)) { // It's not important to get max. extrusion length in a precision < 1mm, so save some cycles and cast to int
|
||||||
position[E_AXIS] = target[E_AXIS]; // Behave as if the move really took place, but ignore E part
|
position[E_AXIS] = target[E_AXIS]; // Behave as if the move really took place, but ignore E part
|
||||||
|
#if ENABLED(LIN_ADVANCE)
|
||||||
|
position_float[E_AXIS] = target_float[E_AXIS];
|
||||||
|
#endif
|
||||||
de = 0; // no difference
|
de = 0; // no difference
|
||||||
SERIAL_ECHO_START();
|
SERIAL_ECHO_START();
|
||||||
SERIAL_ECHOLNPGM(MSG_ERR_LONG_EXTRUDE_STOP);
|
SERIAL_ECHOLNPGM(MSG_ERR_LONG_EXTRUDE_STOP);
|
||||||
}
|
}
|
||||||
#endif // PREVENT_LENGTHY_EXTRUDE
|
#endif // PREVENT_LENGTHY_EXTRUDE
|
||||||
}
|
}
|
||||||
#endif // !LIN_ADVANCE && (PREVENT_COLD_EXTRUSION || PREVENT_LENGTHY_EXTRUDE)
|
#endif // PREVENT_COLD_EXTRUSION || PREVENT_LENGTHY_EXTRUDE
|
||||||
|
|
||||||
// Compute direction bit-mask for this block
|
// Compute direction bit-mask for this block
|
||||||
uint8_t dm = 0;
|
uint8_t dm = 0;
|
||||||
@ -1189,6 +1209,9 @@ void Planner::_buffer_steps(const int32_t (&target)[ABCE], float fr_mm_s, const
|
|||||||
if (!block->steps[A_AXIS] && !block->steps[B_AXIS] && !block->steps[C_AXIS]) {
|
if (!block->steps[A_AXIS] && !block->steps[B_AXIS] && !block->steps[C_AXIS]) {
|
||||||
// convert to: acceleration steps/sec^2
|
// convert to: acceleration steps/sec^2
|
||||||
accel = CEIL(retract_acceleration * steps_per_mm);
|
accel = CEIL(retract_acceleration * steps_per_mm);
|
||||||
|
#if ENABLED(LIN_ADVANCE)
|
||||||
|
block->use_advance_lead = false;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
#define LIMIT_ACCEL_LONG(AXIS,INDX) do{ \
|
#define LIMIT_ACCEL_LONG(AXIS,INDX) do{ \
|
||||||
@ -1208,6 +1231,47 @@ void Planner::_buffer_steps(const int32_t (&target)[ABCE], float fr_mm_s, const
|
|||||||
// Start with print or travel acceleration
|
// Start with print or travel acceleration
|
||||||
accel = CEIL((esteps ? acceleration : travel_acceleration) * steps_per_mm);
|
accel = CEIL((esteps ? acceleration : travel_acceleration) * steps_per_mm);
|
||||||
|
|
||||||
|
#if ENABLED(LIN_ADVANCE)
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Use LIN_ADVANCE for blocks if all these are true:
|
||||||
|
*
|
||||||
|
* esteps : This is a print move, because we checked for A, B, C steps before.
|
||||||
|
*
|
||||||
|
* extruder_advance_K : There is an advance factor set.
|
||||||
|
*
|
||||||
|
* de > 0 : Extruder is running forward (e.g., for "Wipe while retracting" (Slic3r) or "Combing" (Cura) moves)
|
||||||
|
*/
|
||||||
|
block->use_advance_lead = esteps
|
||||||
|
&& extruder_advance_K
|
||||||
|
&& de > 0;
|
||||||
|
|
||||||
|
if (block->use_advance_lead) {
|
||||||
|
block->e_D_ratio = (target_float[E_AXIS] - position_float[E_AXIS]) /
|
||||||
|
#if IS_KINEMATIC
|
||||||
|
block->millimeters
|
||||||
|
#else
|
||||||
|
SQRT(sq(target_float[X_AXIS] - position_float[X_AXIS])
|
||||||
|
+ sq(target_float[Y_AXIS] - position_float[Y_AXIS])
|
||||||
|
+ sq(target_float[Z_AXIS] - position_float[Z_AXIS]))
|
||||||
|
#endif
|
||||||
|
;
|
||||||
|
|
||||||
|
// Check for unusual high e_D ratio to detect if a retract move was combined with the last print move due to min. steps per segment. Never execute this with advance!
|
||||||
|
// This assumes no one will use a retract length of 0mm < retr_length < ~0.2mm and no one will print 100mm wide lines using 3mm filament or 35mm wide lines using 1.75mm filament.
|
||||||
|
if (block->e_D_ratio > 3.0)
|
||||||
|
block->use_advance_lead = false;
|
||||||
|
else {
|
||||||
|
const uint32_t max_accel_steps_per_s2 = max_jerk[E_AXIS] / (extruder_advance_K * block->e_D_ratio) * steps_per_mm;
|
||||||
|
#if ENABLED(LA_DEBUG)
|
||||||
|
if (accel > max_accel_steps_per_s2)
|
||||||
|
SERIAL_ECHOLNPGM("Acceleration limited.");
|
||||||
|
#endif
|
||||||
|
NOMORE(accel, max_accel_steps_per_s2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if ENABLED(DISTINCT_E_FACTORS)
|
#if ENABLED(DISTINCT_E_FACTORS)
|
||||||
#define ACCEL_IDX extruder
|
#define ACCEL_IDX extruder
|
||||||
#else
|
#else
|
||||||
@ -1230,7 +1294,18 @@ void Planner::_buffer_steps(const int32_t (&target)[ABCE], float fr_mm_s, const
|
|||||||
}
|
}
|
||||||
block->acceleration_steps_per_s2 = accel;
|
block->acceleration_steps_per_s2 = accel;
|
||||||
block->acceleration = accel / steps_per_mm;
|
block->acceleration = accel / steps_per_mm;
|
||||||
block->acceleration_rate = (long)(accel * 16777216.0 / (HAL_STEPPER_TIMER_RATE)); // 16777216 = <<24
|
block->acceleration_rate = (long)(accel * 16777216.0 / ((F_CPU) * 0.125)); // * 8.388608
|
||||||
|
#if ENABLED(LIN_ADVANCE)
|
||||||
|
if (block->use_advance_lead) {
|
||||||
|
block->advance_speed = ((F_CPU) * 0.125) / (extruder_advance_K * block->e_D_ratio * block->acceleration * axis_steps_per_mm[E_AXIS_N]);
|
||||||
|
#if ENABLED(LA_DEBUG)
|
||||||
|
if (extruder_advance_K * block->e_D_ratio * block->acceleration * 2 < block->nominal_speed * block->e_D_ratio)
|
||||||
|
SERIAL_ECHOLNPGM("More than 2 steps per eISR loop executed.");
|
||||||
|
if (block->advance_speed < 200)
|
||||||
|
SERIAL_ECHOLNPGM("eISR running at > 10kHz.");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// Initial limit on the segment entry velocity
|
// Initial limit on the segment entry velocity
|
||||||
float vmax_junction;
|
float vmax_junction;
|
||||||
@ -1386,41 +1461,15 @@ void Planner::_buffer_steps(const int32_t (&target)[ABCE], float fr_mm_s, const
|
|||||||
previous_nominal_speed = block->nominal_speed;
|
previous_nominal_speed = block->nominal_speed;
|
||||||
previous_safe_speed = safe_speed;
|
previous_safe_speed = safe_speed;
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* Use LIN_ADVANCE for blocks if all these are true:
|
|
||||||
*
|
|
||||||
* esteps && (block->steps[X_AXIS] || block->steps[Y_AXIS]) : This is a print move
|
|
||||||
*
|
|
||||||
* extruder_advance_k : There is an advance factor set.
|
|
||||||
*
|
|
||||||
* esteps != block->step_event_count : A problem occurs if the move before a retract is too small.
|
|
||||||
* In that case, the retract and move will be executed together.
|
|
||||||
* This leads to too many advance steps due to a huge e_acceleration.
|
|
||||||
* The math is good, but we must avoid retract moves with advance!
|
|
||||||
* lin_dist_e > 0 : Extruder is running forward (e.g., for "Wipe while retracting" (Slic3r) or "Combing" (Cura) moves)
|
|
||||||
*/
|
|
||||||
block->use_advance_lead = esteps && (block->steps[X_AXIS] || block->steps[Y_AXIS])
|
|
||||||
&& extruder_advance_k
|
|
||||||
&& (uint32_t)esteps != block->step_event_count
|
|
||||||
&& lin_dist_e > 0;
|
|
||||||
if (block->use_advance_lead)
|
|
||||||
block->abs_adv_steps_multiplier8 = LROUND(
|
|
||||||
extruder_advance_k
|
|
||||||
* (UNEAR_ZERO(advance_ed_ratio) ? lin_dist_e / lin_dist_xy : 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
|
|
||||||
);
|
|
||||||
|
|
||||||
#endif // LIN_ADVANCE
|
|
||||||
|
|
||||||
// Move buffer head
|
// Move buffer head
|
||||||
block_buffer_head = next_buffer_head;
|
block_buffer_head = next_buffer_head;
|
||||||
|
|
||||||
// Update the position (only when a move was queued)
|
// Update the position (only when a move was queued)
|
||||||
static_assert(COUNT(target) > 1, "Parameter to _buffer_steps must be (&target)[XYZE]!");
|
static_assert(COUNT(target) > 1, "Parameter to _buffer_steps must be (&target)[XYZE]!");
|
||||||
COPY(position, target);
|
COPY(position, target);
|
||||||
|
#if ENABLED(LIN_ADVANCE)
|
||||||
|
COPY(position_float, target_float);
|
||||||
|
#endif
|
||||||
|
|
||||||
recalculate();
|
recalculate();
|
||||||
|
|
||||||
@ -1438,7 +1487,7 @@ void Planner::_buffer_steps(const int32_t (&target)[ABCE], float fr_mm_s, const
|
|||||||
* extruder - target extruder
|
* extruder - target extruder
|
||||||
* millimeters - the length of the movement, if known
|
* millimeters - the length of the movement, if known
|
||||||
*/
|
*/
|
||||||
void Planner::buffer_segment(const float &a, const float &b, const float &c, const float &e, const float &fr_mm_s, const uint8_t extruder, const float &millimeters /*= 0.0*/) {
|
void Planner::buffer_segment(const float &a, const float &b, const float &c, const float &e, const float &fr_mm_s, const uint8_t extruder, const float &millimeters/*=0.0*/) {
|
||||||
// When changing extruders recalculate steps corresponding to the E position
|
// When changing extruders recalculate steps corresponding to the E position
|
||||||
#if ENABLED(DISTINCT_E_FACTORS)
|
#if ENABLED(DISTINCT_E_FACTORS)
|
||||||
if (last_extruder != extruder && axis_steps_per_mm[E_AXIS_N] != axis_steps_per_mm[E_AXIS + last_extruder]) {
|
if (last_extruder != extruder && axis_steps_per_mm[E_AXIS_N] != axis_steps_per_mm[E_AXIS + last_extruder]) {
|
||||||
@ -1456,6 +1505,18 @@ void Planner::buffer_segment(const float &a, const float &b, const float &c, con
|
|||||||
LROUND(e * axis_steps_per_mm[E_AXIS_N])
|
LROUND(e * axis_steps_per_mm[E_AXIS_N])
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#if ENABLED(LIN_ADVANCE)
|
||||||
|
const float target_float[XYZE] = { a, b, c, e };
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// DRYRUN prevents E moves from taking place
|
||||||
|
if (DEBUGGING(DRYRUN)) {
|
||||||
|
position[E_AXIS] = target[E_AXIS];
|
||||||
|
#if ENABLED(LIN_ADVANCE)
|
||||||
|
position_float[E_AXIS] = e;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
/* <-- add a slash to enable
|
/* <-- add a slash to enable
|
||||||
SERIAL_ECHOPAIR(" buffer_segment FR:", fr_mm_s);
|
SERIAL_ECHOPAIR(" buffer_segment FR:", fr_mm_s);
|
||||||
#if IS_KINEMATIC
|
#if IS_KINEMATIC
|
||||||
@ -1484,85 +1545,48 @@ void Planner::buffer_segment(const float &a, const float &b, const float &c, con
|
|||||||
SERIAL_ECHOLNPGM(")");
|
SERIAL_ECHOLNPGM(")");
|
||||||
//*/
|
//*/
|
||||||
|
|
||||||
// DRYRUN prevents E moves from taking place
|
|
||||||
if (DEBUGGING(DRYRUN)) {
|
|
||||||
position[E_AXIS] = target[E_AXIS];
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
|
||||||
position_float[E_AXIS] = e;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
|
||||||
lin_dist_e = e - position_float[E_AXIS];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// If LIN_ADVANCE is enabled then do E move prevention with floats
|
|
||||||
// Otherwise it's done in _buffer_steps.
|
|
||||||
#if ENABLED(LIN_ADVANCE) && (ENABLED(PREVENT_COLD_EXTRUSION) || ENABLED(PREVENT_LENGTHY_EXTRUDE))
|
|
||||||
if (lin_dist_e) {
|
|
||||||
#if ENABLED(PREVENT_COLD_EXTRUSION)
|
|
||||||
if (thermalManager.tooColdToExtrude(extruder)) {
|
|
||||||
position_float[E_AXIS] = e; // Behave as if the move really took place, but ignore E part
|
|
||||||
position[E_AXIS] = target[E_AXIS];
|
|
||||||
lin_dist_e = 0;
|
|
||||||
SERIAL_ECHO_START();
|
|
||||||
SERIAL_ECHOLNPGM(MSG_ERR_COLD_EXTRUDE_STOP);
|
|
||||||
}
|
|
||||||
#endif // PREVENT_COLD_EXTRUSION
|
|
||||||
#if ENABLED(PREVENT_LENGTHY_EXTRUDE)
|
|
||||||
if (lin_dist_e * e_factor[extruder] > (EXTRUDE_MAXLENGTH)) {
|
|
||||||
position_float[E_AXIS] = e; // Behave as if the move really took place, but ignore E part
|
|
||||||
position[E_AXIS] = target[E_AXIS];
|
|
||||||
lin_dist_e = 0;
|
|
||||||
SERIAL_ECHO_START();
|
|
||||||
SERIAL_ECHOLNPGM(MSG_ERR_LONG_EXTRUDE_STOP);
|
|
||||||
}
|
|
||||||
#endif // PREVENT_LENGTHY_EXTRUDE
|
|
||||||
}
|
|
||||||
#endif // LIN_ADVANCE && (PREVENT_COLD_EXTRUSION || PREVENT_LENGTHY_EXTRUDE)
|
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
|
||||||
if (lin_dist_e > 0)
|
|
||||||
lin_dist_xy = HYPOT(a - position_float[X_AXIS], b - position_float[Y_AXIS]);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Always split the first move into two (if not homing or probing)
|
// Always split the first move into two (if not homing or probing)
|
||||||
if (!blocks_queued()) {
|
if (!blocks_queued()) {
|
||||||
|
|
||||||
#define _BETWEEN(A) (position[A##_AXIS] + target[A##_AXIS]) >> 1
|
#define _BETWEEN(A) (position[A##_AXIS] + target[A##_AXIS]) >> 1
|
||||||
const int32_t between[ABCE] = { _BETWEEN(A), _BETWEEN(B), _BETWEEN(C), _BETWEEN(E) };
|
const int32_t between[ABCE] = { _BETWEEN(A), _BETWEEN(B), _BETWEEN(C), _BETWEEN(E) };
|
||||||
|
|
||||||
|
#if ENABLED(LIN_ADVANCE)
|
||||||
|
#define _BETWEEN_F(A) (position_float[A##_AXIS] + target_float[A##_AXIS]) * 0.5
|
||||||
|
const float between_float[ABCE] = { _BETWEEN_F(A), _BETWEEN_F(B), _BETWEEN_F(C), _BETWEEN_F(E) };
|
||||||
|
#endif
|
||||||
|
|
||||||
DISABLE_STEPPER_DRIVER_INTERRUPT();
|
DISABLE_STEPPER_DRIVER_INTERRUPT();
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
_buffer_steps(between
|
||||||
lin_dist_xy *= 0.5;
|
#if ENABLED(LIN_ADVANCE)
|
||||||
lin_dist_e *= 0.5;
|
, between_float
|
||||||
#endif
|
#endif
|
||||||
|
, fr_mm_s, extruder, millimeters * 0.5
|
||||||
_buffer_steps(between, fr_mm_s, extruder, millimeters * 0.5);
|
);
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
|
||||||
position_float[X_AXIS] = (position_float[X_AXIS] + a) * 0.5;
|
|
||||||
position_float[Y_AXIS] = (position_float[Y_AXIS] + b) * 0.5;
|
|
||||||
//position_float[Z_AXIS] = (position_float[Z_AXIS] + c) * 0.5;
|
|
||||||
position_float[E_AXIS] = (position_float[E_AXIS] + e) * 0.5;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
const uint8_t next = block_buffer_head;
|
const uint8_t next = block_buffer_head;
|
||||||
_buffer_steps(target, fr_mm_s, extruder, millimeters * 0.5);
|
|
||||||
|
_buffer_steps(target
|
||||||
|
#if ENABLED(LIN_ADVANCE)
|
||||||
|
, target_float
|
||||||
|
#endif
|
||||||
|
, fr_mm_s, extruder, millimeters * 0.5
|
||||||
|
);
|
||||||
|
|
||||||
SBI(block_buffer[next].flag, BLOCK_BIT_CONTINUED);
|
SBI(block_buffer[next].flag, BLOCK_BIT_CONTINUED);
|
||||||
ENABLE_STEPPER_DRIVER_INTERRUPT();
|
ENABLE_STEPPER_DRIVER_INTERRUPT();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
_buffer_steps(target, fr_mm_s, extruder, millimeters);
|
_buffer_steps(target
|
||||||
|
#if ENABLED(LIN_ADVANCE)
|
||||||
|
, target_float
|
||||||
|
#endif
|
||||||
|
, fr_mm_s, extruder, millimeters
|
||||||
|
);
|
||||||
|
|
||||||
stepper.wake_up();
|
stepper.wake_up();
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
|
||||||
position_float[X_AXIS] = a;
|
|
||||||
position_float[Y_AXIS] = b;
|
|
||||||
//position_float[Z_AXIS] = c;
|
|
||||||
position_float[E_AXIS] = e;
|
|
||||||
#endif
|
|
||||||
} // buffer_segment()
|
} // buffer_segment()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1586,7 +1610,7 @@ void Planner::_set_position_mm(const float &a, const float &b, const float &c, c
|
|||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
position_float[X_AXIS] = a;
|
position_float[X_AXIS] = a;
|
||||||
position_float[Y_AXIS] = b;
|
position_float[Y_AXIS] = b;
|
||||||
//position_float[Z_AXIS] = c;
|
position_float[Z_AXIS] = c;
|
||||||
position_float[E_AXIS] = e;
|
position_float[E_AXIS] = e;
|
||||||
#endif
|
#endif
|
||||||
stepper.set_position(na, nb, nc, ne);
|
stepper.set_position(na, nb, nc, ne);
|
||||||
|
@ -103,7 +103,10 @@ typedef struct {
|
|||||||
// Advance extrusion
|
// Advance extrusion
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
bool use_advance_lead;
|
bool use_advance_lead;
|
||||||
uint32_t abs_adv_steps_multiplier8; // Factorised by 2^8 to avoid float
|
uint16_t advance_speed, // Timer value for extruder speed offset
|
||||||
|
max_adv_steps, // max. advance steps to get cruising speed pressure (not always nominal_speed!)
|
||||||
|
final_adv_steps; // advance steps due to exit speed
|
||||||
|
float e_D_ratio;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Fields used by the motion planner to manage acceleration
|
// Fields used by the motion planner to manage acceleration
|
||||||
@ -195,9 +198,8 @@ class Planner {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
static float extruder_advance_k, advance_ed_ratio,
|
static float extruder_advance_K,
|
||||||
position_float[XYZE],
|
position_float[XYZE];
|
||||||
lin_dist_xy, lin_dist_e;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ENABLED(SKEW_CORRECTION)
|
#if ENABLED(SKEW_CORRECTION)
|
||||||
@ -418,7 +420,12 @@ class Planner {
|
|||||||
* extruder - target extruder
|
* extruder - target extruder
|
||||||
* millimeters - the length of the movement, if known
|
* millimeters - the length of the movement, if known
|
||||||
*/
|
*/
|
||||||
static void _buffer_steps(const int32_t (&target)[XYZE], float fr_mm_s, const uint8_t extruder, const float &millimeters = 0.0);
|
static void _buffer_steps(const int32_t (&target)[XYZE]
|
||||||
|
#if ENABLED(LIN_ADVANCE)
|
||||||
|
, const float (&target_float)[XYZE]
|
||||||
|
#endif
|
||||||
|
, float fr_mm_s, const uint8_t extruder, const float &millimeters=0.0
|
||||||
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Planner::buffer_segment
|
* Planner::buffer_segment
|
||||||
@ -432,7 +439,7 @@ class Planner {
|
|||||||
* extruder - target extruder
|
* extruder - target extruder
|
||||||
* millimeters - the length of the movement, if known
|
* millimeters - the length of the movement, if known
|
||||||
*/
|
*/
|
||||||
static void buffer_segment(const float &a, const float &b, const float &c, const float &e, const float &fr_mm_s, const uint8_t extruder, const float &millimeters = 0.0);
|
static void buffer_segment(const float &a, const float &b, const float &c, const float &e, const float &fr_mm_s, const uint8_t extruder, const float &millimeters=0.0);
|
||||||
|
|
||||||
static void _set_position_mm(const float &a, const float &b, const float &c, const float &e);
|
static void _set_position_mm(const float &a, const float &b, const float &c, const float &e);
|
||||||
|
|
||||||
|
@ -111,31 +111,21 @@ volatile uint32_t Stepper::step_events_completed = 0; // The number of step even
|
|||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
|
|
||||||
|
uint32_t Stepper::LA_decelerate_after;
|
||||||
|
|
||||||
constexpr hal_timer_t ADV_NEVER = HAL_TIMER_TYPE_MAX;
|
constexpr hal_timer_t ADV_NEVER = HAL_TIMER_TYPE_MAX;
|
||||||
|
|
||||||
hal_timer_t Stepper::nextMainISR = 0,
|
hal_timer_t Stepper::nextMainISR = 0,
|
||||||
Stepper::nextAdvanceISR = ADV_NEVER,
|
Stepper::nextAdvanceISR = ADV_NEVER,
|
||||||
Stepper::eISR_Rate = ADV_NEVER;
|
Stepper::eISR_Rate = ADV_NEVER;
|
||||||
|
uint16_t Stepper::current_adv_steps = 0,
|
||||||
|
Stepper::final_adv_steps,
|
||||||
|
Stepper::max_adv_steps;
|
||||||
|
|
||||||
volatile int Stepper::e_steps[E_STEPPERS];
|
int8_t Stepper::e_steps = 0,
|
||||||
int Stepper::final_estep_rate,
|
Stepper::LA_active_extruder; // Copy from current executed block. Needed because current_block is set to NULL "too early".
|
||||||
Stepper::current_estep_rate[E_STEPPERS],
|
|
||||||
Stepper::current_adv_steps[E_STEPPERS];
|
|
||||||
|
|
||||||
/**
|
bool Stepper::use_advance_lead;
|
||||||
* See https://github.com/MarlinFirmware/Marlin/issues/5699#issuecomment-309264382
|
|
||||||
*
|
|
||||||
* This fix isn't perfect and may lose steps - but better than locking up completely
|
|
||||||
* in future the planner should slow down if advance stepping rate would be too high
|
|
||||||
*/
|
|
||||||
FORCE_INLINE hal_timer_t adv_rate(const int steps, const hal_timer_t timer, const uint8_t loops) {
|
|
||||||
if (steps) {
|
|
||||||
const hal_timer_t rate = (timer * loops) / abs(steps);
|
|
||||||
//return constrain(rate, 1, ADV_NEVER - 1)
|
|
||||||
return rate ? rate : 1;
|
|
||||||
}
|
|
||||||
return ADV_NEVER;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // LIN_ADVANCE
|
#endif // LIN_ADVANCE
|
||||||
|
|
||||||
@ -461,7 +451,7 @@ void Stepper::isr() {
|
|||||||
#if DISABLED(MIXING_EXTRUDER)
|
#if DISABLED(MIXING_EXTRUDER)
|
||||||
// Don't step E here for mixing extruder
|
// Don't step E here for mixing extruder
|
||||||
count_position[E_AXIS] += count_direction[E_AXIS];
|
count_position[E_AXIS] += count_direction[E_AXIS];
|
||||||
motor_direction(E_AXIS) ? --e_steps[TOOL_E_INDEX] : ++e_steps[TOOL_E_INDEX];
|
motor_direction(E_AXIS) ? --e_steps : ++e_steps;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -640,25 +630,6 @@ void Stepper::isr() {
|
|||||||
|
|
||||||
} // steps_loop
|
} // steps_loop
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
|
||||||
|
|
||||||
if (current_block->use_advance_lead) {
|
|
||||||
const int delta_adv_steps = current_estep_rate[TOOL_E_INDEX] - current_adv_steps[TOOL_E_INDEX];
|
|
||||||
current_adv_steps[TOOL_E_INDEX] += delta_adv_steps;
|
|
||||||
#if ENABLED(MIXING_EXTRUDER)
|
|
||||||
// Mixing extruders apply advance lead proportionally
|
|
||||||
MIXING_STEPPERS_LOOP(j)
|
|
||||||
e_steps[j] += delta_adv_steps * current_block->step_event_count / current_block->mix_event_count[j];
|
|
||||||
#else
|
|
||||||
// For most extruders, advance the single E stepper
|
|
||||||
e_steps[TOOL_E_INDEX] += delta_adv_steps;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
// If we have esteps to execute, fire the next advance_isr "now"
|
|
||||||
if (e_steps[TOOL_E_INDEX]) nextAdvanceISR = 0;
|
|
||||||
|
|
||||||
#endif // LIN_ADVANCE
|
|
||||||
|
|
||||||
// Calculate new timer value
|
// Calculate new timer value
|
||||||
if (step_events_completed <= (uint32_t)current_block->accelerate_until) {
|
if (step_events_completed <= (uint32_t)current_block->accelerate_until) {
|
||||||
|
|
||||||
@ -683,14 +654,15 @@ void Stepper::isr() {
|
|||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
|
|
||||||
if (current_block->use_advance_lead) {
|
if (current_block->use_advance_lead) {
|
||||||
#if ENABLED(MIXING_EXTRUDER)
|
if (step_events_completed == step_loops || (e_steps && eISR_Rate != current_block->advance_speed)) {
|
||||||
MIXING_STEPPERS_LOOP(j)
|
nextAdvanceISR = 0; // Wake up eISR on first acceleration loop and fire ISR if final adv_rate is reached
|
||||||
current_estep_rate[j] = ((uint32_t)acc_step_rate * current_block->abs_adv_steps_multiplier8 * current_block->step_event_count / current_block->mix_event_count[j]) >> 17;
|
eISR_Rate = current_block->advance_speed;
|
||||||
#else
|
}
|
||||||
current_estep_rate[TOOL_E_INDEX] = ((uint32_t)acc_step_rate * current_block->abs_adv_steps_multiplier8) >> 17;
|
}
|
||||||
#endif
|
else {
|
||||||
|
eISR_Rate = ADV_NEVER;
|
||||||
|
if (e_steps) nextAdvanceISR = 0;
|
||||||
}
|
}
|
||||||
eISR_Rate = adv_rate(e_steps[TOOL_E_INDEX], interval, step_loops);
|
|
||||||
|
|
||||||
#endif // LIN_ADVANCE
|
#endif // LIN_ADVANCE
|
||||||
}
|
}
|
||||||
@ -719,14 +691,15 @@ void Stepper::isr() {
|
|||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
|
|
||||||
if (current_block->use_advance_lead) {
|
if (current_block->use_advance_lead) {
|
||||||
#if ENABLED(MIXING_EXTRUDER)
|
if (step_events_completed <= (uint32_t)current_block->decelerate_after + step_loops || (e_steps && eISR_Rate != current_block->advance_speed)) {
|
||||||
MIXING_STEPPERS_LOOP(j)
|
nextAdvanceISR = 0; // Wake up eISR on first deceleration loop
|
||||||
current_estep_rate[j] = ((uint32_t)step_rate * current_block->abs_adv_steps_multiplier8 * current_block->step_event_count / current_block->mix_event_count[j]) >> 17;
|
eISR_Rate = current_block->advance_speed;
|
||||||
#else
|
}
|
||||||
current_estep_rate[TOOL_E_INDEX] = ((uint32_t)step_rate * current_block->abs_adv_steps_multiplier8) >> 17;
|
}
|
||||||
#endif
|
else {
|
||||||
|
eISR_Rate = ADV_NEVER;
|
||||||
|
if (e_steps) nextAdvanceISR = 0;
|
||||||
}
|
}
|
||||||
eISR_Rate = adv_rate(e_steps[TOOL_E_INDEX], interval, step_loops);
|
|
||||||
|
|
||||||
#endif // LIN_ADVANCE
|
#endif // LIN_ADVANCE
|
||||||
}
|
}
|
||||||
@ -734,10 +707,8 @@ void Stepper::isr() {
|
|||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
|
|
||||||
if (current_block->use_advance_lead)
|
// If we have esteps to execute, fire the next advance_isr "now"
|
||||||
current_estep_rate[TOOL_E_INDEX] = final_estep_rate;
|
if (e_steps && eISR_Rate != current_block->advance_speed) nextAdvanceISR = 0;
|
||||||
|
|
||||||
eISR_Rate = adv_rate(e_steps[TOOL_E_INDEX], OCR1A_nominal, step_loops_nominal);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -781,55 +752,79 @@ void Stepper::isr() {
|
|||||||
#if ENABLED(MK2_MULTIPLEXER)
|
#if ENABLED(MK2_MULTIPLEXER)
|
||||||
// Even-numbered steppers are reversed
|
// Even-numbered steppers are reversed
|
||||||
#define SET_E_STEP_DIR(INDEX) \
|
#define SET_E_STEP_DIR(INDEX) \
|
||||||
if (e_steps[INDEX]) E## INDEX ##_DIR_WRITE(e_steps[INDEX] < 0 ? !INVERT_E## INDEX ##_DIR ^ TEST(INDEX, 0) : INVERT_E## INDEX ##_DIR ^ TEST(INDEX, 0))
|
if (e_steps) E## INDEX ##_DIR_WRITE(e_steps < 0 ? !INVERT_E## INDEX ##_DIR ^ TEST(INDEX, 0) : INVERT_E## INDEX ##_DIR ^ TEST(INDEX, 0))
|
||||||
#else
|
#else
|
||||||
#define SET_E_STEP_DIR(INDEX) \
|
#define SET_E_STEP_DIR(INDEX) \
|
||||||
if (e_steps[INDEX]) E## INDEX ##_DIR_WRITE(e_steps[INDEX] < 0 ? INVERT_E## INDEX ##_DIR : !INVERT_E## INDEX ##_DIR)
|
if (e_steps) E## INDEX ##_DIR_WRITE(e_steps < 0 ? INVERT_E## INDEX ##_DIR : !INVERT_E## INDEX ##_DIR)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define START_E_PULSE(INDEX) \
|
#define START_E_PULSE(INDEX) \
|
||||||
if (e_steps[INDEX]) E## INDEX ##_STEP_WRITE(!INVERT_E_STEP_PIN)
|
if (e_steps) E## INDEX ##_STEP_WRITE(!INVERT_E_STEP_PIN)
|
||||||
|
|
||||||
#define STOP_E_PULSE(INDEX) \
|
#define STOP_E_PULSE(INDEX) \
|
||||||
if (e_steps[INDEX]) { \
|
if (e_steps) { \
|
||||||
e_steps[INDEX] < 0 ? ++e_steps[INDEX] : --e_steps[INDEX]; \
|
e_steps < 0 ? ++e_steps : --e_steps; \
|
||||||
E## INDEX ##_STEP_WRITE(INVERT_E_STEP_PIN); \
|
E## INDEX ##_STEP_WRITE(INVERT_E_STEP_PIN); \
|
||||||
}
|
}
|
||||||
|
|
||||||
SET_E_STEP_DIR(0);
|
if (current_block->use_advance_lead) {
|
||||||
#if E_STEPPERS > 1
|
if (step_events_completed > LA_decelerate_after && current_adv_steps > final_adv_steps) {
|
||||||
SET_E_STEP_DIR(1);
|
e_steps--;
|
||||||
#if E_STEPPERS > 2
|
current_adv_steps--;
|
||||||
SET_E_STEP_DIR(2);
|
nextAdvanceISR = eISR_Rate;
|
||||||
#if E_STEPPERS > 3
|
}
|
||||||
SET_E_STEP_DIR(3);
|
else if (step_events_completed < LA_decelerate_after && current_adv_steps < max_adv_steps) {
|
||||||
#if E_STEPPERS > 4
|
//step_events_completed <= (uint32_t)current_block->accelerate_until) {
|
||||||
SET_E_STEP_DIR(4);
|
e_steps++;
|
||||||
#endif
|
current_adv_steps++;
|
||||||
#endif
|
nextAdvanceISR = eISR_Rate;
|
||||||
#endif
|
}
|
||||||
#endif
|
else {
|
||||||
|
nextAdvanceISR = ADV_NEVER;
|
||||||
|
eISR_Rate = ADV_NEVER;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
nextAdvanceISR = ADV_NEVER;
|
||||||
|
|
||||||
// Step all E steppers that have steps
|
switch(LA_active_extruder) {
|
||||||
for (uint8_t i = step_loops; i--;) {
|
case 0: SET_E_STEP_DIR(0); break;
|
||||||
|
#if EXTRUDERS > 1
|
||||||
|
case 1: SET_E_STEP_DIR(1); break;
|
||||||
|
#if EXTRUDERS > 2
|
||||||
|
case 2: SET_E_STEP_DIR(2); break;
|
||||||
|
#if EXTRUDERS > 3
|
||||||
|
case 3: SET_E_STEP_DIR(3); break;
|
||||||
|
#if EXTRUDERS > 4
|
||||||
|
case 4: SET_E_STEP_DIR(4); break;
|
||||||
|
#endif // EXTRUDERS > 4
|
||||||
|
#endif // EXTRUDERS > 3
|
||||||
|
#endif // EXTRUDERS > 2
|
||||||
|
#endif // EXTRUDERS > 1
|
||||||
|
}
|
||||||
|
|
||||||
|
// Step E stepper if we have steps
|
||||||
|
while (e_steps) {
|
||||||
|
|
||||||
#if EXTRA_CYCLES_E > 20
|
#if EXTRA_CYCLES_E > 20
|
||||||
hal_timer_t pulse_start = HAL_timer_get_count(PULSE_TIMER_NUM);
|
hal_timer_t pulse_start = HAL_timer_get_count(PULSE_TIMER_NUM);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
START_E_PULSE(0);
|
switch(LA_active_extruder) {
|
||||||
#if E_STEPPERS > 1
|
case 0: START_E_PULSE(0); break;
|
||||||
START_E_PULSE(1);
|
#if EXTRUDERS > 1
|
||||||
#if E_STEPPERS > 2
|
case 1: START_E_PULSE(1); break;
|
||||||
START_E_PULSE(2);
|
#if EXTRUDERS > 2
|
||||||
#if E_STEPPERS > 3
|
case 2: START_E_PULSE(2); break;
|
||||||
START_E_PULSE(3);
|
#if EXTRUDERS > 3
|
||||||
#if E_STEPPERS > 4
|
case 3: START_E_PULSE(3); break;
|
||||||
START_E_PULSE(4);
|
#if EXTRUDERS > 4
|
||||||
#endif
|
case 4: START_E_PULSE(4); break;
|
||||||
#endif
|
#endif // EXTRUDERS > 4
|
||||||
#endif
|
#endif // EXTRUDERS > 3
|
||||||
#endif
|
#endif // EXTRUDERS > 2
|
||||||
|
#endif // EXTRUDERS > 1
|
||||||
|
}
|
||||||
|
|
||||||
// For minimum pulse time wait before stopping pulses
|
// For minimum pulse time wait before stopping pulses
|
||||||
#if EXTRA_CYCLES_E > 20
|
#if EXTRA_CYCLES_E > 20
|
||||||
@ -839,19 +834,21 @@ void Stepper::isr() {
|
|||||||
DELAY_NOPS(EXTRA_CYCLES_E);
|
DELAY_NOPS(EXTRA_CYCLES_E);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
STOP_E_PULSE(0);
|
switch(LA_active_extruder) {
|
||||||
#if E_STEPPERS > 1
|
case 0: STOP_E_PULSE(0); break;
|
||||||
STOP_E_PULSE(1);
|
#if EXTRUDERS > 1
|
||||||
#if E_STEPPERS > 2
|
case 1: STOP_E_PULSE(1); break;
|
||||||
STOP_E_PULSE(2);
|
#if EXTRUDERS > 2
|
||||||
#if E_STEPPERS > 3
|
case 2: STOP_E_PULSE(2); break;
|
||||||
STOP_E_PULSE(3);
|
#if EXTRUDERS > 3
|
||||||
#if E_STEPPERS > 4
|
case 3: STOP_E_PULSE(3); break;
|
||||||
STOP_E_PULSE(4);
|
#if EXTRUDERS > 4
|
||||||
#endif
|
case 4: STOP_E_PULSE(4); break;
|
||||||
#endif
|
#endif // EXTRUDERS > 4
|
||||||
#endif
|
#endif // EXTRUDERS > 3
|
||||||
#endif
|
#endif // EXTRUDERS > 2
|
||||||
|
#endif // EXTRUDERS > 1
|
||||||
|
}
|
||||||
|
|
||||||
// For minimum pulse time wait before looping
|
// For minimum pulse time wait before looping
|
||||||
#if EXTRA_CYCLES_E > 20
|
#if EXTRA_CYCLES_E > 20
|
||||||
@ -1116,11 +1113,6 @@ void Stepper::init() {
|
|||||||
|
|
||||||
ENABLE_STEPPER_DRIVER_INTERRUPT();
|
ENABLE_STEPPER_DRIVER_INTERRUPT();
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
|
||||||
for (uint8_t i = 0; i < COUNT(e_steps); i++) e_steps[i] = 0;
|
|
||||||
ZERO(current_adv_steps);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
endstops.enable(true); // Start with endstops active. After homing they can be disabled
|
endstops.enable(true); // Start with endstops active. After homing they can be disabled
|
||||||
sei();
|
sei();
|
||||||
|
|
||||||
|
@ -98,18 +98,20 @@ class Stepper {
|
|||||||
static volatile uint32_t step_events_completed; // The number of step events executed in the current block
|
static volatile uint32_t step_events_completed; // The number of step events executed in the current block
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
#if ENABLED(LIN_ADVANCE)
|
||||||
static hal_timer_t nextMainISR, nextAdvanceISR, eISR_Rate;
|
|
||||||
#define _NEXT_ISR(T) nextMainISR = T
|
|
||||||
|
|
||||||
static volatile int e_steps[E_STEPPERS];
|
static uint32_t LA_decelerate_after; // Copy from current executed block. Needed because current_block is set to NULL "too early".
|
||||||
static int final_estep_rate;
|
static hal_timer_t nextMainISR, nextAdvanceISR, eISR_Rate;
|
||||||
static int current_estep_rate[E_STEPPERS]; // Actual extruder speed [steps/s]
|
static uint16_t current_adv_steps, final_adv_steps, max_adv_steps; // Copy from current executed block. Needed because current_block is set to NULL "too early".
|
||||||
static int current_adv_steps[E_STEPPERS]; // The amount of current added esteps due to advance.
|
#define _NEXT_ISR(T) nextMainISR = T
|
||||||
// i.e., the current amount of pressure applied
|
static int8_t e_steps;
|
||||||
// to the spring (=filament).
|
static int8_t LA_active_extruder; // Copy from current executed block. Needed because current_block is set to NULL "too early".
|
||||||
#else
|
static bool use_advance_lead;
|
||||||
|
|
||||||
|
#else // !LIN_ADVANCE
|
||||||
|
|
||||||
#define _NEXT_ISR(T) HAL_timer_set_compare(STEP_TIMER_NUM, T);
|
#define _NEXT_ISR(T) HAL_timer_set_compare(STEP_TIMER_NUM, T);
|
||||||
#endif // LIN_ADVANCE
|
|
||||||
|
#endif // !LIN_ADVANCE
|
||||||
|
|
||||||
static long acceleration_time, deceleration_time;
|
static long acceleration_time, deceleration_time;
|
||||||
static uint8_t step_loops, step_loops_nominal;
|
static uint8_t step_loops, step_loops_nominal;
|
||||||
@ -239,13 +241,11 @@ class Stepper {
|
|||||||
FORCE_INLINE static void set_x_lock(const bool state) { locked_x_motor = state; }
|
FORCE_INLINE static void set_x_lock(const bool state) { locked_x_motor = state; }
|
||||||
FORCE_INLINE static void set_x2_lock(const bool state) { locked_x2_motor = state; }
|
FORCE_INLINE static void set_x2_lock(const bool state) { locked_x2_motor = state; }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ENABLED(Y_DUAL_ENDSTOPS)
|
#if ENABLED(Y_DUAL_ENDSTOPS)
|
||||||
FORCE_INLINE static void set_homing_flag_y(const bool state) { performing_homing = state; }
|
FORCE_INLINE static void set_homing_flag_y(const bool state) { performing_homing = state; }
|
||||||
FORCE_INLINE static void set_y_lock(const bool state) { locked_y_motor = state; }
|
FORCE_INLINE static void set_y_lock(const bool state) { locked_y_motor = state; }
|
||||||
FORCE_INLINE static void set_y2_lock(const bool state) { locked_y2_motor = state; }
|
FORCE_INLINE static void set_y2_lock(const bool state) { locked_y2_motor = state; }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ENABLED(Z_DUAL_ENDSTOPS)
|
#if ENABLED(Z_DUAL_ENDSTOPS)
|
||||||
FORCE_INLINE static void set_homing_flag_z(const bool state) { performing_homing = state; }
|
FORCE_INLINE static void set_homing_flag_z(const bool state) { performing_homing = state; }
|
||||||
FORCE_INLINE static void set_z_lock(const bool state) { locked_z_motor = state; }
|
FORCE_INLINE static void set_z_lock(const bool state) { locked_z_motor = state; }
|
||||||
@ -351,6 +351,22 @@ class Stepper {
|
|||||||
|
|
||||||
static int8_t last_extruder = -1;
|
static int8_t last_extruder = -1;
|
||||||
|
|
||||||
|
#if ENABLED(LIN_ADVANCE)
|
||||||
|
if (current_block->active_extruder != last_extruder) {
|
||||||
|
current_adv_steps = 0; // If the now active extruder wasn't in use during the last move, its pressure is most likely gone.
|
||||||
|
LA_active_extruder = current_block->active_extruder;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (current_block->use_advance_lead) {
|
||||||
|
LA_decelerate_after = current_block->decelerate_after;
|
||||||
|
final_adv_steps = current_block->final_adv_steps;
|
||||||
|
max_adv_steps = current_block->max_adv_steps;
|
||||||
|
use_advance_lead = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
use_advance_lead = false;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (current_block->direction_bits != last_direction_bits || current_block->active_extruder != last_extruder) {
|
if (current_block->direction_bits != last_direction_bits || current_block->active_extruder != last_extruder) {
|
||||||
last_direction_bits = current_block->direction_bits;
|
last_direction_bits = current_block->direction_bits;
|
||||||
last_extruder = current_block->active_extruder;
|
last_extruder = current_block->active_extruder;
|
||||||
@ -366,22 +382,6 @@ class Stepper {
|
|||||||
acceleration_time = calc_timer_interval(acc_step_rate);
|
acceleration_time = calc_timer_interval(acc_step_rate);
|
||||||
_NEXT_ISR(acceleration_time);
|
_NEXT_ISR(acceleration_time);
|
||||||
|
|
||||||
#if ENABLED(LIN_ADVANCE)
|
|
||||||
if (current_block->use_advance_lead) {
|
|
||||||
current_estep_rate[current_block->active_extruder] = ((unsigned long)acc_step_rate * current_block->abs_adv_steps_multiplier8) >> 17;
|
|
||||||
final_estep_rate = (current_block->nominal_rate * current_block->abs_adv_steps_multiplier8) >> 17;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// SERIAL_ECHO_START();
|
|
||||||
// SERIAL_ECHOPGM("advance :");
|
|
||||||
// SERIAL_ECHO(current_block->advance/256.0);
|
|
||||||
// SERIAL_ECHOPGM("advance rate :");
|
|
||||||
// SERIAL_ECHO(current_block->advance_rate/256.0);
|
|
||||||
// SERIAL_ECHOPGM("initial advance :");
|
|
||||||
// SERIAL_ECHO(current_block->initial_advance/256.0);
|
|
||||||
// SERIAL_ECHOPGM("final advance :");
|
|
||||||
// SERIAL_ECHOLN(current_block->final_advance/256.0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if HAS_DIGIPOTSS || HAS_MOTOR_CURRENT_PWM
|
#if HAS_DIGIPOTSS || HAS_MOTOR_CURRENT_PWM
|
||||||
|
Loading…
Reference in New Issue
Block a user