Skip to content

Commit

Permalink
Merge pull request #2639 from wavexx/la15_adj_threshold
Browse files Browse the repository at this point in the history
Adjustable Linear Advance limits and thresholds
  • Loading branch information
DRracer committed May 6, 2020
2 parents e02efae + 2f4f454 commit 7079606
Show file tree
Hide file tree
Showing 8 changed files with 40 additions and 30 deletions.
12 changes: 7 additions & 5 deletions Firmware/Configuration_adv.h
Original file line number Diff line number Diff line change
Expand Up @@ -285,11 +285,13 @@
#define LIN_ADVANCE

#ifdef LIN_ADVANCE
#define LIN_ADVANCE_K 0 // Unit: mm compression per 1mm/s extruder speed
//#define LA_NOCOMPAT // Disable Linear Advance 1.0 compatibility
//#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
#define LA_K_DEF 0 // Default K factor (Unit: mm compression per 1mm/s extruder speed)
#define LA_K_MAX 10 // Maximum acceptable K factor (exclusive, see notes in planner.cpp:plan_buffer_line)
#define LA_LA10_MIN LA_K_MAX // Lin. Advance 1.0 threshold value (inclusive)
//#define LA_NOCOMPAT // Disable Linear Advance 1.0 compatibility
//#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

// Arc interpretation settings:
Expand Down
2 changes: 1 addition & 1 deletion Firmware/Marlin.h
Original file line number Diff line number Diff line change
Expand Up @@ -238,8 +238,8 @@ void get_coordinates();
void prepare_move();
void kill(const char *full_screen_message = NULL, unsigned char id = 0);
void Stop();

bool IsStopped();
void finishAndDisableSteppers();

//put an ASCII command at the end of the current buffer.
void enquecommand(const char *cmd, bool from_progmem = false);
Expand Down
28 changes: 21 additions & 7 deletions Firmware/Marlin_main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2066,15 +2066,16 @@ static float probe_pt(float x, float y, float z_before) {
inline void gcode_M900() {
float newK = code_seen('K') ? code_value_float() : -2;
#ifdef LA_NOCOMPAT
if (newK >= 0 && newK < 10)
if (newK >= 0 && newK < LA_K_MAX)
extruder_advance_K = newK;
else
SERIAL_ECHOLNPGM("K out of allowed range!");
#else
if (newK == 0)
{
extruder_advance_K = 0;
else if (newK == -1)
la10c_reset();
}
else
{
newK = la10c_value(newK);
Expand Down Expand Up @@ -4864,11 +4865,6 @@ if(eSoundMode!=e_SOUND_MODE_SILENT)
case_G80:
{
mesh_bed_leveling_flag = true;
#ifndef LA_NOCOMPAT
// When printing via USB there's no clear boundary between prints. Abuse MBL to indicate
// the beginning of a new print, allowing a new autodetected setting just after G80.
la10c_reset();
#endif
#ifndef PINDA_THERMISTOR
static bool run = false; // thermistor-less PINDA temperature compensation is running
#endif // ndef PINDA_THERMISTOR
Expand Down Expand Up @@ -9726,6 +9722,24 @@ void Stop()

bool IsStopped() { return Stopped; };

void finishAndDisableSteppers()
{
st_synchronize();
disable_x();
disable_y();
disable_z();
disable_e0();
disable_e1();
disable_e2();

#ifndef LA_NOCOMPAT
// Steppers are disabled both when a print is stopped and also via M84 (which is additionally
// checked-for to indicate a complete file), so abuse this function to reset the LA detection
// state for the next print.
la10c_reset();
#endif
}

#ifdef FAST_PWM_FAN
void setPwmFrequency(uint8_t pin, int val)
{
Expand Down
9 changes: 6 additions & 3 deletions Firmware/la10compat.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#include "la10compat.h"
#include "Marlin.h"
#include <float.h>


static LA10C_MODE la10c_mode = LA10C_UNKNOWN; // Current LA compatibility mode
Expand Down Expand Up @@ -38,7 +39,9 @@ void la10c_mode_change(LA10C_MODE mode)
static float la10c_convert(float k)
{
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;
}


Expand All @@ -52,11 +55,11 @@ float la10c_value(float k)
else if(k < 0)
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)
return (k >= 0 && k < 10? k: -1);
return (k >= 0 && k < LA_K_MAX? k: -1);
else
return (k >= 0? la10c_convert(k): -1);
}
Expand Down
2 changes: 1 addition & 1 deletion Firmware/planner.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ float extrude_min_temp=EXTRUDE_MINTEMP;
#endif

#ifdef LIN_ADVANCE
float extruder_advance_K = LIN_ADVANCE_K;
float extruder_advance_K = LA_K_DEF;
float position_float[NUM_AXIS];
#endif

Expand Down
11 changes: 0 additions & 11 deletions Firmware/stepper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1356,17 +1356,6 @@ float st_get_position_mm(uint8_t axis)
}


void finishAndDisableSteppers()
{
st_synchronize();
disable_x();
disable_y();
disable_z();
disable_e0();
disable_e1();
disable_e2();
}

void quickStop()
{
DISABLE_STEPPER_DRIVER_INTERRUPT();
Expand Down
2 changes: 0 additions & 2 deletions Firmware/stepper.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,8 +69,6 @@ void invert_z_endstop(bool endstop_invert);

void checkStepperErrors(); //Print errors detected by the stepper

void finishAndDisableSteppers();

extern block_t *current_block; // A pointer to the block currently being traced
extern bool x_min_endstop;
extern bool x_max_endstop;
Expand Down
4 changes: 4 additions & 0 deletions Firmware/ultralcd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,10 @@
#include "adc.h"
#include "config.h"

#ifndef LA_NOCOMPAT
#include "la10compat.h"
#endif


int scrollstuff = 0;
char longFilenameOLD[LONG_FILENAME_LENGTH];
Expand Down

0 comments on commit 7079606

Please sign in to comment.