[2.0.x] TMC driver update (#8769)

This commit is contained in:
teemuatlut
2017-12-15 23:03:14 +02:00
committed by Scott Lahteine
parent 09d13f186f
commit 0cd1e91056
62 changed files with 4185 additions and 2051 deletions

View File

@@ -36,13 +36,13 @@
*
*/
#define EEPROM_VERSION "V46"
#define EEPROM_VERSION "V47"
// Change EEPROM version if these are changed:
#define EEPROM_OFFSET 100
/**
* V46 EEPROM Layout:
* V47 EEPROM Layout:
*
* 100 Version (char x4)
* 104 EEPROM CRC16 (uint16_t)
@@ -154,6 +154,10 @@
* 578 M906 E3 Stepper E3 current (uint16_t)
* 580 M906 E4 Stepper E4 current (uint16_t)
*
* SENSORLESS HOMING 4 bytes
* 580 M914 X Stepper X and X2 threshold (int16_t)
* 582 M914 Y Stepper Y and Y2 threshold (int16_t)
*
* LIN_ADVANCE: 8 bytes
* 582 M900 K extruder_advance_k (float)
* 586 M900 WHD advance_ed_ratio (float)
@@ -542,70 +546,70 @@ void MarlinSettings::postprocess() {
EEPROM_WRITE(dummy);
}
// Save TMC2130 Configuration, and placeholder values
// Save TMC2130 or TMC2208 Configuration, and placeholder values
uint16_t val;
#if ENABLED(HAVE_TMC2130)
#if ENABLED(X_IS_TMC2130)
#if HAS_TRINAMIC
#if X_IS_TRINAMIC
val = stepperX.getCurrent();
#else
val = 0;
#endif
EEPROM_WRITE(val);
#if ENABLED(Y_IS_TMC2130)
#if Y_IS_TRINAMIC
val = stepperY.getCurrent();
#else
val = 0;
#endif
EEPROM_WRITE(val);
#if ENABLED(Z_IS_TMC2130)
#if Z_IS_TRINAMIC
val = stepperZ.getCurrent();
#else
val = 0;
#endif
EEPROM_WRITE(val);
#if ENABLED(X2_IS_TMC2130)
#if X2_IS_TRINAMIC
val = stepperX2.getCurrent();
#else
val = 0;
#endif
EEPROM_WRITE(val);
#if ENABLED(Y2_IS_TMC2130)
#if Y2_IS_TRINAMIC
val = stepperY2.getCurrent();
#else
val = 0;
#endif
EEPROM_WRITE(val);
#if ENABLED(Z2_IS_TMC2130)
#if Z2_IS_TRINAMIC
val = stepperZ2.getCurrent();
#else
val = 0;
#endif
EEPROM_WRITE(val);
#if ENABLED(E0_IS_TMC2130)
#if E0_IS_TRINAMIC
val = stepperE0.getCurrent();
#else
val = 0;
#endif
EEPROM_WRITE(val);
#if ENABLED(E1_IS_TMC2130)
#if E1_IS_TRINAMIC
val = stepperE1.getCurrent();
#else
val = 0;
#endif
EEPROM_WRITE(val);
#if ENABLED(E2_IS_TMC2130)
#if E2_IS_TRINAMIC
val = stepperE2.getCurrent();
#else
val = 0;
#endif
EEPROM_WRITE(val);
#if ENABLED(E3_IS_TMC2130)
#if E3_IS_TRINAMIC
val = stepperE3.getCurrent();
#else
val = 0;
#endif
EEPROM_WRITE(val);
#if ENABLED(E4_IS_TMC2130)
#if E4_IS_TRINAMIC
val = stepperE4.getCurrent();
#else
val = 0;
@@ -616,6 +620,28 @@ void MarlinSettings::postprocess() {
for (uint8_t q = 11; q--;) EEPROM_WRITE(val);
#endif
//
// TMC2130 Sensorless homing threshold
//
int16_t thrs;
#if ENABLED(SENSORLESS_HOMING)
#if ENABLED(X_IS_TMC2130)
thrs = stepperX.sgt();
#else
thrs = 0;
#endif
EEPROM_WRITE(thrs);
#if ENABLED(Y_IS_TMC2130)
thrs = stepperY.sgt();
#else
thrs = 0;
#endif
EEPROM_WRITE(thrs);
#else
thrs = 0;
for (uint8_t q = 2; q--;) EEPROM_WRITE(thrs);
#endif
//
// Linear Advance
//
@@ -1014,55 +1040,80 @@ void MarlinSettings::postprocess() {
//
uint16_t val;
#if ENABLED(HAVE_TMC2130)
#if HAS_TRINAMIC
EEPROM_READ(val);
#if ENABLED(X_IS_TMC2130)
#if X_IS_TRINAMIC
stepperX.setCurrent(val, R_SENSE, HOLD_MULTIPLIER);
#endif
EEPROM_READ(val);
#if ENABLED(Y_IS_TMC2130)
#if Y_IS_TRINAMIC
stepperY.setCurrent(val, R_SENSE, HOLD_MULTIPLIER);
#endif
EEPROM_READ(val);
#if ENABLED(Z_IS_TMC2130)
#if Z_IS_TRINAMIC
stepperZ.setCurrent(val, R_SENSE, HOLD_MULTIPLIER);
#endif
EEPROM_READ(val);
#if ENABLED(X2_IS_TMC2130)
#if X2_IS_TRINAMIC
stepperX2.setCurrent(val, R_SENSE, HOLD_MULTIPLIER);
#endif
EEPROM_READ(val);
#if ENABLED(Y2_IS_TMC2130)
#if Y2_IS_TRINAMIC
stepperY2.setCurrent(val, R_SENSE, HOLD_MULTIPLIER);
#endif
EEPROM_READ(val);
#if ENABLED(Z2_IS_TMC2130)
#if Z2_IS_TRINAMIC
stepperZ2.setCurrent(val, R_SENSE, HOLD_MULTIPLIER);
#endif
EEPROM_READ(val);
#if ENABLED(E0_IS_TMC2130)
#if E0_IS_TRINAMIC
stepperE0.setCurrent(val, R_SENSE, HOLD_MULTIPLIER);
#endif
EEPROM_READ(val);
#if ENABLED(E1_IS_TMC2130)
#if E1_IS_TRINAMIC
stepperE1.setCurrent(val, R_SENSE, HOLD_MULTIPLIER);
#endif
EEPROM_READ(val);
#if ENABLED(E2_IS_TMC2130)
#if E2_IS_TRINAMIC
stepperE2.setCurrent(val, R_SENSE, HOLD_MULTIPLIER);
#endif
EEPROM_READ(val);
#if ENABLED(E3_IS_TMC2130)
#if E3_IS_TRINAMIC
stepperE3.setCurrent(val, R_SENSE, HOLD_MULTIPLIER);
#endif
EEPROM_READ(val);
#if ENABLED(E4_IS_TMC2130)
#if E4_IS_TRINAMIC
stepperE4.setCurrent(val, R_SENSE, HOLD_MULTIPLIER);
#endif
#else
for (uint8_t q = 11; q--;) EEPROM_READ(val);
#endif
/*
* TMC2130 Sensorless homing threshold.
* X and X2 use the same value
* Y and Y2 use the same value
*/
int16_t thrs;
#if ENABLED(SENSORLESS_HOMING)
EEPROM_READ(thrs);
#if ENABLED(X_IS_TMC2130)
stepperX.sgt(thrs);
#endif
#if ENABLED(X2_IS_TMC2130)
stepperX2.sgt(thrs);
#endif
EEPROM_READ(thrs);
#if ENABLED(Y_IS_TMC2130)
stepperY.sgt(thrs);
#endif
#if ENABLED(Y2_IS_TMC2130)
stepperY2.sgt(thrs);
#endif
#else
for (uint8_t q = 0; q < 2; q++) EEPROM_READ(thrs);
#endif
//
// Linear Advance
//
@@ -1451,36 +1502,52 @@ void MarlinSettings::reset() {
#endif
);
#if ENABLED(HAVE_TMC2130)
#if X_IS_TRINAMIC
stepperX.setCurrent(X_CURRENT, R_SENSE, HOLD_MULTIPLIER);
#endif
#if Y_IS_TRINAMIC
stepperY.setCurrent(Y_CURRENT, R_SENSE, HOLD_MULTIPLIER);
#endif
#if Z_IS_TRINAMIC
stepperZ.setCurrent(Z_CURRENT, R_SENSE, HOLD_MULTIPLIER);
#endif
#if X2_IS_TRINAMIC
stepperX2.setCurrent(X2_CURRENT, R_SENSE, HOLD_MULTIPLIER);
#endif
#if Y2_IS_TRINAMIC
stepperY2.setCurrent(Y2_CURRENT, R_SENSE, HOLD_MULTIPLIER);
#endif
#if Z2_IS_TRINAMIC
stepperZ2.setCurrent(Z2_CURRENT, R_SENSE, HOLD_MULTIPLIER);
#endif
#if E0_IS_TRINAMIC
stepperE0.setCurrent(E0_CURRENT, R_SENSE, HOLD_MULTIPLIER);
#endif
#if E1_IS_TRINAMIC
stepperE1.setCurrent(E1_CURRENT, R_SENSE, HOLD_MULTIPLIER);
#endif
#if E2_IS_TRINAMIC
stepperE2.setCurrent(E2_CURRENT, R_SENSE, HOLD_MULTIPLIER);
#endif
#if E3_IS_TRINAMIC
stepperE3.setCurrent(E3_CURRENT, R_SENSE, HOLD_MULTIPLIER);
#endif
#if E4_IS_TRINAMIC
stepperE4.setCurrent(E4_CURRENT, R_SENSE, HOLD_MULTIPLIER);
#endif
#if ENABLED(SENSORLESS_HOMING)
#if ENABLED(X_IS_TMC2130)
stepperX.setCurrent(X_CURRENT, R_SENSE, HOLD_MULTIPLIER);
#endif
#if ENABLED(Y_IS_TMC2130)
stepperY.setCurrent(Y_CURRENT, R_SENSE, HOLD_MULTIPLIER);
#endif
#if ENABLED(Z_IS_TMC2130)
stepperZ.setCurrent(Z_CURRENT, R_SENSE, HOLD_MULTIPLIER);
stepperX.sgt(X_HOMING_SENSITIVITY);
#endif
#if ENABLED(X2_IS_TMC2130)
stepperX2.setCurrent(X2_CURRENT, R_SENSE, HOLD_MULTIPLIER);
stepperX2.sgt(X_HOMING_SENSITIVITY);
#endif
#if ENABLED(Y_IS_TMC2130)
stepperY.sgt(Y_HOMING_SENSITIVITY);
#endif
#if ENABLED(Y2_IS_TMC2130)
stepperY2.setCurrent(Y2_CURRENT, R_SENSE, HOLD_MULTIPLIER);
#endif
#if ENABLED(Z2_IS_TMC2130)
stepperZ2.setCurrent(Z2_CURRENT, R_SENSE, HOLD_MULTIPLIER);
#endif
#if ENABLED(E0_IS_TMC2130)
stepperE0.setCurrent(E0_CURRENT, R_SENSE, HOLD_MULTIPLIER);
#endif
#if ENABLED(E1_IS_TMC2130)
stepperE1.setCurrent(E1_CURRENT, R_SENSE, HOLD_MULTIPLIER);
#endif
#if ENABLED(E2_IS_TMC2130)
stepperE2.setCurrent(E2_CURRENT, R_SENSE, HOLD_MULTIPLIER);
#endif
#if ENABLED(E3_IS_TMC2130)
stepperE3.setCurrent(E3_CURRENT, R_SENSE, HOLD_MULTIPLIER);
stepperY2.sgt(Y_HOMING_SENSITIVITY);
#endif
#endif
@@ -1959,35 +2026,63 @@ void MarlinSettings::reset() {
}
CONFIG_ECHO_START;
SERIAL_ECHO(" M906");
#if ENABLED(X_IS_TMC2130) || ENABLED(X_IS_TMC2208)
SERIAL_ECHOPAIR(" X ", stepperX.getCurrent());
#endif
#if ENABLED(Y_IS_TMC2130) || ENABLED(Y_IS_TMC2208)
SERIAL_ECHOPAIR(" Y ", stepperY.getCurrent());
#endif
#if ENABLED(Z_IS_TMC2130) || ENABLED(Z_IS_TMC2208)
SERIAL_ECHOPAIR(" Z ", stepperZ.getCurrent());
#endif
#if ENABLED(X2_IS_TMC2130) || ENABLED(X2_IS_TMC2208)
SERIAL_ECHOPAIR(" X2 ", stepperX2.getCurrent());
#endif
#if ENABLED(Y2_IS_TMC2130) || ENABLED(Y2_IS_TMC2208)
SERIAL_ECHOPAIR(" Y2 ", stepperY2.getCurrent());
#endif
#if ENABLED(Z2_IS_TMC2130) || ENABLED(Z2_IS_TMC2208)
SERIAL_ECHOPAIR(" Z2 ", stepperZ2.getCurrent());
#endif
#if ENABLED(E0_IS_TMC2130) || ENABLED(E0_IS_TMC2208)
SERIAL_ECHOPAIR(" E0 ", stepperE0.getCurrent());
#endif
#if ENABLED(E1_IS_TMC2130) || ENABLED(E1_IS_TMC2208)
SERIAL_ECHOPAIR(" E1 ", stepperE1.getCurrent());
#endif
#if ENABLED(E2_IS_TMC2130) || ENABLED(E2_IS_TMC2208)
SERIAL_ECHOPAIR(" E2 ", stepperE2.getCurrent());
#endif
#if ENABLED(E3_IS_TMC2130) || ENABLED(E3_IS_TMC2208)
SERIAL_ECHOPAIR(" E3 ", stepperE3.getCurrent());
#endif
#if ENABLED(E4_IS_TMC2130) || ENABLED(E4_IS_TMC2208)
SERIAL_ECHOPAIR(" E4 ", stepperE4.getCurrent());
#endif
SERIAL_EOL();
#endif
/**
* TMC2130 Sensorless homing thresholds
*/
#if ENABLED(HAVE_TMC2130) && ENABLED(SENSORLESS_HOMING)
if (!forReplay) {
CONFIG_ECHO_START;
SERIAL_ECHOLNPGM("Sensorless homing threshold:");
}
CONFIG_ECHO_START;
SERIAL_ECHO(" M914");
#if ENABLED(X_IS_TMC2130)
SERIAL_ECHOPAIR(" X", stepperX.getCurrent());
#endif
#if ENABLED(Y_IS_TMC2130)
SERIAL_ECHOPAIR(" Y", stepperY.getCurrent());
#endif
#if ENABLED(Z_IS_TMC2130)
SERIAL_ECHOPAIR(" Z", stepperZ.getCurrent());
SERIAL_ECHOPAIR(" X", stepperX.sgt());
#endif
#if ENABLED(X2_IS_TMC2130)
SERIAL_ECHOPAIR(" X2", stepperX2.getCurrent());
SERIAL_ECHOPAIR(" X2 ", stepperX2.sgt());
#endif
#if ENABLED(Y2_IS_TMC2130)
SERIAL_ECHOPAIR(" Y2", stepperY2.getCurrent());
#if ENABLED(Y_IS_TMC2130)
SERIAL_ECHOPAIR(" Y", stepperY.sgt());
#endif
#if ENABLED(Z2_IS_TMC2130)
SERIAL_ECHOPAIR(" Z2", stepperZ2.getCurrent());
#endif
#if ENABLED(E0_IS_TMC2130)
SERIAL_ECHOPAIR(" E0", stepperE0.getCurrent());
#endif
#if ENABLED(E1_IS_TMC2130)
SERIAL_ECHOPAIR(" E1", stepperE1.getCurrent());
#endif
#if ENABLED(E2_IS_TMC2130)
SERIAL_ECHOPAIR(" E2", stepperE2.getCurrent());
#endif
#if ENABLED(E3_IS_TMC2130)
SERIAL_ECHOPAIR(" E3", stepperE3.getCurrent());
#if ENABLED(X2_IS_TMC2130)
SERIAL_ECHOPAIR(" Y2 ", stepperY2.sgt());
#endif
SERIAL_EOL();
#endif