From a96dadb94ea06f86935e6655a5f4d6fe8d058bd3 Mon Sep 17 00:00:00 2001 From: Marcio Teixeira Date: Wed, 22 Nov 2017 14:35:19 -0700 Subject: [PATCH] Tuned STEALTHCHOP for successful print. --- Marlin/Conditionals_LulzBot.h | 138 +++++++++++++++++----------------- Marlin/Configuration_adv.h | 2 +- Marlin/endstops.cpp | 6 +- 3 files changed, 72 insertions(+), 74 deletions(-) diff --git a/Marlin/Conditionals_LulzBot.h b/Marlin/Conditionals_LulzBot.h index 3cfb17551..a58a4e615 100644 --- a/Marlin/Conditionals_LulzBot.h +++ b/Marlin/Conditionals_LulzBot.h @@ -13,7 +13,7 @@ * got disabled. */ -#define LULZBOT_FW_VERSION ".45" // Change this with each update +#define LULZBOT_FW_VERSION ".46" // Change this with each update #if ( \ !defined(LULZBOT_Gladiola_Mini) && \ @@ -151,8 +151,7 @@ #define LULZBOT_USE_Z_BELT #define LULZBOT_USE_SERIES_Z_MOTORS #define LULZBOT_USE_32_MICROSTEPS_ON_Z - #define LULZBOT_USE_TMC_COOLSTEP - //#define LULZBOT_USE_TMC_STEALTHCHOP + #define LULZBOT_USE_TMC_STEALTHCHOP #define LULZBOT_BAUDRATE 250000 #define LULZBOT_PRINTCOUNTER #define LULZBOT_UUID "1b8d32d3-0596-4335-8cd4-f3741a095087" @@ -172,8 +171,7 @@ #define LULZBOT_USE_Z_BELT #define LULZBOT_USE_SERIES_Z_MOTORS #define LULZBOT_USE_32_MICROSTEPS_ON_Z - #define LULZBOT_USE_TMC_COOLSTEP - //#define LULZBOT_USE_TMC_STEALTHCHOP + #define LULZBOT_USE_TMC_STEALTHCHOP #define LULZBOT_BAUDRATE 250000 #define LULZBOT_PRINTCOUNTER #define LULZBOT_UUID "1b8d32d3-0596-4335-8cd4-f3741a095087" @@ -1218,7 +1216,7 @@ //#define LULZBOT_HOMING_USES_PROBE_PINS #define LULZBOT_SENSORLESS_HOMING_Z_INIT \ - LULZBOT_ENABLE_STALLGUARD(stepperZ); \ + LULZBOT_ENABLE_COOLSTEP_WITH_STALLGUARD(stepperZ); \ /* Set stallguard value for Z sensing */ \ stepperZ.sg_stall_value(LULZBOT_Z_HOMING_SENSITIVITY); \ stepperZ.diag1_stall(0); /* Start disabled */ @@ -1249,26 +1247,10 @@ #define LULZBOT_HOLD_MULTIPLIER 0.5 - #define LULZBOT_COOLSTEP_DISABLED 1024UL * 1024UL - 1UL + // If true, use STEALTHCHOP, otherwise use COOLSTEP + #define LULZBOT_STEALTHCHOP LULZBOT_USE_TMC_STEALTHCHOP - #if defined(LULZBOT_USE_TMC_COOLSTEP) && defined(LULZBOT_USE_TMC_STEALTHCHOP) - // If both using COOLSTEP and STEALTHCHOP, then set a transition velocity - #define LULZBOT_COOLSTEP_MIN 200UL - #define LULZBOT_STEALTHCHOP - - #elif defined(LULZBOT_USE_TMC_COOLSTEP) && !defined(LULZBOT_USE_TMC_STEALTHCHOP) - // Enable COOLSTEP for all velocities - #define LULZBOT_COOLSTEP_MIN 1UL - - #elif !defined(LULZBOT_USE_TMC_COOLSTEP) && defined(LULZBOT_USE_TMC_STEALTHCHOP) - // Disable COOLSTEP for all velocities - #define LULZBOT_COOLSTEP_MIN LULZBOT_COOLSTEP_DISABLED - #define LULZBOT_STEALTHCHOP - #else - - // Disable COOLSTEP for all velocities - #define LULZBOT_COOLSTEP_MIN LULZBOT_COOLSTEP_DISABLED - #endif + #define LULZBOT_HYBRID_THRESHOLD #define LULZBOT_TMC_INIT(st) \ /* The EinsyRambo connects both diag pins to the same */ \ @@ -1281,9 +1263,6 @@ st.shaft_dir(1); \ st.external_ref(0); /* I_scale_analog = 0 */ \ st.internal_sense_R(0); /* internal_Rsense = 0 */ \ - /* Enable coolstep */ \ - st.sg_min(1); \ - st.sg_max(10); #define LULZBOT_TMC_REPORT(AXIS) \ { \ @@ -1344,12 +1323,12 @@ /* The following function accumulates the average of a stallguard values during a planner move */ - #define LULZBOT_TMC_STALLGUARD_AVG_VARS \ + #define LULZBOT_TMC_AVG_VARS \ static uint8_t current_tail, tally_freq = 10; \ static uint32_t sum_sg_X = 0, sum_sg_Y = 0, sum_sg_Z = 0, sum_sg_E0 = 0, num_sg = 0; \ static uint32_t sum_tstep_X = 0, sum_tstep_Y = 0, sum_tstep_Z = 0, sum_tstep_E0 = 0; - #define LULZBOT_TMC_STALLGUARD_AVG_FUNC \ + #define LULZBOT_TMC_AVG_FUNC \ if(--tally_freq == 0) { \ tally_freq = 10; \ if(planner.blocks_queued()) { \ @@ -1391,26 +1370,28 @@ } \ } - #define LULZBOT_TMC_M119_STALLGUARD_REPORT \ + #define LULZBOT_TMC_M119_REPORT \ SERIAL_ECHOLNPGM("TMC2130 Status:"); \ LULZBOT_TMC_REPORT(X) \ LULZBOT_TMC_REPORT(Y) \ LULZBOT_TMC_REPORT(Z) \ LULZBOT_TMC_REPORT(E0) - #define LULZBOT_ENABLE_COOLSTEP(st) \ - /* Enable stallguard by disabling steathchop */ \ - st.coolstep_min_speed(LULZBOT_COOLSTEP_MIN); \ - st.stealthChop(0); - - #define LULZBOT_ENABLE_STALLGUARD(st) \ - /* Enable stallguard by disabling steathchop */ \ - st.coolstep_min_speed(LULZBOT_COOLSTEP_DISABLED); \ - st.stealthChop(0); + #define LULZBOT_ENABLE_COOLSTEP_WITH_STALLGUARD(st) \ + /* Disable steathchop */ \ + st.stealthChop(0); \ + /* Enable coolstep for all velocities */ \ + st.coolstep_min_speed(1024UL * 1024UL - 1UL); \ + st.sg_min(1); \ + st.sg_max(10); #define LULZBOT_ENABLE_STEALTHCHOP(st) \ - st.coolstep_min_speed(LULZBOT_COOLSTEP_MIN); \ - st.stealthChop(1); + /* Enable steathchop */ \ + st.stealthChop(1); \ + /* Disable coolstep */ \ + st.coolstep_min_speed(0); \ + st.sg_min(0); \ + st.sg_max(0); #if defined(LULZBOT_USE_SERIES_Z_MOTORS) #define LULZBOT_Z_TOFF 1 @@ -1436,35 +1417,40 @@ stepperZ.hstrt(LULZBOT_Z_HSTRT); /* HSTART = [0..7] */ \ stepperZ.hend(LULZBOT_Z_HEND); /* HEND = [0..15] */ \ stepperZ.tbl(LULZBOT_Z_TBL); /* TBL = [0..3] */ \ - /* Set Z homing sensitivity */ \ + /* Set Z homing sensitivity, but not yet homing */ \ stepperZ.sg_stall_value(LULZBOT_Z_HOMING_SENSITIVITY); \ - /* Always disable STEALHCHOP on E0 */ \ - LULZBOT_ENABLE_COOLSTEP(stepperE0); + LULZBOT_SENSORLESS_HOMING_TOGGLE(stepperZ, false); \ + + #define LULZBOT_MOTOR_INIT_E \ + /* Always use COOLSTEP on E0 */ \ + LULZBOT_ENABLE_COOLSTEP_WITH_STALLGUARD(stepperE0); \ #define LULZBOT_TMC2130_ADV { \ LULZBOT_MOTOR_INIT_XY \ LULZBOT_MOTOR_INIT_Z \ + LULZBOT_MOTOR_INIT_E \ LULZBOT_SENSORLESS_HOMING_Z_INIT \ } - #define LULZBOT_SENSORLESS_HOMING_ENABLE(st) \ - /* Sometimes the X axis refuses to move at the start of G28, */ \ - /* because the stallguard is triggered. Toggling in and out */ \ - /* of STEALHCHOP mode seems to resolve this. */ \ - LULZBOT_ENABLE_STEALTHCHOP(st) \ - LULZBOT_ENABLE_STALLGUARD(st) - + /* Once homing is finished, return to the normal operating mode: */ + /* Either stealthchop or coolstep, as previously configured */ #if defined(LULZBOT_STEALTHCHOP) - #define LULZBOT_SENSORLESS_HOMING_DISABLE(st) LULZBOT_ENABLE_STEALTHCHOP(st) + #define LULZBOT_DEFAULT_OPERATING_MODE(st) LULZBOT_ENABLE_STEALTHCHOP(st) #else - #define LULZBOT_SENSORLESS_HOMING_DISABLE(st) LULZBOT_ENABLE_COOLSTEP(st) + #define LULZBOT_DEFAULT_OPERATING_MODE(st) LULZBOT_ENABLE_COOLSTEP_WITH_STALLGUARD(st) #endif + /* Sensorless homing requires stallguard, which is not available with + * stealhchop, so switch to COOLSTEP prior to doing a homing move. */ #define LULZBOT_SENSORLESS_HOMING_TOGGLE(st, enable) \ if (enable) { \ - LULZBOT_SENSORLESS_HOMING_ENABLE(st) \ + /* Sometimes the X axis refuses to move at the start of G28, */ \ + /* because the stallguard is triggered. Toggling in and out */ \ + /* of STEALHCHOP mode seems to resolve this. */ \ + LULZBOT_ENABLE_STEALTHCHOP(st) \ + LULZBOT_ENABLE_COOLSTEP_WITH_STALLGUARD(st) \ } else { \ - LULZBOT_SENSORLESS_HOMING_DISABLE(st) \ + LULZBOT_DEFAULT_OPERATING_MODE(st) \ } /* Leaving the toolhead resting on the endstops will likely cause @@ -1488,9 +1474,9 @@ ); \ } #else - #define LULZBOT_TMC_M119_STALLGUARD_REPORT - #define LULZBOT_TMC_STALLGUARD_AVG_VARS - #define LULZBOT_TMC_STALLGUARD_AVG_FUNC + #define LULZBOT_TMC_M119_REPORT + #define LULZBOT_TMC_AVG_VARS + #define LULZBOT_TMC_AVG_FUNC #define LULZBOT_TMC_REPORT_CURRENT_ADJUSTMENTS(AXIS) #endif @@ -1604,10 +1590,15 @@ #if defined(LULZBOT_USE_EINSYRAMBO) // These values specify the maximum current, but actual - // currents may be lower due to the regulation provided - // by COOLCONF - #define LULZBOT_MOTOR_CURRENT_XY 960 // mA - #define LULZBOT_MOTOR_CURRENT_Z 960 // mA + // currents may be lower when used with COOLCONF + #if defined(LULZBOT_USE_TMC_STEALTHCHOP) + /* Stealthchop seems to run a bit hotter on X */ + #define LULZBOT_MOTOR_CURRENT_XY 900 // mA + #define LULZBOT_MOTOR_CURRENT_Z 960 // mA + #else + #define LULZBOT_MOTOR_CURRENT_XY 960 // mA + #define LULZBOT_MOTOR_CURRENT_Z 960 // mA + #endif #elif defined(LULZBOT_IS_MINI) && defined(LULZBOT_USE_Z_SCREW) #define LULZBOT_MOTOR_CURRENT_XY 1300 // mA @@ -1640,16 +1631,14 @@ #if defined(LULZBOT_IS_MINI) #define LULZBOT_XY_STEPS 100.5 - #define LULZBOT_DEFAULT_MAX_FEEDRATE {300, 300, 8, 40} // (mm/sec) - #define LULZBOT_DEFAULT_MAX_ACCELERATION {9000,9000,100,1000} + + #define LULZBOT_DEFAULT_ACCELERATION 2000 + #define LULZBOT_DEFAULT_TRAVEL_ACCELERATION 2000 #define LULZBOT_DEFAULT_XJERK 12.0 #define LULZBOT_DEFAULT_YJERK 12.0 #define LULZBOT_DEFAULT_ZJERK 0.4 - #define LULZBOT_DEFAULT_ACCELERATION 2000 - #define LULZBOT_DEFAULT_TRAVEL_ACCELERATION 2000 - #define LULZBOT_Z_PROBE_OFFSET_FROM_EXTRUDER -1.377 #elif defined(LULZBOT_IS_TAZ) @@ -1671,6 +1660,9 @@ #define LULZBOT_Z_STEPS 1600 #define LULZBOT_Z_MICROSTEPS 16 + #define LULZBOT_DEFAULT_MAX_FEEDRATE {300, 300, 8, 40} // (mm/sec) + #define LULZBOT_DEFAULT_MAX_ACCELERATION {9000,9000,100,1000} + #elif defined(LULZBOT_IS_MINI) && defined(LULZBOT_USE_Z_BELT) && !defined(LULZBOT_USE_Z_GEARBOX) #if defined(LULZBOT_USE_32_MICROSTEPS_ON_Z) #define LULZBOT_Z_STEPS 201 @@ -1680,7 +1672,13 @@ #define LULZBOT_Z_MICROSTEPS 16 #endif #define LULZBOT_DEFAULT_MAX_FEEDRATE {300, 300, 300, 40} // (mm/sec) - #define LULZBOT_DEFAULT_MAX_ACCELERATION {9000,9000,200,1000} + + #if defined(LULZBOT_USE_TMC_STEALTHCHOP) + /* Stealthchop can skip steps if the acceleration is too high */ + #define LULZBOT_DEFAULT_MAX_ACCELERATION {500,500,200,1000} + #else + #define LULZBOT_DEFAULT_MAX_ACCELERATION {9000,9000,200,1000} + #endif #elif defined(LULZBOT_IS_MINI) && defined(LULZBOT_USE_Z_BELT) && defined(LULZBOT_USE_Z_GEARBOX) #define Z_FULL_STEPS_PER_ROTATION 200 @@ -1691,8 +1689,8 @@ #define LULZBOT_Z_STEPS (Z_FULL_STEPS_PER_ROTATION * Z_MICROSTEPS * Z_MOTOR_GEAR_REDUCTION / double(Z_BELT_PITCH) / double(Z_PULLEY_TEETH)) #define LULZBOT_Z_MICROSTEPS 16 - #undef LULZBOT_DEFAULT_MAX_FEEDRATE #define LULZBOT_DEFAULT_MAX_FEEDRATE {300, 300, 8, 25} // (mm/sec) + #define LULZBOT_DEFAULT_MAX_ACCELERATION {9000,9000,100,1000} #elif defined(LULZBOT_IS_TAZ) && defined(LULZBOT_USE_Z_SCREW) #define LULZBOT_DEFAULT_MAX_FEEDRATE {300, 300, 3, 25} // (mm/sec) diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index c0cda9f8e..7707be566 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -1028,7 +1028,7 @@ * STEALTHCHOP needs to be enabled. * M913 X/Y/Z/E to live tune the setting */ - //#define HYBRID_THRESHOLD + #define HYBRID_THRESHOLD LULZBOT_HYBRID_THRESHOLD #define X_HYBRID_THRESHOLD 100 // [mm/s] #define X2_HYBRID_THRESHOLD 100 diff --git a/Marlin/endstops.cpp b/Marlin/endstops.cpp index 740ce3e0f..c96676bff 100644 --- a/Marlin/endstops.cpp +++ b/Marlin/endstops.cpp @@ -133,7 +133,7 @@ void Endstops::init() { } // Endstops::init -LULZBOT_TMC_STALLGUARD_AVG_VARS +LULZBOT_TMC_AVG_VARS void Endstops::report_state() { if (endstop_hit_bits) { @@ -183,7 +183,7 @@ void Endstops::report_state() { } #endif } - LULZBOT_TMC_STALLGUARD_AVG_FUNC + LULZBOT_TMC_AVG_FUNC LULZBOT_TMC_REPORT_CURRENT_ADJUSTMENTS(X) LULZBOT_TMC_REPORT_CURRENT_ADJUSTMENTS(Y) LULZBOT_TMC_REPORT_CURRENT_ADJUSTMENTS(Z) @@ -232,7 +232,7 @@ void Endstops::M119() { SERIAL_PROTOCOLPGM(MSG_FILAMENT_RUNOUT_SENSOR); SERIAL_PROTOCOLLN(((READ(FIL_RUNOUT_PIN)^FIL_RUNOUT_INVERTING) ? MSG_ENDSTOP_HIT : MSG_ENDSTOP_OPEN)); #endif - LULZBOT_TMC_M119_STALLGUARD_REPORT + LULZBOT_TMC_M119_REPORT } // Endstops::M119 #if ENABLED(Z_DUAL_ENDSTOPS)