Parametrize LA limits and threshold values
Allow the LA 1.5 MAX value to be configured in Configuration_adv.h. Define a customizable LA10<>15 detection threshold in function of the above limit. Clamp the result of of the LA10->15 return value to always respect the new LA_K_MAX.
This commit is contained in:
parent
baaa372a56
commit
0b666ee733
|
|
@ -285,11 +285,13 @@
|
||||||
#define LIN_ADVANCE
|
#define LIN_ADVANCE
|
||||||
|
|
||||||
#ifdef LIN_ADVANCE
|
#ifdef LIN_ADVANCE
|
||||||
#define LIN_ADVANCE_K 0 // Unit: mm compression per 1mm/s extruder speed
|
#define LA_K_DEF 0 // Default K factor (Unit: mm compression per 1mm/s extruder speed)
|
||||||
//#define LA_NOCOMPAT // Disable Linear Advance 1.0 compatibility
|
#define LA_K_MAX 10 // Maximum acceptable K factor (exclusive, see notes in planner.cpp:plan_buffer_line)
|
||||||
//#define LA_LIVE_K // Allow adjusting K in the Tune menu
|
#define LA_LA10_MIN LA_K_MAX // Lin. Advance 1.0 threshold value (inclusive)
|
||||||
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
//#define LA_NOCOMPAT // Disable Linear Advance 1.0 compatibility
|
||||||
//#define LA_DEBUG_LOGIC // @wavexx: setup logic channels for isr debugging
|
//#define LA_LIVE_K // Allow adjusting K in the Tune menu
|
||||||
|
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
||||||
|
//#define LA_DEBUG_LOGIC // @wavexx: setup logic channels for isr debugging
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Arc interpretation settings:
|
// Arc interpretation settings:
|
||||||
|
|
|
||||||
|
|
@ -2066,7 +2066,7 @@ static float probe_pt(float x, float y, float z_before) {
|
||||||
inline void gcode_M900() {
|
inline void gcode_M900() {
|
||||||
float newK = code_seen('K') ? code_value_float() : -2;
|
float newK = code_seen('K') ? code_value_float() : -2;
|
||||||
#ifdef LA_NOCOMPAT
|
#ifdef LA_NOCOMPAT
|
||||||
if (newK >= 0 && newK < 10)
|
if (newK >= 0 && newK < LA_K_MAX)
|
||||||
extruder_advance_K = newK;
|
extruder_advance_K = newK;
|
||||||
else
|
else
|
||||||
SERIAL_ECHOLNPGM("K out of allowed range!");
|
SERIAL_ECHOLNPGM("K out of allowed range!");
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
#include "la10compat.h"
|
#include "la10compat.h"
|
||||||
#include "Marlin.h"
|
#include "Marlin.h"
|
||||||
|
#include <float.h>
|
||||||
|
|
||||||
|
|
||||||
static LA10C_MODE la10c_mode = LA10C_UNKNOWN; // Current LA compatibility mode
|
static LA10C_MODE la10c_mode = LA10C_UNKNOWN; // Current LA compatibility mode
|
||||||
|
|
@ -38,7 +39,9 @@ void la10c_mode_change(LA10C_MODE mode)
|
||||||
static float la10c_convert(float k)
|
static float la10c_convert(float k)
|
||||||
{
|
{
|
||||||
float new_K = k * 0.004 - 0.05;
|
float new_K = k * 0.004 - 0.05;
|
||||||
return (new_K < 0? 0: new_K);
|
return new_K < 0? 0:
|
||||||
|
new_K > (LA_K_MAX - FLT_EPSILON)? (LA_K_MAX - FLT_EPSILON):
|
||||||
|
new_K;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -52,11 +55,11 @@ float la10c_value(float k)
|
||||||
else if(k < 0)
|
else if(k < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
la10c_mode_change(k < 10? LA10C_LA15: LA10C_LA10);
|
la10c_mode_change(k < LA_LA10_MIN? LA10C_LA15: LA10C_LA10);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(la10c_mode == LA10C_LA15)
|
if(la10c_mode == LA10C_LA15)
|
||||||
return (k >= 0 && k < 10? k: -1);
|
return (k >= 0 && k < LA_K_MAX? k: -1);
|
||||||
else
|
else
|
||||||
return (k >= 0? la10c_convert(k): -1);
|
return (k >= 0? la10c_convert(k): -1);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -126,7 +126,7 @@ float extrude_min_temp=EXTRUDE_MINTEMP;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef LIN_ADVANCE
|
#ifdef LIN_ADVANCE
|
||||||
float extruder_advance_K = LIN_ADVANCE_K;
|
float extruder_advance_K = LA_K_DEF;
|
||||||
float position_float[NUM_AXIS];
|
float position_float[NUM_AXIS];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue