diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index 8cc0eb4b3..391c12d9d 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -1148,6 +1148,20 @@ */ //#define TMC_DEBUG + /* + * Enable M915 Z axis calibration. + * Marlin will first adjust Z stepper current and then drive + * the Z axis to its' physical maximum. Finally it will home + * the Z axis to account for the lost steps. Use + * M915 S### to specify the current and + * M925 Z## to specify the extra Z height that's added to Z_MAX_POS. + */ + //#define TMC_Z_CALIBRATION + #if ENABLED(TMC_Z_CALIBRATION) + #define CALIBRATION_CURRENT 250 + #define CALIBRATION_EXTRA_HEIGHT 10 + #endif + /** * You can set your own advanced settings by filling in predefined functions. * A list of available functions can be found on the library github page diff --git a/Marlin/src/config/default/Configuration_adv.h b/Marlin/src/config/default/Configuration_adv.h index 8cc0eb4b3..391c12d9d 100644 --- a/Marlin/src/config/default/Configuration_adv.h +++ b/Marlin/src/config/default/Configuration_adv.h @@ -1148,6 +1148,20 @@ */ //#define TMC_DEBUG + /* + * Enable M915 Z axis calibration. + * Marlin will first adjust Z stepper current and then drive + * the Z axis to its' physical maximum. Finally it will home + * the Z axis to account for the lost steps. Use + * M915 S### to specify the current and + * M925 Z## to specify the extra Z height that's added to Z_MAX_POS. + */ + //#define TMC_Z_CALIBRATION + #if ENABLED(TMC_Z_CALIBRATION) + #define CALIBRATION_CURRENT 250 + #define CALIBRATION_EXTRA_HEIGHT 10 + #endif + /** * You can set your own advanced settings by filling in predefined functions. * A list of available functions can be found on the library github page diff --git a/Marlin/src/config/examples/AlephObjects/TAZ4/Configuration_adv.h b/Marlin/src/config/examples/AlephObjects/TAZ4/Configuration_adv.h index c5a67c631..a7793b41a 100644 --- a/Marlin/src/config/examples/AlephObjects/TAZ4/Configuration_adv.h +++ b/Marlin/src/config/examples/AlephObjects/TAZ4/Configuration_adv.h @@ -1148,6 +1148,20 @@ */ //#define TMC_DEBUG + /* + * Enable M915 Z axis calibration. + * Marlin will first adjust Z stepper current and then drive + * the Z axis to its' physical maximum. Finally it will home + * the Z axis to account for the lost steps. Use + * M915 S### to specify the current and + * M925 Z## to specify the extra Z height that's added to Z_MAX_POS. + */ + //#define TMC_Z_CALIBRATION + #if ENABLED(TMC_Z_CALIBRATION) + #define CALIBRATION_CURRENT 250 + #define CALIBRATION_EXTRA_HEIGHT 10 + #endif + /** * You can set your own advanced settings by filling in predefined functions. * A list of available functions can be found on the library github page diff --git a/Marlin/src/config/examples/Anet/A6/Configuration_adv.h b/Marlin/src/config/examples/Anet/A6/Configuration_adv.h index f0ddf90ee..8bcc41e82 100644 --- a/Marlin/src/config/examples/Anet/A6/Configuration_adv.h +++ b/Marlin/src/config/examples/Anet/A6/Configuration_adv.h @@ -1148,6 +1148,20 @@ */ //#define TMC_DEBUG + /* + * Enable M915 Z axis calibration. + * Marlin will first adjust Z stepper current and then drive + * the Z axis to its' physical maximum. Finally it will home + * the Z axis to account for the lost steps. Use + * M915 S### to specify the current and + * M925 Z## to specify the extra Z height that's added to Z_MAX_POS. + */ + //#define TMC_Z_CALIBRATION + #if ENABLED(TMC_Z_CALIBRATION) + #define CALIBRATION_CURRENT 250 + #define CALIBRATION_EXTRA_HEIGHT 10 + #endif + /** * You can set your own advanced settings by filling in predefined functions. * A list of available functions can be found on the library github page diff --git a/Marlin/src/config/examples/Anet/A8/Configuration_adv.h b/Marlin/src/config/examples/Anet/A8/Configuration_adv.h index 1838306dd..69a1c7950 100644 --- a/Marlin/src/config/examples/Anet/A8/Configuration_adv.h +++ b/Marlin/src/config/examples/Anet/A8/Configuration_adv.h @@ -1148,6 +1148,20 @@ */ //#define TMC_DEBUG + /* + * Enable M915 Z axis calibration. + * Marlin will first adjust Z stepper current and then drive + * the Z axis to its' physical maximum. Finally it will home + * the Z axis to account for the lost steps. Use + * M915 S### to specify the current and + * M925 Z## to specify the extra Z height that's added to Z_MAX_POS. + */ + //#define TMC_Z_CALIBRATION + #if ENABLED(TMC_Z_CALIBRATION) + #define CALIBRATION_CURRENT 250 + #define CALIBRATION_EXTRA_HEIGHT 10 + #endif + /** * You can set your own advanced settings by filling in predefined functions. * A list of available functions can be found on the library github page diff --git a/Marlin/src/config/examples/Azteeg/X5GT/Configuration_adv.h b/Marlin/src/config/examples/Azteeg/X5GT/Configuration_adv.h index cd8f88162..a948232dd 100644 --- a/Marlin/src/config/examples/Azteeg/X5GT/Configuration_adv.h +++ b/Marlin/src/config/examples/Azteeg/X5GT/Configuration_adv.h @@ -1149,6 +1149,20 @@ */ //#define TMC_DEBUG + /* + * Enable M915 Z axis calibration. + * Marlin will first adjust Z stepper current and then drive + * the Z axis to its' physical maximum. Finally it will home + * the Z axis to account for the lost steps. Use + * M915 S### to specify the current and + * M925 Z## to specify the extra Z height that's added to Z_MAX_POS. + */ + //#define TMC_Z_CALIBRATION + #if ENABLED(TMC_Z_CALIBRATION) + #define CALIBRATION_CURRENT 250 + #define CALIBRATION_EXTRA_HEIGHT 10 + #endif + /** * You can set your own advanced settings by filling in predefined functions. * A list of available functions can be found on the library github page diff --git a/Marlin/src/config/examples/BQ/Hephestos/Configuration_adv.h b/Marlin/src/config/examples/BQ/Hephestos/Configuration_adv.h index 60a4898bf..33e6ffaf8 100644 --- a/Marlin/src/config/examples/BQ/Hephestos/Configuration_adv.h +++ b/Marlin/src/config/examples/BQ/Hephestos/Configuration_adv.h @@ -1148,6 +1148,20 @@ */ //#define TMC_DEBUG + /* + * Enable M915 Z axis calibration. + * Marlin will first adjust Z stepper current and then drive + * the Z axis to its' physical maximum. Finally it will home + * the Z axis to account for the lost steps. Use + * M915 S### to specify the current and + * M925 Z## to specify the extra Z height that's added to Z_MAX_POS. + */ + //#define TMC_Z_CALIBRATION + #if ENABLED(TMC_Z_CALIBRATION) + #define CALIBRATION_CURRENT 250 + #define CALIBRATION_EXTRA_HEIGHT 10 + #endif + /** * You can set your own advanced settings by filling in predefined functions. * A list of available functions can be found on the library github page diff --git a/Marlin/src/config/examples/BQ/Hephestos_2/Configuration_adv.h b/Marlin/src/config/examples/BQ/Hephestos_2/Configuration_adv.h index dcd4a6c18..1b4a0fb62 100644 --- a/Marlin/src/config/examples/BQ/Hephestos_2/Configuration_adv.h +++ b/Marlin/src/config/examples/BQ/Hephestos_2/Configuration_adv.h @@ -1148,6 +1148,20 @@ */ //#define TMC_DEBUG + /* + * Enable M915 Z axis calibration. + * Marlin will first adjust Z stepper current and then drive + * the Z axis to its' physical maximum. Finally it will home + * the Z axis to account for the lost steps. Use + * M915 S### to specify the current and + * M925 Z## to specify the extra Z height that's added to Z_MAX_POS. + */ + //#define TMC_Z_CALIBRATION + #if ENABLED(TMC_Z_CALIBRATION) + #define CALIBRATION_CURRENT 250 + #define CALIBRATION_EXTRA_HEIGHT 10 + #endif + /** * You can set your own advanced settings by filling in predefined functions. * A list of available functions can be found on the library github page diff --git a/Marlin/src/config/examples/BQ/WITBOX/Configuration_adv.h b/Marlin/src/config/examples/BQ/WITBOX/Configuration_adv.h index 60a4898bf..33e6ffaf8 100644 --- a/Marlin/src/config/examples/BQ/WITBOX/Configuration_adv.h +++ b/Marlin/src/config/examples/BQ/WITBOX/Configuration_adv.h @@ -1148,6 +1148,20 @@ */ //#define TMC_DEBUG + /* + * Enable M915 Z axis calibration. + * Marlin will first adjust Z stepper current and then drive + * the Z axis to its' physical maximum. Finally it will home + * the Z axis to account for the lost steps. Use + * M915 S### to specify the current and + * M925 Z## to specify the extra Z height that's added to Z_MAX_POS. + */ + //#define TMC_Z_CALIBRATION + #if ENABLED(TMC_Z_CALIBRATION) + #define CALIBRATION_CURRENT 250 + #define CALIBRATION_EXTRA_HEIGHT 10 + #endif + /** * You can set your own advanced settings by filling in predefined functions. * A list of available functions can be found on the library github page diff --git a/Marlin/src/config/examples/Cartesio/Configuration_adv.h b/Marlin/src/config/examples/Cartesio/Configuration_adv.h index 8db2403c5..d2dd46bfa 100644 --- a/Marlin/src/config/examples/Cartesio/Configuration_adv.h +++ b/Marlin/src/config/examples/Cartesio/Configuration_adv.h @@ -1148,6 +1148,20 @@ */ //#define TMC_DEBUG + /* + * Enable M915 Z axis calibration. + * Marlin will first adjust Z stepper current and then drive + * the Z axis to its' physical maximum. Finally it will home + * the Z axis to account for the lost steps. Use + * M915 S### to specify the current and + * M925 Z## to specify the extra Z height that's added to Z_MAX_POS. + */ + //#define TMC_Z_CALIBRATION + #if ENABLED(TMC_Z_CALIBRATION) + #define CALIBRATION_CURRENT 250 + #define CALIBRATION_EXTRA_HEIGHT 10 + #endif + /** * You can set your own advanced settings by filling in predefined functions. * A list of available functions can be found on the library github page diff --git a/Marlin/src/config/examples/Creality/CR-10/Configuration_adv.h b/Marlin/src/config/examples/Creality/CR-10/Configuration_adv.h index a5f35d109..b9d20654a 100644 --- a/Marlin/src/config/examples/Creality/CR-10/Configuration_adv.h +++ b/Marlin/src/config/examples/Creality/CR-10/Configuration_adv.h @@ -1148,6 +1148,20 @@ */ //#define TMC_DEBUG + /* + * Enable M915 Z axis calibration. + * Marlin will first adjust Z stepper current and then drive + * the Z axis to its' physical maximum. Finally it will home + * the Z axis to account for the lost steps. Use + * M915 S### to specify the current and + * M925 Z## to specify the extra Z height that's added to Z_MAX_POS. + */ + //#define TMC_Z_CALIBRATION + #if ENABLED(TMC_Z_CALIBRATION) + #define CALIBRATION_CURRENT 250 + #define CALIBRATION_EXTRA_HEIGHT 10 + #endif + /** * You can set your own advanced settings by filling in predefined functions. * A list of available functions can be found on the library github page diff --git a/Marlin/src/config/examples/Felix/Configuration_adv.h b/Marlin/src/config/examples/Felix/Configuration_adv.h index e934e694e..2a0c2e705 100644 --- a/Marlin/src/config/examples/Felix/Configuration_adv.h +++ b/Marlin/src/config/examples/Felix/Configuration_adv.h @@ -1148,6 +1148,20 @@ */ //#define TMC_DEBUG + /* + * Enable M915 Z axis calibration. + * Marlin will first adjust Z stepper current and then drive + * the Z axis to its' physical maximum. Finally it will home + * the Z axis to account for the lost steps. Use + * M915 S### to specify the current and + * M925 Z## to specify the extra Z height that's added to Z_MAX_POS. + */ + //#define TMC_Z_CALIBRATION + #if ENABLED(TMC_Z_CALIBRATION) + #define CALIBRATION_CURRENT 250 + #define CALIBRATION_EXTRA_HEIGHT 10 + #endif + /** * You can set your own advanced settings by filling in predefined functions. * A list of available functions can be found on the library github page diff --git a/Marlin/src/config/examples/FolgerTech/i3-2020/Configuration_adv.h b/Marlin/src/config/examples/FolgerTech/i3-2020/Configuration_adv.h index b368ecd8b..43f6aa245 100644 --- a/Marlin/src/config/examples/FolgerTech/i3-2020/Configuration_adv.h +++ b/Marlin/src/config/examples/FolgerTech/i3-2020/Configuration_adv.h @@ -1148,6 +1148,20 @@ */ //#define TMC_DEBUG + /* + * Enable M915 Z axis calibration. + * Marlin will first adjust Z stepper current and then drive + * the Z axis to its' physical maximum. Finally it will home + * the Z axis to account for the lost steps. Use + * M915 S### to specify the current and + * M925 Z## to specify the extra Z height that's added to Z_MAX_POS. + */ + //#define TMC_Z_CALIBRATION + #if ENABLED(TMC_Z_CALIBRATION) + #define CALIBRATION_CURRENT 250 + #define CALIBRATION_EXTRA_HEIGHT 10 + #endif + /** * You can set your own advanced settings by filling in predefined functions. * A list of available functions can be found on the library github page diff --git a/Marlin/src/config/examples/Infitary/i3-M508/Configuration_adv.h b/Marlin/src/config/examples/Infitary/i3-M508/Configuration_adv.h index 0adb8d0e6..b3c4add64 100644 --- a/Marlin/src/config/examples/Infitary/i3-M508/Configuration_adv.h +++ b/Marlin/src/config/examples/Infitary/i3-M508/Configuration_adv.h @@ -1148,6 +1148,20 @@ */ //#define TMC_DEBUG + /* + * Enable M915 Z axis calibration. + * Marlin will first adjust Z stepper current and then drive + * the Z axis to its' physical maximum. Finally it will home + * the Z axis to account for the lost steps. Use + * M915 S### to specify the current and + * M925 Z## to specify the extra Z height that's added to Z_MAX_POS. + */ + //#define TMC_Z_CALIBRATION + #if ENABLED(TMC_Z_CALIBRATION) + #define CALIBRATION_CURRENT 250 + #define CALIBRATION_EXTRA_HEIGHT 10 + #endif + /** * You can set your own advanced settings by filling in predefined functions. * A list of available functions can be found on the library github page diff --git a/Marlin/src/config/examples/MakerParts/Configuration_adv.h b/Marlin/src/config/examples/MakerParts/Configuration_adv.h index 21b2fc2d0..fc5c07c91 100644 --- a/Marlin/src/config/examples/MakerParts/Configuration_adv.h +++ b/Marlin/src/config/examples/MakerParts/Configuration_adv.h @@ -985,7 +985,7 @@ #endif -// @section TMC2130 +// @section TMC2130, TMC2208 /** * Enable this for SilentStepStick Trinamic TMC2130 SPI-configurable stepper drivers. @@ -999,7 +999,19 @@ */ //#define HAVE_TMC2130 -#if ENABLED(HAVE_TMC2130) +/** + * Enable this for SilentStepStick Trinamic TMC2208 UART-configurable stepper drivers. + * Connect #_SERIAL_TX_PIN to the driver side PDN_UART pin. + * To use the reading capabilities, also connect #_SERIAL_RX_PIN + * to #_SERIAL_TX_PIN with a 1K resistor. + * The drivers can also be used with hardware serial. + * + * You'll also need the TMC2208Stepper Arduino library + * (https://github.com/teemuatlut/TMC2208Stepper). + */ +//#define HAVE_TMC2208 + +#if ENABLED(HAVE_TMC2130) || ENABLED(HAVE_TMC2208) // CHOOSE YOUR MOTORS HERE, THIS IS MANDATORY //#define X_IS_TMC2130 @@ -1014,46 +1026,58 @@ //#define E3_IS_TMC2130 //#define E4_IS_TMC2130 + //#define X_IS_TMC2208 + //#define X2_IS_TMC2208 + //#define Y_IS_TMC2208 + //#define Y2_IS_TMC2208 + //#define Z_IS_TMC2208 + //#define Z2_IS_TMC2208 + //#define E0_IS_TMC2208 + //#define E1_IS_TMC2208 + //#define E2_IS_TMC2208 + //#define E3_IS_TMC2208 + //#define E4_IS_TMC2208 + /** * Stepper driver settings */ #define R_SENSE 0.11 // R_sense resistor for SilentStepStick2130 #define HOLD_MULTIPLIER 0.5 // Scales down the holding current from run current - #define INTERPOLATE 1 // Interpolate X/Y/Z_MICROSTEPS to 256 + #define INTERPOLATE true // Interpolate X/Y/Z_MICROSTEPS to 256 - #define X_CURRENT 1000 // rms current in mA. Multiply by 1.41 for peak current. + #define X_CURRENT 800 // rms current in mA. Multiply by 1.41 for peak current. #define X_MICROSTEPS 16 // 0..256 - #define Y_CURRENT 1000 + #define Y_CURRENT 800 #define Y_MICROSTEPS 16 - #define Z_CURRENT 1000 + #define Z_CURRENT 800 #define Z_MICROSTEPS 16 - //#define X2_CURRENT 1000 - //#define X2_MICROSTEPS 16 + #define X2_CURRENT 800 + #define X2_MICROSTEPS 16 - //#define Y2_CURRENT 1000 - //#define Y2_MICROSTEPS 16 + #define Y2_CURRENT 800 + #define Y2_MICROSTEPS 16 - //#define Z2_CURRENT 1000 - //#define Z2_MICROSTEPS 16 + #define Z2_CURRENT 800 + #define Z2_MICROSTEPS 16 - //#define E0_CURRENT 1000 - //#define E0_MICROSTEPS 16 + #define E0_CURRENT 800 + #define E0_MICROSTEPS 16 - //#define E1_CURRENT 1000 - //#define E1_MICROSTEPS 16 + #define E1_CURRENT 800 + #define E1_MICROSTEPS 16 - //#define E2_CURRENT 1000 - //#define E2_MICROSTEPS 16 + #define E2_CURRENT 800 + #define E2_MICROSTEPS 16 - //#define E3_CURRENT 1000 - //#define E3_MICROSTEPS 16 + #define E3_CURRENT 800 + #define E3_MICROSTEPS 16 - //#define E4_CURRENT 1000 - //#define E4_MICROSTEPS 16 + #define E4_CURRENT 800 + #define E4_MICROSTEPS 16 /** * Use Trinamic's ultra quiet stepping mode. @@ -1062,24 +1086,22 @@ #define STEALTHCHOP /** - * Let Marlin automatically control stepper current. - * This is still an experimental feature. - * Increase current every 5s by CURRENT_STEP until stepper temperature prewarn gets triggered, - * then decrease current by CURRENT_STEP until temperature prewarn is cleared. - * Adjusting starts from X/Y/Z/E_CURRENT but will not increase over AUTO_ADJUST_MAX + * Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions, + * like overtemperature and short to ground. TMC2208 requires hardware serial. + * In the case of overtemperature Marlin can decrease the driver current until error condition clears. + * Other detected conditions can be used to stop the current print. * Relevant g-codes: * M906 - Set or get motor current in milliamps using axis codes X, Y, Z, E. Report values if no axis codes given. - * M906 S1 - Start adjusting current - * M906 S0 - Stop adjusting current * M911 - Report stepper driver overtemperature pre-warn condition. * M912 - Clear stepper driver overtemperature pre-warn condition flag. + * M122 S0/1 - Report driver parameters (Requires TMC_DEBUG) */ - //#define AUTOMATIC_CURRENT_CONTROL + //#define MONITOR_DRIVER_STATUS - #if ENABLED(AUTOMATIC_CURRENT_CONTROL) - #define CURRENT_STEP 50 // [mA] - #define AUTO_ADJUST_MAX 1300 // [mA], 1300mA_rms = 1840mA_peak + #if ENABLED(MONITOR_DRIVER_STATUS) + #define CURRENT_STEP_DOWN 50 // [mA] #define REPORT_CURRENT_CHANGE + #define STOP_ON_ERROR #endif /** @@ -1094,8 +1116,8 @@ #define X2_HYBRID_THRESHOLD 100 #define Y_HYBRID_THRESHOLD 100 #define Y2_HYBRID_THRESHOLD 100 - #define Z_HYBRID_THRESHOLD 4 - #define Z2_HYBRID_THRESHOLD 4 + #define Z_HYBRID_THRESHOLD 3 + #define Z2_HYBRID_THRESHOLD 3 #define E0_HYBRID_THRESHOLD 30 #define E1_HYBRID_THRESHOLD 30 #define E2_HYBRID_THRESHOLD 30 @@ -1105,7 +1127,7 @@ /** * Use stallGuard2 to sense an obstacle and trigger an endstop. * You need to place a wire from the driver's DIAG1 pin to the X/Y endstop pin. - * If used along with STEALTHCHOP, the movement will be louder when homing. This is normal. + * X and Y homing will always be done in spreadCycle mode. * * X/Y_HOMING_SENSITIVITY is used for tuning the trigger sensitivity. * Higher values make the system LESS sensitive. @@ -1114,27 +1136,48 @@ * It is advised to set X/Y_HOME_BUMP_MM to 0. * M914 X/Y to live tune the setting */ - //#define SENSORLESS_HOMING + //#define SENSORLESS_HOMING // TMC2130 only #if ENABLED(SENSORLESS_HOMING) - #define X_HOMING_SENSITIVITY 19 - #define Y_HOMING_SENSITIVITY 19 + #define X_HOMING_SENSITIVITY 8 + #define Y_HOMING_SENSITIVITY 8 + #endif + + /** + * Enable M122 debugging command for TMC stepper drivers. + * M122 S0/1 will enable continous reporting. + */ + //#define TMC_DEBUG + + /* + * Enable M915 Z axis calibration. + * Marlin will first adjust Z stepper current and then drive + * the Z axis to its' physical maximum. Finally it will home + * the Z axis to account for the lost steps. Use + * M915 S### to specify the current and + * M925 Z## to specify the extra Z height that's added to Z_MAX_POS. + */ + //#define TMC_Z_CALIBRATION + #if ENABLED(TMC_Z_CALIBRATION) + #define CALIBRATION_CURRENT 250 + #define CALIBRATION_EXTRA_HEIGHT 10 #endif /** * You can set your own advanced settings by filling in predefined functions. * A list of available functions can be found on the library github page * https://github.com/teemuatlut/TMC2130Stepper + * https://github.com/teemuatlut/TMC2208Stepper * * Example: - * #define TMC2130_ADV() { \ + * #define TMC_ADV() { \ * stepperX.diag0_temp_prewarn(1); \ - * stepperX.interpolate(0); \ + * stepperY.interpolate(0); \ * } */ - #define TMC2130_ADV() { } + #define TMC_ADV() { } -#endif // HAVE_TMC2130 +#endif // TMC2130 || TMC2208 // @section L6470 diff --git a/Marlin/src/config/examples/Malyan/M150/Configuration_adv.h b/Marlin/src/config/examples/Malyan/M150/Configuration_adv.h index 650f7b0a5..3aad75b46 100644 --- a/Marlin/src/config/examples/Malyan/M150/Configuration_adv.h +++ b/Marlin/src/config/examples/Malyan/M150/Configuration_adv.h @@ -1148,6 +1148,20 @@ */ //#define TMC_DEBUG + /* + * Enable M915 Z axis calibration. + * Marlin will first adjust Z stepper current and then drive + * the Z axis to its' physical maximum. Finally it will home + * the Z axis to account for the lost steps. Use + * M915 S### to specify the current and + * M925 Z## to specify the extra Z height that's added to Z_MAX_POS. + */ + //#define TMC_Z_CALIBRATION + #if ENABLED(TMC_Z_CALIBRATION) + #define CALIBRATION_CURRENT 250 + #define CALIBRATION_EXTRA_HEIGHT 10 + #endif + /** * You can set your own advanced settings by filling in predefined functions. * A list of available functions can be found on the library github page diff --git a/Marlin/src/config/examples/Malyan/M200/Configuration_adv.h b/Marlin/src/config/examples/Malyan/M200/Configuration_adv.h index 403d8e7a8..aa8c95a43 100644 --- a/Marlin/src/config/examples/Malyan/M200/Configuration_adv.h +++ b/Marlin/src/config/examples/Malyan/M200/Configuration_adv.h @@ -1148,6 +1148,20 @@ */ //#define TMC_DEBUG + /* + * Enable M915 Z axis calibration. + * Marlin will first adjust Z stepper current and then drive + * the Z axis to its' physical maximum. Finally it will home + * the Z axis to account for the lost steps. Use + * M915 S### to specify the current and + * M925 Z## to specify the extra Z height that's added to Z_MAX_POS. + */ + //#define TMC_Z_CALIBRATION + #if ENABLED(TMC_Z_CALIBRATION) + #define CALIBRATION_CURRENT 250 + #define CALIBRATION_EXTRA_HEIGHT 10 + #endif + /** * You can set your own advanced settings by filling in predefined functions. * A list of available functions can be found on the library github page diff --git a/Marlin/src/config/examples/Micromake/C1/enhanced/Configuration_adv.h b/Marlin/src/config/examples/Micromake/C1/enhanced/Configuration_adv.h index d2c3e4c1c..db1908008 100644 --- a/Marlin/src/config/examples/Micromake/C1/enhanced/Configuration_adv.h +++ b/Marlin/src/config/examples/Micromake/C1/enhanced/Configuration_adv.h @@ -1149,6 +1149,20 @@ */ //#define TMC_DEBUG + /* + * Enable M915 Z axis calibration. + * Marlin will first adjust Z stepper current and then drive + * the Z axis to its' physical maximum. Finally it will home + * the Z axis to account for the lost steps. Use + * M915 S### to specify the current and + * M925 Z## to specify the extra Z height that's added to Z_MAX_POS. + */ + //#define TMC_Z_CALIBRATION + #if ENABLED(TMC_Z_CALIBRATION) + #define CALIBRATION_CURRENT 250 + #define CALIBRATION_EXTRA_HEIGHT 10 + #endif + /** * You can set your own advanced settings by filling in predefined functions. * A list of available functions can be found on the library github page diff --git a/Marlin/src/config/examples/Mks/Sbase/Configuration_adv.h b/Marlin/src/config/examples/Mks/Sbase/Configuration_adv.h index e5b7ee993..69d145392 100644 --- a/Marlin/src/config/examples/Mks/Sbase/Configuration_adv.h +++ b/Marlin/src/config/examples/Mks/Sbase/Configuration_adv.h @@ -1156,6 +1156,20 @@ */ //#define TMC_DEBUG + /* + * Enable M915 Z axis calibration. + * Marlin will first adjust Z stepper current and then drive + * the Z axis to its' physical maximum. Finally it will home + * the Z axis to account for the lost steps. Use + * M915 S### to specify the current and + * M925 Z## to specify the extra Z height that's added to Z_MAX_POS. + */ + //#define TMC_Z_CALIBRATION + #if ENABLED(TMC_Z_CALIBRATION) + #define CALIBRATION_CURRENT 250 + #define CALIBRATION_EXTRA_HEIGHT 10 + #endif + /** * You can set your own advanced settings by filling in predefined functions. * A list of available functions can be found on the library github page diff --git a/Marlin/src/config/examples/RigidBot/Configuration_adv.h b/Marlin/src/config/examples/RigidBot/Configuration_adv.h index b8e965c93..41d091873 100644 --- a/Marlin/src/config/examples/RigidBot/Configuration_adv.h +++ b/Marlin/src/config/examples/RigidBot/Configuration_adv.h @@ -1148,6 +1148,20 @@ */ //#define TMC_DEBUG + /* + * Enable M915 Z axis calibration. + * Marlin will first adjust Z stepper current and then drive + * the Z axis to its' physical maximum. Finally it will home + * the Z axis to account for the lost steps. Use + * M915 S### to specify the current and + * M925 Z## to specify the extra Z height that's added to Z_MAX_POS. + */ + //#define TMC_Z_CALIBRATION + #if ENABLED(TMC_Z_CALIBRATION) + #define CALIBRATION_CURRENT 250 + #define CALIBRATION_EXTRA_HEIGHT 10 + #endif + /** * You can set your own advanced settings by filling in predefined functions. * A list of available functions can be found on the library github page diff --git a/Marlin/src/config/examples/SCARA/Configuration_adv.h b/Marlin/src/config/examples/SCARA/Configuration_adv.h index 8b4b2b70e..3b5763b91 100644 --- a/Marlin/src/config/examples/SCARA/Configuration_adv.h +++ b/Marlin/src/config/examples/SCARA/Configuration_adv.h @@ -1148,6 +1148,20 @@ */ //#define TMC_DEBUG + /* + * Enable M915 Z axis calibration. + * Marlin will first adjust Z stepper current and then drive + * the Z axis to its' physical maximum. Finally it will home + * the Z axis to account for the lost steps. Use + * M915 S### to specify the current and + * M925 Z## to specify the extra Z height that's added to Z_MAX_POS. + */ + //#define TMC_Z_CALIBRATION + #if ENABLED(TMC_Z_CALIBRATION) + #define CALIBRATION_CURRENT 250 + #define CALIBRATION_EXTRA_HEIGHT 10 + #endif + /** * You can set your own advanced settings by filling in predefined functions. * A list of available functions can be found on the library github page diff --git a/Marlin/src/config/examples/Sanguinololu/Configuration_adv.h b/Marlin/src/config/examples/Sanguinololu/Configuration_adv.h index 59d37dc30..1218b5a95 100644 --- a/Marlin/src/config/examples/Sanguinololu/Configuration_adv.h +++ b/Marlin/src/config/examples/Sanguinololu/Configuration_adv.h @@ -1137,6 +1137,20 @@ */ //#define TMC_DEBUG + /* + * Enable M915 Z axis calibration. + * Marlin will first adjust Z stepper current and then drive + * the Z axis to its' physical maximum. Finally it will home + * the Z axis to account for the lost steps. Use + * M915 S### to specify the current and + * M925 Z## to specify the extra Z height that's added to Z_MAX_POS. + */ + //#define TMC_Z_CALIBRATION + #if ENABLED(TMC_Z_CALIBRATION) + #define CALIBRATION_CURRENT 250 + #define CALIBRATION_EXTRA_HEIGHT 10 + #endif + /** * You can set your own advanced settings by filling in predefined functions. * A list of available functions can be found on the library github page diff --git a/Marlin/src/config/examples/TinyBoy2/Configuration_adv.h b/Marlin/src/config/examples/TinyBoy2/Configuration_adv.h index b6f27505a..432d4df25 100644 --- a/Marlin/src/config/examples/TinyBoy2/Configuration_adv.h +++ b/Marlin/src/config/examples/TinyBoy2/Configuration_adv.h @@ -1148,6 +1148,20 @@ */ //#define TMC_DEBUG + /* + * Enable M915 Z axis calibration. + * Marlin will first adjust Z stepper current and then drive + * the Z axis to its' physical maximum. Finally it will home + * the Z axis to account for the lost steps. Use + * M915 S### to specify the current and + * M925 Z## to specify the extra Z height that's added to Z_MAX_POS. + */ + //#define TMC_Z_CALIBRATION + #if ENABLED(TMC_Z_CALIBRATION) + #define CALIBRATION_CURRENT 250 + #define CALIBRATION_EXTRA_HEIGHT 10 + #endif + /** * You can set your own advanced settings by filling in predefined functions. * A list of available functions can be found on the library github page diff --git a/Marlin/src/config/examples/UltiMachine/Archim2/Configuration_adv.h b/Marlin/src/config/examples/UltiMachine/Archim2/Configuration_adv.h index 57575d34c..9a94a75df 100644 --- a/Marlin/src/config/examples/UltiMachine/Archim2/Configuration_adv.h +++ b/Marlin/src/config/examples/UltiMachine/Archim2/Configuration_adv.h @@ -1148,6 +1148,20 @@ */ //#define TMC_DEBUG + /* + * Enable M915 Z axis calibration. + * Marlin will first adjust Z stepper current and then drive + * the Z axis to its' physical maximum. Finally it will home + * the Z axis to account for the lost steps. Use + * M915 S### to specify the current and + * M925 Z## to specify the extra Z height that's added to Z_MAX_POS. + */ + //#define TMC_Z_CALIBRATION + #if ENABLED(TMC_Z_CALIBRATION) + #define CALIBRATION_CURRENT 250 + #define CALIBRATION_EXTRA_HEIGHT 10 + #endif + /** * You can set your own advanced settings by filling in predefined functions. * A list of available functions can be found on the library github page diff --git a/Marlin/src/config/examples/Velleman/K8200/Configuration_adv.h b/Marlin/src/config/examples/Velleman/K8200/Configuration_adv.h index c18525912..bb0d8a760 100644 --- a/Marlin/src/config/examples/Velleman/K8200/Configuration_adv.h +++ b/Marlin/src/config/examples/Velleman/K8200/Configuration_adv.h @@ -1159,6 +1159,20 @@ */ //#define TMC_DEBUG + /* + * Enable M915 Z axis calibration. + * Marlin will first adjust Z stepper current and then drive + * the Z axis to its' physical maximum. Finally it will home + * the Z axis to account for the lost steps. Use + * M915 S### to specify the current and + * M925 Z## to specify the extra Z height that's added to Z_MAX_POS. + */ + //#define TMC_Z_CALIBRATION + #if ENABLED(TMC_Z_CALIBRATION) + #define CALIBRATION_CURRENT 250 + #define CALIBRATION_EXTRA_HEIGHT 10 + #endif + /** * You can set your own advanced settings by filling in predefined functions. * A list of available functions can be found on the library github page diff --git a/Marlin/src/config/examples/Velleman/K8400/Configuration_adv.h b/Marlin/src/config/examples/Velleman/K8400/Configuration_adv.h index bcf3e2b4c..afa648d11 100644 --- a/Marlin/src/config/examples/Velleman/K8400/Configuration_adv.h +++ b/Marlin/src/config/examples/Velleman/K8400/Configuration_adv.h @@ -1148,6 +1148,20 @@ */ //#define TMC_DEBUG + /* + * Enable M915 Z axis calibration. + * Marlin will first adjust Z stepper current and then drive + * the Z axis to its' physical maximum. Finally it will home + * the Z axis to account for the lost steps. Use + * M915 S### to specify the current and + * M925 Z## to specify the extra Z height that's added to Z_MAX_POS. + */ + //#define TMC_Z_CALIBRATION + #if ENABLED(TMC_Z_CALIBRATION) + #define CALIBRATION_CURRENT 250 + #define CALIBRATION_EXTRA_HEIGHT 10 + #endif + /** * You can set your own advanced settings by filling in predefined functions. * A list of available functions can be found on the library github page diff --git a/Marlin/src/config/examples/Wanhao/Duplicator 6/Configuration_adv.h b/Marlin/src/config/examples/Wanhao/Duplicator 6/Configuration_adv.h index 1755cc571..023951cde 100644 --- a/Marlin/src/config/examples/Wanhao/Duplicator 6/Configuration_adv.h +++ b/Marlin/src/config/examples/Wanhao/Duplicator 6/Configuration_adv.h @@ -1150,6 +1150,20 @@ */ //#define TMC_DEBUG + /* + * Enable M915 Z axis calibration. + * Marlin will first adjust Z stepper current and then drive + * the Z axis to its' physical maximum. Finally it will home + * the Z axis to account for the lost steps. Use + * M915 S### to specify the current and + * M925 Z## to specify the extra Z height that's added to Z_MAX_POS. + */ + //#define TMC_Z_CALIBRATION + #if ENABLED(TMC_Z_CALIBRATION) + #define CALIBRATION_CURRENT 250 + #define CALIBRATION_EXTRA_HEIGHT 10 + #endif + /** * You can set your own advanced settings by filling in predefined functions. * A list of available functions can be found on the library github page diff --git a/Marlin/src/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h b/Marlin/src/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h index cc4afd923..e1590bd9f 100644 --- a/Marlin/src/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h +++ b/Marlin/src/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h @@ -1150,6 +1150,20 @@ */ //#define TMC_DEBUG + /* + * Enable M915 Z axis calibration. + * Marlin will first adjust Z stepper current and then drive + * the Z axis to its' physical maximum. Finally it will home + * the Z axis to account for the lost steps. Use + * M915 S### to specify the current and + * M925 Z## to specify the extra Z height that's added to Z_MAX_POS. + */ + //#define TMC_Z_CALIBRATION + #if ENABLED(TMC_Z_CALIBRATION) + #define CALIBRATION_CURRENT 250 + #define CALIBRATION_EXTRA_HEIGHT 10 + #endif + /** * You can set your own advanced settings by filling in predefined functions. * A list of available functions can be found on the library github page diff --git a/Marlin/src/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h b/Marlin/src/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h index 83bde0e19..4a2802c5b 100644 --- a/Marlin/src/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h +++ b/Marlin/src/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h @@ -1150,6 +1150,20 @@ */ //#define TMC_DEBUG + /* + * Enable M915 Z axis calibration. + * Marlin will first adjust Z stepper current and then drive + * the Z axis to its' physical maximum. Finally it will home + * the Z axis to account for the lost steps. Use + * M915 S### to specify the current and + * M925 Z## to specify the extra Z height that's added to Z_MAX_POS. + */ + //#define TMC_Z_CALIBRATION + #if ENABLED(TMC_Z_CALIBRATION) + #define CALIBRATION_CURRENT 250 + #define CALIBRATION_EXTRA_HEIGHT 10 + #endif + /** * You can set your own advanced settings by filling in predefined functions. * A list of available functions can be found on the library github page diff --git a/Marlin/src/config/examples/delta/generic/Configuration_adv.h b/Marlin/src/config/examples/delta/generic/Configuration_adv.h index 83bde0e19..4a2802c5b 100644 --- a/Marlin/src/config/examples/delta/generic/Configuration_adv.h +++ b/Marlin/src/config/examples/delta/generic/Configuration_adv.h @@ -1150,6 +1150,20 @@ */ //#define TMC_DEBUG + /* + * Enable M915 Z axis calibration. + * Marlin will first adjust Z stepper current and then drive + * the Z axis to its' physical maximum. Finally it will home + * the Z axis to account for the lost steps. Use + * M915 S### to specify the current and + * M925 Z## to specify the extra Z height that's added to Z_MAX_POS. + */ + //#define TMC_Z_CALIBRATION + #if ENABLED(TMC_Z_CALIBRATION) + #define CALIBRATION_CURRENT 250 + #define CALIBRATION_EXTRA_HEIGHT 10 + #endif + /** * You can set your own advanced settings by filling in predefined functions. * A list of available functions can be found on the library github page diff --git a/Marlin/src/config/examples/delta/kossel_mini/Configuration_adv.h b/Marlin/src/config/examples/delta/kossel_mini/Configuration_adv.h index 83bde0e19..4a2802c5b 100644 --- a/Marlin/src/config/examples/delta/kossel_mini/Configuration_adv.h +++ b/Marlin/src/config/examples/delta/kossel_mini/Configuration_adv.h @@ -1150,6 +1150,20 @@ */ //#define TMC_DEBUG + /* + * Enable M915 Z axis calibration. + * Marlin will first adjust Z stepper current and then drive + * the Z axis to its' physical maximum. Finally it will home + * the Z axis to account for the lost steps. Use + * M915 S### to specify the current and + * M925 Z## to specify the extra Z height that's added to Z_MAX_POS. + */ + //#define TMC_Z_CALIBRATION + #if ENABLED(TMC_Z_CALIBRATION) + #define CALIBRATION_CURRENT 250 + #define CALIBRATION_EXTRA_HEIGHT 10 + #endif + /** * You can set your own advanced settings by filling in predefined functions. * A list of available functions can be found on the library github page diff --git a/Marlin/src/config/examples/delta/kossel_pro/Configuration_adv.h b/Marlin/src/config/examples/delta/kossel_pro/Configuration_adv.h index 454312967..ecd80f9b5 100644 --- a/Marlin/src/config/examples/delta/kossel_pro/Configuration_adv.h +++ b/Marlin/src/config/examples/delta/kossel_pro/Configuration_adv.h @@ -1155,6 +1155,20 @@ */ //#define TMC_DEBUG + /* + * Enable M915 Z axis calibration. + * Marlin will first adjust Z stepper current and then drive + * the Z axis to its' physical maximum. Finally it will home + * the Z axis to account for the lost steps. Use + * M915 S### to specify the current and + * M925 Z## to specify the extra Z height that's added to Z_MAX_POS. + */ + //#define TMC_Z_CALIBRATION + #if ENABLED(TMC_Z_CALIBRATION) + #define CALIBRATION_CURRENT 250 + #define CALIBRATION_EXTRA_HEIGHT 10 + #endif + /** * You can set your own advanced settings by filling in predefined functions. * A list of available functions can be found on the library github page diff --git a/Marlin/src/config/examples/delta/kossel_xl/Configuration_adv.h b/Marlin/src/config/examples/delta/kossel_xl/Configuration_adv.h index 18602a3ed..3234bd9fc 100644 --- a/Marlin/src/config/examples/delta/kossel_xl/Configuration_adv.h +++ b/Marlin/src/config/examples/delta/kossel_xl/Configuration_adv.h @@ -1150,6 +1150,20 @@ */ //#define TMC_DEBUG + /* + * Enable M915 Z axis calibration. + * Marlin will first adjust Z stepper current and then drive + * the Z axis to its' physical maximum. Finally it will home + * the Z axis to account for the lost steps. Use + * M915 S### to specify the current and + * M925 Z## to specify the extra Z height that's added to Z_MAX_POS. + */ + //#define TMC_Z_CALIBRATION + #if ENABLED(TMC_Z_CALIBRATION) + #define CALIBRATION_CURRENT 250 + #define CALIBRATION_EXTRA_HEIGHT 10 + #endif + /** * You can set your own advanced settings by filling in predefined functions. * A list of available functions can be found on the library github page diff --git a/Marlin/src/config/examples/gCreate/gMax1.5+/Configuration_adv.h b/Marlin/src/config/examples/gCreate/gMax1.5+/Configuration_adv.h index 1a012652e..a8581c080 100644 --- a/Marlin/src/config/examples/gCreate/gMax1.5+/Configuration_adv.h +++ b/Marlin/src/config/examples/gCreate/gMax1.5+/Configuration_adv.h @@ -1148,6 +1148,20 @@ */ //#define TMC_DEBUG + /* + * Enable M915 Z axis calibration. + * Marlin will first adjust Z stepper current and then drive + * the Z axis to its' physical maximum. Finally it will home + * the Z axis to account for the lost steps. Use + * M915 S### to specify the current and + * M925 Z## to specify the extra Z height that's added to Z_MAX_POS. + */ + //#define TMC_Z_CALIBRATION + #if ENABLED(TMC_Z_CALIBRATION) + #define CALIBRATION_CURRENT 250 + #define CALIBRATION_EXTRA_HEIGHT 10 + #endif + /** * You can set your own advanced settings by filling in predefined functions. * A list of available functions can be found on the library github page diff --git a/Marlin/src/config/examples/makibox/Configuration_adv.h b/Marlin/src/config/examples/makibox/Configuration_adv.h index a3b327a60..d0c280bbc 100644 --- a/Marlin/src/config/examples/makibox/Configuration_adv.h +++ b/Marlin/src/config/examples/makibox/Configuration_adv.h @@ -1148,6 +1148,20 @@ */ //#define TMC_DEBUG + /* + * Enable M915 Z axis calibration. + * Marlin will first adjust Z stepper current and then drive + * the Z axis to its' physical maximum. Finally it will home + * the Z axis to account for the lost steps. Use + * M915 S### to specify the current and + * M925 Z## to specify the extra Z height that's added to Z_MAX_POS. + */ + //#define TMC_Z_CALIBRATION + #if ENABLED(TMC_Z_CALIBRATION) + #define CALIBRATION_CURRENT 250 + #define CALIBRATION_EXTRA_HEIGHT 10 + #endif + /** * You can set your own advanced settings by filling in predefined functions. * A list of available functions can be found on the library github page diff --git a/Marlin/src/config/examples/tvrrug/Round2/Configuration_adv.h b/Marlin/src/config/examples/tvrrug/Round2/Configuration_adv.h index a22b44a92..d01eb1ad7 100644 --- a/Marlin/src/config/examples/tvrrug/Round2/Configuration_adv.h +++ b/Marlin/src/config/examples/tvrrug/Round2/Configuration_adv.h @@ -1148,6 +1148,20 @@ */ //#define TMC_DEBUG + /* + * Enable M915 Z axis calibration. + * Marlin will first adjust Z stepper current and then drive + * the Z axis to its' physical maximum. Finally it will home + * the Z axis to account for the lost steps. Use + * M915 S### to specify the current and + * M925 Z## to specify the extra Z height that's added to Z_MAX_POS. + */ + //#define TMC_Z_CALIBRATION + #if ENABLED(TMC_Z_CALIBRATION) + #define CALIBRATION_CURRENT 250 + #define CALIBRATION_EXTRA_HEIGHT 10 + #endif + /** * You can set your own advanced settings by filling in predefined functions. * A list of available functions can be found on the library github page diff --git a/Marlin/src/config/examples/wt150/Configuration_adv.h b/Marlin/src/config/examples/wt150/Configuration_adv.h index 3ac5a0529..a87df1c00 100644 --- a/Marlin/src/config/examples/wt150/Configuration_adv.h +++ b/Marlin/src/config/examples/wt150/Configuration_adv.h @@ -1149,6 +1149,20 @@ */ //#define TMC_DEBUG + /* + * Enable M915 Z axis calibration. + * Marlin will first adjust Z stepper current and then drive + * the Z axis to its' physical maximum. Finally it will home + * the Z axis to account for the lost steps. Use + * M915 S### to specify the current and + * M925 Z## to specify the extra Z height that's added to Z_MAX_POS. + */ + //#define TMC_Z_CALIBRATION + #if ENABLED(TMC_Z_CALIBRATION) + #define CALIBRATION_CURRENT 250 + #define CALIBRATION_EXTRA_HEIGHT 10 + #endif + /** * You can set your own advanced settings by filling in predefined functions. * A list of available functions can be found on the library github page diff --git a/Marlin/src/feature/tmc_util.cpp b/Marlin/src/feature/tmc_util.cpp index 3a70528cf..ef80495f6 100644 --- a/Marlin/src/feature/tmc_util.cpp +++ b/Marlin/src/feature/tmc_util.cpp @@ -35,56 +35,6 @@ bool report_tmc_status = false; char extended_axis_codes[11][3] = { "X", "X2", "Y", "Y2", "Z", "Z2", "E0", "E1", "E2", "E3", "E4" }; -template -void tmc_get_current(TMC &st, const char name[]) { - SERIAL_ECHO(name); - SERIAL_ECHOPGM(" axis driver current: "); - SERIAL_ECHOLN(st.getCurrent()); -} -template -void tmc_set_current(TMC &st, const char name[], const int mA) { - st.setCurrent(mA, R_SENSE, HOLD_MULTIPLIER); - tmc_get_current(st, name); -} - -template -void tmc_report_otpw(TMC &st, const char name[]) { - SERIAL_ECHO(name); - SERIAL_ECHOPGM(" axis temperature prewarn triggered: "); - serialprintPGM(st.getOTPW() ? PSTR("true") : PSTR("false")); - SERIAL_EOL(); -} -template -void tmc_clear_otpw(TMC &st, const char name[]) { - st.clear_otpw(); - SERIAL_ECHO(name); - SERIAL_ECHOLNPGM(" prewarn flag cleared"); -} - -template -void tmc_get_pwmthrs(TMC &st, const char name[], const uint16_t spmm) { - SERIAL_ECHO(name); - SERIAL_ECHOPGM(" stealthChop max speed set to "); - SERIAL_ECHOLN(12650000UL * st.microsteps() / (256 * st.TPWMTHRS() * spmm)); -} -template -void tmc_set_pwmthrs(TMC &st, const char name[], const int32_t thrs, const uint32_t spmm) { - st.TPWMTHRS(12650000UL * st.microsteps() / (256 * thrs * spmm)); - tmc_get_pwmthrs(st, name, spmm); -} - -template -void tmc_get_sgt(TMC &st, const char name[]) { - SERIAL_ECHO(name); - SERIAL_ECHOPGM(" driver homing sensitivity set to "); - MYSERIAL.println(st.sgt(), DEC); -} -template -void tmc_set_sgt(TMC &st, const char name[], const int8_t sgt_val) { - st.sgt(sgt_val); - tmc_get_sgt(st, name); -} - /* * Check for over temperature or short to ground error flags. * Report and log warning of overtemperature condition. diff --git a/Marlin/src/feature/tmc_util.h b/Marlin/src/feature/tmc_util.h index 72d3b15bb..7741c7b44 100644 --- a/Marlin/src/feature/tmc_util.h +++ b/Marlin/src/feature/tmc_util.h @@ -29,27 +29,58 @@ extern bool report_tmc_status; extern char extended_axis_codes[11][3]; + enum TMC_AxisEnum { TMC_X, TMC_X2, TMC_Y, TMC_Y2, TMC_Z, TMC_Z2, TMC_E0, TMC_E1, TMC_E2, TMC_E3, TMC_E4 }; template -void tmc_get_current(TMC &st, const char name[]); +void tmc_get_current(TMC &st, const char name[]) { + SERIAL_ECHO(name); + SERIAL_ECHOPGM(" axis driver current: "); + SERIAL_ECHOLN(st.getCurrent()); +} template -void tmc_set_current(TMC &st, const char name[], const int mA); +void tmc_set_current(TMC &st, const char name[], const int mA) { + st.setCurrent(mA, R_SENSE, HOLD_MULTIPLIER); + tmc_get_current(st, name); +} template -void tmc_report_otpw(TMC &st, const char name[]); +void tmc_report_otpw(TMC &st, const char name[]) { + SERIAL_ECHO(name); + SERIAL_ECHOPGM(" axis temperature prewarn triggered: "); + serialprintPGM(st.getOTPW() ? PSTR("true") : PSTR("false")); + SERIAL_EOL(); +} template -void tmc_clear_otpw(TMC &st, const char name[]); +void tmc_clear_otpw(TMC &st, const char name[]) { + st.clear_otpw(); + SERIAL_ECHO(name); + SERIAL_ECHOLNPGM(" prewarn flag cleared"); +} template -void tmc_get_pwmthrs(TMC &st, const char name[], const uint16_t spmm); +void tmc_get_pwmthrs(TMC &st, const char name[], const uint16_t spmm) { + SERIAL_ECHO(name); + SERIAL_ECHOPGM(" stealthChop max speed set to "); + SERIAL_ECHOLN(12650000UL * st.microsteps() / (256 * st.TPWMTHRS() * spmm)); +} template -void tmc_set_pwmthrs(TMC &st, const char name[], const int32_t thrs, const uint32_t spmm); +void tmc_set_pwmthrs(TMC &st, const char name[], const int32_t thrs, const uint32_t spmm) { + st.TPWMTHRS(12650000UL * st.microsteps() / (256 * thrs * spmm)); + tmc_get_pwmthrs(st, name, spmm); +} template -void tmc_get_sgt(TMC &st, const char name[]); +void tmc_get_sgt(TMC &st, const char name[]) { + SERIAL_ECHO(name); + SERIAL_ECHOPGM(" driver homing sensitivity set to "); + MYSERIAL.println(st.sgt(), DEC); +} template -void tmc_set_sgt(TMC &st, const char name[], const int8_t sgt_val); +void tmc_set_sgt(TMC &st, const char name[], const int8_t sgt_val) { + st.sgt(sgt_val); + tmc_get_sgt(st, name); +} void _M122(); void monitor_tmc_driver(); diff --git a/Marlin/src/gcode/feature/trinamic/M122.cpp b/Marlin/src/gcode/feature/trinamic/M122.cpp index f566ba881..843e2e7e9 100644 --- a/Marlin/src/gcode/feature/trinamic/M122.cpp +++ b/Marlin/src/gcode/feature/trinamic/M122.cpp @@ -334,6 +334,6 @@ void _M122() { } // We need to call M122 from monitor_tmc_driver() as well but GcodeSuite::M122 is private. -inline void GcodeSuite::M122() { _M122(); } +void GcodeSuite::M122() { _M122(); } #endif // TMC_DEBUG diff --git a/Marlin/src/gcode/feature/trinamic/M906.cpp b/Marlin/src/gcode/feature/trinamic/M906.cpp index a93657d55..aa43f9269 100644 --- a/Marlin/src/gcode/feature/trinamic/M906.cpp +++ b/Marlin/src/gcode/feature/trinamic/M906.cpp @@ -33,7 +33,7 @@ * M906: Set motor current in milliamps using axis codes X, Y, Z, E * Report driver currents when no axis specified */ -inline void GcodeSuite::M906() { +void GcodeSuite::M906() { uint16_t values[XYZE]; LOOP_XYZE(i) values[i] = parser.intval(axis_codes[i]); diff --git a/Marlin/src/gcode/feature/trinamic/M911-M915.cpp b/Marlin/src/gcode/feature/trinamic/M911-M915.cpp index 49402edbc..6cca7105d 100644 --- a/Marlin/src/gcode/feature/trinamic/M911-M915.cpp +++ b/Marlin/src/gcode/feature/trinamic/M911-M915.cpp @@ -28,12 +28,13 @@ #include "../../../feature/tmc_util.h" #include "../../../module/stepper_indirection.h" #include "../../../module/planner.h" +#include "../../queue.h" /** * M911: Report TMC stepper driver overtemperature pre-warn flag * The flag is held by the library and persist until manually cleared by M912 */ -inline void GcodeSuite::M911() { +void GcodeSuite::M911() { #if ENABLED(X_IS_TMC2130) || (ENABLED(X_IS_TMC2208) && PIN_EXISTS(X_SERIAL_RX)) || ENABLED(IS_TRAMS) tmc_report_otpw(stepperX, extended_axis_codes[TMC_X]); #endif @@ -51,7 +52,7 @@ inline void GcodeSuite::M911() { /** * M912: Clear TMC stepper driver overtemperature pre-warn flag held by the library */ -inline void GcodeSuite::M912() { +void GcodeSuite::M912() { const bool clearX = parser.seen(axis_codes[X_AXIS]), clearY = parser.seen(axis_codes[Y_AXIS]), clearZ = parser.seen(axis_codes[Z_AXIS]), clearE = parser.seen(axis_codes[E_AXIS]), clearAll = (!clearX && !clearY && !clearZ && !clearE) || (clearX && clearY && clearZ && clearE); #if ENABLED(X_IS_TMC2130) || ENABLED(IS_TRAMS) || (ENABLED(X_IS_TMC2208) && PIN_EXISTS(X_SERIAL_RX)) @@ -78,7 +79,7 @@ inline void GcodeSuite::M912() { * M913: Set HYBRID_THRESHOLD speed. */ #if ENABLED(HYBRID_THRESHOLD) - inline void GcodeSuite::M913() { + void GcodeSuite::M913() { uint16_t values[XYZE]; LOOP_XYZE(i) values[i] = parser.intval(axis_codes[i]); @@ -137,7 +138,7 @@ inline void GcodeSuite::M912() { * M914: Set SENSORLESS_HOMING sensitivity. */ #if ENABLED(SENSORLESS_HOMING) - inline void GcodeSuite::M914() { + void GcodeSuite::M914() { #if ENABLED(X_IS_TMC2130) || ENABLED(IS_TRAMS) if (parser.seen(axis_codes[X_AXIS])) tmc_set_sgt(stepperX, extended_axis_codes[TMC_X], parser.value_int()); else tmc_get_sgt(stepperX, extended_axis_codes[TMC_X]); @@ -160,8 +161,8 @@ inline void GcodeSuite::M912() { /** * TMC Z axis calibration routine */ -#if ENABLED(TMC_Z_CALIBRATION) && (Z_IS_TRINAMIC || Z2_IS_TRINAMIC) - inline void GcodeSuite::M915() { +#if ENABLED(TMC_Z_CALIBRATION) + void GcodeSuite::M915() { uint16_t _rms = parser.seenval('S') ? parser.value_int() : CALIBRATION_CURRENT; uint16_t _z = parser.seenval('Z') ? parser.value_int() : CALIBRATION_EXTRA_HEIGHT; @@ -170,25 +171,33 @@ inline void GcodeSuite::M912() { return; } - uint16_t Z_current_1 = stepperZ.getCurrent(); - uint16_t Z2_current_1 = stepperZ.getCurrent(); + #if Z_IS_TRINAMIC + uint16_t Z_current_1 = stepperZ.getCurrent(); + stepperZ.setCurrent(_rms, R_SENSE, HOLD_MULTIPLIER); + #endif + #if Z2_IS_TRINAMIC + uint16_t Z2_current_1 = stepperZ2.getCurrent(); + stepperZ2.setCurrent(_rms, R_SENSE, HOLD_MULTIPLIER); + #endif - stepperZ.setCurrent(_rms, R_SENSE, HOLD_MULTIPLIER); - stepperZ2.setCurrent(_rms, R_SENSE, HOLD_MULTIPLIER); SERIAL_ECHOPAIR("\nCalibration current: Z", _rms); soft_endstops_enabled = false; do_blocking_move_to_z(Z_MAX_POS+_z); - stepperZ.setCurrent(Z_current_1, R_SENSE, HOLD_MULTIPLIER); - stepperZ2.setCurrent(Z2_current_1, R_SENSE, HOLD_MULTIPLIER); + #if Z_IS_TRINAMIC + stepperZ.setCurrent(Z_current_1, R_SENSE, HOLD_MULTIPLIER); + #endif + #if Z2_IS_TRINAMIC + stepperZ2.setCurrent(Z2_current_1, R_SENSE, HOLD_MULTIPLIER); + #endif do_blocking_move_to_z(Z_MAX_POS); soft_endstops_enabled = true; SERIAL_ECHOLNPGM("\nHoming Z because we lost steps"); - home_z_safely(); + enqueue_and_echo_commands_P(PSTR("G28 Z")); } #endif diff --git a/Marlin/src/gcode/gcode.cpp b/Marlin/src/gcode/gcode.cpp index 70e396f4a..318718666 100644 --- a/Marlin/src/gcode/gcode.cpp +++ b/Marlin/src/gcode/gcode.cpp @@ -659,8 +659,10 @@ void GcodeSuite::process_parsed_command() { #endif #endif - #if HAVE_TRINAMIC - case 122: M122(); break; + #if HAS_TRINAMIC + #if ENABLED(TMC_DEBUG) + case 122: M122(); break; + #endif case 906: M906(); break; // M906: Set motor current in milliamps using axis codes X, Y, Z, E case 911: M911(); break; // M911: Report TMC2130 prewarn triggered flags case 912: M912(); break; // M912: Clear TMC2130 prewarn triggered flags @@ -670,6 +672,9 @@ void GcodeSuite::process_parsed_command() { #if ENABLED(SENSORLESS_HOMING) case 914: M914(); break; // M914: Set SENSORLESS_HOMING sensitivity. #endif + #if ENABLED(TMC_Z_CALIBRATION) + case 915: M915(); break; // M915: TMC Z axis calibration. + #endif #endif #if HAS_MICROSTEPS diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index 1d033ba2f..f4278a9d6 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -1491,6 +1491,12 @@ static_assert(1 >= 0 #error "Enable STEALTHCHOP to use HYBRID_THRESHOLD." #endif +#include "../feature/tmc_macros.h" + +#if ENABLED(TMC_Z_CALIBRATION) && !Z_IS_TRINAMIC && !Z2_IS_TRINAMIC + #error "TMC_Z_CALIBRATION requires at least one TMC driver on Z axis" +#endif + /** * Make sure HAVE_L6470DRIVER is warranted */