diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index 4c5e290278..d1e94cac51 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -2357,9 +2357,9 @@ #define LIN_ADVANCE #if ENABLED(LIN_ADVANCE) #if ENABLED(DISTINCT_E_FACTORS) - #define ADVANCE_K { 0.00 } // (mm) Compression length per 1mm/s extruder speed, per extruder + #define ADVANCE_K { 0.00 } // (mm) Compression length per 1mm/s extruder speed, per extruder #else - #define ADVANCE_K 0.00 // (mm) Compression length applying to all extruders + #define ADVANCE_K 0.00 // (mm) Compression length applying to all extruders #endif //#define ADVANCE_K_EXTRA // Add a second linear advance constant, configurable with M900 L. //#define LA_DEBUG // Print debug information to serial during operation. Disable for production use. diff --git a/Marlin/src/gcode/feature/advance/M900.cpp b/Marlin/src/gcode/feature/advance/M900.cpp index 1ccc5b4ee6..4e8f28ae00 100644 --- a/Marlin/src/gcode/feature/advance/M900.cpp +++ b/Marlin/src/gcode/feature/advance/M900.cpp @@ -164,6 +164,9 @@ void GcodeSuite::M900() { SERIAL_EOL(); #endif #endif + #if ENABLED(SMOOTH_LIN_ADV) + SERIAL_ECHOLNPGM("Advance TAU=", Stepper::get_advance_tau()); + #endif #endif // !ADVANCE_K_EXTRA } diff --git a/Marlin/src/lcd/e3v2/proui/dwin.cpp b/Marlin/src/lcd/e3v2/proui/dwin.cpp index 563e17e342..6614947f5d 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/proui/dwin.cpp @@ -530,7 +530,7 @@ void DWIN_DrawStatusMessage() { void Draw_Print_Labels() { DWINUI::Draw_String( 46, 173, GET_TEXT_F(MSG_INFO_PRINT_TIME)); DWINUI::Draw_String(181, 173, GET_TEXT_F(MSG_REMAINING_TIME)); - TERN_(SHOW_INTERACTION_TIME, DWINUI::Draw_String(100, 215, F("Until Filament Change"));) + TERN_(SHOuW_INTERACTION_TIME, DWINUI::Draw_String(100, 215, F("Until Filament Change"));) } static uint8_t _percent_done = 100; diff --git a/Marlin/src/lcd/menu/menu_tune.cpp b/Marlin/src/lcd/menu/menu_tune.cpp index 258d5fb40d..3299f97a67 100644 --- a/Marlin/src/lcd/menu/menu_tune.cpp +++ b/Marlin/src/lcd/menu/menu_tune.cpp @@ -236,6 +236,11 @@ void menu_tune() { #endif #endif + #if ENABLED(SMOOTH_LIN_ADV) + editable.decimal = Stepper::get_advance_tau(); + EDIT_ITEM(float54, MSG_ADVANCE_TAU, &editable.decimal, 0.0f, 0.5f, []{ Stepper::set_advance_tau(editable.decimal); }); + #endif + // // Nonlinear Extrusion state // diff --git a/Marlin/src/module/planner.cpp b/Marlin/src/module/planner.cpp index 1c80c9da58..b9a13e7893 100644 --- a/Marlin/src/module/planner.cpp +++ b/Marlin/src/module/planner.cpp @@ -817,7 +817,7 @@ void Planner::calculate_trapezoid_for_block(block_t * const block, const_float_t uint32_t cruise_rate = block->nominal_rate; #endif - // Steps for acceleration, plateau and deceleration + // Steps for acceleration, plateau, and deceleration int32_t plateau_steps = block->step_event_count, accelerate_steps = 0, decelerate_steps = 0; @@ -828,9 +828,11 @@ void Planner::calculate_trapezoid_for_block(block_t * const block, const_float_t inverse_accel = 1.0f / accel; const float half_inverse_accel = 0.5f * inverse_accel, nominal_rate_sq = FLOAT_SQ(block->nominal_rate), - // Steps required for acceleration, deceleration to/from nominal rate - decelerate_steps_float = half_inverse_accel * (nominal_rate_sq - FLOAT_SQ(final_rate)), - accelerate_steps_float = half_inverse_accel * (nominal_rate_sq - FLOAT_SQ(initial_rate)); + initial_rate_sq = FLOAT_SQ(initial_rate), + final_rate_sq = FLOAT_SQ(final_rate), + // Steps required for acceleration and deceleration to/from nominal rate + decelerate_steps_float = half_inverse_accel * (nominal_rate_sq - final_rate_sq), + accelerate_steps_float = half_inverse_accel * (nominal_rate_sq - initial_rate_sq); // Aims to fully reach nominal and final rates accelerate_steps = CEIL(accelerate_steps_float); decelerate_steps = CEIL(decelerate_steps_float); @@ -856,7 +858,7 @@ void Planner::calculate_trapezoid_for_block(block_t * const block, const_float_t #if ANY(S_CURVE_ACCELERATION, SMOOTH_LIN_ADVANCE) const float rate_factor = inverse_accel * (STEPPER_TIMER_RATE); - // Jerk controlled speed requires to express speed versus time, NOT steps + // Jerk-controlled speed requires expressing speed versus time, NOT steps uint32_t acceleration_time = rate_factor * float(cruise_rate - initial_rate), deceleration_time = rate_factor * float(cruise_rate - final_rate); #endif @@ -893,6 +895,12 @@ void Planner::calculate_trapezoid_for_block(block_t * const block, const_float_t } #endif + #if ENABLED(LA_DEBUG) + SERIAL_ECHOLNPAIR("Accelerate Steps: ", accelerate_steps); + SERIAL_ECHOLNPAIR("Decelerate Steps: ", decelerate_steps); + SERIAL_ECHOLNPAIR("Plateau Steps: ", plateau_steps); + #endif + #if ENABLED(LASER_POWER_TRAP) /** * Laser Trapezoid Calculations diff --git a/Marlin/src/module/settings.cpp b/Marlin/src/module/settings.cpp index f90c72a5da..41eee246aa 100644 --- a/Marlin/src/module/settings.cpp +++ b/Marlin/src/module/settings.cpp @@ -2463,7 +2463,7 @@ void MarlinSettings::postprocess() { #endif EEPROM_READ(lpq_len); } - // #endif + // #endif // // PIDTEMPBED @@ -2582,7 +2582,7 @@ void MarlinSettings::postprocess() { // // Firmware Retraction // - // #if ENABLED(FWRETRACT) + // #if ENABLED(FWRETRACT) { _FIELD_TEST(fwretract_settings); fwretract_settings_t fwretract_settings; @@ -2800,6 +2800,14 @@ void MarlinSettings::postprocess() { if (!validating) DISTINCT_E_LOOP() stepper.set_advance_tau(tau[e], e); #endif + + #if ENABLED(SMOOTH_LIN_ADV) + float extruder_advance_TAU; + EEPROM_READ(extruder_advance_TAU); + if (!validating) { + Stepper::set_advance_tau(extruder_advance_TAU); + } + #endif } #endif