Code changes supporting up to 6 extruders

This commit is contained in:
Scott Lahteine
2018-09-13 01:35:55 -05:00
parent f5c210d33d
commit 1718eff54a
52 changed files with 848 additions and 191 deletions

View File

@ -37,7 +37,7 @@
*/
// Change EEPROM version if the structure changes
#define EEPROM_VERSION "V57"
#define EEPROM_VERSION "V58"
#define EEPROM_OFFSET 100
// Check the integrity of data offsets.
@ -213,7 +213,7 @@ typedef struct SettingsDataStruct {
//
// PIDTEMP
//
PIDC hotendPID[MAX_EXTRUDERS]; // M301 En PIDC / M303 En U
PIDC hotendPID[HOTENDS]; // M301 En PIDC / M303 En U
int16_t lpq_len; // M301 L
@ -244,14 +244,14 @@ typedef struct SettingsDataStruct {
// !NO_VOLUMETRIC
//
bool parser_volumetric_enabled; // M200 D parser.volumetric_enabled
float planner_filament_size[MAX_EXTRUDERS]; // M200 T D planner.filament_size[]
float planner_filament_size[EXTRUDERS]; // M200 T D planner.filament_size[]
//
// HAS_TRINAMIC
//
#define TMC_AXES (MAX_EXTRUDERS + 7)
uint16_t tmc_stepper_current[TMC_AXES]; // M906 X Y Z X2 Y2 Z2 Z3 E0 E1 E2 E3 E4
uint32_t tmc_hybrid_threshold[TMC_AXES]; // M913 X Y Z X2 Y2 Z2 Z3 E0 E1 E2 E3 E4
uint16_t tmc_stepper_current[TMC_AXES]; // M906 X Y Z X2 Y2 Z2 Z3 E0 E1 E2 E3 E4 E5
uint32_t tmc_hybrid_threshold[TMC_AXES]; // M913 X Y Z X2 Y2 Z2 Z3 E0 E1 E2 E3 E4 E5
int16_t tmc_sgt[XYZ]; // M914 X Y Z
//
@ -279,8 +279,8 @@ typedef struct SettingsDataStruct {
//
// ADVANCED_PAUSE_FEATURE
//
float filament_change_unload_length[MAX_EXTRUDERS], // M603 T U
filament_change_load_length[MAX_EXTRUDERS]; // M603 T L
float filament_change_unload_length[EXTRUDERS], // M603 T U
filament_change_load_length[EXTRUDERS]; // M603 T L
} SettingsData;
@ -629,29 +629,23 @@ void MarlinSettings::postprocess() {
EEPROM_WRITE(lcd_preheat_bed_temp);
EEPROM_WRITE(lcd_preheat_fan_speed);
for (uint8_t e = 0; e < MAX_EXTRUDERS; e++) {
for (uint8_t e = 0; e < HOTENDS; e++) {
#if ENABLED(PIDTEMP)
if (e < HOTENDS) {
EEPROM_WRITE(PID_PARAM(Kp, e));
EEPROM_WRITE(PID_PARAM(Ki, e));
EEPROM_WRITE(PID_PARAM(Kd, e));
#if ENABLED(PID_EXTRUSION_SCALING)
EEPROM_WRITE(PID_PARAM(Kc, e));
#else
dummy = 1.0f; // 1.0 = default kc
EEPROM_WRITE(dummy);
#endif
}
else
#endif // !PIDTEMP
{
dummy = DUMMY_PID_VALUE; // When read, will not change the existing value
EEPROM_WRITE(dummy); // Kp
dummy = 0;
for (uint8_t q = 3; q--;) EEPROM_WRITE(dummy); // Ki, Kd, Kc
}
EEPROM_WRITE(PID_PARAM(Kp, e));
EEPROM_WRITE(PID_PARAM(Ki, e));
EEPROM_WRITE(PID_PARAM(Kd, e));
#if ENABLED(PID_EXTRUSION_SCALING)
EEPROM_WRITE(PID_PARAM(Kc, e));
#else
dummy = 1.0f; // 1.0 = default kc
EEPROM_WRITE(dummy);
#endif
#else
dummy = DUMMY_PID_VALUE; // When read, will not change the existing value
EEPROM_WRITE(dummy); // Kp
dummy = 0;
for (uint8_t q = 3; q--;) EEPROM_WRITE(dummy); // Ki, Kd, Kc
#endif
} // Hotends Loop
_FIELD_TEST(lpq_len);
@ -705,17 +699,15 @@ void MarlinSettings::postprocess() {
EEPROM_WRITE(parser.volumetric_enabled);
// Save filament sizes
for (uint8_t q = 0; q < MAX_EXTRUDERS; q++) {
if (q < COUNT(planner.filament_size)) dummy = planner.filament_size[q];
EEPROM_WRITE(dummy);
}
for (uint8_t q = 0; q < COUNT(planner.filament_size); q++)
EEPROM_WRITE(planner.filament_size[q]);
#else
const bool volumetric_enabled = false;
dummy = DEFAULT_NOMINAL_FILAMENT_DIA;
EEPROM_WRITE(volumetric_enabled);
for (uint8_t q = MAX_EXTRUDERS; q--;) EEPROM_WRITE(dummy);
for (uint8_t q = EXTRUDERS; q--;) EEPROM_WRITE(dummy);
#endif
@ -762,31 +754,48 @@ void MarlinSettings::postprocess() {
#else
0,
#endif
#if AXIS_IS_TMC(E0)
stepperE0.getCurrent(),
#else
0,
#endif
#if AXIS_IS_TMC(E1)
stepperE1.getCurrent(),
#else
0,
#endif
#if AXIS_IS_TMC(E2)
stepperE2.getCurrent(),
#else
0,
#endif
#if AXIS_IS_TMC(E3)
stepperE3.getCurrent(),
#else
0,
#endif
#if AXIS_IS_TMC(E4)
stepperE4.getCurrent()
#else
0
#endif
#if MAX_EXTRUDERS
#if AXIS_IS_TMC(E0)
stepperE0.getCurrent(),
#else
0,
#endif
#if MAX_EXTRUDERS > 1
#if AXIS_IS_TMC(E1)
stepperE1.getCurrent(),
#else
0,
#endif
#if MAX_EXTRUDERS > 2
#if AXIS_IS_TMC(E2)
stepperE2.getCurrent(),
#else
0,
#endif
#if MAX_EXTRUDERS > 3
#if AXIS_IS_TMC(E3)
stepperE3.getCurrent(),
#else
0,
#endif
#if MAX_EXTRUDERS > 4
#if AXIS_IS_TMC(E4)
stepperE4.getCurrent()
#else
0
#endif
#if MAX_EXTRUDERS > 5
#if AXIS_IS_TMC(E5)
stepperE5.getCurrent()
#else
0
#endif
#endif // MAX_EXTRUDERS > 5
#endif // MAX_EXTRUDERS > 4
#endif // MAX_EXTRUDERS > 3
#endif // MAX_EXTRUDERS > 2
#endif // MAX_EXTRUDERS > 1
#endif // MAX_EXTRUDERS
#else
0
#endif
@ -836,35 +845,69 @@ void MarlinSettings::postprocess() {
#else
Z3_HYBRID_THRESHOLD,
#endif
#if AXIS_HAS_STEALTHCHOP(E0)
TMC_GET_PWMTHRS(E, E0),
#else
E0_HYBRID_THRESHOLD,
#endif
#if AXIS_HAS_STEALTHCHOP(E1)
TMC_GET_PWMTHRS(E, E1),
#else
E1_HYBRID_THRESHOLD,
#endif
#if AXIS_HAS_STEALTHCHOP(E2)
TMC_GET_PWMTHRS(E, E2),
#else
E2_HYBRID_THRESHOLD,
#endif
#if AXIS_HAS_STEALTHCHOP(E3)
TMC_GET_PWMTHRS(E, E3),
#else
E3_HYBRID_THRESHOLD,
#endif
#if AXIS_HAS_STEALTHCHOP(E4)
TMC_GET_PWMTHRS(E, E4)
#else
E4_HYBRID_THRESHOLD
#endif
#if MAX_EXTRUDERS
#if AXIS_HAS_STEALTHCHOP(E0)
TMC_GET_PWMTHRS(E, E0),
#else
E0_HYBRID_THRESHOLD,
#endif
#if MAX_EXTRUDERS > 1
#if AXIS_HAS_STEALTHCHOP(E1)
TMC_GET_PWMTHRS(E, E1),
#else
E1_HYBRID_THRESHOLD,
#endif
#if MAX_EXTRUDERS > 2
#if AXIS_HAS_STEALTHCHOP(E2)
TMC_GET_PWMTHRS(E, E2),
#else
E2_HYBRID_THRESHOLD,
#endif
#if MAX_EXTRUDERS > 3
#if AXIS_HAS_STEALTHCHOP(E3)
TMC_GET_PWMTHRS(E, E3),
#else
E3_HYBRID_THRESHOLD,
#endif
#if MAX_EXTRUDERS > 4
#if AXIS_HAS_STEALTHCHOP(E4)
TMC_GET_PWMTHRS(E, E4)
#else
E4_HYBRID_THRESHOLD
#endif
#if MAX_EXTRUDERS > 5
#if AXIS_HAS_STEALTHCHOP(E5)
TMC_GET_PWMTHRS(E, E5)
#else
E5_HYBRID_THRESHOLD
#endif
#endif // MAX_EXTRUDERS > 5
#endif // MAX_EXTRUDERS > 4
#endif // MAX_EXTRUDERS > 3
#endif // MAX_EXTRUDERS > 2
#endif // MAX_EXTRUDERS > 1
#endif // MAX_EXTRUDERS
#else
100, 100, 3, // X, Y, Z
100, 100, 3, 3, // X2, Y2, Z2, Z3
30, 30, 30, 30, 30 // E0, E1, E2, E3, E4
100, 100, 3, // X, Y, Z
100, 100, 3, 3 // X2, Y2, Z2, Z3
#if MAX_EXTRUDERS
, 30 // E0
#if MAX_EXTRUDERS > 1
, 30 // E1
#if MAX_EXTRUDERS > 2
, 30 // E2
#if MAX_EXTRUDERS > 3
, 30 // E3
#if MAX_EXTRUDERS > 4
, 30 // E4
#if MAX_EXTRUDERS > 5
, 30 // E5
#endif
#endif
#endif
#endif
#endif
#endif
#endif
};
EEPROM_WRITE(tmc_hybrid_threshold);
@ -951,17 +994,13 @@ void MarlinSettings::postprocess() {
_FIELD_TEST(filament_change_unload_length);
#if ENABLED(ADVANCED_PAUSE_FEATURE)
for (uint8_t q = 0; q < MAX_EXTRUDERS; q++) {
if (q < COUNT(filament_change_unload_length)) dummy = filament_change_unload_length[q];
EEPROM_WRITE(dummy);
}
for (uint8_t q = 0; q < MAX_EXTRUDERS; q++) {
if (q < COUNT(filament_change_load_length)) dummy = filament_change_load_length[q];
EEPROM_WRITE(dummy);
for (uint8_t q = 0; q < COUNT(filament_change_unload_length); q++) {
EEPROM_WRITE(filament_change_unload_length[q]);
EEPROM_WRITE(filament_change_load_length[q]);
}
#else
dummy = 0;
for (uint8_t q = MAX_EXTRUDERS * 2; q--;) EEPROM_WRITE(dummy);
for (uint8_t q = EXTRUDERS * 2; q--;) EEPROM_WRITE(dummy);
#endif
//
@ -1271,9 +1310,9 @@ void MarlinSettings::postprocess() {
//
#if ENABLED(PIDTEMP)
for (uint8_t e = 0; e < MAX_EXTRUDERS; e++) {
for (uint8_t e = 0; e < HOTENDS; e++) {
EEPROM_READ(dummy); // Kp
if (e < HOTENDS && dummy != DUMMY_PID_VALUE) {
if (dummy != DUMMY_PID_VALUE) {
// do not need to scale PID values as the values in EEPROM are already scaled
if (!validating) PID_PARAM(Kp, e) = dummy;
EEPROM_READ(PID_PARAM(Ki, e));
@ -1284,13 +1323,12 @@ void MarlinSettings::postprocess() {
EEPROM_READ(dummy);
#endif
}
else {
else
for (uint8_t q=3; q--;) EEPROM_READ(dummy); // Ki, Kd, Kc
}
}
#else // !PIDTEMP
// 4 x 4 = 16 slots for PID parameters
for (uint8_t q = MAX_EXTRUDERS * 4; q--;) EEPROM_READ(dummy); // Kp, Ki, Kd, Kc
for (uint8_t q = HOTENDS * 4; q--;) EEPROM_READ(dummy); // Kp, Ki, Kd, Kc
#endif // !PIDTEMP
//
@ -1359,16 +1397,15 @@ void MarlinSettings::postprocess() {
EEPROM_READ(parser.volumetric_enabled);
for (uint8_t q = 0; q < MAX_EXTRUDERS; q++) {
for (uint8_t q = 0; q < COUNT(planner.filament_size); q++) {
EEPROM_READ(dummy);
if (!validating && q < COUNT(planner.filament_size))
planner.filament_size[q] = dummy;
if (!validating) planner.filament_size[q] = dummy;
}
#else
EEPROM_READ(dummyb);
for (uint8_t q=MAX_EXTRUDERS; q--;) EEPROM_READ(dummy);
for (uint8_t q=EXTRUDERS; q--;) EEPROM_READ(dummy);
#endif
@ -1422,6 +1459,9 @@ void MarlinSettings::postprocess() {
#if AXIS_IS_TMC(E4)
SET_CURR(E4);
#endif
#if AXIS_IS_TMC(E5)
SET_CURR(E5);
#endif
}
#else
uint16_t val;
@ -1469,6 +1509,9 @@ void MarlinSettings::postprocess() {
#if AXIS_HAS_STEALTHCHOP(E4)
TMC_SET_PWMTHRS(E, E4);
#endif
#if AXIS_HAS_STEALTHCHOP(E5)
TMC_SET_PWMTHRS(E, E5);
#endif
}
#else
uint32_t thrs_val;
@ -1580,16 +1623,14 @@ void MarlinSettings::postprocess() {
_FIELD_TEST(filament_change_unload_length);
#if ENABLED(ADVANCED_PAUSE_FEATURE)
for (uint8_t q = 0; q < MAX_EXTRUDERS; q++) {
for (uint8_t q = 0; q < COUNT(filament_change_unload_length); q++) {
EEPROM_READ(dummy);
if (!validating && q < COUNT(filament_change_unload_length)) filament_change_unload_length[q] = dummy;
}
for (uint8_t q = 0; q < MAX_EXTRUDERS; q++) {
EEPROM_READ(dummy);
if (!validating && q < COUNT(filament_change_load_length)) filament_change_load_length[q] = dummy;
}
#else
for (uint8_t q = MAX_EXTRUDERS * 2; q--;) EEPROM_READ(dummy);
for (uint8_t q = EXTRUDERS * 2; q--;) EEPROM_READ(dummy);
#endif
eeprom_error = size_error(eeprom_index - (EEPROM_OFFSET));
@ -2176,6 +2217,11 @@ void MarlinSettings::reset(PORTARG_SOLO) {
CONFIG_ECHO_START;
SERIAL_ECHOPAIR_P(port, " M200 T4 D", LINEAR_UNIT(planner.filament_size[4]));
SERIAL_EOL_P(port);
#if EXTRUDERS > 5
CONFIG_ECHO_START;
SERIAL_ECHOPAIR_P(port, " M200 T5 D", LINEAR_UNIT(planner.filament_size[5]));
SERIAL_EOL_P(port);
#endif // EXTRUDERS > 5
#endif // EXTRUDERS > 4
#endif // EXTRUDERS > 3
#endif // EXTRUDERS > 2
@ -2681,6 +2727,10 @@ void MarlinSettings::reset(PORTARG_SOLO) {
say_M906(PORTVAR_SOLO);
SERIAL_ECHOLNPAIR_P(port, " T4 E", stepperE4.getCurrent());
#endif
#if E_STEPPERS > 5 && AXIS_IS_TMC(E5)
say_M906(PORTVAR_SOLO);
SERIAL_ECHOLNPAIR_P(port, " T5 E", stepperE5.getCurrent());
#endif
SERIAL_EOL_P(port);
/**
@ -2748,6 +2798,10 @@ void MarlinSettings::reset(PORTARG_SOLO) {
say_M913(PORTVAR_SOLO);
SERIAL_ECHOLNPAIR_P(port, " T4 E", TMC_GET_PWMTHRS(E, E4));
#endif
#if E_STEPPERS > 5 && AXIS_IS_TMC(E5)
say_M913(PORTVAR_SOLO);
SERIAL_ECHOLNPAIR_P(port, " T5 E", TMC_GET_PWMTHRS(E, E5));
#endif
SERIAL_EOL_P(port);
#endif // HYBRID_THRESHOLD
@ -2871,6 +2925,12 @@ void MarlinSettings::reset(PORTARG_SOLO) {
say_M603(PORTVAR_SOLO);
SERIAL_ECHOPAIR_P(port, "T4 L", LINEAR_UNIT(filament_change_load_length[4]));
SERIAL_ECHOLNPAIR_P(port, " U", LINEAR_UNIT(filament_change_unload_length[4]));
#if EXTRUDERS > 5
CONFIG_ECHO_START;
say_M603(PORTVAR_SOLO);
SERIAL_ECHOPAIR_P(port, "T5 L", LINEAR_UNIT(filament_change_load_length[5]));
SERIAL_ECHOLNPAIR_P(port, " U", LINEAR_UNIT(filament_change_unload_length[5]));
#endif // EXTRUDERS > 5
#endif // EXTRUDERS > 4
#endif // EXTRUDERS > 3
#endif // EXTRUDERS > 2