Skip to content

Commit 614eae0

Browse files
committed
adjust, update, add G-code 'M203 P'
1 parent 8b52d94 commit 614eae0

10 files changed

+60
-34
lines changed

Marlin/Configuration.h

+2
Original file line numberDiff line numberDiff line change
@@ -1311,6 +1311,8 @@
13111311
#define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits
13121312
#endif
13131313

1314+
//#define MAX_PRINT_FEEDRATE_MM_S 1000 // (mm/s) Adjustable maximum feedrate for printing moves
1315+
13141316
/**
13151317
* Default Max Acceleration (speed change with time) (linear=mm/(s^2), rotational=°/(s^2))
13161318
* (Maximum start speed for accelerated moves)

Marlin/Configuration_adv.h

-5
Original file line numberDiff line numberDiff line change
@@ -3907,11 +3907,6 @@
39073907
#endif
39083908
#endif
39093909

3910-
//#define FEEDRATE_PRINTING_LIMIT
3911-
#if ENABLED(FEEDRATE_PRINTING_LIMIT)
3912-
#define DEFAULT_FEEDRATE_PRINTING_LIMIT 0 // (mm/sec)
3913-
#endif
3914-
39153910
// @section reporting
39163911

39173912
/**

Marlin/src/gcode/config/M200-M205.cpp

+13-1
Original file line numberDiff line numberDiff line change
@@ -188,12 +188,20 @@ void GcodeSuite::M201_report(const bool forReplay/*=true*/) {
188188
* With multiple extruders use T to specify which one.
189189
*/
190190
void GcodeSuite::M203() {
191-
if (!parser.seen("T" STR_AXES_LOGICAL))
191+
if (!parser.seen("T" TERN_(HAS_MAX_PRINT_FEEDRATE, "P") STR_AXES_LOGICAL))
192192
return M203_report();
193193

194194
const int8_t target_extruder = get_target_extruder_from_command();
195195
if (target_extruder < 0) return;
196196

197+
#if HAS_MAX_PRINT_FEEDRATE
198+
// Set the max Printing feedrate, applying only to moves with extrusion.
199+
if (parser.seenval('P')) {
200+
const float p = parser.value_linear_units();
201+
if (p == 0 || p > 100) planner.settings.max_print_feedrate_mm_s = p;
202+
}
203+
#endif
204+
197205
LOOP_LOGICAL_AXES(i)
198206
if (parser.seenval(AXIS_CHAR(i))) {
199207
const AxisEnum a = TERN(HAS_EXTRUDERS, (i == E_AXIS ? E_AXIS_N(target_extruder) : (AxisEnum)i), (AxisEnum)i);
@@ -225,6 +233,10 @@ void GcodeSuite::M203_report(const bool forReplay/*=true*/) {
225233
SERIAL_ECHOPGM_P(SP_E_STR, VOLUMETRIC_UNIT(planner.settings.max_feedrate_mm_s[E_AXIS]));
226234
#endif
227235

236+
#if HAS_MAX_PRINT_FEEDRATE
237+
SERIAL_ECHOPGM_P(SP_P_STR, LINEAR_UNIT(planner.settings.max_print_feedrate_mm_s));
238+
#endif
239+
228240
#if NUM_AXES || (HAS_EXTRUDERS && DISABLED(DISTINCT_E_FACTORS))
229241
SERIAL_EOL();
230242
#endif

Marlin/src/inc/Conditionals-1-axes.h

+1
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@
7373
#undef FILAMENT_RUNOUT_SENSOR
7474
#undef FILAMENT_RUNOUT_DISTANCE_MM
7575
#undef DISABLE_OTHER_EXTRUDERS
76+
#undef MAX_PRINT_FEEDRATE_MM_S
7677
#endif
7778

7879
#define E_OPTARG(N) OPTARG(HAS_MULTI_EXTRUDER, N)

Marlin/src/inc/Conditionals-3-etc.h

+4
Original file line numberDiff line numberDiff line change
@@ -677,3 +677,7 @@
677677
#if ALL(SPI_FLASH, HAS_MEDIA, MARLIN_DEV_MODE)
678678
#define SPI_FLASH_BACKUP 1
679679
#endif
680+
681+
#ifdef MAX_PRINT_FEEDRATE_MM_S
682+
#define HAS_MAX_PRINT_FEEDRATE 1
683+
#endif

Marlin/src/lcd/language/language_en.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -431,11 +431,11 @@ namespace LanguageNarrow_en {
431431
LSTR MSG_JUNCTION_DEVIATION = _UxGT("Junction Dev");
432432
LSTR MSG_STEP_SMOOTHING = _UxGT("Step Smoothing");
433433
LSTR MSG_MAX_SPEED = _UxGT("Max Speed (mm/s)");
434+
LSTR MSG_MAX_PRINT_SPEED = _UxGT("Max Print Speed");
434435
LSTR MSG_VMAX_A = _UxGT("Max ") STR_A _UxGT(" Speed");
435436
LSTR MSG_VMAX_B = _UxGT("Max ") STR_B _UxGT(" Speed");
436437
LSTR MSG_VMAX_C = _UxGT("Max ") STR_C _UxGT(" Speed");
437438
LSTR MSG_VMAX_N = _UxGT("Max @ Speed");
438-
LSTR MSG_MAX_PRINTING_SPEED = _UxGT("Max Printing Speed (mm/s)");
439439
LSTR MSG_VMAX_E = _UxGT("Max E Speed");
440440
LSTR MSG_VMAX_EN = _UxGT("Max * Speed");
441441
LSTR MSG_VMIN = _UxGT("Min Velocity");

Marlin/src/lcd/menu/menu_advanced.cpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -136,8 +136,9 @@ void menu_backlash();
136136
}
137137
#endif
138138

139-
#if ENABLED(FEEDRATE_PRINTING_LIMIT)
140-
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));
139+
#if HAS_MAX_PRINT_FEEDRATE
140+
const float max_rate = 1.4142135f * MAX(planner.settings.max_feedrate_mm_s[X_AXIS], planner.settings.max_feedrate_mm_s[Y_AXIS]);
141+
EDIT_ITEM_FAST(float5, MSG_MAX_PRINT_SPEED, &planner.max_print_feedrate_mm_s, 0, max_rate);
141142
#endif
142143

143144
#if ENABLED(CONFIGURE_FILAMENT_CHANGE)

Marlin/src/module/planner.cpp

+8-7
Original file line numberDiff line numberDiff line change
@@ -189,8 +189,8 @@ uint32_t Planner::max_acceleration_steps_per_s2[DISTINCT_AXES]; // (steps/s^2) D
189189
Planner::volumetric_extruder_feedrate_limit[EXTRUDERS]; // pre calculated extruder feedrate limit based on volumetric_extruder_limit; pre-calculated to reduce computation in the planner
190190
#endif
191191

192-
#if ENABLED(FEEDRATE_PRINTING_LIMIT)
193-
feedRate_t Planner::max_printing_feedrate_mm_s; // (mm/s)
192+
#if HAS_MAX_PRINT_FEEDRATE
193+
feedRate_t Planner::max_print_feedrate_mm_s; // (mm/s) M203 P - Maximum feedrate when printing
194194
#endif
195195

196196
#ifdef MAX7219_DEBUG_SLOWDOWN
@@ -2314,15 +2314,16 @@ bool Planner::_populate_block(
23142314
}
23152315
#endif
23162316

2317-
#if ENABLED(FEEDRATE_PRINTING_LIMIT)
2318-
if (max_printing_feedrate_mm_s > 0 && current_speed.e > 0) {
2319-
feedRate_t ps2 = (current_speed[0] * current_speed[0]) + (current_speed[1] * current_speed[1]);
2320-
if (ps2 > max_printing_feedrate_mm_s * max_printing_feedrate_mm_s)
2321-
NOMORE(speed_factor, max_printing_feedrate_mm_s / SQRT(ps2));
2317+
#if HAS_MAX_PRINT_FEEDRATE
2318+
if (max_print_feedrate_mm_s > 0 && current_speed.e) {
2319+
const feedRate_t ps2 = HYPOT2(current_speed.x, current_speed.y);
2320+
if (ps2 > sq(max_print_feedrate_mm_s))
2321+
NOMORE(speed_factor, max_print_feedrate_mm_s / SQRT(ps2)); // Multiply by ISQRT?
23222322
}
23232323
#endif
23242324

23252325
}
2326+
23262327
#endif // HAS_EXTRUDERS
23272328

23282329
#ifdef XY_FREQUENCY_LIMIT

Marlin/src/module/planner.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -471,8 +471,8 @@ class Planner {
471471
volumetric_extruder_feedrate_limit[EXTRUDERS]; // (mm/s) Feedrate limit calculated from volume limit
472472
#endif
473473

474-
#if ENABLED(FEEDRATE_PRINTING_LIMIT)
475-
static feedRate_t max_printing_feedrate_mm_s; // (mm/s) Maximum feedrate when printing
474+
#if HAS_MAX_PRINT_FEEDRATE
475+
static feedRate_t max_print_feedrate_mm_s; // (mm/s) M203 P - Maximum feedrate when printing
476476
#endif
477477

478478
static planner_settings_t settings;

Marlin/src/module/settings.cpp

+26-16
Original file line numberDiff line numberDiff line change
@@ -476,8 +476,11 @@ typedef struct SettingsDataStruct {
476476
float planner_filament_size[EXTRUDERS]; // M200 T D planner.filament_size[]
477477
float planner_volumetric_extruder_limit[EXTRUDERS]; // M200 T L planner.volumetric_extruder_limit[]
478478

479-
#if ENABLED(FEEDRATE_PRINTING_LIMIT)
480-
feedRate_t max_printing_feedrate_mm_s;
479+
//
480+
// Max Print Feedrate
481+
//
482+
#if HAS_MAX_PRINT_FEEDRATE
483+
feedRate_t max_print_feedrate_mm_s; // M203 P planner.max_print_feedrate_mm_s
481484
#endif
482485

483486
//
@@ -1352,6 +1355,13 @@ void MarlinSettings::postprocess() {
13521355
EEPROM_WRITE(homing_feedrate_mm_m);
13531356
#endif
13541357

1358+
//
1359+
// Max Print Feedrate
1360+
//
1361+
#if HAS_MAX_PRINT_FEEDRATE
1362+
EEPROM_WRITE(planner.max_print_feedrate_mm_s);
1363+
#endif
1364+
13551365
//
13561366
// Volumetric & Filament Size
13571367
//
@@ -1381,10 +1391,6 @@ void MarlinSettings::postprocess() {
13811391
#endif
13821392
}
13831393

1384-
#if ENABLED(FEEDRATE_PRINTING_LIMIT)
1385-
EEPROM_WRITE(planner.max_printing_feedrate_mm_s);
1386-
#endif
1387-
13881394
//
13891395
// TMC Configuration
13901396
//
@@ -2452,6 +2458,13 @@ void MarlinSettings::postprocess() {
24522458
EEPROM_READ(homing_feedrate_mm_m);
24532459
#endif
24542460

2461+
//
2462+
// Max Print Feedrate
2463+
//
2464+
#if HAS_MAX_PRINT_FEEDRATE
2465+
EEPROM_READ(planner.max_print_feedrate_mm_s);
2466+
#endif
2467+
24552468
//
24562469
// Volumetric & Filament Size
24572470
//
@@ -2476,12 +2489,6 @@ void MarlinSettings::postprocess() {
24762489
#endif
24772490
}
24782491

2479-
#if ENABLED(FEEDRATE_PRINTING_LIMIT)
2480-
feedRate_t max_printing_feedrate_mm_s;
2481-
EEPROM_READ(max_printing_feedrate_mm_s);
2482-
if (!validating) planner.max_printing_feedrate_mm_s = max_printing_feedrate_mm_s;
2483-
#endif
2484-
24852492
//
24862493
// TMC Stepper Settings
24872494
//
@@ -3698,6 +3705,13 @@ void MarlinSettings::reset() {
36983705
//
36993706
TERN_(EDITABLE_HOMING_FEEDRATE, homing_feedrate_mm_m = xyz_feedrate_t(HOMING_FEEDRATE_MM_M));
37003707

3708+
//
3709+
// Max Print Feedrate
3710+
//
3711+
#if HAS_MAX_PRINT_FEEDRATE
3712+
planner.max_print_feedrate_mm_s = MAX_PRINT_FEEDRATE_MM_S;
3713+
#endif
3714+
37013715
//
37023716
// Volumetric & Filament Size
37033717
//
@@ -3711,10 +3725,6 @@ void MarlinSettings::reset() {
37113725
#endif
37123726
#endif
37133727

3714-
#if ENABLED(FEEDRATE_PRINTING_LIMIT)
3715-
planner.max_printing_feedrate_mm_s = DEFAULT_FEEDRATE_PRINTING_LIMIT;
3716-
#endif
3717-
37183728
endstops.enable_globally(ENABLED(ENDSTOPS_ALWAYS_ON_DEFAULT));
37193729

37203730
reset_stepper_drivers();

0 commit comments

Comments
 (0)