|
@@ -37,7 +37,7 @@
|
37
|
37
|
*/
|
38
|
38
|
|
39
|
39
|
// Change EEPROM version if the structure changes
|
40
|
|
-#define EEPROM_VERSION "V54"
|
|
40
|
+#define EEPROM_VERSION "V55"
|
41
|
41
|
#define EEPROM_OFFSET 100
|
42
|
42
|
|
43
|
43
|
// Check the integrity of data offsets.
|
|
@@ -112,16 +112,17 @@ typedef struct SettingsDataStruct {
|
112
|
112
|
//
|
113
|
113
|
uint8_t esteppers; // XYZE_N - XYZ
|
114
|
114
|
|
|
115
|
+ uint32_t planner_max_acceleration_mm_per_s2[XYZE_N], // M201 XYZE planner.max_acceleration_mm_per_s2[XYZE_N]
|
|
116
|
+ planner_min_segment_time_us; // M205 B planner.min_segment_time_us
|
115
|
117
|
float planner_axis_steps_per_mm[XYZE_N], // M92 XYZE planner.axis_steps_per_mm[XYZE_N]
|
116
|
|
- planner_max_feedrate_mm_s[XYZE_N]; // M203 XYZE planner.max_feedrate_mm_s[XYZE_N]
|
117
|
|
- uint32_t planner_max_acceleration_mm_per_s2[XYZE_N]; // M201 XYZE planner.max_acceleration_mm_per_s2[XYZE_N]
|
118
|
|
- float planner_acceleration, // M204 P planner.acceleration
|
|
118
|
+ planner_max_feedrate_mm_s[XYZE_N], // M203 XYZE planner.max_feedrate_mm_s[XYZE_N]
|
|
119
|
+ planner_acceleration, // M204 P planner.acceleration
|
119
|
120
|
planner_retract_acceleration, // M204 R planner.retract_acceleration
|
120
|
121
|
planner_travel_acceleration, // M204 T planner.travel_acceleration
|
121
|
122
|
planner_min_feedrate_mm_s, // M205 S planner.min_feedrate_mm_s
|
122
|
|
- planner_min_travel_feedrate_mm_s; // M205 T planner.min_travel_feedrate_mm_s
|
123
|
|
- uint32_t planner_min_segment_time_us; // M205 B planner.min_segment_time_us
|
124
|
|
- float planner_max_jerk[XYZE]; // M205 XYZE planner.max_jerk[XYZE]
|
|
123
|
+ planner_min_travel_feedrate_mm_s, // M205 T planner.min_travel_feedrate_mm_s
|
|
124
|
+ planner_max_jerk[XYZE], // M205 XYZE planner.max_jerk[XYZE]
|
|
125
|
+ planner_junction_deviation_mm; // M205 J planner.junction_deviation_mm
|
125
|
126
|
|
126
|
127
|
float home_offset[XYZ]; // M206 XYZ
|
127
|
128
|
|
|
@@ -401,18 +402,24 @@ void MarlinSettings::postprocess() {
|
401
|
402
|
const uint8_t esteppers = COUNT(planner.axis_steps_per_mm) - XYZ;
|
402
|
403
|
EEPROM_WRITE(esteppers);
|
403
|
404
|
|
|
405
|
+ EEPROM_WRITE(planner.max_acceleration_mm_per_s2);
|
|
406
|
+ EEPROM_WRITE(planner.min_segment_time_us);
|
404
|
407
|
EEPROM_WRITE(planner.axis_steps_per_mm);
|
405
|
408
|
EEPROM_WRITE(planner.max_feedrate_mm_s);
|
406
|
|
- EEPROM_WRITE(planner.max_acceleration_mm_per_s2);
|
407
|
|
-
|
408
|
409
|
EEPROM_WRITE(planner.acceleration);
|
409
|
410
|
EEPROM_WRITE(planner.retract_acceleration);
|
410
|
411
|
EEPROM_WRITE(planner.travel_acceleration);
|
411
|
412
|
EEPROM_WRITE(planner.min_feedrate_mm_s);
|
412
|
413
|
EEPROM_WRITE(planner.min_travel_feedrate_mm_s);
|
413
|
|
- EEPROM_WRITE(planner.min_segment_time_us);
|
414
|
414
|
EEPROM_WRITE(planner.max_jerk);
|
415
|
415
|
|
|
416
|
+ #if ENABLED(JUNCTION_DEVIATION)
|
|
417
|
+ EEPROM_WRITE(planner.junction_deviation_mm);
|
|
418
|
+ #else
|
|
419
|
+ dummy = 0.02;
|
|
420
|
+ EEPROM_WRITE(dummy);
|
|
421
|
+ #endif
|
|
422
|
+
|
416
|
423
|
_FIELD_TEST(home_offset);
|
417
|
424
|
|
418
|
425
|
#if !HAS_HOME_OFFSET
|
|
@@ -980,17 +987,20 @@ void MarlinSettings::postprocess() {
|
980
|
987
|
|
981
|
988
|
// Get only the number of E stepper parameters previously stored
|
982
|
989
|
// Any steppers added later are set to their defaults
|
983
|
|
- const float def1[] = DEFAULT_AXIS_STEPS_PER_UNIT, def2[] = DEFAULT_MAX_FEEDRATE;
|
984
|
|
- const uint32_t def3[] = DEFAULT_MAX_ACCELERATION;
|
985
|
|
- float tmp1[XYZ + esteppers], tmp2[XYZ + esteppers];
|
986
|
|
- uint32_t tmp3[XYZ + esteppers];
|
987
|
|
- EEPROM_READ(tmp1);
|
988
|
|
- EEPROM_READ(tmp2);
|
989
|
|
- EEPROM_READ(tmp3);
|
|
990
|
+ const uint32_t def1[] = DEFAULT_MAX_ACCELERATION;
|
|
991
|
+ const float def2[] = DEFAULT_AXIS_STEPS_PER_UNIT, def3[] = DEFAULT_MAX_FEEDRATE;
|
|
992
|
+
|
|
993
|
+ uint32_t tmp1[XYZ + esteppers];
|
|
994
|
+ EEPROM_READ(tmp1); // max_acceleration_mm_per_s2
|
|
995
|
+ EEPROM_READ(planner.min_segment_time_us);
|
|
996
|
+
|
|
997
|
+ float tmp2[XYZ + esteppers], tmp3[XYZ + esteppers];
|
|
998
|
+ EEPROM_READ(tmp2); // axis_steps_per_mm
|
|
999
|
+ EEPROM_READ(tmp3); // max_feedrate_mm_s
|
990
|
1000
|
if (!validating) LOOP_XYZE_N(i) {
|
991
|
|
- planner.axis_steps_per_mm[i] = i < XYZ + esteppers ? tmp1[i] : def1[i < COUNT(def1) ? i : COUNT(def1) - 1];
|
992
|
|
- planner.max_feedrate_mm_s[i] = i < XYZ + esteppers ? tmp2[i] : def2[i < COUNT(def2) ? i : COUNT(def2) - 1];
|
993
|
|
- planner.max_acceleration_mm_per_s2[i] = i < XYZ + esteppers ? tmp3[i] : def3[i < COUNT(def3) ? i : COUNT(def3) - 1];
|
|
1001
|
+ planner.max_acceleration_mm_per_s2[i] = i < XYZ + esteppers ? tmp1[i] : def1[i < COUNT(def1) ? i : COUNT(def1) - 1];
|
|
1002
|
+ planner.axis_steps_per_mm[i] = i < XYZ + esteppers ? tmp2[i] : def2[i < COUNT(def2) ? i : COUNT(def2) - 1];
|
|
1003
|
+ planner.max_feedrate_mm_s[i] = i < XYZ + esteppers ? tmp3[i] : def3[i < COUNT(def3) ? i : COUNT(def3) - 1];
|
994
|
1004
|
}
|
995
|
1005
|
|
996
|
1006
|
EEPROM_READ(planner.acceleration);
|
|
@@ -998,9 +1008,14 @@ void MarlinSettings::postprocess() {
|
998
|
1008
|
EEPROM_READ(planner.travel_acceleration);
|
999
|
1009
|
EEPROM_READ(planner.min_feedrate_mm_s);
|
1000
|
1010
|
EEPROM_READ(planner.min_travel_feedrate_mm_s);
|
1001
|
|
- EEPROM_READ(planner.min_segment_time_us);
|
1002
|
1011
|
EEPROM_READ(planner.max_jerk);
|
1003
|
1012
|
|
|
1013
|
+ #if ENABLED(JUNCTION_DEVIATION)
|
|
1014
|
+ EEPROM_READ(planner.junction_deviation_mm);
|
|
1015
|
+ #else
|
|
1016
|
+ EEPROM_READ(dummy);
|
|
1017
|
+ #endif
|
|
1018
|
+
|
1004
|
1019
|
//
|
1005
|
1020
|
// Home Offset (M206)
|
1006
|
1021
|
//
|
|
@@ -1518,9 +1533,9 @@ void MarlinSettings::postprocess() {
|
1518
|
1533
|
|
1519
|
1534
|
#if ENABLED(AUTO_BED_LEVELING_UBL)
|
1520
|
1535
|
if (!validating) {
|
1521
|
|
- ubl.report_state();
|
|
1536
|
+ ubl.report_state();
|
1522
|
1537
|
|
1523
|
|
- if (!ubl.sanity_check()) {
|
|
1538
|
+ if (!ubl.sanity_check()) {
|
1524
|
1539
|
SERIAL_EOL_P(port);
|
1525
|
1540
|
#if ENABLED(EEPROM_CHITCHAT)
|
1526
|
1541
|
ubl.echo_name();
|
|
@@ -1703,17 +1718,21 @@ void MarlinSettings::reset(PORTARG_SOLO) {
|
1703
|
1718
|
planner.max_acceleration_mm_per_s2[i] = pgm_read_dword_near(&tmp3[i < COUNT(tmp3) ? i : COUNT(tmp3) - 1]);
|
1704
|
1719
|
}
|
1705
|
1720
|
|
|
1721
|
+ planner.min_segment_time_us = DEFAULT_MINSEGMENTTIME;
|
1706
|
1722
|
planner.acceleration = DEFAULT_ACCELERATION;
|
1707
|
1723
|
planner.retract_acceleration = DEFAULT_RETRACT_ACCELERATION;
|
1708
|
1724
|
planner.travel_acceleration = DEFAULT_TRAVEL_ACCELERATION;
|
1709
|
1725
|
planner.min_feedrate_mm_s = DEFAULT_MINIMUMFEEDRATE;
|
1710
|
1726
|
planner.min_travel_feedrate_mm_s = DEFAULT_MINTRAVELFEEDRATE;
|
1711
|
|
- planner.min_segment_time_us = DEFAULT_MINSEGMENTTIME;
|
1712
|
1727
|
planner.max_jerk[X_AXIS] = DEFAULT_XJERK;
|
1713
|
1728
|
planner.max_jerk[Y_AXIS] = DEFAULT_YJERK;
|
1714
|
1729
|
planner.max_jerk[Z_AXIS] = DEFAULT_ZJERK;
|
1715
|
1730
|
planner.max_jerk[E_AXIS] = DEFAULT_EJERK;
|
1716
|
1731
|
|
|
1732
|
+ #if ENABLED(JUNCTION_DEVIATION)
|
|
1733
|
+ planner.junction_deviation_mm = JUNCTION_DEVIATION_MM;
|
|
1734
|
+ #endif
|
|
1735
|
+
|
1717
|
1736
|
#if HAS_HOME_OFFSET
|
1718
|
1737
|
ZERO(home_offset);
|
1719
|
1738
|
#endif
|
|
@@ -2094,16 +2113,34 @@ void MarlinSettings::reset(PORTARG_SOLO) {
|
2094
|
2113
|
|
2095
|
2114
|
if (!forReplay) {
|
2096
|
2115
|
CONFIG_ECHO_START;
|
2097
|
|
- SERIAL_ECHOLNPGM_P(port, "Advanced: S<min_feedrate> T<min_travel_feedrate> B<min_segment_time_us> X<max_xy_jerk> Z<max_z_jerk> E<max_e_jerk>");
|
|
2116
|
+ SERIAL_ECHOPGM_P(port, "Advanced: B<min_segment_time_us> S<min_feedrate> T<min_travel_feedrate>");
|
|
2117
|
+ #if ENABLED(JUNCTION_DEVIATION)
|
|
2118
|
+ SERIAL_ECHOPGM_P(port, " J<junc_dev>");
|
|
2119
|
+ #else
|
|
2120
|
+ SERIAL_ECHOPGM_P(port, " X<max_x_jerk> Y<max_y_jerk> Z<max_z_jerk>");
|
|
2121
|
+ #endif
|
|
2122
|
+ #if DISABLED(JUNCTION_DEVIATION) || ENABLED(LIN_ADVANCE)
|
|
2123
|
+ SERIAL_ECHOPGM_P(port, " E<max_e_jerk>");
|
|
2124
|
+ #endif
|
|
2125
|
+ SERIAL_EOL_P(port);
|
2098
|
2126
|
}
|
2099
|
2127
|
CONFIG_ECHO_START;
|
2100
|
|
- SERIAL_ECHOPAIR_P(port, " M205 S", LINEAR_UNIT(planner.min_feedrate_mm_s));
|
|
2128
|
+ SERIAL_ECHOPAIR_P(port, " M205 B", LINEAR_UNIT(planner.min_segment_time_us));
|
|
2129
|
+ SERIAL_ECHOPAIR_P(port, " S", LINEAR_UNIT(planner.min_feedrate_mm_s));
|
2101
|
2130
|
SERIAL_ECHOPAIR_P(port, " T", LINEAR_UNIT(planner.min_travel_feedrate_mm_s));
|
2102
|
|
- SERIAL_ECHOPAIR_P(port, " B", planner.min_segment_time_us);
|
2103
|
|
- SERIAL_ECHOPAIR_P(port, " X", LINEAR_UNIT(planner.max_jerk[X_AXIS]));
|
2104
|
|
- SERIAL_ECHOPAIR_P(port, " Y", LINEAR_UNIT(planner.max_jerk[Y_AXIS]));
|
2105
|
|
- SERIAL_ECHOPAIR_P(port, " Z", LINEAR_UNIT(planner.max_jerk[Z_AXIS]));
|
2106
|
|
- SERIAL_ECHOLNPAIR_P(port, " E", LINEAR_UNIT(planner.max_jerk[E_AXIS]));
|
|
2131
|
+
|
|
2132
|
+ #if ENABLED(JUNCTION_DEVIATION)
|
|
2133
|
+ SERIAL_ECHOPAIR_P(port, " J", LINEAR_UNIT(planner.junction_deviation_mm));
|
|
2134
|
+ #else
|
|
2135
|
+ SERIAL_ECHOPAIR_P(port, " X", LINEAR_UNIT(planner.max_jerk[X_AXIS]));
|
|
2136
|
+ SERIAL_ECHOPAIR_P(port, " Y", LINEAR_UNIT(planner.max_jerk[Y_AXIS]));
|
|
2137
|
+ SERIAL_ECHOPAIR_P(port, " Z", LINEAR_UNIT(planner.max_jerk[Z_AXIS]));
|
|
2138
|
+ #endif
|
|
2139
|
+ #if DISABLED(JUNCTION_DEVIATION) || ENABLED(LIN_ADVANCE)
|
|
2140
|
+ SERIAL_ECHOPAIR_P(port, " E", LINEAR_UNIT(planner.max_jerk[E_AXIS]));
|
|
2141
|
+ #endif
|
|
2142
|
+
|
|
2143
|
+ SERIAL_EOL_P(port);
|
2107
|
2144
|
|
2108
|
2145
|
#if HAS_M206_COMMAND
|
2109
|
2146
|
if (!forReplay) {
|