Skip to content

Commit

Permalink
Limit printing speed
Browse files Browse the repository at this point in the history
  • Loading branch information
vovodroid committed Feb 14, 2025
1 parent 4d0c684 commit 8b52d94
Show file tree
Hide file tree
Showing 6 changed files with 46 additions and 1 deletion.
5 changes: 5 additions & 0 deletions Marlin/Configuration_adv.h
Original file line number Diff line number Diff line change
Expand Up @@ -3907,6 +3907,11 @@
#endif
#endif

//#define FEEDRATE_PRINTING_LIMIT
#if ENABLED(FEEDRATE_PRINTING_LIMIT)
#define DEFAULT_FEEDRATE_PRINTING_LIMIT 0 // (mm/sec)
#endif

// @section reporting

/**
Expand Down
1 change: 1 addition & 0 deletions Marlin/src/lcd/language/language_en.h
Original file line number Diff line number Diff line change
Expand Up @@ -435,6 +435,7 @@ namespace LanguageNarrow_en {
LSTR MSG_VMAX_B = _UxGT("Max ") STR_B _UxGT(" Speed");
LSTR MSG_VMAX_C = _UxGT("Max ") STR_C _UxGT(" Speed");
LSTR MSG_VMAX_N = _UxGT("Max @ Speed");
LSTR MSG_MAX_PRINTING_SPEED = _UxGT("Max Printing Speed (mm/s)");
LSTR MSG_VMAX_E = _UxGT("Max E Speed");
LSTR MSG_VMAX_EN = _UxGT("Max * Speed");
LSTR MSG_VMIN = _UxGT("Min Velocity");
Expand Down
4 changes: 4 additions & 0 deletions Marlin/src/lcd/menu/menu_advanced.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,10 @@ void menu_backlash();
}
#endif

#if ENABLED(FEEDRATE_PRINTING_LIMIT)
EDIT_ITEM_FAST(float5, MSG_MAX_PRINTING_SPEED, &planner.max_printing_feedrate_mm_s, 0, MAX(planner.settings.max_feedrate_mm_s[0]*1.414, planner.settings.max_feedrate_mm_s[1]*1.414));
#endif

#if ENABLED(CONFIGURE_FILAMENT_CHANGE)
constexpr float extrude_maxlength = TERN(PREVENT_LENGTHY_EXTRUDE, EXTRUDE_MAXLENGTH, 999);

Expand Down
13 changes: 13 additions & 0 deletions Marlin/src/module/planner.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,10 @@ uint32_t Planner::max_acceleration_steps_per_s2[DISTINCT_AXES]; // (steps/s^2) D
Planner::volumetric_extruder_feedrate_limit[EXTRUDERS]; // pre calculated extruder feedrate limit based on volumetric_extruder_limit; pre-calculated to reduce computation in the planner
#endif

#if ENABLED(FEEDRATE_PRINTING_LIMIT)
feedRate_t Planner::max_printing_feedrate_mm_s; // (mm/s)
#endif

#ifdef MAX7219_DEBUG_SLOWDOWN
uint8_t Planner::slowdown_count = 0;
#endif
Expand Down Expand Up @@ -2309,6 +2313,15 @@ bool Planner::_populate_block(
}
}
#endif

#if ENABLED(FEEDRATE_PRINTING_LIMIT)
if (max_printing_feedrate_mm_s > 0 && current_speed.e > 0) {
feedRate_t ps2 = (current_speed[0] * current_speed[0]) + (current_speed[1] * current_speed[1]);
if (ps2 > max_printing_feedrate_mm_s * max_printing_feedrate_mm_s)
NOMORE(speed_factor, max_printing_feedrate_mm_s / SQRT(ps2));
}
#endif

}
#endif // HAS_EXTRUDERS

Expand Down
4 changes: 4 additions & 0 deletions Marlin/src/module/planner.h
Original file line number Diff line number Diff line change
Expand Up @@ -471,6 +471,10 @@ class Planner {
volumetric_extruder_feedrate_limit[EXTRUDERS]; // (mm/s) Feedrate limit calculated from volume limit
#endif

#if ENABLED(FEEDRATE_PRINTING_LIMIT)
static feedRate_t max_printing_feedrate_mm_s; // (mm/s) Maximum feedrate when printing
#endif

static planner_settings_t settings;

#if ENABLED(LASER_FEATURE)
Expand Down
20 changes: 19 additions & 1 deletion Marlin/src/module/settings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
*/

// Change EEPROM version if the structure changes
#define EEPROM_VERSION "V90"
#define EEPROM_VERSION "V91"
#define EEPROM_OFFSET 100

// Check the integrity of data offsets.
Expand Down Expand Up @@ -476,6 +476,10 @@ typedef struct SettingsDataStruct {
float planner_filament_size[EXTRUDERS]; // M200 T D planner.filament_size[]
float planner_volumetric_extruder_limit[EXTRUDERS]; // M200 T L planner.volumetric_extruder_limit[]

#if ENABLED(FEEDRATE_PRINTING_LIMIT)
feedRate_t max_printing_feedrate_mm_s;
#endif

//
// HAS_TRINAMIC_CONFIG
//
Expand Down Expand Up @@ -1377,6 +1381,10 @@ void MarlinSettings::postprocess() {
#endif
}

#if ENABLED(FEEDRATE_PRINTING_LIMIT)
EEPROM_WRITE(planner.max_printing_feedrate_mm_s);
#endif

//
// TMC Configuration
//
Expand Down Expand Up @@ -2468,6 +2476,12 @@ void MarlinSettings::postprocess() {
#endif
}

#if ENABLED(FEEDRATE_PRINTING_LIMIT)
feedRate_t max_printing_feedrate_mm_s;
EEPROM_READ(max_printing_feedrate_mm_s);
if (!validating) planner.max_printing_feedrate_mm_s = max_printing_feedrate_mm_s;
#endif

//
// TMC Stepper Settings
//
Expand Down Expand Up @@ -3697,6 +3711,10 @@ void MarlinSettings::reset() {
#endif
#endif

#if ENABLED(FEEDRATE_PRINTING_LIMIT)
planner.max_printing_feedrate_mm_s = DEFAULT_FEEDRATE_PRINTING_LIMIT;
#endif

endstops.enable_globally(ENABLED(ENDSTOPS_ALWAYS_ON_DEFAULT));

reset_stepper_drivers();
Expand Down

0 comments on commit 8b52d94

Please sign in to comment.