diff --git a/.circleci/config.yml b/.circleci/config.yml
index 7ac3d6078d..73fe1f0a37 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -67,7 +67,6 @@ jobs:
echo testing megaatmega2560 targets...
export TEST_PLATFORM="-e megaatmega2560"
- restore_configs
echo use_example_configs adafruit/ST7565
use_example_configs adafruit/ST7565
build_marlin_pio ./ ${TEST_PLATFORM}
@@ -88,10 +87,10 @@ jobs:
use_example_configs AliExpress/CL-260
build_marlin_pio ./ ${TEST_PLATFORM}
restore_configs
- echo use_example_configs Cartesio
- use_example_configs Cartesio
- build_marlin_pio ./ ${TEST_PLATFORM}
- restore_configs
+ #echo use_example_configs Cartesio
+ #use_example_configs Cartesio
+ #build_marlin_pio ./ ${TEST_PLATFORM}
+ #restore_configs
echo use_example_configs delta/FLSUN/auto_calibrate
use_example_configs delta/FLSUN/auto_calibrate
build_marlin_pio ./ ${TEST_PLATFORM}
@@ -120,6 +119,10 @@ jobs:
use_example_configs Felix/DUAL
build_marlin_pio ./ ${TEST_PLATFORM}
restore_configs
+ echo use_example_configs FolgerTech/i3-2020
+ use_example_configs FolgerTech/i3-2020
+ build_marlin_pio ./ ${TEST_PLATFORM}
+ restore_configs
echo use_example_configs gCreate/gMax1.5+
use_example_configs gCreate/gMax1.5+
build_marlin_pio ./ ${TEST_PLATFORM}
@@ -128,20 +131,17 @@ jobs:
use_example_configs Geeetech/GT2560
build_marlin_pio ./ ${TEST_PLATFORM}
restore_configs
- echo use_example_configs Geeetech/I3_Pro_X-GT2560
- use_example_configs Geeetech/I3_Pro_X-GT2560
- build_marlin_pio ./ ${TEST_PLATFORM}
- restore_configs
+ #echo use_example_configs Geeetech/I3_Pro_X-GT2560
+ #use_example_configs Geeetech/I3_Pro_X-GT2560
+ #build_marlin_pio ./ ${TEST_PLATFORM}
+ #restore_configs
echo use_example_configs Infitary/i3-M508
use_example_configs Infitary/i3-M508
build_marlin_pio ./ ${TEST_PLATFORM}
restore_configs
- #
- # Disabled due to compile failure on E0_AUTO_FAN_PIN PB8
- #
- # use_example_configs Malyan/M200
- # build_marlin_pio ./ ${TEST_PLATFORM}
- # restore_configs
+ use_example_configs Malyan/M200
+ build_marlin_pio ./ ${TEST_PLATFORM}
+ restore_configs
echo use_example_configs Micromake/C1/basic
use_example_configs Micromake/C1/basic
build_marlin_pio ./ ${TEST_PLATFORM}
@@ -177,18 +177,13 @@ jobs:
echo use_example_configs Wanhao/Duplicator6
use_example_configs Wanhao/Duplicator6
build_marlin_pio ./ ${TEST_PLATFORM}
- #
- # Disabled due to compile failure on https://github.com/stawel/SlowSoftI2CMaster
- #
- # - Requires https://github.com/stawel/SlowSoftI2CMaster
- # restore_configs
- # use_example_configs wt150
- # build_marlin_pio ./ ${TEST_PLATFORM}
-
-
- echo testing anet10 targets...
- export TEST_PLATFORM="-e anet10"
restore_configs
+ # Requires manual load of https://github.com/stawel/SlowSoftI2CMaster
+ #use_example_configs wt150
+ #build_marlin_pio ./ ${TEST_PLATFORM}
+ #restore_configs
+ echo testing melzi targets...
+ export TEST_PLATFORM="-e melzi"
echo use_example_configs Anet/A6
use_example_configs Anet/A6
build_marlin_pio ./ ${TEST_PLATFORM}
@@ -212,70 +207,57 @@ jobs:
echo use_example_configs TinyBoy2
use_example_configs TinyBoy2
build_marlin_pio ./ ${TEST_PLATFORM}
-
+ restore_configs
echo testing rambo targets...
export TEST_PLATFORM="-e rambo"
- restore_configs
echo use_example_configs AlephObjects/TAZ4
use_example_configs AlephObjects/TAZ4
build_marlin_pio ./ ${TEST_PLATFORM}
-
-
- echo testing teensy20 targets...
- export TEST_PLATFORM="-e teensy20"
- #
- # Disabled due to Z_MIN_PIN related compile failure
- #
- # restore_configs
- # use_example_configs delta/kossel_pro
- # build_marlin_pio ./ ${TEST_PLATFORM}
restore_configs
+
+ echo testing at90usb1286_* targets...
+ export TEST_PLATFORM="-e at90usb1286_dfu"
+ #echo se_example_configs delta/kossel_pro
+ #use_example_configs delta/kossel_pro
+ #build_marlin_pio ./ ${TEST_PLATFORM}
+ #restore_configs
echo use_example_configs makibox
use_example_configs makibox
build_marlin_pio ./ ${TEST_PLATFORM}
-
+ restore_configs
echo testing sanguino_atmega644p targets...
export TEST_PLATFORM="-e sanguino_atmega644p"
- restore_configs
echo use_example_configs tvrrug/Round2
use_example_configs tvrrug/Round2
build_marlin_pio ./ ${TEST_PLATFORM}
-
+ restore_configs
echo testing LPC1768 targets...
export TEST_PLATFORM="-e LPC1768"
- restore_configs
- echo use_example_configs FolgerTech/i3-2020
- use_example_configs FolgerTech/i3-2020
- build_marlin_pio ./ ${TEST_PLATFORM}
- restore_configs
echo use_example_configs Mks/Sbase
use_example_configs Mks/Sbase
build_marlin_pio ./ ${TEST_PLATFORM}
+ restore_configs
+ echo testing STM32F1 targets...
+ export TEST_PLATFORM="-e STM32F1"
+ restore_configs
+ echo use_example_configs STM32F10
+ use_example_configs STM32F10
+ build_marlin_pio ./ ${TEST_PLATFORM}
+ restore_configs
+ echo use_example_configs stm32f103ret6
+ use_example_configs stm32f103ret6
+ build_marlin_pio ./ ${TEST_PLATFORM}
+ restore_configs
- #
- # Disabled due to numerous compile failures
- #
- # echo testing STM32F1 targets...
- # export TEST_PLATFORM="-e STM32F1"
- # restore_configs
- # use_example_configs STM32F10
- # build_marlin_pio ./ ${TEST_PLATFORM}
- # restore_configs
- # use_example_configs stm32f103ret6
- # build_marlin_pio ./ ${TEST_PLATFORM}
-
-
- #
- # Disabled due do pin related compile failures
- #
- # echo testing DUE targets...
- # export TEST_PLATFORM="-e DUE"
- # restore_configs
- # use_example_configs UltiMachine/Archim2
- # build_marlin_pio ./ ${TEST_PLATFORM}
+ echo testing DUE targets...
+ export TEST_PLATFORM="-e DUE"
+ #echo use_example_configs UltiMachine/Archim2
+ #use_example_configs UltiMachine/Archim2
+ #build_marlin_pio ./ ${TEST_PLATFORM}
+ #restore_configs
#
# Remove temp files from dependencies tree prior to caching
diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h
index 829db8a69d..31b2768f7d 100644
--- a/Marlin/Configuration.h
+++ b/Marlin/Configuration.h
@@ -22,20 +22,22 @@
#pragma once
// If you have a trex 3, stock is this option plus 2208 on all axis. None in spreadcycle.
-#define TREX3
+//#define TREX3
//#define X_2208
//#define X_Spreadcycle
//#define Y_2208 // Highly recommended as large prints with high mass can cause layer shifts with stealthchop at high speed
//#define Y_Spreadcycle
+//#define Y_4988 // Some machines shipped with 4988 drivers across the board. Set this if you arent sure what you have and all the drivers look identical
//#define Z_2208 // NOT Recommended! Dual stepper current draw is above the recommended limit for this driver
+//#define Z_4988 // Some machines shipped with 4988 drivers across the board. Set this if you arent sure what you have and all the drivers look identical
//#define Y_Spreadcycle
//#define E_2208 // Not Recommended! Stealthchop mode faults with linear advance
//#define E_Spreadcycle
-#define BedAC
+//#define BedAC
-#define tallVersion
+//#define tallVersion
/*
* Enables a filament sensor plugged into the laser pin. Disables the laser
@@ -353,6 +355,7 @@
* 15 : 100k thermistor calibration for JGAurora A5 hotend
* 20 : the PT100 circuit found in the Ultimainboard V2.x
* 60 : 100k Maker's Tool Works Kapton Bed Thermistor beta=3950
+ * 61 : 100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup
* 66 : 4.7M High Temperature thermistor from Dyze Design
* 70 : the 100K thermistor found in the bq Hephestos 2
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
@@ -374,8 +377,14 @@
*
* :{ '0': "Not used", '1':"100k / 4.7k - EPCOS", '2':"200k / 4.7k - ATC Semitec 204GT-2", '3':"Mendel-parts / 4.7k", '4':"10k !! do not use for a hotend. Bad resolution at high temp. !!", '5':"100K / 4.7k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '501':"100K Zonestar (Tronxy X3A)", '6':"100k / 4.7k EPCOS - Not as accurate as Table 1", '7':"100k / 4.7k Honeywell 135-104LAG-J01", '8':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT", '9':"100k / 4.7k GE Sensing AL03006-58.2K-97-G1", '10':"100k / 4.7k RS 198-961", '11':"100k / 4.7k beta 3950 1%", '12':"100k / 4.7k 0603 SMD Vishay NTCS0603E3104FXT (calibrated for Makibox hot bed)", '13':"100k Hisens 3950 1% up to 300°C for hotend 'Simple ONE ' & hotend 'All In ONE'", '20':"PT100 (Ultimainboard V2.x)", '51':"100k / 1k - EPCOS", '52':"200k / 1k - ATC Semitec 204GT-2", '55':"100k / 1k - ATC Semitec 104GT-2 (Used in ParCan & J-Head)", '60':"100k Maker's Tool Works Kapton Bed Thermistor beta=3950", '66':"Dyze Design 4.7M High Temperature thermistor", '70':"the 100K thermistor found in the bq Hephestos 2", '71':"100k / 4.7k Honeywell 135-104LAF-J01", '147':"Pt100 / 4.7k", '1047':"Pt1000 / 4.7k", '110':"Pt100 / 1k (non-standard)", '1010':"Pt1000 / 1k (non standard)", '-4':"Thermocouple + AD8495", '-3':"Thermocouple + MAX31855 (only for sensor 0)", '-2':"Thermocouple + MAX6675 (only for sensor 0)", '-1':"Thermocouple + AD595",'998':"Dummy 1", '999':"Dummy 2" }
*/
-#define TEMP_SENSOR_0 1
-#define TEMP_SENSOR_1 1
+#if ENABLED(TREX3)
+ #define TEMP_SENSOR_0 61
+ #define TEMP_SENSOR_1 61
+#else
+
+ #define TEMP_SENSOR_0 1
+ #define TEMP_SENSOR_1 1
+#endif
#define TEMP_SENSOR_2 0
#define TEMP_SENSOR_3 0
#define TEMP_SENSOR_4 0
@@ -648,11 +657,15 @@
#endif
#if ENABLED(Y_2208)
#define Y_DRIVER_TYPE TMC2208_STANDALONE
+#elif ENABLED(Y_4988)
+ #define Y_DRIVER_TYPE A4988
#else
#define Y_DRIVER_TYPE DRV8825
#endif
#if ENABLED(Z_2208)
#define Z_DRIVER_TYPE TMC2208_STANDALONE
+#elif ENABLED(Z_4988)
+ #define Z_DRIVER_TYPE A4988
#else
#define Z_DRIVER_TYPE DRV8825
#endif
@@ -716,13 +729,13 @@
*/
-#if(ENABLED(Y_2208))
+#if(ENABLED(Y_2208) || ENABLED(Y_4988))
#define Y_STEPSMM 80
#else
#define Y_STEPSMM 160
#endif
-#if(ENABLED(Z_2208))
+#if(ENABLED(Z_2208) || ENABLED(Z_4988))
#define Z_STEPSMM 800
#else
#define Z_STEPSMM 1600
@@ -740,7 +753,7 @@
#else
#define Y_MAXFEED 150
#endif
-#define DEFAULT_MAX_FEEDRATE { 250, Y_MAXFEED, 5, 25 }
+#define DEFAULT_MAX_FEEDRATE { 200, Y_MAXFEED, 5, 25 }
/**
* Default Max Acceleration (change/s) change = mm/s
diff --git a/Marlin/src/HAL/HAL_AVR/SanityCheck.h b/Marlin/src/HAL/HAL_AVR/SanityCheck.h
index 4485b8f39b..f87044971b 100644
--- a/Marlin/src/HAL/HAL_AVR/SanityCheck.h
+++ b/Marlin/src/HAL/HAL_AVR/SanityCheck.h
@@ -97,20 +97,8 @@
#endif // SPINDLE_LASER_ENABLE
/**
- * TMC2208 software UART and ENDSTOP_INTERRUPTS both use pin change interrupts (PCI)
+ * The Trinamic library includes SoftwareSerial.h, leading to a compile error.
*/
-#if HAS_DRIVER(TMC2208) && ENABLED(ENDSTOP_INTERRUPTS_FEATURE) && !( \
- defined(X_HARDWARE_SERIAL ) \
- || defined(X2_HARDWARE_SERIAL) \
- || defined(Y_HARDWARE_SERIAL ) \
- || defined(Y2_HARDWARE_SERIAL) \
- || defined(Z_HARDWARE_SERIAL ) \
- || defined(Z2_HARDWARE_SERIAL) \
- || defined(Z3_HARDWARE_SERIAL) \
- || defined(E0_HARDWARE_SERIAL) \
- || defined(E1_HARDWARE_SERIAL) \
- || defined(E2_HARDWARE_SERIAL) \
- || defined(E3_HARDWARE_SERIAL) \
- || defined(E4_HARDWARE_SERIAL) )
- #error "Select hardware UART for TMC2208 to use both TMC2208 and ENDSTOP_INTERRUPTS_FEATURE."
+#if HAS_TRINAMIC && ENABLED(ENDSTOP_INTERRUPTS_FEATURE)
+ #error "TMCStepper includes SoftwareSerial.h which is incompatible with ENDSTOP_INTERRUPTS_FEATURE. Disable ENDSTOP_INTERRUPTS_FEATURE to continue."
#endif
diff --git a/Marlin/src/HAL/HAL_STM32/HAL.cpp b/Marlin/src/HAL/HAL_STM32/HAL.cpp
index 1bddf77f48..8a5e76eb3d 100644
--- a/Marlin/src/HAL/HAL_STM32/HAL.cpp
+++ b/Marlin/src/HAL/HAL_STM32/HAL.cpp
@@ -21,7 +21,8 @@
*
*/
-#ifdef ARDUINO_ARCH_STM32
+#if defined(ARDUINO_ARCH_STM32) && !defined(STM32GENERIC)
+
// --------------------------------------------------------------------------
// Includes
diff --git a/Marlin/src/HAL/HAL_STM32/HAL_Servo_STM32.cpp b/Marlin/src/HAL/HAL_STM32/HAL_Servo_STM32.cpp
index 2b08ab3144..bc6f154e83 100644
--- a/Marlin/src/HAL/HAL_STM32/HAL_Servo_STM32.cpp
+++ b/Marlin/src/HAL/HAL_STM32/HAL_Servo_STM32.cpp
@@ -20,7 +20,8 @@
* along with this program. If not, see .
*
*/
-#ifdef ARDUINO_ARCH_STM32
+#if defined(ARDUINO_ARCH_STM32) && !defined(STM32GENERIC)
+
#include "../../inc/MarlinConfig.h"
diff --git a/Marlin/src/HAL/HAL_STM32/HAL_spi_STM32.cpp b/Marlin/src/HAL/HAL_STM32/HAL_spi_STM32.cpp
index 597305fa06..a11b1585f7 100644
--- a/Marlin/src/HAL/HAL_STM32/HAL_spi_STM32.cpp
+++ b/Marlin/src/HAL/HAL_STM32/HAL_spi_STM32.cpp
@@ -20,7 +20,8 @@
* along with this program. If not, see .
*
*/
-#ifdef ARDUINO_ARCH_STM32
+#if defined(ARDUINO_ARCH_STM32) && !defined(STM32GENERIC)
+
// --------------------------------------------------------------------------
// Includes
diff --git a/Marlin/src/HAL/HAL_STM32/HAL_timers_STM32.cpp b/Marlin/src/HAL/HAL_STM32/HAL_timers_STM32.cpp
index 23a1e3bf15..cebec33dc7 100644
--- a/Marlin/src/HAL/HAL_STM32/HAL_timers_STM32.cpp
+++ b/Marlin/src/HAL/HAL_STM32/HAL_timers_STM32.cpp
@@ -19,7 +19,8 @@
* along with this program. If not, see .
*
*/
-#ifdef ARDUINO_ARCH_STM32
+#if defined(ARDUINO_ARCH_STM32) && !defined(STM32GENERIC)
+
// --------------------------------------------------------------------------
// Includes
diff --git a/Marlin/src/HAL/HAL_STM32/fastio_STM32.cpp b/Marlin/src/HAL/HAL_STM32/fastio_STM32.cpp
index e1824ed181..ae429c8921 100644
--- a/Marlin/src/HAL/HAL_STM32/fastio_STM32.cpp
+++ b/Marlin/src/HAL/HAL_STM32/fastio_STM32.cpp
@@ -20,7 +20,7 @@
* along with this program. If not, see .
*
*/
-#ifdef ARDUINO_ARCH_STM32
+#if defined(ARDUINO_ARCH_STM32) && !defined(STM32GENERIC)
#include "../../inc/MarlinConfig.h"
diff --git a/Marlin/src/HAL/HAL_STM32/persistent_store_impl.cpp b/Marlin/src/HAL/HAL_STM32/persistent_store_impl.cpp
index 5fc87cc241..a4c9850c75 100644
--- a/Marlin/src/HAL/HAL_STM32/persistent_store_impl.cpp
+++ b/Marlin/src/HAL/HAL_STM32/persistent_store_impl.cpp
@@ -20,7 +20,7 @@
* along with this program. If not, see .
*
*/
-#ifdef ARDUINO_ARCH_STM32
+#if defined(ARDUINO_ARCH_STM32) && !defined(STM32GENERIC)
#include "../../inc/MarlinConfig.h"
diff --git a/Marlin/src/HAL/HAL_STM32/watchdog_STM32.cpp b/Marlin/src/HAL/HAL_STM32/watchdog_STM32.cpp
index 7b049f1551..304e0c47fb 100644
--- a/Marlin/src/HAL/HAL_STM32/watchdog_STM32.cpp
+++ b/Marlin/src/HAL/HAL_STM32/watchdog_STM32.cpp
@@ -20,7 +20,7 @@
*
*/
-#ifdef ARDUINO_ARCH_STM32
+#if defined(ARDUINO_ARCH_STM32) && !defined(STM32GENERIC)
#include "../../inc/MarlinConfig.h"
diff --git a/Marlin/src/HAL/HAL_STM32F4/EEPROM_Emul/eeprom_emul.cpp b/Marlin/src/HAL/HAL_STM32F4/EEPROM_Emul/eeprom_emul.cpp
index c13d428187..8bae46777d 100644
--- a/Marlin/src/HAL/HAL_STM32F4/EEPROM_Emul/eeprom_emul.cpp
+++ b/Marlin/src/HAL/HAL_STM32F4/EEPROM_Emul/eeprom_emul.cpp
@@ -47,7 +47,7 @@
/** @addtogroup EEPROM_Emulation
* @{
*/
-#if defined(STM32GENERIC) && (defined(STM32F4) || defined(STM32F4xx))
+#if defined(STM32GENERIC) && (defined(STM32F4))
/* Includes ------------------------------------------------------------------*/
#include "eeprom_emul.h"
diff --git a/Marlin/src/HAL/HAL_STM32F4/EmulatedEeprom.cpp b/Marlin/src/HAL/HAL_STM32F4/EmulatedEeprom.cpp
index 7d45ef18d0..dfb005dc2b 100644
--- a/Marlin/src/HAL/HAL_STM32F4/EmulatedEeprom.cpp
+++ b/Marlin/src/HAL/HAL_STM32F4/EmulatedEeprom.cpp
@@ -17,7 +17,7 @@
*
*/
-#if defined(STM32GENERIC) && (defined(STM32F4) || defined(STM32F4xx))
+#if defined(STM32GENERIC) && (defined(STM32F4))
/**
* Description: functions for I2C connected external EEPROM.
@@ -139,4 +139,4 @@ void eeprom_update_block(const void *__src, void *__dst, size_t __n) {
}
#endif // ENABLED(EEPROM_SETTINGS) && DISABLED(I2C_EEPROM) && DISABLED(SPI_EEPROM)
-#endif // STM32F4 || STM32F4xx
+#endif // STM32GENERIC && STM32F4
diff --git a/Marlin/src/HAL/HAL_STM32F4/HAL.cpp b/Marlin/src/HAL/HAL_STM32F4/HAL.cpp
index 56823ccc83..8b107f391b 100644
--- a/Marlin/src/HAL/HAL_STM32F4/HAL.cpp
+++ b/Marlin/src/HAL/HAL_STM32F4/HAL.cpp
@@ -21,7 +21,7 @@
*
*/
-#if defined(STM32GENERIC) && (defined(STM32F4) || defined(STM32F4xx))
+#if defined(STM32GENERIC) && defined(STM32F4)
// --------------------------------------------------------------------------
// Includes
@@ -130,4 +130,4 @@ uint16_t HAL_adc_get_result(void) {
return HAL_adc_result;
}
-#endif // STM32F4 || STM32F4xx
+#endif // // STM32GENERIC && STM32F4
diff --git a/Marlin/src/HAL/HAL_STM32F4/HAL_Servo_STM32F4.cpp b/Marlin/src/HAL/HAL_STM32F4/HAL_Servo_STM32F4.cpp
index 9d9c722e58..8c7adeecb5 100644
--- a/Marlin/src/HAL/HAL_STM32F4/HAL_Servo_STM32F4.cpp
+++ b/Marlin/src/HAL/HAL_STM32F4/HAL_Servo_STM32F4.cpp
@@ -21,7 +21,7 @@
*
*/
-#if defined(STM32GENERIC) && (defined(STM32F4) || defined(STM32F4xx))
+#if defined(STM32GENERIC) && defined(STM32F4)
#include "../../inc/MarlinConfig.h"
@@ -50,4 +50,4 @@ void libServo::move(const int value) {
}
#endif // HAS_SERVOS
-#endif // STM32F4 || STM32F4xx
+#endif // STM32GENERIC && STM32F4
diff --git a/Marlin/src/HAL/HAL_STM32F4/HAL_spi_STM32F4.cpp b/Marlin/src/HAL/HAL_STM32F4/HAL_spi_STM32F4.cpp
index 34582c30ad..a7e840fb03 100644
--- a/Marlin/src/HAL/HAL_STM32F4/HAL_spi_STM32F4.cpp
+++ b/Marlin/src/HAL/HAL_STM32F4/HAL_spi_STM32F4.cpp
@@ -30,7 +30,7 @@
* Adapted to the STM32F4 HAL
*/
-#if defined(STM32GENERIC) && (defined(STM32F4) || defined(STM32F4xx))
+#if defined(STM32GENERIC) && defined(STM32F4)
// --------------------------------------------------------------------------
// Includes
@@ -173,4 +173,4 @@ void spiSendBlock(uint8_t token, const uint8_t* buf) {
#endif // SOFTWARE_SPI
-#endif // STM32F4 || STM32F4xx
+#endif // STM32GENERIC && STM32F4
diff --git a/Marlin/src/HAL/HAL_STM32F4/HAL_timers_STM32F4.cpp b/Marlin/src/HAL/HAL_STM32F4/HAL_timers_STM32F4.cpp
index 6a23090a24..acf58858a9 100644
--- a/Marlin/src/HAL/HAL_STM32F4/HAL_timers_STM32F4.cpp
+++ b/Marlin/src/HAL/HAL_STM32F4/HAL_timers_STM32F4.cpp
@@ -20,7 +20,7 @@
*
*/
-#if defined(STM32GENERIC) && (defined(STM32F4) || defined(STM32F4xx))
+#if defined(STM32GENERIC) && defined(STM32F4)
// --------------------------------------------------------------------------
// Includes
@@ -156,4 +156,4 @@ bool HAL_timer_interrupt_enabled(const uint8_t timer_num) {
return false;
}
-#endif // STM32F4 || STM32F4xx
+#endif // STM32GENERIC && STM32F4
diff --git a/Marlin/src/HAL/HAL_STM32F4/persistent_store_eeprom.cpp b/Marlin/src/HAL/HAL_STM32F4/persistent_store_eeprom.cpp
index ef70389714..48b6492c11 100644
--- a/Marlin/src/HAL/HAL_STM32F4/persistent_store_eeprom.cpp
+++ b/Marlin/src/HAL/HAL_STM32F4/persistent_store_eeprom.cpp
@@ -21,7 +21,7 @@
*
*/
-#if defined(STM32GENERIC) && (defined(STM32F4) || defined(STM32F4xx))
+#if defined(STM32GENERIC) && defined(STM32F4)
#include "../shared/persistent_store_api.h"
@@ -66,4 +66,4 @@ bool PersistentStore::read_data(int &pos, uint8_t* value, size_t size, uint16_t
size_t PersistentStore::capacity() { return E2END + 1; }
#endif // EEPROM_SETTINGS
-#endif // STM32F4 || STM32F4xx
+#endif // STM32GENERIC && STM32F4
diff --git a/Marlin/src/HAL/HAL_STM32F4/watchdog_STM32F4.cpp b/Marlin/src/HAL/HAL_STM32F4/watchdog_STM32F4.cpp
index dd4d4391c6..41c75e411d 100644
--- a/Marlin/src/HAL/HAL_STM32F4/watchdog_STM32F4.cpp
+++ b/Marlin/src/HAL/HAL_STM32F4/watchdog_STM32F4.cpp
@@ -20,7 +20,7 @@
*
*/
-#if defined(STM32GENERIC) && (defined(STM32F4) || defined(STM32F4xx))
+#if defined(STM32GENERIC) && defined(STM32F4)
#include "../../inc/MarlinConfig.h"
@@ -54,4 +54,4 @@
#endif // USE_WATCHDOG
-#endif // STM32F4 || STM32F4xx
+#endif // STM32GENERIC && STM32F4
diff --git a/Marlin/src/Marlin.cpp b/Marlin/src/Marlin.cpp
index 290cb06425..4792f24380 100644
--- a/Marlin/src/Marlin.cpp
+++ b/Marlin/src/Marlin.cpp
@@ -945,6 +945,10 @@ void setup() {
#if ENABLED(SDSUPPORT) && DISABLED(ULTRA_LCD)
card.beginautostart();
#endif
+
+ #if HAS_TRINAMIC && DISABLED(PS_DEFAULT_OFF)
+ test_tmc_connection(true, true, true, true);
+ #endif
}
/**
diff --git a/Marlin/src/config/default/Configuration.h b/Marlin/src/config/default/Configuration.h
index 09ad249b42..02e2b34412 100644
--- a/Marlin/src/config/default/Configuration.h
+++ b/Marlin/src/config/default/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/default/Configuration_adv.h b/Marlin/src/config/default/Configuration_adv.h
index e9ee032b71..1282cb6b10 100644
--- a/Marlin/src/config/default/Configuration_adv.h
+++ b/Marlin/src/config/default/Configuration_adv.h
@@ -490,6 +490,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -786,19 +819,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -816,6 +849,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1264,17 +1298,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1321,6 +1352,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1335,7 +1384,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1359,7 +1416,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/AlephObjects/TAZ4/Configuration.h b/Marlin/src/config/examples/AlephObjects/TAZ4/Configuration.h
index df5e48e91a..af008d7d49 100644
--- a/Marlin/src/config/examples/AlephObjects/TAZ4/Configuration.h
+++ b/Marlin/src/config/examples/AlephObjects/TAZ4/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX 74 // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 16 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/AlephObjects/TAZ4/Configuration_adv.h b/Marlin/src/config/examples/AlephObjects/TAZ4/Configuration_adv.h
index ee7ee61d6a..906d4bc684 100644
--- a/Marlin/src/config/examples/AlephObjects/TAZ4/Configuration_adv.h
+++ b/Marlin/src/config/examples/AlephObjects/TAZ4/Configuration_adv.h
@@ -490,6 +490,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -786,19 +819,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -816,6 +849,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1263,17 +1297,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1320,6 +1351,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1334,7 +1383,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1358,7 +1415,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/AliExpress/CL-260/Configuration.h b/Marlin/src/config/examples/AliExpress/CL-260/Configuration.h
index 350fa70e2d..15157c90f1 100644
--- a/Marlin/src/config/examples/AliExpress/CL-260/Configuration.h
+++ b/Marlin/src/config/examples/AliExpress/CL-260/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/Anet/A2/Configuration.h b/Marlin/src/config/examples/Anet/A2/Configuration.h
index cef7791da4..1b4940ecac 100644
--- a/Marlin/src/config/examples/Anet/A2/Configuration.h
+++ b/Marlin/src/config/examples/Anet/A2/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/Anet/A2/Configuration_adv.h b/Marlin/src/config/examples/Anet/A2/Configuration_adv.h
index b4e749dfc8..605b8021fb 100644
--- a/Marlin/src/config/examples/Anet/A2/Configuration_adv.h
+++ b/Marlin/src/config/examples/Anet/A2/Configuration_adv.h
@@ -490,6 +490,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -786,19 +819,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -816,6 +849,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1263,17 +1297,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1320,6 +1351,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1334,7 +1383,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1358,7 +1415,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/Anet/A2plus/Configuration.h b/Marlin/src/config/examples/Anet/A2plus/Configuration.h
index e4ea1c1ff4..e139564f08 100644
--- a/Marlin/src/config/examples/Anet/A2plus/Configuration.h
+++ b/Marlin/src/config/examples/Anet/A2plus/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/Anet/A2plus/Configuration_adv.h b/Marlin/src/config/examples/Anet/A2plus/Configuration_adv.h
index b4e749dfc8..605b8021fb 100644
--- a/Marlin/src/config/examples/Anet/A2plus/Configuration_adv.h
+++ b/Marlin/src/config/examples/Anet/A2plus/Configuration_adv.h
@@ -490,6 +490,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -786,19 +819,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -816,6 +849,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1263,17 +1297,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1320,6 +1351,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1334,7 +1383,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1358,7 +1415,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/Anet/A6/Configuration.h b/Marlin/src/config/examples/Anet/A6/Configuration.h
index 88ad69adcb..30db68481a 100644
--- a/Marlin/src/config/examples/Anet/A6/Configuration.h
+++ b/Marlin/src/config/examples/Anet/A6/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/Anet/A6/Configuration_adv.h b/Marlin/src/config/examples/Anet/A6/Configuration_adv.h
index c73d08f6a1..127bf2ffac 100644
--- a/Marlin/src/config/examples/Anet/A6/Configuration_adv.h
+++ b/Marlin/src/config/examples/Anet/A6/Configuration_adv.h
@@ -489,6 +489,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -785,19 +818,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -815,6 +848,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1262,17 +1296,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1319,6 +1350,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1333,7 +1382,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1357,7 +1414,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/Anet/A8/Configuration.h b/Marlin/src/config/examples/Anet/A8/Configuration.h
index 3b729240a1..5a3c0b64ae 100644
--- a/Marlin/src/config/examples/Anet/A8/Configuration.h
+++ b/Marlin/src/config/examples/Anet/A8/Configuration.h
@@ -202,7 +202,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -388,10 +388,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 15 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/Anet/A8/Configuration_adv.h b/Marlin/src/config/examples/Anet/A8/Configuration_adv.h
index 4cad717ac4..97a20d8ecf 100644
--- a/Marlin/src/config/examples/Anet/A8/Configuration_adv.h
+++ b/Marlin/src/config/examples/Anet/A8/Configuration_adv.h
@@ -490,6 +490,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -786,19 +819,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -816,6 +849,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1263,17 +1297,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1320,6 +1351,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1334,7 +1383,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1358,7 +1415,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/ArmEd/Configuration.h b/Marlin/src/config/examples/ArmEd/Configuration.h
index cdf74682f6..ef9ae03d9e 100644
--- a/Marlin/src/config/examples/ArmEd/Configuration.h
+++ b/Marlin/src/config/examples/ArmEd/Configuration.h
@@ -212,7 +212,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -398,10 +398,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/ArmEd/Configuration_adv.h b/Marlin/src/config/examples/ArmEd/Configuration_adv.h
index aeb1448f30..21c80ff053 100644
--- a/Marlin/src/config/examples/ArmEd/Configuration_adv.h
+++ b/Marlin/src/config/examples/ArmEd/Configuration_adv.h
@@ -473,6 +473,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -758,19 +791,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -788,6 +821,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1237,17 +1271,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1294,6 +1325,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1308,7 +1357,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1332,7 +1389,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/Azteeg/X5GT/Configuration.h b/Marlin/src/config/examples/Azteeg/X5GT/Configuration.h
index 9daade4b70..cfe0d25972 100644
--- a/Marlin/src/config/examples/Azteeg/X5GT/Configuration.h
+++ b/Marlin/src/config/examples/Azteeg/X5GT/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/BIBO/TouchX/cyclops/Configuration.h b/Marlin/src/config/examples/BIBO/TouchX/cyclops/Configuration.h
index 160817eae6..cbda6f7096 100644
--- a/Marlin/src/config/examples/BIBO/TouchX/cyclops/Configuration.h
+++ b/Marlin/src/config/examples/BIBO/TouchX/cyclops/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h b/Marlin/src/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h
index 914d78f931..d91a09291b 100644
--- a/Marlin/src/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h
+++ b/Marlin/src/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h
@@ -489,6 +489,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -785,19 +818,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -815,6 +848,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1262,17 +1296,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1319,6 +1350,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1333,7 +1382,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1357,7 +1414,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/BIBO/TouchX/default/Configuration.h b/Marlin/src/config/examples/BIBO/TouchX/default/Configuration.h
index 83e8e9a32a..a3942f0a32 100644
--- a/Marlin/src/config/examples/BIBO/TouchX/default/Configuration.h
+++ b/Marlin/src/config/examples/BIBO/TouchX/default/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/BIBO/TouchX/default/Configuration_adv.h b/Marlin/src/config/examples/BIBO/TouchX/default/Configuration_adv.h
index 8f644d6a6c..0e6a9d2458 100644
--- a/Marlin/src/config/examples/BIBO/TouchX/default/Configuration_adv.h
+++ b/Marlin/src/config/examples/BIBO/TouchX/default/Configuration_adv.h
@@ -490,6 +490,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -786,19 +819,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -816,6 +849,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1263,17 +1297,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1320,6 +1351,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1334,7 +1383,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1358,7 +1415,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/BQ/Hephestos/Configuration.h b/Marlin/src/config/examples/BQ/Hephestos/Configuration.h
index d05631d63e..a558b1078d 100644
--- a/Marlin/src/config/examples/BQ/Hephestos/Configuration.h
+++ b/Marlin/src/config/examples/BQ/Hephestos/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/BQ/Hephestos/Configuration_adv.h b/Marlin/src/config/examples/BQ/Hephestos/Configuration_adv.h
index cd10d663b9..3c03260d3a 100644
--- a/Marlin/src/config/examples/BQ/Hephestos/Configuration_adv.h
+++ b/Marlin/src/config/examples/BQ/Hephestos/Configuration_adv.h
@@ -490,6 +490,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -786,19 +819,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -816,6 +849,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1263,17 +1297,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1320,6 +1351,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1334,7 +1383,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1358,7 +1415,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/BQ/Hephestos_2/Configuration.h b/Marlin/src/config/examples/BQ/Hephestos_2/Configuration.h
index 0cbd507188..62fc55ddd5 100644
--- a/Marlin/src/config/examples/BQ/Hephestos_2/Configuration.h
+++ b/Marlin/src/config/examples/BQ/Hephestos_2/Configuration.h
@@ -209,7 +209,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -395,10 +395,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
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 b6725c00ac..0c934e265c 100644
--- a/Marlin/src/config/examples/BQ/Hephestos_2/Configuration_adv.h
+++ b/Marlin/src/config/examples/BQ/Hephestos_2/Configuration_adv.h
@@ -490,6 +490,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -794,19 +827,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -824,6 +857,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1271,17 +1305,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1328,6 +1359,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1342,7 +1391,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1366,7 +1423,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/BQ/WITBOX/Configuration.h b/Marlin/src/config/examples/BQ/WITBOX/Configuration.h
index f1fd8318bc..69f16ca87c 100644
--- a/Marlin/src/config/examples/BQ/WITBOX/Configuration.h
+++ b/Marlin/src/config/examples/BQ/WITBOX/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/BQ/WITBOX/Configuration_adv.h b/Marlin/src/config/examples/BQ/WITBOX/Configuration_adv.h
index cd10d663b9..3c03260d3a 100644
--- a/Marlin/src/config/examples/BQ/WITBOX/Configuration_adv.h
+++ b/Marlin/src/config/examples/BQ/WITBOX/Configuration_adv.h
@@ -490,6 +490,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -786,19 +819,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -816,6 +849,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1263,17 +1297,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1320,6 +1351,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1334,7 +1383,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1358,7 +1415,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/Cartesio/Configuration.h b/Marlin/src/config/examples/Cartesio/Configuration.h
index b7404119e6..769a5903ca 100644
--- a/Marlin/src/config/examples/Cartesio/Configuration.h
+++ b/Marlin/src/config/examples/Cartesio/Configuration.h
@@ -202,7 +202,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -388,10 +388,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/Cartesio/Configuration_adv.h b/Marlin/src/config/examples/Cartesio/Configuration_adv.h
index fb18a3b9f8..99ccacbd23 100644
--- a/Marlin/src/config/examples/Cartesio/Configuration_adv.h
+++ b/Marlin/src/config/examples/Cartesio/Configuration_adv.h
@@ -490,6 +490,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -786,19 +819,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -816,6 +849,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1263,17 +1297,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1320,6 +1351,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1334,7 +1383,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1358,7 +1415,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/Creality/CR-10/Configuration.h b/Marlin/src/config/examples/Creality/CR-10/Configuration.h
index cede057f4a..7107873384 100644
--- a/Marlin/src/config/examples/Creality/CR-10/Configuration.h
+++ b/Marlin/src/config/examples/Creality/CR-10/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
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 88fda1efe0..74b539e537 100644
--- a/Marlin/src/config/examples/Creality/CR-10/Configuration_adv.h
+++ b/Marlin/src/config/examples/Creality/CR-10/Configuration_adv.h
@@ -490,6 +490,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -786,19 +819,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -816,6 +849,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1263,17 +1297,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1320,6 +1351,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1334,7 +1383,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1358,7 +1415,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/Creality/CR-10S/Configuration.h b/Marlin/src/config/examples/Creality/CR-10S/Configuration.h
index 21435c6350..500d2defe2 100644
--- a/Marlin/src/config/examples/Creality/CR-10S/Configuration.h
+++ b/Marlin/src/config/examples/Creality/CR-10S/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/Creality/CR-10S/Configuration_adv.h b/Marlin/src/config/examples/Creality/CR-10S/Configuration_adv.h
index ceb09db9c3..1fa49dfea1 100644
--- a/Marlin/src/config/examples/Creality/CR-10S/Configuration_adv.h
+++ b/Marlin/src/config/examples/Creality/CR-10S/Configuration_adv.h
@@ -490,6 +490,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -786,19 +819,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -816,6 +849,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1263,17 +1297,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1320,6 +1351,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1334,7 +1383,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1358,7 +1415,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/Creality/CR-10mini/Configuration.h b/Marlin/src/config/examples/Creality/CR-10mini/Configuration.h
index d43352d402..2afa3d2793 100644
--- a/Marlin/src/config/examples/Creality/CR-10mini/Configuration.h
+++ b/Marlin/src/config/examples/Creality/CR-10mini/Configuration.h
@@ -210,7 +210,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -396,10 +396,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- #define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ #define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/Creality/CR-10mini/Configuration_adv.h b/Marlin/src/config/examples/Creality/CR-10mini/Configuration_adv.h
index 4777910147..e408ac17dd 100644
--- a/Marlin/src/config/examples/Creality/CR-10mini/Configuration_adv.h
+++ b/Marlin/src/config/examples/Creality/CR-10mini/Configuration_adv.h
@@ -490,6 +490,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -786,19 +819,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -816,6 +849,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1263,17 +1297,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1320,6 +1351,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1334,7 +1383,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1358,7 +1415,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/Creality/CR-8/Configuration.h b/Marlin/src/config/examples/Creality/CR-8/Configuration.h
index 8623526611..efafbad662 100644
--- a/Marlin/src/config/examples/Creality/CR-8/Configuration.h
+++ b/Marlin/src/config/examples/Creality/CR-8/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/Creality/CR-8/Configuration_adv.h b/Marlin/src/config/examples/Creality/CR-8/Configuration_adv.h
index 1e5b7396ae..7a659fb581 100644
--- a/Marlin/src/config/examples/Creality/CR-8/Configuration_adv.h
+++ b/Marlin/src/config/examples/Creality/CR-8/Configuration_adv.h
@@ -490,6 +490,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -786,19 +819,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -816,6 +849,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1263,17 +1297,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1320,6 +1351,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1334,7 +1383,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1358,7 +1415,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/Creality/Ender-2/Configuration.h b/Marlin/src/config/examples/Creality/Ender-2/Configuration.h
index 7f2818e13b..7a61412ff4 100644
--- a/Marlin/src/config/examples/Creality/Ender-2/Configuration.h
+++ b/Marlin/src/config/examples/Creality/Ender-2/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/Creality/Ender-2/Configuration_adv.h b/Marlin/src/config/examples/Creality/Ender-2/Configuration_adv.h
index 83723a207f..a48415953d 100644
--- a/Marlin/src/config/examples/Creality/Ender-2/Configuration_adv.h
+++ b/Marlin/src/config/examples/Creality/Ender-2/Configuration_adv.h
@@ -490,6 +490,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -786,19 +819,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -816,6 +849,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1263,17 +1297,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1320,6 +1351,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1334,7 +1383,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1358,7 +1415,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/Creality/Ender-3/Configuration.h b/Marlin/src/config/examples/Creality/Ender-3/Configuration.h
index 0e532a9dc0..33838e2564 100644
--- a/Marlin/src/config/examples/Creality/Ender-3/Configuration.h
+++ b/Marlin/src/config/examples/Creality/Ender-3/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- #define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ #define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/Creality/Ender-3/Configuration_adv.h b/Marlin/src/config/examples/Creality/Ender-3/Configuration_adv.h
index 2127ff2eb5..e45104e2a9 100644
--- a/Marlin/src/config/examples/Creality/Ender-3/Configuration_adv.h
+++ b/Marlin/src/config/examples/Creality/Ender-3/Configuration_adv.h
@@ -490,6 +490,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -786,19 +819,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -816,6 +849,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1263,17 +1297,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1320,6 +1351,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1334,7 +1383,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1358,7 +1415,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/Creality/Ender-4/Configuration.h b/Marlin/src/config/examples/Creality/Ender-4/Configuration.h
index f03d73f16f..170e811a29 100644
--- a/Marlin/src/config/examples/Creality/Ender-4/Configuration.h
+++ b/Marlin/src/config/examples/Creality/Ender-4/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- #define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ #define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/Creality/Ender-4/Configuration_adv.h b/Marlin/src/config/examples/Creality/Ender-4/Configuration_adv.h
index f8bcdbee0d..87bad6a855 100644
--- a/Marlin/src/config/examples/Creality/Ender-4/Configuration_adv.h
+++ b/Marlin/src/config/examples/Creality/Ender-4/Configuration_adv.h
@@ -490,6 +490,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -786,19 +819,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -816,6 +849,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1263,17 +1297,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1320,6 +1351,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1334,7 +1383,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1358,7 +1415,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/Einstart-S/Configuration.h b/Marlin/src/config/examples/Einstart-S/Configuration.h
index 652f27fbd0..c46a7caf77 100644
--- a/Marlin/src/config/examples/Einstart-S/Configuration.h
+++ b/Marlin/src/config/examples/Einstart-S/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -389,10 +389,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/Einstart-S/Configuration_adv.h b/Marlin/src/config/examples/Einstart-S/Configuration_adv.h
index 15c6665857..989153ed3b 100644
--- a/Marlin/src/config/examples/Einstart-S/Configuration_adv.h
+++ b/Marlin/src/config/examples/Einstart-S/Configuration_adv.h
@@ -490,6 +490,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -786,19 +819,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -816,6 +849,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1263,17 +1297,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1320,6 +1351,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1334,7 +1383,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1358,7 +1415,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/Felix/Configuration.h b/Marlin/src/config/examples/Felix/Configuration.h
index d48a140b2e..f73c01e9f3 100644
--- a/Marlin/src/config/examples/Felix/Configuration.h
+++ b/Marlin/src/config/examples/Felix/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/Felix/Configuration_adv.h b/Marlin/src/config/examples/Felix/Configuration_adv.h
index ec2fdd35c4..895d76af3d 100644
--- a/Marlin/src/config/examples/Felix/Configuration_adv.h
+++ b/Marlin/src/config/examples/Felix/Configuration_adv.h
@@ -490,6 +490,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -786,19 +819,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -816,6 +849,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1263,17 +1297,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1320,6 +1351,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1334,7 +1383,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1358,7 +1415,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/Felix/DUAL/Configuration.h b/Marlin/src/config/examples/Felix/DUAL/Configuration.h
index ce9e6cf401..99a78a7826 100644
--- a/Marlin/src/config/examples/Felix/DUAL/Configuration.h
+++ b/Marlin/src/config/examples/Felix/DUAL/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/FolgerTech/i3-2020/Configuration.h b/Marlin/src/config/examples/FolgerTech/i3-2020/Configuration.h
index d9a60e48db..01fce86e55 100644
--- a/Marlin/src/config/examples/FolgerTech/i3-2020/Configuration.h
+++ b/Marlin/src/config/examples/FolgerTech/i3-2020/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
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 4297720717..18edf294a6 100644
--- a/Marlin/src/config/examples/FolgerTech/i3-2020/Configuration_adv.h
+++ b/Marlin/src/config/examples/FolgerTech/i3-2020/Configuration_adv.h
@@ -490,6 +490,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -786,19 +819,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -816,6 +849,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1263,17 +1297,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1320,6 +1351,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1334,7 +1383,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1358,7 +1415,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/Formbot/Raptor/Configuration.h b/Marlin/src/config/examples/Formbot/Raptor/Configuration.h
index 8086bd3690..0c66651413 100644
--- a/Marlin/src/config/examples/Formbot/Raptor/Configuration.h
+++ b/Marlin/src/config/examples/Formbot/Raptor/Configuration.h
@@ -242,7 +242,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -434,10 +434,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- #define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ #define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/Formbot/Raptor/Configuration_adv.h b/Marlin/src/config/examples/Formbot/Raptor/Configuration_adv.h
index b86b563e33..486e1a59a0 100644
--- a/Marlin/src/config/examples/Formbot/Raptor/Configuration_adv.h
+++ b/Marlin/src/config/examples/Formbot/Raptor/Configuration_adv.h
@@ -490,6 +490,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -786,19 +819,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -816,6 +849,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1265,17 +1299,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1322,6 +1353,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1336,7 +1385,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1360,7 +1417,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/Formbot/T_Rex_2+/Configuration.h b/Marlin/src/config/examples/Formbot/T_Rex_2+/Configuration.h
index 30422027ec..8549b18656 100644
--- a/Marlin/src/config/examples/Formbot/T_Rex_2+/Configuration.h
+++ b/Marlin/src/config/examples/Formbot/T_Rex_2+/Configuration.h
@@ -204,7 +204,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -402,10 +402,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- #define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ #define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/Formbot/T_Rex_2+/Configuration_adv.h b/Marlin/src/config/examples/Formbot/T_Rex_2+/Configuration_adv.h
index 36140c5660..3fdc0a4a99 100644
--- a/Marlin/src/config/examples/Formbot/T_Rex_2+/Configuration_adv.h
+++ b/Marlin/src/config/examples/Formbot/T_Rex_2+/Configuration_adv.h
@@ -494,6 +494,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -790,19 +823,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -820,6 +853,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1268,17 +1302,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1325,6 +1356,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1339,7 +1388,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1363,7 +1420,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/Formbot/T_Rex_3/Configuration.h b/Marlin/src/config/examples/Formbot/T_Rex_3/Configuration.h
index 776119cca1..073f0a2195 100644
--- a/Marlin/src/config/examples/Formbot/T_Rex_3/Configuration.h
+++ b/Marlin/src/config/examples/Formbot/T_Rex_3/Configuration.h
@@ -205,7 +205,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -396,10 +396,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- #define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ #define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/Formbot/T_Rex_3/Configuration_adv.h b/Marlin/src/config/examples/Formbot/T_Rex_3/Configuration_adv.h
index da3f9d7fd2..cb079dd8a5 100644
--- a/Marlin/src/config/examples/Formbot/T_Rex_3/Configuration_adv.h
+++ b/Marlin/src/config/examples/Formbot/T_Rex_3/Configuration_adv.h
@@ -495,6 +495,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -791,19 +824,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -821,6 +854,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1268,17 +1302,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1325,6 +1356,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1339,7 +1388,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1363,7 +1420,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/Geeetech/GT2560/Configuration.h b/Marlin/src/config/examples/Geeetech/GT2560/Configuration.h
index 9afc16c4ab..93509a7c4f 100644
--- a/Marlin/src/config/examples/Geeetech/GT2560/Configuration.h
+++ b/Marlin/src/config/examples/Geeetech/GT2560/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/Geeetech/I3_Pro_X-GT2560/Configuration.h b/Marlin/src/config/examples/Geeetech/I3_Pro_X-GT2560/Configuration.h
index bf4333174a..fec925dbf6 100644
--- a/Marlin/src/config/examples/Geeetech/I3_Pro_X-GT2560/Configuration.h
+++ b/Marlin/src/config/examples/Geeetech/I3_Pro_X-GT2560/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/Geeetech/MeCreator2/Configuration.h b/Marlin/src/config/examples/Geeetech/MeCreator2/Configuration.h
index 3df7e6f958..39d893dc93 100644
--- a/Marlin/src/config/examples/Geeetech/MeCreator2/Configuration.h
+++ b/Marlin/src/config/examples/Geeetech/MeCreator2/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/Geeetech/MeCreator2/Configuration_adv.h b/Marlin/src/config/examples/Geeetech/MeCreator2/Configuration_adv.h
index 9fabbbab03..622da7ce1e 100644
--- a/Marlin/src/config/examples/Geeetech/MeCreator2/Configuration_adv.h
+++ b/Marlin/src/config/examples/Geeetech/MeCreator2/Configuration_adv.h
@@ -490,6 +490,39 @@
#define JUNCTION_DEVIATION_MM 0.01 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -786,19 +819,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -816,6 +849,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1264,17 +1298,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1321,6 +1352,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1335,7 +1384,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1359,7 +1416,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/Geeetech/Prusa i3 Pro B/bltouch/Configuration.h b/Marlin/src/config/examples/Geeetech/Prusa i3 Pro B/bltouch/Configuration.h
index 436c1a9c97..68534f6733 100644
--- a/Marlin/src/config/examples/Geeetech/Prusa i3 Pro B/bltouch/Configuration.h
+++ b/Marlin/src/config/examples/Geeetech/Prusa i3 Pro B/bltouch/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/Geeetech/Prusa i3 Pro B/noprobe/Configuration.h b/Marlin/src/config/examples/Geeetech/Prusa i3 Pro B/noprobe/Configuration.h
index 549551f2a1..16e12967f3 100644
--- a/Marlin/src/config/examples/Geeetech/Prusa i3 Pro B/noprobe/Configuration.h
+++ b/Marlin/src/config/examples/Geeetech/Prusa i3 Pro B/noprobe/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/Geeetech/Prusa i3 Pro C/Configuration.h b/Marlin/src/config/examples/Geeetech/Prusa i3 Pro C/Configuration.h
index 8b50a3affb..3202cf1993 100644
--- a/Marlin/src/config/examples/Geeetech/Prusa i3 Pro C/Configuration.h
+++ b/Marlin/src/config/examples/Geeetech/Prusa i3 Pro C/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h b/Marlin/src/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h
index dc7c02246a..204c84fc32 100644
--- a/Marlin/src/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h
+++ b/Marlin/src/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h
@@ -490,6 +490,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -786,19 +819,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -816,6 +849,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1263,17 +1297,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1320,6 +1351,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1334,7 +1383,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1358,7 +1415,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/Geeetech/Prusa i3 Pro W/Configuration.h b/Marlin/src/config/examples/Geeetech/Prusa i3 Pro W/Configuration.h
index 1033325fa3..52c466a0c9 100644
--- a/Marlin/src/config/examples/Geeetech/Prusa i3 Pro W/Configuration.h
+++ b/Marlin/src/config/examples/Geeetech/Prusa i3 Pro W/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h b/Marlin/src/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h
index dc7c02246a..204c84fc32 100644
--- a/Marlin/src/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h
+++ b/Marlin/src/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h
@@ -490,6 +490,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -786,19 +819,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -816,6 +849,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1263,17 +1297,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1320,6 +1351,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1334,7 +1383,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1358,7 +1415,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/Infitary/i3-M508/Configuration.h b/Marlin/src/config/examples/Infitary/i3-M508/Configuration.h
index fb26dd6f02..f97d58d713 100644
--- a/Marlin/src/config/examples/Infitary/i3-M508/Configuration.h
+++ b/Marlin/src/config/examples/Infitary/i3-M508/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
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 8c02f2f1ad..0bc9c4ec22 100644
--- a/Marlin/src/config/examples/Infitary/i3-M508/Configuration_adv.h
+++ b/Marlin/src/config/examples/Infitary/i3-M508/Configuration_adv.h
@@ -490,6 +490,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -786,19 +819,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -816,6 +849,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1263,17 +1297,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1320,6 +1351,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1334,7 +1383,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1358,7 +1415,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/JGAurora/A5/Configuration.h b/Marlin/src/config/examples/JGAurora/A5/Configuration.h
index 8838b110e6..4b0e381093 100644
--- a/Marlin/src/config/examples/JGAurora/A5/Configuration.h
+++ b/Marlin/src/config/examples/JGAurora/A5/Configuration.h
@@ -206,7 +206,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -392,10 +392,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- #define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ #define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/JGAurora/A5/Configuration_adv.h b/Marlin/src/config/examples/JGAurora/A5/Configuration_adv.h
index c894b9ff22..4b22180dce 100644
--- a/Marlin/src/config/examples/JGAurora/A5/Configuration_adv.h
+++ b/Marlin/src/config/examples/JGAurora/A5/Configuration_adv.h
@@ -490,6 +490,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -786,19 +819,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -816,6 +849,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1263,17 +1297,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1320,6 +1351,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1334,7 +1383,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1358,7 +1415,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/MakerParts/Configuration.h b/Marlin/src/config/examples/MakerParts/Configuration.h
index 50f63b9bd3..a76e7580e6 100644
--- a/Marlin/src/config/examples/MakerParts/Configuration.h
+++ b/Marlin/src/config/examples/MakerParts/Configuration.h
@@ -221,7 +221,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -407,10 +407,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- #define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ #define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/MakerParts/Configuration_adv.h b/Marlin/src/config/examples/MakerParts/Configuration_adv.h
index e641f281a4..b8161b2826 100644
--- a/Marlin/src/config/examples/MakerParts/Configuration_adv.h
+++ b/Marlin/src/config/examples/MakerParts/Configuration_adv.h
@@ -490,6 +490,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -786,19 +819,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -816,6 +849,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1263,17 +1297,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1320,6 +1351,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1334,7 +1383,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1358,7 +1415,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/Malyan/M150/Configuration.h b/Marlin/src/config/examples/Malyan/M150/Configuration.h
index 0b49502052..6c368b0835 100644
--- a/Marlin/src/config/examples/Malyan/M150/Configuration.h
+++ b/Marlin/src/config/examples/Malyan/M150/Configuration.h
@@ -206,7 +206,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -395,10 +395,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/Malyan/M150/Configuration_adv.h b/Marlin/src/config/examples/Malyan/M150/Configuration_adv.h
index 80aa4504f3..2d625c2d6c 100644
--- a/Marlin/src/config/examples/Malyan/M150/Configuration_adv.h
+++ b/Marlin/src/config/examples/Malyan/M150/Configuration_adv.h
@@ -490,6 +490,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -786,19 +819,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -816,6 +849,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1263,17 +1297,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1320,6 +1351,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1334,7 +1383,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1358,7 +1415,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/Malyan/M200/Configuration.h b/Marlin/src/config/examples/Malyan/M200/Configuration.h
index f6c587e7ae..566a9a74c3 100644
--- a/Marlin/src/config/examples/Malyan/M200/Configuration.h
+++ b/Marlin/src/config/examples/Malyan/M200/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/Malyan/M200/Configuration_adv.h b/Marlin/src/config/examples/Malyan/M200/Configuration_adv.h
index df051d3f08..51b1786d01 100644
--- a/Marlin/src/config/examples/Malyan/M200/Configuration_adv.h
+++ b/Marlin/src/config/examples/Malyan/M200/Configuration_adv.h
@@ -490,6 +490,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -786,19 +819,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -816,6 +849,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1263,17 +1297,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1320,6 +1351,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1334,7 +1383,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1358,7 +1415,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/Micromake/C1/basic/Configuration.h b/Marlin/src/config/examples/Micromake/C1/basic/Configuration.h
index 68f6430e20..821cee222a 100644
--- a/Marlin/src/config/examples/Micromake/C1/basic/Configuration.h
+++ b/Marlin/src/config/examples/Micromake/C1/basic/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
@@ -1288,7 +1288,7 @@
// M501 - reads parameters from EEPROM (if you need reset them after you changed them temporarily).
// M502 - reverts to the default "factory settings". You still need to store them in EEPROM afterwards if you want to.
//
-//#define EEPROM_SETTINGS // Enable for M500 and M501 commands
+#define EEPROM_SETTINGS // Enable for M500 and M501 commands
//#define DISABLE_M503 // Saves ~2700 bytes of PROGMEM. Disable for release!
#define EEPROM_CHITCHAT // Give feedback on EEPROM commands. Disable to save PROGMEM.
diff --git a/Marlin/src/config/examples/Micromake/C1/enhanced/Configuration.h b/Marlin/src/config/examples/Micromake/C1/enhanced/Configuration.h
index 0e8ee1e384..b10e1c51df 100644
--- a/Marlin/src/config/examples/Micromake/C1/enhanced/Configuration.h
+++ b/Marlin/src/config/examples/Micromake/C1/enhanced/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
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 82e0e1be65..a9cb575f56 100644
--- a/Marlin/src/config/examples/Micromake/C1/enhanced/Configuration_adv.h
+++ b/Marlin/src/config/examples/Micromake/C1/enhanced/Configuration_adv.h
@@ -490,6 +490,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -786,19 +819,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -816,6 +849,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1263,17 +1297,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1320,6 +1351,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1334,7 +1383,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1358,7 +1415,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/Mks/Sbase/Configuration.h b/Marlin/src/config/examples/Mks/Sbase/Configuration.h
index 89368941e8..0711f8db63 100644
--- a/Marlin/src/config/examples/Mks/Sbase/Configuration.h
+++ b/Marlin/src/config/examples/Mks/Sbase/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/Mks/Sbase/Configuration_adv.h b/Marlin/src/config/examples/Mks/Sbase/Configuration_adv.h
index 2f346fc053..ca5562e682 100644
--- a/Marlin/src/config/examples/Mks/Sbase/Configuration_adv.h
+++ b/Marlin/src/config/examples/Mks/Sbase/Configuration_adv.h
@@ -490,6 +490,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -794,19 +827,19 @@
#define DOGLCD_MOSI MOSI_PIN
#endif
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -824,6 +857,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1271,17 +1305,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1328,6 +1359,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1342,7 +1391,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1366,7 +1423,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/RepRapPro/Huxley/Configuration.h b/Marlin/src/config/examples/RepRapPro/Huxley/Configuration.h
index 121f9af6b7..d8f49e6484 100644
--- a/Marlin/src/config/examples/RepRapPro/Huxley/Configuration.h
+++ b/Marlin/src/config/examples/RepRapPro/Huxley/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/RepRapWorld/Megatronics/Configuration.h b/Marlin/src/config/examples/RepRapWorld/Megatronics/Configuration.h
index 0e54a291ef..a1af174f04 100644
--- a/Marlin/src/config/examples/RepRapWorld/Megatronics/Configuration.h
+++ b/Marlin/src/config/examples/RepRapWorld/Megatronics/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/RigidBot/Configuration.h b/Marlin/src/config/examples/RigidBot/Configuration.h
index 0f09f1459b..4f94bd8dbd 100644
--- a/Marlin/src/config/examples/RigidBot/Configuration.h
+++ b/Marlin/src/config/examples/RigidBot/Configuration.h
@@ -204,7 +204,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -390,10 +390,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/RigidBot/Configuration_adv.h b/Marlin/src/config/examples/RigidBot/Configuration_adv.h
index c7548e796d..f9491f3aaf 100644
--- a/Marlin/src/config/examples/RigidBot/Configuration_adv.h
+++ b/Marlin/src/config/examples/RigidBot/Configuration_adv.h
@@ -490,6 +490,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -786,19 +819,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -816,6 +849,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1263,17 +1297,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1320,6 +1351,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1334,7 +1383,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1358,7 +1415,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/SCARA/Configuration.h b/Marlin/src/config/examples/SCARA/Configuration.h
index d7aa407d15..434eef9c30 100644
--- a/Marlin/src/config/examples/SCARA/Configuration.h
+++ b/Marlin/src/config/examples/SCARA/Configuration.h
@@ -232,7 +232,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -418,10 +418,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 20 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/SCARA/Configuration_adv.h b/Marlin/src/config/examples/SCARA/Configuration_adv.h
index d03ae78bee..d6fea7efdf 100644
--- a/Marlin/src/config/examples/SCARA/Configuration_adv.h
+++ b/Marlin/src/config/examples/SCARA/Configuration_adv.h
@@ -490,6 +490,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -786,19 +819,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -816,6 +849,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1263,17 +1297,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1320,6 +1351,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1334,7 +1383,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1358,7 +1415,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/STM32F10/Configuration.h b/Marlin/src/config/examples/STM32F10/Configuration.h
index 0c4fadc32d..ef7075351f 100644
--- a/Marlin/src/config/examples/STM32F10/Configuration.h
+++ b/Marlin/src/config/examples/STM32F10/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -388,10 +388,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- #define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ #define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/STM32F4/Configuration.h b/Marlin/src/config/examples/STM32F4/Configuration.h
index 9b2b35788c..ff5a5b3ed7 100644
--- a/Marlin/src/config/examples/STM32F4/Configuration.h
+++ b/Marlin/src/config/examples/STM32F4/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/Sanguinololu/Configuration.h b/Marlin/src/config/examples/Sanguinololu/Configuration.h
index e6295d115c..314f658899 100644
--- a/Marlin/src/config/examples/Sanguinololu/Configuration.h
+++ b/Marlin/src/config/examples/Sanguinololu/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/Sanguinololu/Configuration_adv.h b/Marlin/src/config/examples/Sanguinololu/Configuration_adv.h
index 93449d3dbe..c26e644dd8 100644
--- a/Marlin/src/config/examples/Sanguinololu/Configuration_adv.h
+++ b/Marlin/src/config/examples/Sanguinololu/Configuration_adv.h
@@ -490,6 +490,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -786,19 +819,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -816,6 +849,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1263,17 +1297,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1320,6 +1351,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1334,7 +1383,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1358,7 +1415,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/TheBorg/Configuration.h b/Marlin/src/config/examples/TheBorg/Configuration.h
index 33974b0b0e..bbfb8e750b 100644
--- a/Marlin/src/config/examples/TheBorg/Configuration.h
+++ b/Marlin/src/config/examples/TheBorg/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/TheBorg/Configuration_adv.h b/Marlin/src/config/examples/TheBorg/Configuration_adv.h
index c3ac042b51..9be10e846f 100644
--- a/Marlin/src/config/examples/TheBorg/Configuration_adv.h
+++ b/Marlin/src/config/examples/TheBorg/Configuration_adv.h
@@ -490,6 +490,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -786,19 +819,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -816,6 +849,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1263,17 +1297,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1320,6 +1351,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1334,7 +1383,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1358,7 +1415,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/TinyBoy2/Configuration.h b/Marlin/src/config/examples/TinyBoy2/Configuration.h
index ea0f352169..ce9d0054a9 100644
--- a/Marlin/src/config/examples/TinyBoy2/Configuration.h
+++ b/Marlin/src/config/examples/TinyBoy2/Configuration.h
@@ -223,7 +223,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -414,10 +414,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/TinyBoy2/Configuration_adv.h b/Marlin/src/config/examples/TinyBoy2/Configuration_adv.h
index ddfa10b4f8..96e7ec8ba3 100644
--- a/Marlin/src/config/examples/TinyBoy2/Configuration_adv.h
+++ b/Marlin/src/config/examples/TinyBoy2/Configuration_adv.h
@@ -490,6 +490,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -786,19 +819,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -816,6 +849,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1263,17 +1297,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1320,6 +1351,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1334,7 +1383,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1358,7 +1415,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/Tronxy/X1/Configuration.h b/Marlin/src/config/examples/Tronxy/X1/Configuration.h
index 9efc861d0b..23388a90f0 100644
--- a/Marlin/src/config/examples/Tronxy/X1/Configuration.h
+++ b/Marlin/src/config/examples/Tronxy/X1/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/Tronxy/X3A/Configuration.h b/Marlin/src/config/examples/Tronxy/X3A/Configuration.h
index bb2f3a8fa9..28376ab768 100644
--- a/Marlin/src/config/examples/Tronxy/X3A/Configuration.h
+++ b/Marlin/src/config/examples/Tronxy/X3A/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/Tronxy/X3A/Configuration_adv.h b/Marlin/src/config/examples/Tronxy/X3A/Configuration_adv.h
index cc2db6b9fc..e7d74011b1 100644
--- a/Marlin/src/config/examples/Tronxy/X3A/Configuration_adv.h
+++ b/Marlin/src/config/examples/Tronxy/X3A/Configuration_adv.h
@@ -490,6 +490,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -786,19 +819,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -816,6 +849,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1263,17 +1297,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1320,6 +1351,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1334,7 +1383,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1358,7 +1415,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/Tronxy/X5S/Configuration.h b/Marlin/src/config/examples/Tronxy/X5S/Configuration.h
index 2bd0f9f111..73f9bc92ec 100644
--- a/Marlin/src/config/examples/Tronxy/X5S/Configuration.h
+++ b/Marlin/src/config/examples/Tronxy/X5S/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -388,9 +388,9 @@
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/Tronxy/XY100/Configuration.h b/Marlin/src/config/examples/Tronxy/XY100/Configuration.h
index 023befcb05..4188237a7f 100644
--- a/Marlin/src/config/examples/Tronxy/XY100/Configuration.h
+++ b/Marlin/src/config/examples/Tronxy/XY100/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- #define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ #define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/UltiMachine/Archim1/Configuration.h b/Marlin/src/config/examples/UltiMachine/Archim1/Configuration.h
index 1b8d9555f5..bd84443c1e 100644
--- a/Marlin/src/config/examples/UltiMachine/Archim1/Configuration.h
+++ b/Marlin/src/config/examples/UltiMachine/Archim1/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/UltiMachine/Archim1/Configuration_adv.h b/Marlin/src/config/examples/UltiMachine/Archim1/Configuration_adv.h
index d24ee84baa..eaf8dbdc79 100644
--- a/Marlin/src/config/examples/UltiMachine/Archim1/Configuration_adv.h
+++ b/Marlin/src/config/examples/UltiMachine/Archim1/Configuration_adv.h
@@ -490,6 +490,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -786,19 +819,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -816,6 +849,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1264,17 +1298,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1321,6 +1352,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1335,7 +1384,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1359,7 +1416,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/UltiMachine/Archim2/Configuration.h b/Marlin/src/config/examples/UltiMachine/Archim2/Configuration.h
index 26a93655a2..f7c3d6afe2 100644
--- a/Marlin/src/config/examples/UltiMachine/Archim2/Configuration.h
+++ b/Marlin/src/config/examples/UltiMachine/Archim2/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/UltiMachine/Archim2/Configuration_adv.h b/Marlin/src/config/examples/UltiMachine/Archim2/Configuration_adv.h
index 825a9216ef..51b11234c2 100644
--- a/Marlin/src/config/examples/UltiMachine/Archim2/Configuration_adv.h
+++ b/Marlin/src/config/examples/UltiMachine/Archim2/Configuration_adv.h
@@ -490,6 +490,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -786,19 +819,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -816,6 +849,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1263,17 +1297,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1320,6 +1351,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1334,7 +1383,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1358,7 +1415,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/Velleman/K8200/Configuration.h b/Marlin/src/config/examples/Velleman/K8200/Configuration.h
index a35a677668..c3fca23690 100644
--- a/Marlin/src/config/examples/Velleman/K8200/Configuration.h
+++ b/Marlin/src/config/examples/Velleman/K8200/Configuration.h
@@ -221,7 +221,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -407,10 +407,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/Velleman/K8200/Configuration_adv.h b/Marlin/src/config/examples/Velleman/K8200/Configuration_adv.h
index 3bd6011ebe..dc6c928369 100644
--- a/Marlin/src/config/examples/Velleman/K8200/Configuration_adv.h
+++ b/Marlin/src/config/examples/Velleman/K8200/Configuration_adv.h
@@ -503,6 +503,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -799,19 +832,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -829,6 +862,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1276,17 +1310,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1333,6 +1364,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1347,7 +1396,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1371,7 +1428,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/Velleman/K8400/Configuration.h b/Marlin/src/config/examples/Velleman/K8400/Configuration.h
index 82b9c3901e..6cf4f7e7a6 100644
--- a/Marlin/src/config/examples/Velleman/K8400/Configuration.h
+++ b/Marlin/src/config/examples/Velleman/K8400/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/Velleman/K8400/Configuration_adv.h b/Marlin/src/config/examples/Velleman/K8400/Configuration_adv.h
index c2834f5785..d1134eb22b 100644
--- a/Marlin/src/config/examples/Velleman/K8400/Configuration_adv.h
+++ b/Marlin/src/config/examples/Velleman/K8400/Configuration_adv.h
@@ -490,6 +490,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -786,19 +819,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -816,6 +849,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1263,17 +1297,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1320,6 +1351,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1334,7 +1383,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1358,7 +1415,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/Velleman/K8400/Dual-head/Configuration.h b/Marlin/src/config/examples/Velleman/K8400/Dual-head/Configuration.h
index 1bfbb735a8..739e471d23 100644
--- a/Marlin/src/config/examples/Velleman/K8400/Dual-head/Configuration.h
+++ b/Marlin/src/config/examples/Velleman/K8400/Dual-head/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/Wanhao/Duplicator 6/Configuration.h b/Marlin/src/config/examples/Wanhao/Duplicator 6/Configuration.h
index 545b7a26dc..25e2d9d38b 100644
--- a/Marlin/src/config/examples/Wanhao/Duplicator 6/Configuration.h
+++ b/Marlin/src/config/examples/Wanhao/Duplicator 6/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- #define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ #define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
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 828241938c..fc73aa165a 100644
--- a/Marlin/src/config/examples/Wanhao/Duplicator 6/Configuration_adv.h
+++ b/Marlin/src/config/examples/Wanhao/Duplicator 6/Configuration_adv.h
@@ -490,6 +490,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -788,19 +821,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -818,6 +851,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1265,17 +1299,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1322,6 +1353,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1336,7 +1385,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1360,7 +1417,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/adafruit/ST7565/Configuration.h b/Marlin/src/config/examples/adafruit/ST7565/Configuration.h
index 0be2b56fc6..04fdb12aea 100644
--- a/Marlin/src/config/examples/adafruit/ST7565/Configuration.h
+++ b/Marlin/src/config/examples/adafruit/ST7565/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/delta/Anycubic/Kossel/Configuration.h b/Marlin/src/config/examples/delta/Anycubic/Kossel/Configuration.h
index 5a577ddcd5..0ea7ceb99c 100644
--- a/Marlin/src/config/examples/delta/Anycubic/Kossel/Configuration.h
+++ b/Marlin/src/config/examples/delta/Anycubic/Kossel/Configuration.h
@@ -216,7 +216,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -408,10 +408,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- #define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ #define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
@@ -595,42 +595,42 @@
// Set the radius for the calibration probe points - max DELTA_PRINTABLE_RADIUS for non-eccentric probes
#define DELTA_CALIBRATION_RADIUS DELTA_PRINTABLE_RADIUS - MIN_PROBE_EDGE // (mm)
// Set the steprate for papertest probing
- #define PROBE_MANUALLY_STEP 0.05 // (mm)
+ #define PROBE_MANUALLY_STEP 0.05 // (mm)
#endif
#if ENABLED(ANYCUBIC_KOSSEL_PLUS)
// Print surface diameter/2 minus unreachable space (avoid collisions with vertical towers).
- #define DELTA_PRINTABLE_RADIUS 116.0 // (mm)
+ #define DELTA_PRINTABLE_RADIUS 116.0 // (mm)
// Center-to-center distance of the holes in the diagonal push rods.
- #define DELTA_DIAGONAL_ROD 267 // (mm)
+ #define DELTA_DIAGONAL_ROD 267 // (mm)
// Horizontal offset from middle of printer to smooth rod center.
- #define DELTA_SMOOTH_ROD_OFFSET 186 // (mm)
+ #define DELTA_SMOOTH_ROD_OFFSET 186 // (mm)
// Horizontal offset of the universal joints on the end effector.
- #define DELTA_EFFECTOR_OFFSET 31 // (mm)
+ #define DELTA_EFFECTOR_OFFSET 31 // (mm)
// Horizontal offset of the universal joints on the carriages.
- #define DELTA_CARRIAGE_OFFSET 20.6 // (mm)
+ #define DELTA_CARRIAGE_OFFSET 20.6 // (mm)
// Horizontal distance bridged by diagonal push rods when effector is centered.
- #define DELTA_RADIUS (DELTA_SMOOTH_ROD_OFFSET-(DELTA_EFFECTOR_OFFSET)-(DELTA_CARRIAGE_OFFSET)) //mm Get this value from auto calibrate
+ #define DELTA_RADIUS (DELTA_SMOOTH_ROD_OFFSET-(DELTA_EFFECTOR_OFFSET)-(DELTA_CARRIAGE_OFFSET)) // (mm) Get this value from G33 auto calibrate
#else
// Print surface diameter/2 minus unreachable space (avoid collisions with vertical towers).
- #define DELTA_PRINTABLE_RADIUS 90.0 // (mm)
+ #define DELTA_PRINTABLE_RADIUS 90.0 // (mm)
// Center-to-center distance of the holes in the diagonal push rods.
- #define DELTA_DIAGONAL_ROD 218.0 // (mm)
+ #define DELTA_DIAGONAL_ROD 218.0 // (mm)
// Horizontal distance bridged by diagonal push rods when effector is centered.
- #define DELTA_RADIUS 97.0 //mm Get this value from auto calibrate
+ #define DELTA_RADIUS 97.0 // (mm) Get this value from G33 auto calibrate
#endif
- // height from z=0 to home position
- #define DELTA_HEIGHT 320.00 // get this value from auto calibrate
+ // Distance between bed and nozzle Z home position
+ #define DELTA_HEIGHT 320.00 // (mm) Get this value from G33 auto calibrate
- #define DELTA_ENDSTOP_ADJ { 0.0, 0.0, 0.0 } // get these from auto calibrate
+ #define DELTA_ENDSTOP_ADJ { 0.0, 0.0, 0.0 } // Get these values from G33 auto calibrate
// Trim adjustments for individual towers
// tower angle corrections for X and Y tower / rotate XYZ so Z tower angle = 0
// measured in degrees anticlockwise looking from above the printer
- #define DELTA_TOWER_ANGLE_TRIM { 0.0, 0.0, 0.0 } // get these values from auto calibrate
+ #define DELTA_TOWER_ANGLE_TRIM { 0.0, 0.0, 0.0 } // Get these values from G33 auto calibrate
- // delta radius and diaginal rod adjustments measured in mm
+ // Delta radius and diagonal rod adjustments (mm)
//#define DELTA_RADIUS_TRIM_TOWER { 0.0, 0.0, 0.0 }
//#define DELTA_DIAGONAL_ROD_TRIM_TOWER { 0.0, 0.0, 0.0 }
diff --git a/Marlin/src/config/examples/delta/Anycubic/Kossel/Configuration_adv.h b/Marlin/src/config/examples/delta/Anycubic/Kossel/Configuration_adv.h
index e3d2db162e..8c6a775706 100644
--- a/Marlin/src/config/examples/delta/Anycubic/Kossel/Configuration_adv.h
+++ b/Marlin/src/config/examples/delta/Anycubic/Kossel/Configuration_adv.h
@@ -492,6 +492,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -788,19 +821,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -818,6 +851,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1265,17 +1299,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1322,6 +1353,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1336,7 +1385,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1360,7 +1417,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/delta/FLSUN/auto_calibrate/Configuration.h b/Marlin/src/config/examples/delta/FLSUN/auto_calibrate/Configuration.h
index f7ae89e47a..2f56f23a18 100644
--- a/Marlin/src/config/examples/delta/FLSUN/auto_calibrate/Configuration.h
+++ b/Marlin/src/config/examples/delta/FLSUN/auto_calibrate/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- #define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ #define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
@@ -562,29 +562,29 @@
// Set the radius for the calibration probe points - max DELTA_PRINTABLE_RADIUS for non-eccentric probes
#define DELTA_CALIBRATION_RADIUS 73.5 // (mm)
// Set the steprate for papertest probing
- #define PROBE_MANUALLY_STEP 0.05 // (mm)
+ #define PROBE_MANUALLY_STEP 0.05 // (mm)
#endif
// Print surface diameter/2 minus unreachable space (avoid collisions with vertical towers).
- #define DELTA_PRINTABLE_RADIUS 85.0 // (mm)
+ #define DELTA_PRINTABLE_RADIUS 85.0 // (mm)
// Center-to-center distance of the holes in the diagonal push rods.
- #define DELTA_DIAGONAL_ROD 218.0 // (mm)
+ #define DELTA_DIAGONAL_ROD 218.0 // (mm)
- // height from z=0 to home position
- #define DELTA_HEIGHT 295.00 // get this value from auto calibrate
+ // Distance between bed and nozzle Z home position
+ #define DELTA_HEIGHT 295.00 // (mm) Get this value from G33 auto calibrate
- #define DELTA_ENDSTOP_ADJ { 0.0, 0.0, 0.0 } // get these from auto calibrate
+ #define DELTA_ENDSTOP_ADJ { 0.0, 0.0, 0.0 } // Get these values from G33 auto calibrate
// Horizontal distance bridged by diagonal push rods when effector is centered.
- #define DELTA_RADIUS 101.0 //mm Get this value from auto calibrate
+ #define DELTA_RADIUS 101.0 // (mm) Get this value from G33 auto calibrate
// Trim adjustments for individual towers
// tower angle corrections for X and Y tower / rotate XYZ so Z tower angle = 0
// measured in degrees anticlockwise looking from above the printer
- #define DELTA_TOWER_ANGLE_TRIM { 0.0, 0.0, 0.0 } // get these values from auto calibrate
+ #define DELTA_TOWER_ANGLE_TRIM { 0.0, 0.0, 0.0 } // Get these values from G33 auto calibrate
- // delta radius and diaginal rod adjustments measured in mm
+ // Delta radius and diagonal rod adjustments (mm)
//#define DELTA_RADIUS_TRIM_TOWER { 0.0, 0.0, 0.0 }
//#define DELTA_DIAGONAL_ROD_TRIM_TOWER { 0.0, 0.0, 0.0 }
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 10b67acfcc..e6173d8ca2 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
@@ -492,6 +492,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -788,19 +821,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -818,6 +851,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1265,17 +1299,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1322,6 +1353,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1336,7 +1385,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1360,7 +1417,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/delta/FLSUN/kossel/Configuration.h b/Marlin/src/config/examples/delta/FLSUN/kossel/Configuration.h
index d29c31148a..c8a438c650 100644
--- a/Marlin/src/config/examples/delta/FLSUN/kossel/Configuration.h
+++ b/Marlin/src/config/examples/delta/FLSUN/kossel/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- #define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ #define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
@@ -560,31 +560,31 @@
#if ENABLED(DELTA_AUTO_CALIBRATION) || ENABLED(DELTA_CALIBRATION_MENU)
// Set the radius for the calibration probe points - max DELTA_PRINTABLE_RADIUS for non-eccentric probes
- #define DELTA_CALIBRATION_RADIUS 63 // (mm)
+ #define DELTA_CALIBRATION_RADIUS 63 // (mm)
// Set the steprate for papertest probing
- #define PROBE_MANUALLY_STEP 0.05 // (mm)
+ #define PROBE_MANUALLY_STEP 0.05 // (mm)
#endif
// Print surface diameter/2 minus unreachable space (avoid collisions with vertical towers).
- #define DELTA_PRINTABLE_RADIUS 70.0 // (mm)
+ #define DELTA_PRINTABLE_RADIUS 70.0 // (mm)
// Center-to-center distance of the holes in the diagonal push rods.
- #define DELTA_DIAGONAL_ROD 218.0 // (mm)
+ #define DELTA_DIAGONAL_ROD 218.0 // (mm)
- // height from z=0 to home position
- #define DELTA_HEIGHT 317.94 // get this value from auto calibrate
+ // Distance between bed and nozzle Z home position
+ #define DELTA_HEIGHT 317.94 // (mm) Get this value from G33 auto calibrate
- #define DELTA_ENDSTOP_ADJ { 0.0, 0.0, 0.0 } // get these from auto calibrate
+ #define DELTA_ENDSTOP_ADJ { 0.0, 0.0, 0.0 } // Get these values from G33 auto calibrate
// Horizontal distance bridged by diagonal push rods when effector is centered.
- #define DELTA_RADIUS 110.0 //mm Get this value from auto calibrate
+ #define DELTA_RADIUS 110.0 // (mm) Get this value from G33 auto calibrate
// Trim adjustments for individual towers
// tower angle corrections for X and Y tower / rotate XYZ so Z tower angle = 0
// measured in degrees anticlockwise looking from above the printer
- #define DELTA_TOWER_ANGLE_TRIM { 0.0, 0.0, 0.0 } // get these values from auto calibrate
+ #define DELTA_TOWER_ANGLE_TRIM { 0.0, 0.0, 0.0 } // Get these values from G33 auto calibrate
- // delta radius and diaginal rod adjustments measured in mm
+ // Delta radius and diagonal rod adjustments (mm)
//#define DELTA_RADIUS_TRIM_TOWER { 0.0, 0.0, 0.0 }
//#define DELTA_DIAGONAL_ROD_TRIM_TOWER { 0.0, 0.0, 0.0 }
diff --git a/Marlin/src/config/examples/delta/FLSUN/kossel/Configuration_adv.h b/Marlin/src/config/examples/delta/FLSUN/kossel/Configuration_adv.h
index 10b67acfcc..e6173d8ca2 100644
--- a/Marlin/src/config/examples/delta/FLSUN/kossel/Configuration_adv.h
+++ b/Marlin/src/config/examples/delta/FLSUN/kossel/Configuration_adv.h
@@ -492,6 +492,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -788,19 +821,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -818,6 +851,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1265,17 +1299,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1322,6 +1353,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1336,7 +1385,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1360,7 +1417,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/delta/FLSUN/kossel_mini/Configuration.h b/Marlin/src/config/examples/delta/FLSUN/kossel_mini/Configuration.h
index 6801592a35..a914aed0e2 100644
--- a/Marlin/src/config/examples/delta/FLSUN/kossel_mini/Configuration.h
+++ b/Marlin/src/config/examples/delta/FLSUN/kossel_mini/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- #define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ #define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
@@ -562,29 +562,29 @@
// Set the radius for the calibration probe points - max DELTA_PRINTABLE_RADIUS for non-eccentric probes
#define DELTA_CALIBRATION_RADIUS 73.5 // (mm)
// Set the steprate for papertest probing
- #define PROBE_MANUALLY_STEP 0.05 // (mm)
+ #define PROBE_MANUALLY_STEP 0.05 // (mm)
#endif
// Print surface diameter/2 minus unreachable space (avoid collisions with vertical towers).
- #define DELTA_PRINTABLE_RADIUS 85.0 // (mm)
+ #define DELTA_PRINTABLE_RADIUS 85.0 // (mm)
// Center-to-center distance of the holes in the diagonal push rods.
- #define DELTA_DIAGONAL_ROD 218.0 // (mm)
+ #define DELTA_DIAGONAL_ROD 218.0 // (mm)
- // height from z=0 to home position
- #define DELTA_HEIGHT 280.00 // get this value from auto calibrate
+ // Distance between bed and nozzle Z home position
+ #define DELTA_HEIGHT 280.00 // (mm) Get this value from G33 auto calibrate
- #define DELTA_ENDSTOP_ADJ { 0.0, 0.0, 0.0 } // get these from auto calibrate
+ #define DELTA_ENDSTOP_ADJ { 0.0, 0.0, 0.0 } // Get these values from G33 auto calibrate
// Horizontal distance bridged by diagonal push rods when effector is centered.
- #define DELTA_RADIUS 101.0 //mm Get this value from auto calibrate
+ #define DELTA_RADIUS 101.0 // (mm) Get this value from G33 auto calibrate
// Trim adjustments for individual towers
// tower angle corrections for X and Y tower / rotate XYZ so Z tower angle = 0
// measured in degrees anticlockwise looking from above the printer
- #define DELTA_TOWER_ANGLE_TRIM { 0.0, 0.0, 0.0 } // get these values from auto calibrate
+ #define DELTA_TOWER_ANGLE_TRIM { 0.0, 0.0, 0.0 } // Get these values from G33 auto calibrate
- // delta radius and diaginal rod adjustments measured in mm
+ // Delta radius and diagonal rod adjustments (mm)
//#define DELTA_RADIUS_TRIM_TOWER { 0.0, 0.0, 0.0 }
//#define DELTA_DIAGONAL_ROD_TRIM_TOWER { 0.0, 0.0, 0.0 }
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 b92a6c85f6..5dc8f44bb0 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
@@ -492,6 +492,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -788,19 +821,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -818,6 +851,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1265,17 +1299,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1322,6 +1353,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1336,7 +1385,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1360,7 +1417,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/delta/Geeetech/Rostock 301/Configuration.h b/Marlin/src/config/examples/delta/Geeetech/Rostock 301/Configuration.h
index 42d6e991c9..985002800c 100644
--- a/Marlin/src/config/examples/delta/Geeetech/Rostock 301/Configuration.h
+++ b/Marlin/src/config/examples/delta/Geeetech/Rostock 301/Configuration.h
@@ -212,7 +212,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -398,10 +398,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
@@ -563,29 +563,29 @@
// Set the radius for the calibration probe points - max DELTA_PRINTABLE_RADIUS for non-eccentric probes
#define DELTA_CALIBRATION_RADIUS 121.5 // (mm)
// Set the steprate for papertest probing
- #define PROBE_MANUALLY_STEP 0.05 // (mm)
+ #define PROBE_MANUALLY_STEP 0.05 // (mm)
#endif
// Print surface diameter/2 minus unreachable space (avoid collisions with vertical towers).
- #define DELTA_PRINTABLE_RADIUS 90.0 // (mm)
+ #define DELTA_PRINTABLE_RADIUS 90.0 // (mm)
// Center-to-center distance of the holes in the diagonal push rods.
- #define DELTA_DIAGONAL_ROD 196.0 // (mm)
+ #define DELTA_DIAGONAL_ROD 196.0 // (mm)
- // height from z=0 to home position
- #define DELTA_HEIGHT 228.00 // get this value from auto calibrate
+ // Distance between bed and nozzle Z home position
+ #define DELTA_HEIGHT 228.00 // (mm) Get this value from G33 auto calibrate
- #define DELTA_ENDSTOP_ADJ { 0.0, 0.0, 0.0 } // get these from auto calibrate
+ #define DELTA_ENDSTOP_ADJ { 0.0, 0.0, 0.0 } // Get these values from G33 auto calibrate
// Horizontal distance bridged by diagonal push rods when effector is centered.
- #define DELTA_RADIUS 92 //124.0 //mm Get this value from auto calibrate
+ #define DELTA_RADIUS 92 //124.0 // (mm) Get this value from G33 auto calibrate
// Trim adjustments for individual towers
// tower angle corrections for X and Y tower / rotate XYZ so Z tower angle = 0
// measured in degrees anticlockwise looking from above the printer
- #define DELTA_TOWER_ANGLE_TRIM { 0.0, 0.0, 0.0 } // get these values from auto calibrate
+ #define DELTA_TOWER_ANGLE_TRIM { 0.0, 0.0, 0.0 } // Get these values from G33 auto calibrate
- // delta radius and diaginal rod adjustments measured in mm
+ // Delta radius and diagonal rod adjustments (mm)
//#define DELTA_RADIUS_TRIM_TOWER { 0.0, 0.0, 0.0 }
//#define DELTA_DIAGONAL_ROD_TRIM_TOWER { 0.0, 0.0, 0.0 }
diff --git a/Marlin/src/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h b/Marlin/src/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h
index a97abf4091..492af30f92 100644
--- a/Marlin/src/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h
+++ b/Marlin/src/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h
@@ -492,6 +492,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -788,19 +821,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -818,6 +851,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1238,17 +1272,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1295,6 +1326,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1309,7 +1358,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1333,7 +1390,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/delta/Hatchbox_Alpha/Configuration.h b/Marlin/src/config/examples/delta/Hatchbox_Alpha/Configuration.h
index 996bb58b08..7a6ab0c866 100644
--- a/Marlin/src/config/examples/delta/Hatchbox_Alpha/Configuration.h
+++ b/Marlin/src/config/examples/delta/Hatchbox_Alpha/Configuration.h
@@ -206,7 +206,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -392,10 +392,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
@@ -567,29 +567,29 @@
// Set the radius for the calibration probe points - max DELTA_PRINTABLE_RADIUS for non-eccentric probes
#define DELTA_CALIBRATION_RADIUS 121.5 // (mm)
// Set the steprate for papertest probing
- #define PROBE_MANUALLY_STEP 0.05 // (mm)
+ #define PROBE_MANUALLY_STEP 0.05 // (mm)
#endif
// Print surface diameter/2 minus unreachable space (avoid collisions with vertical towers).
- #define DELTA_PRINTABLE_RADIUS 151.0 // (mm)
+ #define DELTA_PRINTABLE_RADIUS 151.0 // (mm)
// Center-to-center distance of the holes in the diagonal push rods.
- #define DELTA_DIAGONAL_ROD 356.5 // (mm)
+ #define DELTA_DIAGONAL_ROD 356.5 // (mm)
- // height from z=0 to home position
- #define DELTA_HEIGHT 352.00 // get this value from auto calibrate
+ // Distance between bed and nozzle Z home position
+ #define DELTA_HEIGHT 352.00 // (mm) Get this value from G33 auto calibrate
- #define DELTA_ENDSTOP_ADJ { 0.0, 0.0, 0.0 } // get these from auto calibrate
+ #define DELTA_ENDSTOP_ADJ { 0.0, 0.0, 0.0 } // Get these values from G33 auto calibrate
// Horizontal distance bridged by diagonal push rods when effector is centered.
- #define DELTA_RADIUS 176.5 //mm Get this value from auto calibrate
+ #define DELTA_RADIUS 176.5 // (mm) Get this value from G33 auto calibrate
// Trim adjustments for individual towers
// tower angle corrections for X and Y tower / rotate XYZ so Z tower angle = 0
// measured in degrees anticlockwise looking from above the printer
- #define DELTA_TOWER_ANGLE_TRIM { 0.0, 0.0, 0.0 } // get these values from auto calibrate
+ #define DELTA_TOWER_ANGLE_TRIM { 0.0, 0.0, 0.0 } // Get these values from G33 auto calibrate
- // delta radius and diaginal rod adjustments measured in mm
+ // Delta radius and diagonal rod adjustments (mm)
//#define DELTA_RADIUS_TRIM_TOWER { 0.0, 0.0, 0.0 }
//#define DELTA_DIAGONAL_ROD_TRIM_TOWER { 0.0, 0.0, 0.0 }
diff --git a/Marlin/src/config/examples/delta/MKS/SBASE/Configuration.h b/Marlin/src/config/examples/delta/MKS/SBASE/Configuration.h
index c66e9f744c..8ef8fcf2be 100644
--- a/Marlin/src/config/examples/delta/MKS/SBASE/Configuration.h
+++ b/Marlin/src/config/examples/delta/MKS/SBASE/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
@@ -552,29 +552,29 @@
// Set the radius for the calibration probe points - max DELTA_PRINTABLE_RADIUS for non-eccentric probes
#define DELTA_CALIBRATION_RADIUS 121.5 // (mm)
// Set the steprate for papertest probing
- #define PROBE_MANUALLY_STEP 0.05 // (mm)
+ #define PROBE_MANUALLY_STEP 0.05 // (mm)
#endif
// Print surface diameter/2 minus unreachable space (avoid collisions with vertical towers).
- #define DELTA_PRINTABLE_RADIUS 140.0 // (mm)
+ #define DELTA_PRINTABLE_RADIUS 140.0 // (mm)
// Center-to-center distance of the holes in the diagonal push rods.
- #define DELTA_DIAGONAL_ROD 250.0 // (mm)
+ #define DELTA_DIAGONAL_ROD 250.0 // (mm)
- // height from z=0 to home position
- #define DELTA_HEIGHT 250.00 // get this value from auto calibrate
+ // Distance between bed and nozzle Z home position
+ #define DELTA_HEIGHT 250.00 // (mm) Get this value from G33 auto calibrate
- #define DELTA_ENDSTOP_ADJ { 0.0, 0.0, 0.0 } // get these from auto calibrate
+ #define DELTA_ENDSTOP_ADJ { 0.0, 0.0, 0.0 } // Get these values from G33 auto calibrate
// Horizontal distance bridged by diagonal push rods when effector is centered.
- #define DELTA_RADIUS 124.0 //mm Get this value from auto calibrate
+ #define DELTA_RADIUS 124.0 // (mm) Get this value from G33 auto calibrate
// Trim adjustments for individual towers
// tower angle corrections for X and Y tower / rotate XYZ so Z tower angle = 0
// measured in degrees anticlockwise looking from above the printer
- #define DELTA_TOWER_ANGLE_TRIM { 0.0, 0.0, 0.0 } // get these values from auto calibrate
+ #define DELTA_TOWER_ANGLE_TRIM { 0.0, 0.0, 0.0 } // Get these values from G33 auto calibrate
- // delta radius and diaginal rod adjustments measured in mm
+ // Delta radius and diagonal rod adjustments (mm)
//#define DELTA_RADIUS_TRIM_TOWER { 0.0, 0.0, 0.0 }
//#define DELTA_DIAGONAL_ROD_TRIM_TOWER { 0.0, 0.0, 0.0 }
diff --git a/Marlin/src/config/examples/delta/MKS/SBASE/Configuration_adv.h b/Marlin/src/config/examples/delta/MKS/SBASE/Configuration_adv.h
index 2279bb433c..8bdd58de4f 100644
--- a/Marlin/src/config/examples/delta/MKS/SBASE/Configuration_adv.h
+++ b/Marlin/src/config/examples/delta/MKS/SBASE/Configuration_adv.h
@@ -492,6 +492,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -788,19 +821,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -818,6 +851,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1265,17 +1299,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1322,6 +1353,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1336,7 +1385,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1360,7 +1417,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/delta/Tevo Little Monster/Configuration.h b/Marlin/src/config/examples/delta/Tevo Little Monster/Configuration.h
index c65ededaa5..f63d967cbf 100644
--- a/Marlin/src/config/examples/delta/Tevo Little Monster/Configuration.h
+++ b/Marlin/src/config/examples/delta/Tevo Little Monster/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- #define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ #define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
@@ -554,31 +554,31 @@
#if ENABLED(DELTA_AUTO_CALIBRATION) || ENABLED(DELTA_CALIBRATION_MENU)
// Set the radius for the calibration probe points - max DELTA_PRINTABLE_RADIUS for non-eccentric probes
- #define DELTA_CALIBRATION_RADIUS 140 // (mm)
+ #define DELTA_CALIBRATION_RADIUS 140 // (mm)
// Set the steprate for papertest probing
- #define PROBE_MANUALLY_STEP 0.05 // (mm)
+ #define PROBE_MANUALLY_STEP 0.05 // (mm)
#endif
// Print surface diameter/2 minus unreachable space (avoid collisions with vertical towers).
- #define DELTA_PRINTABLE_RADIUS 165.0 // (mm)
+ #define DELTA_PRINTABLE_RADIUS 165.0 // (mm)
// Center-to-center distance of the holes in the diagonal push rods.
- #define DELTA_DIAGONAL_ROD 397.19 // (mm)
+ #define DELTA_DIAGONAL_ROD 397.19 // (mm)
- // height from z=0 to home position
- #define DELTA_HEIGHT 522.27 // get this value from auto calibrate
+ // Distance between bed and nozzle Z home position
+ #define DELTA_HEIGHT 522.27 // (mm) Get this value from G33 auto calibrate
- #define DELTA_ENDSTOP_ADJ { 0.0, -0.12, -0.78 } // get these from auto calibrate
+ #define DELTA_ENDSTOP_ADJ { 0.0, -0.12, -0.78 } // Get these values from G33 auto calibrate
// Horizontal distance bridged by diagonal push rods when effector is centered.
- #define DELTA_RADIUS 157.39 //mm Get this value from auto calibrate
+ #define DELTA_RADIUS 157.39 // (mm) Get this value from G33 auto calibrate
// Trim adjustments for individual towers
// tower angle corrections for X and Y tower / rotate XYZ so Z tower angle = 0
// measured in degrees anticlockwise looking from above the printer
- #define DELTA_TOWER_ANGLE_TRIM { -0.18, 0.18, 0.0 } // get these values from auto calibrate
+ #define DELTA_TOWER_ANGLE_TRIM { -0.18, 0.18, 0.0 } // Get these values from G33 auto calibrate
- // delta radius and diaginal rod adjustments measured in mm
+ // Delta radius and diagonal rod adjustments (mm)
//#define DELTA_RADIUS_TRIM_TOWER { 0.0, 0.0, 0.0 }
//#define DELTA_DIAGONAL_ROD_TRIM_TOWER { 0.0, 0.0, 0.0 }
diff --git a/Marlin/src/config/examples/delta/Tevo Little Monster/Configuration_adv.h b/Marlin/src/config/examples/delta/Tevo Little Monster/Configuration_adv.h
index dfe94b19cb..f0282d0150 100644
--- a/Marlin/src/config/examples/delta/Tevo Little Monster/Configuration_adv.h
+++ b/Marlin/src/config/examples/delta/Tevo Little Monster/Configuration_adv.h
@@ -492,6 +492,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -788,19 +821,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -818,6 +851,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1265,17 +1299,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1322,6 +1353,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1336,7 +1385,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1360,7 +1417,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/delta/generic/Configuration.h b/Marlin/src/config/examples/delta/generic/Configuration.h
index 29bb6f54f3..abc5872b39 100644
--- a/Marlin/src/config/examples/delta/generic/Configuration.h
+++ b/Marlin/src/config/examples/delta/generic/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
@@ -552,29 +552,29 @@
// Set the radius for the calibration probe points - max DELTA_PRINTABLE_RADIUS for non-eccentric probes
#define DELTA_CALIBRATION_RADIUS 121.5 // (mm)
// Set the steprate for papertest probing
- #define PROBE_MANUALLY_STEP 0.05 // (mm)
+ #define PROBE_MANUALLY_STEP 0.05 // (mm)
#endif
// Print surface diameter/2 minus unreachable space (avoid collisions with vertical towers).
- #define DELTA_PRINTABLE_RADIUS 140.0 // (mm)
+ #define DELTA_PRINTABLE_RADIUS 140.0 // (mm)
// Center-to-center distance of the holes in the diagonal push rods.
- #define DELTA_DIAGONAL_ROD 250.0 // (mm)
+ #define DELTA_DIAGONAL_ROD 250.0 // (mm)
- // height from z=0 to home position
- #define DELTA_HEIGHT 250.00 // get this value from auto calibrate
+ // Distance between bed and nozzle Z home position
+ #define DELTA_HEIGHT 250.00 // (mm) Get this value from G33 auto calibrate
- #define DELTA_ENDSTOP_ADJ { 0.0, 0.0, 0.0 } // get these from auto calibrate
+ #define DELTA_ENDSTOP_ADJ { 0.0, 0.0, 0.0 } // Get these values from G33 auto calibrate
// Horizontal distance bridged by diagonal push rods when effector is centered.
- #define DELTA_RADIUS 124.0 //mm Get this value from auto calibrate
+ #define DELTA_RADIUS 124.0 // (mm) Get this value from G33 auto calibrate
// Trim adjustments for individual towers
// tower angle corrections for X and Y tower / rotate XYZ so Z tower angle = 0
// measured in degrees anticlockwise looking from above the printer
- #define DELTA_TOWER_ANGLE_TRIM { 0.0, 0.0, 0.0 } // get these values from auto calibrate
+ #define DELTA_TOWER_ANGLE_TRIM { 0.0, 0.0, 0.0 } // Get these values from G33 auto calibrate
- // delta radius and diaginal rod adjustments measured in mm
+ // Delta radius and diagonal rod adjustments (mm)
//#define DELTA_RADIUS_TRIM_TOWER { 0.0, 0.0, 0.0 }
//#define DELTA_DIAGONAL_ROD_TRIM_TOWER { 0.0, 0.0, 0.0 }
diff --git a/Marlin/src/config/examples/delta/generic/Configuration_adv.h b/Marlin/src/config/examples/delta/generic/Configuration_adv.h
index b92a6c85f6..5dc8f44bb0 100644
--- a/Marlin/src/config/examples/delta/generic/Configuration_adv.h
+++ b/Marlin/src/config/examples/delta/generic/Configuration_adv.h
@@ -492,6 +492,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -788,19 +821,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -818,6 +851,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1265,17 +1299,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1322,6 +1353,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1336,7 +1385,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1360,7 +1417,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/delta/kossel_mini/Configuration.h b/Marlin/src/config/examples/delta/kossel_mini/Configuration.h
index 8185306dc5..1b54c265eb 100644
--- a/Marlin/src/config/examples/delta/kossel_mini/Configuration.h
+++ b/Marlin/src/config/examples/delta/kossel_mini/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
@@ -552,29 +552,29 @@
// Set the radius for the calibration probe points - max DELTA_PRINTABLE_RADIUS for non-eccentric probes
#define DELTA_CALIBRATION_RADIUS 78.0 // (mm)
// Set the steprate for papertest probing
- #define PROBE_MANUALLY_STEP 0.05 // (mm)
+ #define PROBE_MANUALLY_STEP 0.05 // (mm)
#endif
// Print surface diameter/2 minus unreachable space (avoid collisions with vertical towers).
- #define DELTA_PRINTABLE_RADIUS 90.0 // (mm)
+ #define DELTA_PRINTABLE_RADIUS 90.0 // (mm)
// Center-to-center distance of the holes in the diagonal push rods.
- #define DELTA_DIAGONAL_ROD 215.0 // (mm)
+ #define DELTA_DIAGONAL_ROD 215.0 // (mm)
- // height from z=0 to home position
- #define DELTA_HEIGHT 250.00 // get this value from auto calibrate
+ // Distance between bed and nozzle Z home position
+ #define DELTA_HEIGHT 250.00 // (mm) Get this value from G33 auto calibrate
- #define DELTA_ENDSTOP_ADJ { 0.0, 0.0, 0.0 } // get these from auto calibrate
+ #define DELTA_ENDSTOP_ADJ { 0.0, 0.0, 0.0 } // Get these values from G33 auto calibrate
// Horizontal distance bridged by diagonal push rods when effector is centered.
- #define DELTA_RADIUS 105.2 //mm Get this value from auto calibrate
+ #define DELTA_RADIUS 105.2 // (mm) Get this value from G33 auto calibrate
// Trim adjustments for individual towers
// tower angle corrections for X and Y tower / rotate XYZ so Z tower angle = 0
// measured in degrees anticlockwise looking from above the printer
- #define DELTA_TOWER_ANGLE_TRIM { 0.0, 0.0, 0.0 } // get these values from auto calibrate
+ #define DELTA_TOWER_ANGLE_TRIM { 0.0, 0.0, 0.0 } // Get these values from G33 auto calibrate
- // delta radius and diaginal rod adjustments measured in mm
+ // Delta radius and diagonal rod adjustments (mm)
//#define DELTA_RADIUS_TRIM_TOWER { 0.0, 0.0, 0.0 }
//#define DELTA_DIAGONAL_ROD_TRIM_TOWER { 0.0, 0.0, 0.0 }
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 b92a6c85f6..5dc8f44bb0 100644
--- a/Marlin/src/config/examples/delta/kossel_mini/Configuration_adv.h
+++ b/Marlin/src/config/examples/delta/kossel_mini/Configuration_adv.h
@@ -492,6 +492,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -788,19 +821,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -818,6 +851,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1265,17 +1299,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1322,6 +1353,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1336,7 +1385,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1360,7 +1417,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/delta/kossel_pro/Configuration.h b/Marlin/src/config/examples/delta/kossel_pro/Configuration.h
index 33f43cbeca..808570ba86 100644
--- a/Marlin/src/config/examples/delta/kossel_pro/Configuration.h
+++ b/Marlin/src/config/examples/delta/kossel_pro/Configuration.h
@@ -205,7 +205,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -391,10 +391,10 @@
#define PID_MAX 125 // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 50 // If the temperature difference between the target temperature and the actual temperature
@@ -538,29 +538,29 @@
// Set the radius for the calibration probe points - max DELTA_PRINTABLE_RADIUS for non-eccentric probes
#define DELTA_CALIBRATION_RADIUS 110.0 // (mm)
// Set the steprate for papertest probing
- #define PROBE_MANUALLY_STEP 0.05 // (mm)
+ #define PROBE_MANUALLY_STEP 0.05 // (mm)
#endif
// Print surface diameter/2 minus unreachable space (avoid collisions with vertical towers).
- #define DELTA_PRINTABLE_RADIUS 127.0 // (mm)
+ #define DELTA_PRINTABLE_RADIUS 127.0 // (mm)
// Center-to-center distance of the holes in the diagonal push rods.
- #define DELTA_DIAGONAL_ROD 301.0 // (mm)
+ #define DELTA_DIAGONAL_ROD 301.0 // (mm)
- // height from z=0 to home position
- #define DELTA_HEIGHT 277.00 // get this value from auto calibrate
+ // Distance between bed and nozzle Z home position
+ #define DELTA_HEIGHT 277.00 // (mm) Get this value from G33 auto calibrate
- #define DELTA_ENDSTOP_ADJ { 0.0, 0.0, 0.0 } // get these from auto calibrate
+ #define DELTA_ENDSTOP_ADJ { 0.0, 0.0, 0.0 } // Get these values from G33 auto calibrate
// Horizontal distance bridged by diagonal push rods when effector is centered.
- #define DELTA_RADIUS 152.357 //mm Get this value from auto calibrate
+ #define DELTA_RADIUS 152.357 // (mm) Get this value from G33 auto calibrate
// Trim adjustments for individual towers
// tower angle corrections for X and Y tower / rotate XYZ so Z tower angle = 0
// measured in degrees anticlockwise looking from above the printer
- #define DELTA_TOWER_ANGLE_TRIM { 0.0, 0.0, 0.0 } // get these values from auto calibrate
+ #define DELTA_TOWER_ANGLE_TRIM { 0.0, 0.0, 0.0 } // Get these values from G33 auto calibrate
- // delta radius and diaginal rod adjustments measured in mm
+ // Delta radius and diagonal rod adjustments (mm)
//#define DELTA_RADIUS_TRIM_TOWER { 0.0, 0.0, 0.0 }
//#define DELTA_DIAGONAL_ROD_TRIM_TOWER { 0.0, 0.0, 0.0 }
diff --git a/Marlin/src/config/examples/delta/kossel_xl/Configuration.h b/Marlin/src/config/examples/delta/kossel_xl/Configuration.h
index f5aa6b5935..22eb1ac7f8 100644
--- a/Marlin/src/config/examples/delta/kossel_xl/Configuration.h
+++ b/Marlin/src/config/examples/delta/kossel_xl/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
@@ -556,29 +556,29 @@
// Set the radius for the calibration probe points - max DELTA_PRINTABLE_RADIUS for non-eccentric probes
#define DELTA_CALIBRATION_RADIUS 121.5 // (mm)
// Set the steprate for papertest probing
- #define PROBE_MANUALLY_STEP 0.05 // (mm)
+ #define PROBE_MANUALLY_STEP 0.05 // (mm)
#endif
// Print surface diameter/2 minus unreachable space (avoid collisions with vertical towers).
- #define DELTA_PRINTABLE_RADIUS 140.0 // (mm)
+ #define DELTA_PRINTABLE_RADIUS 140.0 // (mm)
// Center-to-center distance of the holes in the diagonal push rods.
- #define DELTA_DIAGONAL_ROD 319.5 // (mm)
+ #define DELTA_DIAGONAL_ROD 319.5 // (mm)
- // height from z=0 to home position
- #define DELTA_HEIGHT 380.00 // get this value from auto calibrate
+ // Distance between bed and nozzle Z home position
+ #define DELTA_HEIGHT 380.00 // (mm) Get this value from G33 auto calibrate
- #define DELTA_ENDSTOP_ADJ { 0.0, 0.0, 0.0 } // get these from auto calibrate
+ #define DELTA_ENDSTOP_ADJ { 0.0, 0.0, 0.0 } // Get these values from G33 auto calibrate
// Horizontal distance bridged by diagonal push rods when effector is centered.
- #define DELTA_RADIUS 174.1 //mm Get this value from auto calibrate
+ #define DELTA_RADIUS 174.1 // (mm) Get this value from G33 auto calibrate
// Trim adjustments for individual towers
// tower angle corrections for X and Y tower / rotate XYZ so Z tower angle = 0
// measured in degrees anticlockwise looking from above the printer
- #define DELTA_TOWER_ANGLE_TRIM { 0.0, 0.0, 0.0 } // get these values from auto calibrate
+ #define DELTA_TOWER_ANGLE_TRIM { 0.0, 0.0, 0.0 } // Get these values from G33 auto calibrate
- // delta radius and diaginal rod adjustments measured in mm
+ // Delta radius and diagonal rod adjustments (mm)
//#define DELTA_RADIUS_TRIM_TOWER { 0.0, 0.0, 0.0 }
//#define DELTA_DIAGONAL_ROD_TRIM_TOWER { 0.0, 0.0, 0.0 }
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 4f5367b72f..aa0628e470 100644
--- a/Marlin/src/config/examples/delta/kossel_xl/Configuration_adv.h
+++ b/Marlin/src/config/examples/delta/kossel_xl/Configuration_adv.h
@@ -492,6 +492,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -788,19 +821,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -818,6 +851,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1265,17 +1299,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1322,6 +1353,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1336,7 +1385,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1360,7 +1417,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/gCreate/gMax1.5+/Configuration.h b/Marlin/src/config/examples/gCreate/gMax1.5+/Configuration.h
index a4d41f0191..d92be020a6 100644
--- a/Marlin/src/config/examples/gCreate/gMax1.5+/Configuration.h
+++ b/Marlin/src/config/examples/gCreate/gMax1.5+/Configuration.h
@@ -206,7 +206,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -395,10 +395,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
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 7d67bb14b1..c071fad066 100644
--- a/Marlin/src/config/examples/gCreate/gMax1.5+/Configuration_adv.h
+++ b/Marlin/src/config/examples/gCreate/gMax1.5+/Configuration_adv.h
@@ -490,6 +490,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -786,19 +819,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -816,6 +849,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1263,17 +1297,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1320,6 +1351,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1334,7 +1383,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1358,7 +1415,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/makibox/Configuration.h b/Marlin/src/config/examples/makibox/Configuration.h
index 98d83e367d..4c16affea2 100644
--- a/Marlin/src/config/examples/makibox/Configuration.h
+++ b/Marlin/src/config/examples/makibox/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/makibox/Configuration_adv.h b/Marlin/src/config/examples/makibox/Configuration_adv.h
index 4ad3635fc2..6f84aebd47 100644
--- a/Marlin/src/config/examples/makibox/Configuration_adv.h
+++ b/Marlin/src/config/examples/makibox/Configuration_adv.h
@@ -490,6 +490,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -786,19 +819,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -816,6 +849,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1263,17 +1297,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1320,6 +1351,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1334,7 +1383,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1358,7 +1415,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/stm32f103ret6/Configuration.h b/Marlin/src/config/examples/stm32f103ret6/Configuration.h
index 16b2ffc4e4..5a564e5fa7 100644
--- a/Marlin/src/config/examples/stm32f103ret6/Configuration.h
+++ b/Marlin/src/config/examples/stm32f103ret6/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -388,10 +388,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- #define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ #define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/tvrrug/Round2/Configuration.h b/Marlin/src/config/examples/tvrrug/Round2/Configuration.h
index 47b16f0a30..4a0c665bc2 100644
--- a/Marlin/src/config/examples/tvrrug/Round2/Configuration.h
+++ b/Marlin/src/config/examples/tvrrug/Round2/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/tvrrug/Round2/Configuration_adv.h b/Marlin/src/config/examples/tvrrug/Round2/Configuration_adv.h
index 338be6d880..2774e981d9 100644
--- a/Marlin/src/config/examples/tvrrug/Round2/Configuration_adv.h
+++ b/Marlin/src/config/examples/tvrrug/Round2/Configuration_adv.h
@@ -490,6 +490,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -786,19 +819,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -816,6 +849,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1263,17 +1297,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1320,6 +1351,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1334,7 +1383,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1358,7 +1415,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/config/examples/wt150/Configuration.h b/Marlin/src/config/examples/wt150/Configuration.h
index 0f7296fba3..2303bb25ec 100644
--- a/Marlin/src/config/examples/wt150/Configuration.h
+++ b/Marlin/src/config/examples/wt150/Configuration.h
@@ -201,7 +201,7 @@
#define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE LOW // LOW or HIGH pin signal energizes the coil
#define PARKING_EXTRUDER_SOLENOIDS_DELAY 250 // Delay (ms) for magnetic field. No delay if 0 or not defined.
#define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders
- #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // mm to move beyond the parking point to grab the extruder
+ #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder
//#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381
#endif
@@ -387,10 +387,10 @@
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
- //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
- //#define PID_DEBUG // Sends debug data to the serial port.
- //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
- //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
+ //#define PID_AUTOTUNE_MENU // Add PID Autotune to the LCD "Temperature" menu to run M303 and apply the result.
+ //#define PID_DEBUG // Sends debug data to the serial port.
+ //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
+ //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
//#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with gcode: M301 E[extruder number, 0-2]
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
diff --git a/Marlin/src/config/examples/wt150/Configuration_adv.h b/Marlin/src/config/examples/wt150/Configuration_adv.h
index eb241a95a8..e523848eaf 100644
--- a/Marlin/src/config/examples/wt150/Configuration_adv.h
+++ b/Marlin/src/config/examples/wt150/Configuration_adv.h
@@ -490,6 +490,39 @@
#define JUNCTION_DEVIATION_MM 0.02 // (mm) Distance from real junction edge
#endif
+//
+// Backlash Compensation
+// Adds extra movement to axes on direction-changes to account for backlash.
+//
+//#define BACKLASH_COMPENSATION
+#if ENABLED(BACKLASH_COMPENSATION)
+ // Define values for backlash distance and correction.
+ // If BACKLASH_GCODE is enabled these values are the defaults.
+ #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
+ #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
+
+ // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments
+ // to reduce print artifacts. (Enabling this is costly in memory and computation!)
+ //#define BACKLASH_SMOOTHING_MM 3 // (mm)
+
+ // Add runtime configuration and tuning of backlash values (M425)
+ //#define BACKLASH_GCODE
+
+ #if ENABLED(BACKLASH_GCODE)
+ // Measure the Z backlash when probing (G29) and set with "M425 Z"
+ #define MEASURE_BACKLASH_WHEN_PROBING
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
+ // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION
+ // increments while checking for the contact to be broken.
+ #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm)
+ #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm)
+ #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m)
+ #endif
+ #endif
+#endif
+
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
* below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
@@ -787,19 +820,19 @@
// Swap the CW/CCW indicators in the graphics overlay
//#define OVERLAY_GFX_REVERSE
+ /**
+ * ST7920-based LCDs can emulate a 16 x 4 character display using
+ * the ST7920 character-generator for very fast screen updates.
+ * Enable LIGHTWEIGHT_UI to use this special display mode.
+ *
+ * Since LIGHTWEIGHT_UI has limited space, the position and status
+ * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
+ * length of time to display the status message before clearing.
+ *
+ * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
+ * This will prevent position updates from being displayed.
+ */
#if ENABLED(U8GLIB_ST7920)
- /**
- * ST7920-based LCDs can emulate a 16 x 4 character display using
- * the ST7920 character-generator for very fast screen updates.
- * Enable LIGHTWEIGHT_UI to use this special display mode.
- *
- * Since LIGHTWEIGHT_UI has limited space, the position and status
- * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the
- * length of time to display the status message before clearing.
- *
- * Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
- * This will prevent position updates from being displayed.
- */
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
#define STATUS_EXPIRE_SECONDS 20
@@ -817,6 +850,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
+ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap
//#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
//#define STATUS_HEAT_PERCENT // Show heating in a progress bar
@@ -1264,17 +1298,14 @@
* in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
* You may also use software SPI if you wish to use general purpose IO pins.
*
- * The TMC2130Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2130Stepper
- *
* To use TMC2208 stepper UART-configurable stepper drivers
* connect #_SERIAL_TX_PIN to the driver side PDN_UART pin with a 1K resistor.
* To use the reading capabilities, also connect #_SERIAL_RX_PIN
* to PDN_UART without a resistor.
* The drivers can also be used with hardware serial.
*
- * The TMC2208Stepper library is required for this stepper driver.
- * https://github.com/teemuatlut/TMC2208Stepper
+ * TMCStepper library is required for connected TMC stepper drivers.
+ * https://github.com/teemuatlut/TMCStepper
*/
#if HAS_TRINAMIC
@@ -1321,6 +1352,24 @@
#define E5_CURRENT 800
#define E5_MICROSTEPS 16
+ /**
+ * Override default SPI pins for TMC2130 and TMC2660 drivers here.
+ * The default pins can be found in your board's pins file.
+ */
+ //#define X_CS_PIN -1
+ //#define Y_CS_PIN -1
+ //#define Z_CS_PIN -1
+ //#define X2_CS_PIN -1
+ //#define Y2_CS_PIN -1
+ //#define Z2_CS_PIN -1
+ //#define Z3_CS_PIN -1
+ //#define E0_CS_PIN -1
+ //#define E1_CS_PIN -1
+ //#define E2_CS_PIN -1
+ //#define E3_CS_PIN -1
+ //#define E4_CS_PIN -1
+ //#define E5_CS_PIN -1
+
/**
* Use software SPI for TMC2130.
* The default SW SPI pins are defined the respective pins files,
@@ -1335,7 +1384,15 @@
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
- #define STEALTHCHOP
+ #define STEALTHCHOP_XY
+ #define STEALTHCHOP_Z
+ #define STEALTHCHOP_E
+
+ /**
+ * Adjust spreadCycle chopper parameters with the help of an example included in the library.
+ * The parameters are off time, hysteresis end and hysteresis start.
+ */
+ #define CHOPPER_TIMING { 4, -2, 1 }
/**
* Monitor Trinamic TMC2130 and TMC2208 drivers for error conditions,
@@ -1359,7 +1416,7 @@
/**
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
- * STEALTHCHOP needs to be enabled.
+ * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
* M913 X/Y/Z/E to live tune the setting
*/
//#define HYBRID_THRESHOLD
diff --git a/Marlin/src/feature/tmc_util.cpp b/Marlin/src/feature/tmc_util.cpp
index c9c612e820..681b93b6af 100644
--- a/Marlin/src/feature/tmc_util.cpp
+++ b/Marlin/src/feature/tmc_util.cpp
@@ -34,7 +34,10 @@
#if ENABLED(TMC_DEBUG)
#include "../module/planner.h"
- static bool report_tmc_status; // = false;
+ #include "../libs/hex_print_routines.h"
+ #if ENABLED(MONITOR_DRIVER_STATUS)
+ static bool report_tmc_status; // = false;
+ #endif
#endif
/**
@@ -48,38 +51,40 @@
struct TMC_driver_data {
uint32_t drv_status;
- bool is_otpw;
- bool is_ot;
- bool is_error;
+ bool is_otpw,
+ is_ot,
+ is_s2ga,
+ is_s2gb,
+ is_error;
};
#if HAS_DRIVER(TMC2130)
#if ENABLED(TMC_DEBUG)
static uint32_t get_pwm_scale(TMC2130Stepper &st) { return st.PWM_SCALE(); }
- static uint8_t get_status_response(TMC2130Stepper &st) { return st.status_response & 0xF; }
+ static uint8_t get_status_response(TMC2130Stepper &st, uint32_t) { return st.status_response & 0xF; }
#endif
static TMC_driver_data get_driver_data(TMC2130Stepper &st) {
constexpr uint32_t OTPW_bm = 0x4000000UL;
constexpr uint8_t OTPW_bp = 26;
constexpr uint32_t OT_bm = 0x2000000UL;
constexpr uint8_t OT_bp = 25;
- constexpr uint8_t DRIVER_ERROR_bm = 0x2UL;
- constexpr uint8_t DRIVER_ERROR_bp = 1;
+ constexpr uint8_t S2GA_bp = 27;
+ constexpr uint8_t S2GB_bp = 28;
TMC_driver_data data;
data.drv_status = st.DRV_STATUS();
data.is_otpw = (data.drv_status & OTPW_bm) >> OTPW_bp;
data.is_ot = (data.drv_status & OT_bm) >> OT_bp;
- data.is_error = (st.status_response & DRIVER_ERROR_bm) >> DRIVER_ERROR_bp;
+ data.is_s2ga = (data.drv_status >> S2GA_bp) & 0b1;
+ data.is_s2gb = (data.drv_status >> S2GB_bp) & 0b1;
return data;
}
#endif
#if HAS_DRIVER(TMC2208)
#if ENABLED(TMC_DEBUG)
static uint32_t get_pwm_scale(TMC2208Stepper &st) { return st.pwm_scale_sum(); }
- static uint8_t get_status_response(TMC2208Stepper &st) {
- uint32_t drv_status = st.DRV_STATUS();
+ static uint8_t get_status_response(TMC2208Stepper &st, uint32_t drv_status) {
uint8_t gstat = st.GSTAT();
uint8_t response = 0;
- response |= (drv_status >> (31-3)) & 0b1000;
+ response |= (drv_status >> (31 - 3)) & 0b1000;
response |= gstat & 0b11;
return response;
}
@@ -89,75 +94,112 @@
constexpr uint8_t OTPW_bp = 0;
constexpr uint32_t OT_bm = 0b10ul;
constexpr uint8_t OT_bp = 1;
+ constexpr uint8_t S2GA_bp = 2;
+ constexpr uint8_t S2GB_bp = 3;
TMC_driver_data data;
data.drv_status = st.DRV_STATUS();
data.is_otpw = (data.drv_status & OTPW_bm) >> OTPW_bp;
data.is_ot = (data.drv_status & OT_bm) >> OT_bp;
- data.is_error = st.drv_err();
+ data.is_s2ga = (data.drv_status >> S2GA_bp) & 0b1;
+ data.is_s2gb = (data.drv_status >> S2GB_bp) & 0b1;
return data;
}
#endif
#if HAS_DRIVER(TMC2660)
#if ENABLED(TMC_DEBUG)
static uint32_t get_pwm_scale(TMC2660Stepper) { return 0; }
- static uint8_t get_status_response(TMC2660Stepper) { return 0; }
+ static uint8_t get_status_response(TMC2660Stepper, uint32_t drv_status) {
+ return drv_status & 0xFF;
+ }
#endif
static TMC_driver_data get_driver_data(TMC2660Stepper &st) {
constexpr uint32_t OTPW_bm = 0x4UL;
constexpr uint8_t OTPW_bp = 2;
constexpr uint32_t OT_bm = 0x2UL;
constexpr uint8_t OT_bp = 1;
- constexpr uint8_t DRIVER_ERROR_bm = 0x6;
TMC_driver_data data;
data.drv_status = st.DRVSTATUS();
data.is_otpw = (data.drv_status & OTPW_bm) >> OTPW_bp;
data.is_ot = (data.drv_status & OT_bm) >> OT_bp;
- data.is_error = data.drv_status & DRIVER_ERROR_bm;
return data;
}
#endif
+ #if ENABLED(STOP_ON_ERROR)
+ void report_driver_error(const TMC_driver_data &data) {
+ SERIAL_ECHOPGM(" driver error detected: 0x");
+ SERIAL_PRINTLN(data.drv_status, HEX);
+ if (data.is_ot) SERIAL_ECHOLNPGM("overtemperature");
+ if (data.is_s2ga) SERIAL_ECHOLNPGM("short to ground (coil A)");
+ if (data.is_s2gb) SERIAL_ECHOLNPGM("short to ground (coil B)");
+ #if ENABLED(TMC_DEBUG)
+ tmc_report_all(true, true, true, true);
+ #endif
+ kill(PSTR("Driver error"));
+ }
+ #endif
+
+ template
+ void report_driver_otpw(TMC &st) {
+ char timestamp[14];
+ duration_t elapsed = print_job_timer.duration();
+ const bool has_days = (elapsed.value > 60*60*24L);
+ (void)elapsed.toDigital(timestamp, has_days);
+ SERIAL_EOL();
+ SERIAL_ECHO(timestamp);
+ SERIAL_ECHOPGM(": ");
+ st.printLabel();
+ SERIAL_ECHOPGM(" driver overtemperature warning! (");
+ SERIAL_ECHO(st.getMilliamps());
+ SERIAL_ECHOLNPGM("mA)");
+ }
+
+ template
+ void report_polled_driver_data(TMC &st, const TMC_driver_data &data) {
+ const uint32_t pwm_scale = get_pwm_scale(st);
+ st.printLabel();
+ SERIAL_ECHOPAIR(":", pwm_scale);
+ SERIAL_ECHOPGM(" |0b"); SERIAL_PRINT(get_status_response(st, data.drv_status), BIN);
+ SERIAL_ECHOPGM("| ");
+ if (st.error_count) SERIAL_CHAR('E');
+ else if (data.is_ot) SERIAL_CHAR('O');
+ else if (data.is_otpw) SERIAL_CHAR('W');
+ else if (st.otpw_count > 0) SERIAL_PRINT(st.otpw_count, DEC);
+ else if (st.flag_otpw) SERIAL_CHAR('F');
+ SERIAL_CHAR('\t');
+ }
+
template
void monitor_tmc_driver(TMC &st) {
TMC_driver_data data = get_driver_data(st);
+ if ((data.drv_status == 0xFFFFFFFF) || (data.drv_status == 0x0)) return;
+
+ if (data.is_ot /* | data.s2ga | data.s2gb*/) st.error_count++;
+ else if (st.error_count > 0) st.error_count--;
#if ENABLED(STOP_ON_ERROR)
- if (data.is_error) {
+ if (st.error_count >= 10) {
SERIAL_EOL();
st.printLabel();
- SERIAL_ECHOLNPGM(" driver error detected:");
- if (data.is_ot) SERIAL_ECHOLNPGM("overtemperature");
- if (st.s2ga()) SERIAL_ECHOLNPGM("short to ground (coil A)");
- if (st.s2gb()) SERIAL_ECHOLNPGM("short to ground (coil B)");
- #if ENABLED(TMC_DEBUG)
- tmc_report_all();
- #endif
- kill(PSTR("Driver error"));
+ report_driver_error(data);
}
#endif
// Report if a warning was triggered
if (data.is_otpw && st.otpw_count == 0) {
- char timestamp[14];
- duration_t elapsed = print_job_timer.duration();
- const bool has_days = (elapsed.value > 60*60*24L);
- (void)elapsed.toDigital(timestamp, has_days);
- SERIAL_EOL();
- SERIAL_ECHO(timestamp);
- SERIAL_ECHOPGM(": ");
- st.printLabel();
- SERIAL_ECHOPGM(" driver overtemperature warning! (");
- SERIAL_ECHO(st.getMilliamps());
- SERIAL_ECHOLNPGM("mA)");
+ report_driver_otpw(st);
}
#if CURRENT_STEP_DOWN > 0
// Decrease current if is_otpw is true and driver is enabled and there's been more than 4 warnings
- if (data.is_otpw && st.isEnabled() && st.otpw_count > 4) {
- st.rms_current(MAX(int16_t(st.getMilliamps() - (CURRENT_STEP_DOWN)), 0));
- #if ENABLED(REPORT_CURRENT_CHANGE)
- st.printLabel();
- SERIAL_ECHOLNPAIR(" current decreased to ", st.getMilliamps());
- #endif
+ if (data.is_otpw && st.otpw_count > 4) {
+ uint16_t I_rms = st.getMilliamps();
+ if (st.isEnabled() && I_rms > 100) {
+ st.rms_current(I_rms - (CURRENT_STEP_DOWN));
+ #if ENABLED(REPORT_CURRENT_CHANGE)
+ st.printLabel();
+ SERIAL_ECHOLNPAIR(" current decreased to ", st.getMilliamps());
+ #endif
+ }
}
#endif
@@ -169,17 +211,7 @@
#if ENABLED(TMC_DEBUG)
if (report_tmc_status) {
- const uint32_t pwm_scale = get_pwm_scale(st);
- st.printLabel();
- SERIAL_ECHOPAIR(":", pwm_scale);
- SERIAL_ECHOPGM(" |0b"); SERIAL_PRINT(get_status_response(st), BIN);
- SERIAL_ECHOPGM("| ");
- if (data.is_error) SERIAL_CHAR('E');
- else if (data.is_ot) SERIAL_CHAR('O');
- else if (data.is_otpw) SERIAL_CHAR('W');
- else if (st.otpw_count > 0) SERIAL_PRINT(st.otpw_count, DEC);
- else if (st.flag_otpw) SERIAL_CHAR('F');
- SERIAL_CHAR('\t');
+ report_polled_driver_data(st, data);
}
#endif
}
@@ -187,9 +219,10 @@
#define HAS_HW_COMMS(ST) AXIS_DRIVER_TYPE(ST, TMC2130) || AXIS_DRIVER_TYPE(ST, TMC2660) || (AXIS_DRIVER_TYPE(ST, TMC2208) && defined(ST##_HARDWARE_SERIAL))
void monitor_tmc_driver() {
- static millis_t next_cOT = 0;
- if (ELAPSED(millis(), next_cOT)) {
- next_cOT = millis() + 500;
+ static millis_t next_poll = 0;
+ const millis_t ms = millis();
+ if (ELAPSED(ms, next_poll)) {
+ next_poll = ms + 500;
#if HAS_HW_COMMS(X)
monitor_tmc_driver(stepperX);
#endif
@@ -296,16 +329,28 @@
TMC_S2VSB,
TMC_S2VSA
};
- static void drv_status_print_hex(const uint32_t drv_status) {
- for (int B = 24; B >= 8; B -= 8){
- SERIAL_PRINT((drv_status >> (B + 4)) & 0xF, HEX);
- SERIAL_PRINT((drv_status >> B) & 0xF, HEX);
- SERIAL_CHAR(':');
- }
- SERIAL_PRINT((drv_status >> 4) & 0xF, HEX);
- SERIAL_PRINT((drv_status) & 0xF, HEX);
- SERIAL_EOL();
- }
+ enum TMC_get_registers_enum : char {
+ TMC_AXIS_CODES,
+ TMC_GET_GCONF,
+ TMC_GET_IHOLD_IRUN,
+ TMC_GET_GSTAT,
+ TMC_GET_IOIN,
+ TMC_GET_TPOWERDOWN,
+ TMC_GET_TSTEP,
+ TMC_GET_TPWMTHRS,
+ TMC_GET_TCOOLTHRS,
+ TMC_GET_THIGH,
+ TMC_GET_CHOPCONF,
+ TMC_GET_COOLCONF,
+ TMC_GET_PWMCONF,
+ TMC_GET_PWM_SCALE,
+ TMC_GET_DRV_STATUS,
+ TMC_GET_DRVCONF,
+ TMC_GET_DRVCTRL,
+ TMC_GET_DRVSTATUS,
+ TMC_GET_SGCSCONF,
+ TMC_GET_SMARTEN
+ };
template
static void print_vsense(TMC &st) { serialprintPGM(st.vsense() ? PSTR("1=.18") : PSTR("0=.325")); }
@@ -379,7 +424,12 @@
break;
case TMC_VSENSE: print_vsense(st); break;
case TMC_MICROSTEPS: SERIAL_ECHO(st.microsteps()); break;
- case TMC_TSTEP: SERIAL_ECHO(st.TSTEP()); break;
+ case TMC_TSTEP: {
+ uint32_t tstep_value = st.TSTEP();
+ if (tstep_value == 0xFFFFF) SERIAL_ECHOPGM("max");
+ else SERIAL_ECHO(tstep_value);
+ }
+ break;
case TMC_TPWMTHRS: {
uint32_t tpwmthrs_val = st.TPWMTHRS();
SERIAL_ECHO(tpwmthrs_val);
@@ -445,125 +495,146 @@
case TMC_S2GA: if (st.s2ga()) SERIAL_CHAR('X'); break;
case TMC_DRV_OTPW: if (st.otpw()) SERIAL_CHAR('X'); break;
case TMC_OT: if (st.ot()) SERIAL_CHAR('X'); break;
- case TMC_DRV_STATUS_HEX:
+ case TMC_DRV_STATUS_HEX: {
+ const uint32_t drv_status = st.DRV_STATUS();
+ SERIAL_CHAR('\t');
st.printLabel();
- SERIAL_ECHOPGM("\t0x");
- drv_status_print_hex(st.DRV_STATUS());
+ SERIAL_CHAR('\t');
+ print_hex_long(drv_status, ':');
+ if (drv_status == 0xFFFFFFFF || drv_status == 0) SERIAL_ECHOPGM("\t Bad response!");
+ SERIAL_EOL();
break;
+ }
default: _tmc_parse_drv_status(st, i); break;
}
}
- static void tmc_debug_loop(const TMC_debug_enum i) {
- #if AXIS_IS_TMC(X)
- tmc_status(stepperX, i, planner.settings.axis_steps_per_mm[X_AXIS]);
- #endif
- #if AXIS_IS_TMC(X2)
- tmc_status(stepperX2, i, planner.settings.axis_steps_per_mm[X_AXIS]);
- #endif
+ static void tmc_debug_loop(const TMC_debug_enum i, const bool print_x, const bool print_y, const bool print_z, const bool print_e) {
+ if (print_x) {
+ #if AXIS_IS_TMC(X)
+ tmc_status(stepperX, i, planner.settings.axis_steps_per_mm[X_AXIS]);
+ #endif
+ #if AXIS_IS_TMC(X2)
+ tmc_status(stepperX2, i, planner.settings.axis_steps_per_mm[X_AXIS]);
+ #endif
+ }
- #if AXIS_IS_TMC(Y)
- tmc_status(stepperY, i, planner.settings.axis_steps_per_mm[Y_AXIS]);
- #endif
- #if AXIS_IS_TMC(Y2)
- tmc_status(stepperY2, i, planner.settings.axis_steps_per_mm[Y_AXIS]);
- #endif
+ if (print_y) {
+ #if AXIS_IS_TMC(Y)
+ tmc_status(stepperY, i, planner.settings.axis_steps_per_mm[Y_AXIS]);
+ #endif
+ #if AXIS_IS_TMC(Y2)
+ tmc_status(stepperY2, i, planner.settings.axis_steps_per_mm[Y_AXIS]);
+ #endif
+ }
- #if AXIS_IS_TMC(Z)
- tmc_status(stepperZ, i, planner.settings.axis_steps_per_mm[Z_AXIS]);
- #endif
- #if AXIS_IS_TMC(Z2)
- tmc_status(stepperZ2, i, planner.settings.axis_steps_per_mm[Z_AXIS]);
- #endif
- #if AXIS_IS_TMC(Z3)
- tmc_status(stepperZ3, i, planner.settings.axis_steps_per_mm[Z_AXIS]);
- #endif
+ if (print_z) {
+ #if AXIS_IS_TMC(Z)
+ tmc_status(stepperZ, i, planner.settings.axis_steps_per_mm[Z_AXIS]);
+ #endif
+ #if AXIS_IS_TMC(Z2)
+ tmc_status(stepperZ2, i, planner.settings.axis_steps_per_mm[Z_AXIS]);
+ #endif
+ #if AXIS_IS_TMC(Z3)
+ tmc_status(stepperZ3, i, planner.settings.axis_steps_per_mm[Z_AXIS]);
+ #endif
+ }
- #if AXIS_IS_TMC(E0)
- tmc_status(stepperE0, i, planner.settings.axis_steps_per_mm[E_AXIS]);
- #endif
- #if AXIS_IS_TMC(E1)
- tmc_status(stepperE1, i, planner.settings.axis_steps_per_mm[E_AXIS
- #if ENABLED(DISTINCT_E_FACTORS)
- + 1
- #endif
- ]);
- #endif
- #if AXIS_IS_TMC(E2)
- tmc_status(stepperE2, i, planner.settings.axis_steps_per_mm[E_AXIS
- #if ENABLED(DISTINCT_E_FACTORS)
- + 2
- #endif
- ]);
- #endif
- #if AXIS_IS_TMC(E3)
- tmc_status(stepperE3, i, planner.settings.axis_steps_per_mm[E_AXIS
- #if ENABLED(DISTINCT_E_FACTORS)
- + 3
- #endif
- ]);
- #endif
- #if AXIS_IS_TMC(E4)
- tmc_status(stepperE4, i, planner.settings.axis_steps_per_mm[E_AXIS
- #if ENABLED(DISTINCT_E_FACTORS)
- + 4
- #endif
- ]);
- #endif
- #if AXIS_IS_TMC(E5)
- tmc_status(stepperE5, i, planner.settings.axis_steps_per_mm[E_AXIS
- #if ENABLED(DISTINCT_E_FACTORS)
- + 5
- #endif
- ]);
- #endif
+ if (print_e) {
+ #if AXIS_IS_TMC(E0)
+ tmc_status(stepperE0, i, planner.settings.axis_steps_per_mm[E_AXIS]);
+ #endif
+ #if AXIS_IS_TMC(E1)
+ tmc_status(stepperE1, i, planner.settings.axis_steps_per_mm[E_AXIS
+ #if ENABLED(DISTINCT_E_FACTORS)
+ + 1
+ #endif
+ ]);
+ #endif
+ #if AXIS_IS_TMC(E2)
+ tmc_status(stepperE2, i, planner.settings.axis_steps_per_mm[E_AXIS
+ #if ENABLED(DISTINCT_E_FACTORS)
+ + 2
+ #endif
+ ]);
+ #endif
+ #if AXIS_IS_TMC(E3)
+ tmc_status(stepperE3, i, planner.settings.axis_steps_per_mm[E_AXIS
+ #if ENABLED(DISTINCT_E_FACTORS)
+ + 3
+ #endif
+ ]);
+ #endif
+ #if AXIS_IS_TMC(E4)
+ tmc_status(stepperE4, i, planner.settings.axis_steps_per_mm[E_AXIS
+ #if ENABLED(DISTINCT_E_FACTORS)
+ + 4
+ #endif
+ ]);
+ #endif
+ #if AXIS_IS_TMC(E5)
+ tmc_status(stepperE5, i, planner.settings.axis_steps_per_mm[E_AXIS
+ #if ENABLED(DISTINCT_E_FACTORS)
+ + 5
+ #endif
+ ]);
+ #endif
+ }
SERIAL_EOL();
}
- static void drv_status_loop(const TMC_drv_status_enum i) {
- #if AXIS_IS_TMC(X)
- tmc_parse_drv_status(stepperX, i);
- #endif
- #if AXIS_IS_TMC(X2)
- tmc_parse_drv_status(stepperX2, i);
- #endif
+ static void drv_status_loop(const TMC_drv_status_enum i, const bool print_x, const bool print_y, const bool print_z, const bool print_e) {
+ if (print_x) {
+ #if AXIS_IS_TMC(X)
+ tmc_parse_drv_status(stepperX, i);
+ #endif
+ #if AXIS_IS_TMC(X2)
+ tmc_parse_drv_status(stepperX2, i);
+ #endif
+ }
- #if AXIS_IS_TMC(Y)
- tmc_parse_drv_status(stepperY, i);
- #endif
- #if AXIS_IS_TMC(Y2)
- tmc_parse_drv_status(stepperY2, i);
- #endif
+ if (print_y) {
+ #if AXIS_IS_TMC(Y)
+ tmc_parse_drv_status(stepperY, i);
+ #endif
+ #if AXIS_IS_TMC(Y2)
+ tmc_parse_drv_status(stepperY2, i);
+ #endif
+ }
- #if AXIS_IS_TMC(Z)
- tmc_parse_drv_status(stepperZ, i);
- #endif
- #if AXIS_IS_TMC(Z2)
- tmc_parse_drv_status(stepperZ2, i);
- #endif
- #if AXIS_IS_TMC(Z3)
- tmc_parse_drv_status(stepperZ3, i);
- #endif
+ if (print_z) {
+ #if AXIS_IS_TMC(Z)
+ tmc_parse_drv_status(stepperZ, i);
+ #endif
+ #if AXIS_IS_TMC(Z2)
+ tmc_parse_drv_status(stepperZ2, i);
+ #endif
+ #if AXIS_IS_TMC(Z3)
+ tmc_parse_drv_status(stepperZ3, i);
+ #endif
+ }
- #if AXIS_IS_TMC(E0)
- tmc_parse_drv_status(stepperE0, i);
- #endif
- #if AXIS_IS_TMC(E1)
- tmc_parse_drv_status(stepperE1, i);
- #endif
- #if AXIS_IS_TMC(E2)
- tmc_parse_drv_status(stepperE2, i);
- #endif
- #if AXIS_IS_TMC(E3)
- tmc_parse_drv_status(stepperE3, i);
- #endif
- #if AXIS_IS_TMC(E4)
- tmc_parse_drv_status(stepperE4, i);
- #endif
- #if AXIS_IS_TMC(E5)
- tmc_parse_drv_status(stepperE5, i);
- #endif
+ if (print_e) {
+ #if AXIS_IS_TMC(E0)
+ tmc_parse_drv_status(stepperE0, i);
+ #endif
+ #if AXIS_IS_TMC(E1)
+ tmc_parse_drv_status(stepperE1, i);
+ #endif
+ #if AXIS_IS_TMC(E2)
+ tmc_parse_drv_status(stepperE2, i);
+ #endif
+ #if AXIS_IS_TMC(E3)
+ tmc_parse_drv_status(stepperE3, i);
+ #endif
+ #if AXIS_IS_TMC(E4)
+ tmc_parse_drv_status(stepperE4, i);
+ #endif
+ #if AXIS_IS_TMC(E5)
+ tmc_parse_drv_status(stepperE5, i);
+ #endif
+ }
SERIAL_EOL();
}
@@ -572,9 +643,9 @@
* M122 report functions
*/
- void tmc_report_all() {
- #define TMC_REPORT(LABEL, ITEM) do{ SERIAL_ECHOPGM(LABEL); tmc_debug_loop(ITEM); }while(0)
- #define DRV_REPORT(LABEL, ITEM) do{ SERIAL_ECHOPGM(LABEL); drv_status_loop(ITEM); }while(0)
+ void tmc_report_all(bool print_x, const bool print_y, const bool print_z, const bool print_e) {
+ #define TMC_REPORT(LABEL, ITEM) do{ SERIAL_ECHOPGM(LABEL); tmc_debug_loop(ITEM, print_x, print_y, print_z, print_e); }while(0)
+ #define DRV_REPORT(LABEL, ITEM) do{ SERIAL_ECHOPGM(LABEL); drv_status_loop(ITEM, print_x, print_y, print_z, print_e); }while(0)
TMC_REPORT("\t", TMC_CODES);
TMC_REPORT("Enabled\t", TMC_ENABLED);
TMC_REPORT("Set current", TMC_CURRENT);
@@ -626,20 +697,162 @@
SERIAL_EOL();
}
+ #define PRINT_TMC_REGISTER(REG_CASE) case TMC_GET_##REG_CASE: print_hex_long(st.REG_CASE(), ':'); break
+
+ #if HAS_DRIVER(TMC2130)
+ static void tmc_get_ic_registers(TMC2130Stepper &st, const TMC_get_registers_enum i) {
+ switch (i) {
+ PRINT_TMC_REGISTER(TCOOLTHRS);
+ PRINT_TMC_REGISTER(THIGH);
+ PRINT_TMC_REGISTER(COOLCONF);
+ default: SERIAL_CHAR('\t'); break;
+ }
+ }
+ #endif
+ #if HAS_DRIVER(TMC2208)
+ static void tmc_get_ic_registers(TMC2208Stepper, const TMC_get_registers_enum) { SERIAL_CHAR('\t'); }
+ #endif
+
+ #if HAS_TRINAMIC
+ template
+ static void tmc_get_registers(TMC &st, const TMC_get_registers_enum i) {
+ switch (i) {
+ case TMC_AXIS_CODES: SERIAL_CHAR('\t'); st.printLabel(); break;
+ PRINT_TMC_REGISTER(GCONF);
+ PRINT_TMC_REGISTER(IHOLD_IRUN);
+ PRINT_TMC_REGISTER(GSTAT);
+ PRINT_TMC_REGISTER(IOIN);
+ PRINT_TMC_REGISTER(TPOWERDOWN);
+ PRINT_TMC_REGISTER(TSTEP);
+ PRINT_TMC_REGISTER(TPWMTHRS);
+ PRINT_TMC_REGISTER(CHOPCONF);
+ PRINT_TMC_REGISTER(PWMCONF);
+ PRINT_TMC_REGISTER(PWM_SCALE);
+ PRINT_TMC_REGISTER(DRV_STATUS);
+ default: tmc_get_ic_registers(st, i); break;
+ }
+ SERIAL_CHAR('\t');
+ }
+ #endif
+ #if HAS_DRIVER(TMC2660)
+ template
+ static void tmc_get_registers(TMCMarlin &st, const TMC_get_registers_enum i) {
+ switch (i) {
+ case TMC_AXIS_CODES: SERIAL_CHAR('\t'); st.printLabel(); break;
+ PRINT_TMC_REGISTER(DRVCONF);
+ PRINT_TMC_REGISTER(DRVCTRL);
+ PRINT_TMC_REGISTER(CHOPCONF);
+ PRINT_TMC_REGISTER(DRVSTATUS);
+ PRINT_TMC_REGISTER(SGCSCONF);
+ PRINT_TMC_REGISTER(SMARTEN);
+ default: SERIAL_CHAR('\t'); break;
+ }
+ SERIAL_CHAR('\t');
+ }
+ #endif
+
+ static void tmc_get_registers(TMC_get_registers_enum i, const bool print_x, const bool print_y, const bool print_z, const bool print_e) {
+ if (print_x) {
+ #if AXIS_IS_TMC(X)
+ tmc_get_registers(stepperX, i);
+ #endif
+ #if AXIS_IS_TMC(X2)
+ tmc_get_registers(stepperX2, i);
+ #endif
+ }
+
+ if (print_y) {
+ #if AXIS_IS_TMC(Y)
+ tmc_get_registers(stepperY, i);
+ #endif
+ #if AXIS_IS_TMC(Y2)
+ tmc_get_registers(stepperY2, i);
+ #endif
+ }
+
+ if (print_z) {
+ #if AXIS_IS_TMC(Z)
+ tmc_get_registers(stepperZ, i);
+ #endif
+ #if AXIS_IS_TMC(Z2)
+ tmc_get_registers(stepperZ2, i);
+ #endif
+ #if AXIS_IS_TMC(Z3)
+ tmc_get_registers(stepperZ3, i);
+ #endif
+ }
+
+ if (print_e) {
+ #if AXIS_IS_TMC(E0)
+ tmc_get_registers(stepperE0, i);
+ #endif
+ #if AXIS_IS_TMC(E1)
+ tmc_get_registers(stepperE1, i);
+ #endif
+ #if AXIS_IS_TMC(E2)
+ tmc_get_registers(stepperE2, i);
+ #endif
+ #if AXIS_IS_TMC(E3)
+ tmc_get_registers(stepperE3, i);
+ #endif
+ #if AXIS_IS_TMC(E4)
+ tmc_get_registers(stepperE4, i);
+ #endif
+ #if AXIS_IS_TMC(E5)
+ tmc_get_registers(stepperE5, i);
+ #endif
+ }
+
+ SERIAL_EOL();
+ }
+
+ void tmc_get_registers(bool print_x, bool print_y, bool print_z, bool print_e) {
+ #define _TMC_GET_REG(LABEL, ITEM) do{ SERIAL_ECHOPGM(LABEL); tmc_get_registers(ITEM, print_x, print_y, print_z, print_e); }while(0)
+ #define TMC_GET_REG(NAME, TABS) _TMC_GET_REG(STRINGIFY(NAME) TABS, TMC_GET_##NAME)
+ _TMC_GET_REG("\t", TMC_AXIS_CODES);
+ TMC_GET_REG(GCONF, "\t\t");
+ TMC_GET_REG(IHOLD_IRUN, "\t");
+ TMC_GET_REG(GSTAT, "\t\t");
+ TMC_GET_REG(IOIN, "\t\t");
+ TMC_GET_REG(TPOWERDOWN, "\t");
+ TMC_GET_REG(TSTEP, "\t\t");
+ TMC_GET_REG(TPWMTHRS, "\t");
+ TMC_GET_REG(TCOOLTHRS, "\t");
+ TMC_GET_REG(THIGH, "\t\t");
+ TMC_GET_REG(CHOPCONF, "\t");
+ TMC_GET_REG(COOLCONF, "\t");
+ TMC_GET_REG(PWMCONF, "\t");
+ TMC_GET_REG(PWM_SCALE, "\t");
+ TMC_GET_REG(DRV_STATUS, "\t");
+ }
+
#endif // TMC_DEBUG
#if USE_SENSORLESS
- void tmc_stallguard(TMC2130Stepper &st, const bool enable/*=true*/) {
- st.TCOOLTHRS(enable ? 0xFFFFF : 0);
- #if ENABLED(STEALTHCHOP)
- st.en_pwm_mode(!enable);
+ bool tmc_enable_stallguard(TMC2130Stepper &st) {
+ bool stealthchop_was_enabled = st.en_pwm_mode();
+
+ st.TCOOLTHRS(0xFFFFF);
+ #if STEALTHCHOP_ENABLED
+ st.en_pwm_mode(false);
#endif
- st.diag1_stall(enable ? 1 : 0);
+ st.diag1_stall(true);
+
+ return stealthchop_was_enabled;
}
- void tmc_sensorless_homing(TMC2660Stepper &st, const bool enable) {
+ void tmc_disable_stallguard(TMC2130Stepper &st, const bool restore_stealth) {
+ st.TCOOLTHRS(0);
+ #if STEALTHCHOP_ENABLED
+ st.en_pwm_mode(restore_stealth);
+ #endif
+ st.diag1_stall(false);
+ }
+ bool tmc_enable_stallguard(TMC2660Stepper) {
// TODO
+ return false;
}
+ void tmc_disable_stallguard(TMC2660Stepper, const bool) {};
#endif // USE_SENSORLESS
@@ -688,4 +901,83 @@
}
#endif // TMC_HAS_SPI
+template
+static bool test_connection(TMC &st) {
+ SERIAL_ECHOPGM("Testing ");
+ st.printLabel();
+ SERIAL_ECHOPGM(" connection... ");
+ const uint8_t test_result = st.test_connection();
+
+ if (test_result > 0) SERIAL_ECHOPGM("Error: All ");
+
+ const char *stat;
+ switch (test_result) {
+ default:
+ case 0: stat = PSTR("OK"); break;
+ case 1: stat = PSTR("HIGH"); break;
+ case 2: stat = PSTR("LOW"); break;
+ }
+ serialprintPGM(stat);
+ SERIAL_EOL();
+
+ return test_result;
+}
+
+void test_tmc_connection(const bool test_x, const bool test_y, const bool test_z, const bool test_e) {
+ uint8_t axis_connection = 0;
+
+ if (test_x) {
+ #if AXIS_IS_TMC(X)
+ axis_connection += test_connection(stepperX);
+ #endif
+ #if AXIS_IS_TMC(X2)
+ axis_connection += test_connection(stepperX2);
+ #endif
+ }
+
+ if (test_y) {
+ #if AXIS_IS_TMC(Y)
+ axis_connection += test_connection(stepperY);
+ #endif
+ #if AXIS_IS_TMC(Y2)
+ axis_connection += test_connection(stepperY2);
+ #endif
+ }
+
+ if (test_z) {
+ #if AXIS_IS_TMC(Z)
+ axis_connection += test_connection(stepperZ);
+ #endif
+ #if AXIS_IS_TMC(Z2)
+ axis_connection += test_connection(stepperZ2);
+ #endif
+ #if AXIS_IS_TMC(Z3)
+ axis_connection += test_connection(stepperZ3);
+ #endif
+ }
+
+ if (test_e) {
+ #if AXIS_IS_TMC(E0)
+ axis_connection += test_connection(stepperE0);
+ #endif
+ #if AXIS_IS_TMC(E1)
+ axis_connection += test_connection(stepperE1);
+ #endif
+ #if AXIS_IS_TMC(E2)
+ axis_connection += test_connection(stepperE2);
+ #endif
+ #if AXIS_IS_TMC(E3)
+ axis_connection += test_connection(stepperE3);
+ #endif
+ #if AXIS_IS_TMC(E4)
+ axis_connection += test_connection(stepperE4);
+ #endif
+ #if AXIS_IS_TMC(E5)
+ axis_connection += test_connection(stepperE5);
+ #endif
+ }
+
+ if (axis_connection) ui.set_status_P(PSTR("TMC CONNECTION ERROR"));
+}
+
#endif // HAS_TRINAMIC
diff --git a/Marlin/src/feature/tmc_util.h b/Marlin/src/feature/tmc_util.h
index 015c82c499..d9bf8143f6 100644
--- a/Marlin/src/feature/tmc_util.h
+++ b/Marlin/src/feature/tmc_util.h
@@ -22,6 +22,7 @@
#pragma once
#include "../inc/MarlinConfig.h"
+#include "../lcd/ultralcd.h"
#if HAS_TRINAMIC
#include
#endif
@@ -52,7 +53,8 @@ class TMCStorage {
public:
#if ENABLED(MONITOR_DRIVER_STATUS)
- uint8_t otpw_count = 0;
+ uint8_t otpw_count = 0,
+ error_count = 0;
bool flag_otpw = false;
bool getOTPW() { return flag_otpw; }
void clear_otpw() { flag_otpw = 0; }
@@ -105,7 +107,7 @@ class TMCMarlin : public TMC2208Stepper,
}
};
-constexpr uint32_t _tmc_thrs(const uint16_t msteps, const int32_t thrs, const uint32_t spmm) {
+constexpr uint16_t _tmc_thrs(const uint16_t msteps, const int32_t thrs, const uint32_t spmm) {
return 12650000UL * msteps / (256 * thrs * spmm);
}
@@ -154,12 +156,14 @@ void tmc_set_sgt(TMC &st, const int8_t sgt_val) {
}
void monitor_tmc_driver();
+void test_tmc_connection(const bool test_x, const bool test_y, const bool test_z, const bool test_e);
#if ENABLED(TMC_DEBUG)
#if ENABLED(MONITOR_DRIVER_STATUS)
void tmc_set_report_status(const bool status);
#endif
- void tmc_report_all();
+ void tmc_report_all(const bool print_x, const bool print_y, const bool print_z, const bool print_e);
+ void tmc_get_registers(const bool print_x, const bool print_y, const bool print_z, const bool print_e);
#endif
/**
@@ -170,8 +174,16 @@ void monitor_tmc_driver();
* Defined here because of limitations with templates and headers.
*/
#if USE_SENSORLESS
- void tmc_stallguard(TMC2130Stepper &st, const bool enable=true);
- void tmc_stallguard(TMC2660Stepper &st, const bool enable=true);
+ // Track enabled status of stealthChop and only re-enable where applicable
+ struct sensorless_t {
+ bool x, y, z;
+ };
+
+ bool tmc_enable_stallguard(TMC2130Stepper &st);
+ void tmc_disable_stallguard(TMC2130Stepper &st, const bool restore_stealth);
+
+ bool tmc_enable_stallguard(TMC2660Stepper);
+ void tmc_disable_stallguard(TMC2660Stepper, const bool);
#endif
#if TMC_HAS_SPI
diff --git a/Marlin/src/gcode/bedlevel/M420.cpp b/Marlin/src/gcode/bedlevel/M420.cpp
index b3b60806ff..9d287a288b 100644
--- a/Marlin/src/gcode/bedlevel/M420.cpp
+++ b/Marlin/src/gcode/bedlevel/M420.cpp
@@ -126,61 +126,71 @@ void GcodeSuite::M420() {
#endif // AUTO_BED_LEVELING_UBL
+ const bool seenV = parser.seen('V');
+
#if HAS_MESH
- // Subtract the given value or the mean from all mesh values
- if (leveling_is_valid() && parser.seen('C')) {
- const float cval = parser.value_float();
- #if ENABLED(AUTO_BED_LEVELING_UBL)
+ if (leveling_is_valid()) {
- set_bed_leveling_enabled(false);
- ubl.adjust_mesh_to_mean(true, cval);
+ // Subtract the given value or the mean from all mesh values
+ if (parser.seen('C')) {
+ const float cval = parser.value_float();
+ #if ENABLED(AUTO_BED_LEVELING_UBL)
- #else
-
- #if ENABLED(M420_C_USE_MEAN)
-
- // Get the sum and average of all mesh values
- float mesh_sum = 0;
- for (uint8_t x = GRID_MAX_POINTS_X; x--;)
- for (uint8_t y = GRID_MAX_POINTS_Y; y--;)
- mesh_sum += Z_VALUES(x, y);
- const float zmean = mesh_sum / float(GRID_MAX_POINTS);
+ set_bed_leveling_enabled(false);
+ ubl.adjust_mesh_to_mean(true, cval);
#else
- // Find the low and high mesh values
- float lo_val = 100, hi_val = -100;
- for (uint8_t x = GRID_MAX_POINTS_X; x--;)
- for (uint8_t y = GRID_MAX_POINTS_Y; y--;) {
- const float z = Z_VALUES(x, y);
- NOMORE(lo_val, z);
- NOLESS(hi_val, z);
- }
- // Take the mean of the lowest and highest
- const float zmean = (lo_val + hi_val) / 2.0 + cval;
+ #if ENABLED(M420_C_USE_MEAN)
+
+ // Get the sum and average of all mesh values
+ float mesh_sum = 0;
+ for (uint8_t x = GRID_MAX_POINTS_X; x--;)
+ for (uint8_t y = GRID_MAX_POINTS_Y; y--;)
+ mesh_sum += Z_VALUES(x, y);
+ const float zmean = mesh_sum / float(GRID_MAX_POINTS);
+
+ #else
+
+ // Find the low and high mesh values
+ float lo_val = 100, hi_val = -100;
+ for (uint8_t x = GRID_MAX_POINTS_X; x--;)
+ for (uint8_t y = GRID_MAX_POINTS_Y; y--;) {
+ const float z = Z_VALUES(x, y);
+ NOMORE(lo_val, z);
+ NOLESS(hi_val, z);
+ }
+ // Take the mean of the lowest and highest
+ const float zmean = (lo_val + hi_val) / 2.0 + cval;
+
+ #endif
+
+ // If not very close to 0, adjust the mesh
+ if (!NEAR_ZERO(zmean)) {
+ set_bed_leveling_enabled(false);
+ // Subtract the mean from all values
+ for (uint8_t x = GRID_MAX_POINTS_X; x--;)
+ for (uint8_t y = GRID_MAX_POINTS_Y; y--;)
+ Z_VALUES(x, y) -= zmean;
+ #if ENABLED(ABL_BILINEAR_SUBDIVISION)
+ bed_level_virt_interpolate();
+ #endif
+ }
#endif
+ }
- // If not very close to 0, adjust the mesh
- if (!NEAR_ZERO(zmean)) {
- set_bed_leveling_enabled(false);
- // Subtract the mean from all values
- for (uint8_t x = GRID_MAX_POINTS_X; x--;)
- for (uint8_t y = GRID_MAX_POINTS_Y; y--;)
- Z_VALUES(x, y) -= zmean;
- #if ENABLED(ABL_BILINEAR_SUBDIVISION)
- bed_level_virt_interpolate();
- #endif
- }
-
- #endif
+ }
+ else if (to_enable || seenV) {
+ SERIAL_ERROR_MSG("Invalid mesh.");
+ goto EXIT_M420;
}
#endif // HAS_MESH
// V to print the matrix or mesh
- if (parser.seen('V')) {
+ if (seenV) {
#if ABL_PLANAR
planner.bed_level_matrix.debug(PSTR("Bed Level Correction Matrix:"));
#else
@@ -205,6 +215,8 @@ void GcodeSuite::M420() {
// Enable leveling if specified, or if previously active
set_bed_leveling_enabled(to_enable);
+ EXIT_M420:
+
// Error if leveling failed to enable or reenable
if (to_enable && !planner.leveling_active)
SERIAL_ERROR_MSG(MSG_ERR_M420_FAILED);
diff --git a/Marlin/src/gcode/bedlevel/abl/G29.cpp b/Marlin/src/gcode/bedlevel/abl/G29.cpp
index fc76bf639e..8d2a3ad60c 100644
--- a/Marlin/src/gcode/bedlevel/abl/G29.cpp
+++ b/Marlin/src/gcode/bedlevel/abl/G29.cpp
@@ -385,10 +385,10 @@ G29_TYPE GcodeSuite::G29() {
if (parser.seen('H')) {
const int16_t size = (int16_t)parser.value_linear_units();
- left_probe_bed_position = MAX((MIN_PROBE_X + MAX_PROBE_X - size) / 2, MIN_PROBE_X);
- right_probe_bed_position = MIN(left_probe_bed_position + size, MAX_PROBE_X);
- front_probe_bed_position = MAX((MIN_PROBE_Y + MAX_PROBE_Y - size) / 2, MIN_PROBE_Y);
- back_probe_bed_position = MIN(front_probe_bed_position + size, MAX_PROBE_Y);
+ left_probe_bed_position = MAX(X_CENTER - size / 2, MIN_PROBE_X);
+ right_probe_bed_position = MIN(left_probe_bed_position + size, MAX_PROBE_X);
+ front_probe_bed_position = MAX(Y_CENTER - size / 2, MIN_PROBE_Y);
+ back_probe_bed_position = MIN(front_probe_bed_position + size, MAX_PROBE_Y);
}
else {
left_probe_bed_position = parser.seenval('L') ? (int)RAW_X_POSITION(parser.value_linear_units()) : LEFT_PROBE_BED_POSITION;
diff --git a/Marlin/src/gcode/calibrate/G28.cpp b/Marlin/src/gcode/calibrate/G28.cpp
index eb4f4ef75b..479af95835 100644
--- a/Marlin/src/gcode/calibrate/G28.cpp
+++ b/Marlin/src/gcode/calibrate/G28.cpp
@@ -67,8 +67,9 @@
fr_mm_s = MIN(homing_feedrate(X_AXIS), homing_feedrate(Y_AXIS)) * SQRT(sq(mlratio) + 1.0);
#if ENABLED(SENSORLESS_HOMING)
- sensorless_homing_per_axis(X_AXIS);
- sensorless_homing_per_axis(Y_AXIS);
+ sensorless_t stealth_states { false, false, false };
+ stealth_states.x = tmc_enable_stallguard(stepperX);
+ stealth_states.y = tmc_enable_stallguard(stepperY);
#endif
do_blocking_move_to_xy(1.5 * mlx * x_axis_home_dir, 1.5 * mly * home_dir(Y_AXIS), fr_mm_s);
@@ -78,8 +79,8 @@
current_position[X_AXIS] = current_position[Y_AXIS] = 0.0;
#if ENABLED(SENSORLESS_HOMING)
- sensorless_homing_per_axis(X_AXIS, false);
- sensorless_homing_per_axis(Y_AXIS, false);
+ tmc_disable_stallguard(stepperX, stealth_states.x);
+ tmc_disable_stallguard(stepperY, stealth_states.y);
#endif
}
diff --git a/Marlin/src/gcode/calibrate/M425.cpp b/Marlin/src/gcode/calibrate/M425.cpp
new file mode 100644
index 0000000000..c8a32cc228
--- /dev/null
+++ b/Marlin/src/gcode/calibrate/M425.cpp
@@ -0,0 +1,123 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+
+#include "../../inc/MarlinConfig.h"
+
+#if ENABLED(BACKLASH_GCODE)
+
+#include "../../module/planner.h"
+
+float backlash_distance_mm[XYZ] = BACKLASH_DISTANCE_MM,
+ backlash_correction = BACKLASH_CORRECTION;
+
+#ifdef BACKLASH_SMOOTHING_MM
+ float backlash_smoothing_mm = BACKLASH_SMOOTHING_MM;
+#endif
+
+#if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ float backlash_measured_mm[XYZ] = { 0 };
+ uint8_t backlash_measured_num[XYZ] = { 0 };
+#endif
+
+#include "../gcode.h"
+
+/**
+ * M425: Enable and tune backlash correction.
+ *
+ * F Enable/disable/fade-out backlash correction (0.0 to 1.0)
+ * S Distance over which backlash correction is spread
+ * X Set the backlash distance on X (0 to disable)
+ * Y ... on Y
+ * Z ... on Z
+ * X If a backlash measurement was done on X, copy that value
+ * Y ... on Y
+ * Z ... on Z
+ *
+ * Type M425 without any arguments to show active values.
+ */
+void GcodeSuite::M425() {
+ bool noArgs = true;
+
+ LOOP_XYZ(i) {
+ if (parser.seen(axis_codes[i])) {
+ planner.synchronize();
+ const float measured_backlash = (
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ backlash_measured_num[i] > 0 ? backlash_measured_mm[i] / backlash_measured_num[i] : 0
+ #else
+ 0
+ #endif
+ );
+ backlash_distance_mm[i] = parser.has_value() ? parser.value_linear_units() : measured_backlash;
+ noArgs = false;
+ }
+ }
+
+ if (parser.seen('F')) {
+ planner.synchronize();
+ backlash_correction = max(0, min(1.0, parser.value_linear_units()));
+ noArgs = false;
+ }
+
+ #ifdef BACKLASH_SMOOTHING_MM
+ if (parser.seen('S')) {
+ planner.synchronize();
+ backlash_smoothing_mm = parser.value_linear_units();
+ noArgs = false;
+ }
+ #endif
+
+ if (noArgs) {
+ SERIAL_ECHOPGM("Backlash correction is ");
+ if (!backlash_correction) SERIAL_ECHOPGM("in");
+ SERIAL_ECHOLNPGM("active:");
+ SERIAL_ECHOPAIR(" Correction Amount/Fade-out: F", backlash_correction);
+ SERIAL_ECHOLNPGM(" (F1.0 = full, F0.0 = none)");
+ SERIAL_ECHOPGM(" Backlash Distance (mm): ");
+ LOOP_XYZ(a) {
+ SERIAL_CHAR(' ');
+ SERIAL_CHAR(axis_codes[a]);
+ SERIAL_ECHO(backlash_distance_mm[a]);
+ SERIAL_EOL();
+ }
+
+ #ifdef BACKLASH_SMOOTHING_MM
+ SERIAL_ECHOLNPAIR(" Smoothing (mm): S", backlash_smoothing_mm);
+ #endif
+
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ SERIAL_ECHOPGM(" Average measured backlash (mm):");
+ LOOP_XYZ(a) {
+ if (backlash_measured_num[a] > 0) {
+ SERIAL_CHAR(' ');
+ SERIAL_CHAR(axis_codes[a]);
+ SERIAL_ECHO(backlash_measured_mm[a] / backlash_measured_num[a]);
+ }
+ }
+ if (!backlash_measured_num[X_AXIS] && !backlash_measured_num[Y_AXIS] && !backlash_measured_num[Z_AXIS])
+ SERIAL_ECHOPGM(" (Not yet measured)");
+ SERIAL_EOL();
+ #endif
+ }
+}
+
+#endif // BACKLASH_GCODE
diff --git a/Marlin/src/gcode/feature/trinamic/M122.cpp b/Marlin/src/gcode/feature/trinamic/M122.cpp
index 73e6b3c846..fb1e4b9ef8 100644
--- a/Marlin/src/gcode/feature/trinamic/M122.cpp
+++ b/Marlin/src/gcode/feature/trinamic/M122.cpp
@@ -22,7 +22,7 @@
#include "../../../inc/MarlinConfig.h"
-#if ENABLED(TMC_DEBUG)
+#if HAS_TRINAMIC
#include "../../gcode.h"
#include "../../../feature/tmc_util.h"
@@ -31,14 +31,25 @@
* M122: Debug TMC drivers
*/
void GcodeSuite::M122() {
+ bool print_axis[XYZE] = { false, false, false, false },
+ print_all = true;
+ LOOP_XYZE(i) if (parser.seen(axis_codes[i])) { print_axis[i] = true; print_all = false; }
- #if ENABLED(MONITOR_DRIVER_STATUS)
- if (parser.seen('S'))
- tmc_set_report_status(parser.value_bool());
+ if (print_all) LOOP_XYZE(i) print_axis[i] = true;
+
+ #if ENABLED(TMC_DEBUG)
+ #if ENABLED(MONITOR_DRIVER_STATUS)
+ if (parser.seen('S'))
+ tmc_set_report_status(parser.value_bool());
+ #endif
+
+ if (parser.seen('V'))
+ tmc_get_registers(print_axis[X_AXIS], print_axis[Y_AXIS], print_axis[Z_AXIS], print_axis[E_AXIS]);
else
+ tmc_report_all(print_axis[X_AXIS], print_axis[Y_AXIS], print_axis[Z_AXIS], print_axis[E_AXIS]);
#endif
- tmc_report_all();
+ test_tmc_connection(print_axis[X_AXIS], print_axis[Y_AXIS], print_axis[Z_AXIS], print_axis[E_AXIS]);
}
-#endif // TMC_DEBUG
+#endif // HAS_TRINAMIC
diff --git a/Marlin/src/gcode/gcode.cpp b/Marlin/src/gcode/gcode.cpp
index 8aea242a46..3b60486721 100644
--- a/Marlin/src/gcode/gcode.cpp
+++ b/Marlin/src/gcode/gcode.cpp
@@ -336,7 +336,7 @@ void GcodeSuite::process_parsed_command(
case 49: M49(); break; // M49: Turn on or off G26 debug flag for verbose output
#endif
- #if ENABLED(ULTRA_LCD) && ENABLED(LCD_SET_PROGRESS_MANUALLY)
+ #if ENABLED(LCD_SET_PROGRESS_MANUALLY) && (ENABLED(ULTRA_LCD) || ENABLED(EXTENSIBLE_UI))
case 73: M73(); break; // M73: Set progress percentage (for display on LCD)
#endif
@@ -576,6 +576,10 @@ void GcodeSuite::process_parsed_command(
case 421: M421(); break; // M421: Set a Mesh Bed Leveling Z coordinate
#endif
+ #if ENABLED(BACKLASH_GCODE)
+ case 425: M425(); break; // M425: Tune backlash compensation
+ #endif
+
#if HAS_M206_COMMAND
case 428: M428(); break; // M428: Apply current_position to home_offset
#endif
@@ -646,9 +650,7 @@ void GcodeSuite::process_parsed_command(
#endif
#if HAS_TRINAMIC
- #if ENABLED(TMC_DEBUG)
- case 122: M122(); break;
- #endif
+ case 122: M122(); break;
case 906: M906(); break; // M906: Set motor current in milliamps using axis codes X, Y, Z, E
#if ENABLED(MONITOR_DRIVER_STATUS)
case 911: M911(); break; // M911: Report TMC2130 prewarn triggered flags
diff --git a/Marlin/src/gcode/gcode.h b/Marlin/src/gcode/gcode.h
index 42671b6243..540e0208a6 100644
--- a/Marlin/src/gcode/gcode.h
+++ b/Marlin/src/gcode/gcode.h
@@ -201,6 +201,7 @@
* M420 - Enable/Disable Leveling (with current values) S1=enable S0=disable (Requires MESH_BED_LEVELING or ABL)
* M421 - Set a single Z coordinate in the Mesh Leveling grid. X Y Z (Requires MESH_BED_LEVELING, AUTO_BED_LEVELING_BILINEAR, or AUTO_BED_LEVELING_UBL)
* M422 - Set Z Stepper automatic alignment position using probe. X Y A (Requires Z_STEPPER_AUTO_ALIGN)
+ * M425 - Enable/Disable and tune backlash correction. (Requires BACKLASH_COMPENSATION and BACKLASH_GCODE)
* M428 - Set the home_offset based on the current_position. Nearest edge applies. (Disabled by NO_WORKSPACE_OFFSETS or DELTA)
* M500 - Store parameters in EEPROM. (Requires EEPROM_SETTINGS)
* M501 - Restore parameters from EEPROM. (Requires EEPROM_SETTINGS)
@@ -487,7 +488,7 @@ private:
static void M49();
#endif
- #if ENABLED(ULTRA_LCD) && ENABLED(LCD_SET_PROGRESS_MANUALLY)
+ #if ENABLED(LCD_SET_PROGRESS_MANUALLY) && (ENABLED(ULTRA_LCD) || ENABLED(EXTENSIBLE_UI))
static void M73();
#endif
@@ -709,6 +710,10 @@ private:
static void M421();
#endif
+ #if ENABLED(BACKLASH_GCODE)
+ static void M425();
+ #endif
+
#if HAS_M206_COMMAND
static void M428();
#endif
@@ -787,9 +792,7 @@ private:
#endif
#if HAS_TRINAMIC
- #if ENABLED(TMC_DEBUG)
- static void M122();
- #endif
+ static void M122();
static void M906();
#if ENABLED(MONITOR_DRIVER_STATUS)
static void M911();
diff --git a/Marlin/src/gcode/lcd/M73.cpp b/Marlin/src/gcode/lcd/M73.cpp
index 78697aecf3..7f1ebf3ea1 100644
--- a/Marlin/src/gcode/lcd/M73.cpp
+++ b/Marlin/src/gcode/lcd/M73.cpp
@@ -22,7 +22,7 @@
#include "../../inc/MarlinConfig.h"
-#if ENABLED(ULTRA_LCD) && ENABLED(LCD_SET_PROGRESS_MANUALLY)
+#if ENABLED(LCD_SET_PROGRESS_MANUALLY) && (ENABLED(EXTENSIBLE_UI) || ENABLED(ULTRA_LCD))
#include "../gcode.h"
#include "../../lcd/ultralcd.h"
@@ -42,4 +42,4 @@ void GcodeSuite::M73() {
ui.set_progress(parser.value_byte());
}
-#endif // ULTRA_LCD && LCD_SET_PROGRESS_MANUALLY
+#endif // LCD_SET_PROGRESS_MANUALLY && (ENABLED(EXTENSIBLE_UI) || ENABLED(ULTRA_LCD))
diff --git a/Marlin/src/gcode/queue.cpp b/Marlin/src/gcode/queue.cpp
index b73e2af02b..28a9eaf0fc 100644
--- a/Marlin/src/gcode/queue.cpp
+++ b/Marlin/src/gcode/queue.cpp
@@ -378,8 +378,8 @@ static int read_serial(const uint8_t index) {
template
void receive(char (&buffer)[buffer_size]) {
uint8_t data = 0;
- millis_t tranfer_timeout = millis() + RX_TIMESLICE;
- while (PENDING(millis(), tranfer_timeout)) {
+ millis_t transfer_timeout = millis() + RX_TIMESLICE;
+ while (PENDING(millis(), transfer_timeout)) {
switch (stream_state) {
case StreamState::STREAM_RESET:
stream_reset();
diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h
index 253503107c..ecee6c100f 100644
--- a/Marlin/src/inc/Conditionals_post.h
+++ b/Marlin/src/inc/Conditionals_post.h
@@ -860,6 +860,7 @@
#define AXIS_HAS_STALLGUARD(ST) (AXIS_DRIVER_TYPE(ST, TMC2130) || AXIS_DRIVER_TYPE(ST, TMC2660))
#define AXIS_HAS_STEALTHCHOP(ST) (AXIS_DRIVER_TYPE(ST, TMC2130) || AXIS_DRIVER_TYPE(ST, TMC2208))
+ #define STEALTHCHOP_ENABLED (ENABLED(STEALTHCHOP_XY) || ENABLED(STEALTHCHOP_Z) || ENABLED(STEALTHCHOP_E))
#define USE_SENSORLESS (ENABLED(SENSORLESS_HOMING) || ENABLED(SENSORLESS_PROBING))
// Disable Z axis sensorless homing if a probe is used to home the Z axis
#if HOMING_Z_WITH_PROBE
diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h
index 9892303012..8869d99c80 100644
--- a/Marlin/src/inc/SanityCheck.h
+++ b/Marlin/src/inc/SanityCheck.h
@@ -264,6 +264,8 @@
#error "MEASURED_(UPPER|LOWER)_LIMIT is now FILWIDTH_ERROR_MARGIN. Please update your configuration."
#elif defined(HAVE_TMCDRIVER)
#error "HAVE_TMCDRIVER is now [AXIS]_DRIVER_TYPE TMC26X. Please update your Configuration.h."
+#elif defined(STEALTHCHOP)
+ #error "STEALTHCHOP is now STEALTHCHOP_(XY|Z|E). Please update your Configuration_adv.h."
#elif defined(HAVE_TMC26X)
#error "HAVE_TMC26X is now [AXIS]_DRIVER_TYPE TMC26X. Please update your Configuration.h."
#elif defined(HAVE_TMC2130)
@@ -498,8 +500,8 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE && Y_MAX_LENGTH >= Y_BED_SIZE,
#elif PROGRESS_MSG_EXPIRE < 0
#error "PROGRESS_MSG_EXPIRE must be greater than or equal to 0."
#endif
-#elif ENABLED(LCD_SET_PROGRESS_MANUALLY) && !HAS_GRAPHICAL_LCD
- #error "LCD_SET_PROGRESS_MANUALLY requires LCD_PROGRESS_BAR or Graphical LCD."
+#elif ENABLED(LCD_SET_PROGRESS_MANUALLY) && !HAS_GRAPHICAL_LCD && DISABLED(EXTENSIBLE_UI)
+ #error "LCD_SET_PROGRESS_MANUALLY requires LCD_PROGRESS_BAR, Graphical LCD, or EXTENSIBLE_UI."
#endif
/**
@@ -509,6 +511,13 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE && Y_MAX_LENGTH >= Y_BED_SIZE,
#error "Graphical LCD is required for SHOW_CUSTOM_BOOTSCREEN and CUSTOM_STATUS_SCREEN_IMAGE."
#endif
+/**
+ * LCD Lightweight Screen Style
+ */
+#if ENABLED(LIGHTWEIGHT_UI) && DISABLED(U8GLIB_ST7920)
+ #error "LIGHTWEIGHT_UI requires a U8GLIB_ST7920-based display."
+#endif
+
/**
* SD File Sorting
*/
@@ -1833,8 +1842,8 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE && Y_MAX_LENGTH >= Y_BED_SIZE,
// is necessary in order to reset the stallGuard indication between the initial movement of all three
// towers to +Z and the individual homing of each tower. This restriction can be removed once a means of
// clearing the stallGuard activated status is found.
- #if ENABLED(DELTA) && DISABLED(STEALTHCHOP)
- #error "SENSORLESS_HOMING on DELTA currently requires STEALTHCHOP."
+ #if ENABLED(DELTA) && !(ENABLED(STEALTHCHOP_XY) && ENABLED(STEALTHCHOP_Z))
+ #error "SENSORLESS_HOMING on DELTA currently requires STEALTHCHOP_XY and STEALTHCHOP_Z."
#elif X_SENSORLESS && X_HOME_DIR == -1 && (!X_MIN_ENDSTOP_INVERTING || DISABLED(ENDSTOPPULLUP_XMIN))
#error "SENSORLESS_HOMING requires X_MIN_ENDSTOP_INVERTING and ENDSTOPPULLUP_XMIN when homing to X_MIN."
#elif X_SENSORLESS && X_HOME_DIR == 1 && (!X_MAX_ENDSTOP_INVERTING || DISABLED(ENDSTOPPULLUP_XMAX))
@@ -1871,18 +1880,22 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE && Y_MAX_LENGTH >= Y_BED_SIZE,
#endif
// Other TMC feature requirements
-#if ENABLED(HYBRID_THRESHOLD) && DISABLED(STEALTHCHOP)
- #error "Enable STEALTHCHOP to use HYBRID_THRESHOLD."
+#if ENABLED(HYBRID_THRESHOLD) && !STEALTHCHOP_ENABLED
+ #error "Enable STEALTHCHOP_(XY|Z|E) to use HYBRID_THRESHOLD."
#elif ENABLED(TMC_Z_CALIBRATION) && !AXIS_IS_TMC(Z) && !AXIS_IS_TMC(Z2) && !AXIS_IS_TMC(Z3)
#error "TMC_Z_CALIBRATION requires at least one TMC driver on Z axis"
#elif ENABLED(SENSORLESS_HOMING) && !HAS_STALLGUARD
#error "SENSORLESS_HOMING requires TMC2130 stepper drivers."
#elif ENABLED(SENSORLESS_PROBING) && !HAS_STALLGUARD
#error "SENSORLESS_PROBING requires TMC2130 stepper drivers."
-#elif ENABLED(STEALTHCHOP) && !HAS_STEALTHCHOP
+#elif STEALTHCHOP_ENABLED && !HAS_STEALTHCHOP
#error "STEALTHCHOP requires TMC2130 or TMC2208 stepper drivers."
#endif
+#if ENABLED(DELTA) && (ENABLED(STEALTHCHOP_XY) != ENABLED(STEALTHCHOP_Z))
+ #error "STEALTHCHOP_XY and STEALTHCHOP_Z must be the same on DELTA."
+#endif
+
/**
* Digipot requirement
*/
@@ -1894,17 +1907,35 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE && Y_MAX_LENGTH >= Y_BED_SIZE,
#endif
/**
- * Require 4 or more elements in per-axis initializers
+ * Check per-axis initializers for errors
*/
constexpr float sanity_arr_1[] = DEFAULT_AXIS_STEPS_PER_UNIT,
sanity_arr_2[] = DEFAULT_MAX_FEEDRATE,
sanity_arr_3[] = DEFAULT_MAX_ACCELERATION;
+
static_assert(COUNT(sanity_arr_1) >= XYZE, "DEFAULT_AXIS_STEPS_PER_UNIT requires 4 (or more) elements.");
-static_assert(COUNT(sanity_arr_2) >= XYZE, "DEFAULT_MAX_FEEDRATE requires 4 (or more) elements.");
-static_assert(COUNT(sanity_arr_3) >= XYZE, "DEFAULT_MAX_ACCELERATION requires 4 (or more) elements.");
static_assert(COUNT(sanity_arr_1) <= XYZE_N, "DEFAULT_AXIS_STEPS_PER_UNIT has too many elements. (Did you forget to enable DISTINCT_E_FACTORS?)");
+static_assert(sanity_arr_1[0] > 0 && sanity_arr_1[1] > 0 && sanity_arr_1[2] > 0
+ && (XYZE_N <= 3 || sanity_arr_1[3] > 0) && (XYZE_N <= 4 || sanity_arr_1[4] > 0)
+ && (XYZE_N <= 5 || sanity_arr_1[5] > 0) && (XYZE_N <= 6 || sanity_arr_1[6] > 0)
+ && (XYZE_N <= 7 || sanity_arr_1[7] > 0) && (XYZE_N <= 8 || sanity_arr_1[8] > 0),
+ "DEFAULT_AXIS_STEPS_PER_UNIT values must be positive.");
+
+static_assert(COUNT(sanity_arr_2) >= XYZE, "DEFAULT_MAX_FEEDRATE requires 4 (or more) elements.");
static_assert(COUNT(sanity_arr_2) <= XYZE_N, "DEFAULT_MAX_FEEDRATE has too many elements. (Did you forget to enable DISTINCT_E_FACTORS?)");
+static_assert(sanity_arr_2[0] > 0 && sanity_arr_2[1] > 0 && sanity_arr_2[2] > 0
+ && (XYZE_N <= 3 || sanity_arr_2[3] > 0) && (XYZE_N <= 4 || sanity_arr_2[4] > 0)
+ && (XYZE_N <= 5 || sanity_arr_2[5] > 0) && (XYZE_N <= 6 || sanity_arr_2[6] > 0)
+ && (XYZE_N <= 7 || sanity_arr_2[7] > 0) && (XYZE_N <= 8 || sanity_arr_2[8] > 0),
+ "DEFAULT_MAX_FEEDRATE values must be positive.");
+
+static_assert(COUNT(sanity_arr_3) >= XYZE, "DEFAULT_MAX_ACCELERATION requires 4 (or more) elements.");
static_assert(COUNT(sanity_arr_3) <= XYZE_N, "DEFAULT_MAX_ACCELERATION has too many elements. (Did you forget to enable DISTINCT_E_FACTORS?)");
+static_assert(sanity_arr_3[0] > 0 && sanity_arr_3[1] > 0 && sanity_arr_3[2] > 0
+ && (XYZE_N <= 3 || sanity_arr_3[3] > 0) && (XYZE_N <= 4 || sanity_arr_3[4] > 0)
+ && (XYZE_N <= 5 || sanity_arr_3[5] > 0) && (XYZE_N <= 6 || sanity_arr_3[6] > 0)
+ && (XYZE_N <= 7 || sanity_arr_3[7] > 0) && (XYZE_N <= 8 || sanity_arr_3[8] > 0),
+ "DEFAULT_MAX_ACCELERATION values must be positive.");
#if ENABLED(CNC_COORDINATE_SYSTEMS) && ENABLED(NO_WORKSPACE_OFFSETS)
#error "CNC_COORDINATE_SYSTEMS is incompatible with NO_WORKSPACE_OFFSETS."
@@ -1972,3 +2003,7 @@ static_assert(COUNT(sanity_arr_3) <= XYZE_N, "DEFAULT_MAX_ACCELERATION has too m
#if ENABLED(GCODE_MACROS) && !WITHIN(GCODE_MACROS_SLOTS, 1, 10)
#error "GCODE_MACROS_SLOTS must be a number from 1 to 10."
#endif
+
+#if ENABLED(BACKLASH_COMPENSATION) && IS_CORE
+ #error "BACKLASH_COMPENSATION is incompatible with CORE kinematics."
+#endif
diff --git a/Marlin/src/inc/Version.h b/Marlin/src/inc/Version.h
index a41776d064..f1e1b807fb 100644
--- a/Marlin/src/inc/Version.h
+++ b/Marlin/src/inc/Version.h
@@ -39,7 +39,7 @@
/**
* Marlin release version identifier
*/
- #define SHORT_BUILD_VERSION "2.0.x_TR6"
+ #define SHORT_BUILD_VERSION "2.0.x_TR7"
/**
* Verbose version identifier which should contain a reference to the location
@@ -52,7 +52,7 @@
* here we define this default string as the date where the latest release
* version was tagged.
*/
- #define STRING_DISTRIBUTION_DATE "2018-12-01"
+ #define STRING_DISTRIBUTION_DATE "2018-12-16"
/**
* Required minimum Configuration.h and Configuration_adv.h file versions.
diff --git a/Marlin/src/lcd/dogm/dogm_Statusscreen.h b/Marlin/src/lcd/dogm/dogm_Statusscreen.h
index 9a0f079442..8c1d3af86c 100644
--- a/Marlin/src/lcd/dogm/dogm_Statusscreen.h
+++ b/Marlin/src/lcd/dogm/dogm_Statusscreen.h
@@ -74,25 +74,25 @@
#if HAS_HEATED_BED && HOTENDS <= 3
- #define STATUS_BED_WIDTH 18
+ #define STATUS_BED_WIDTH 21
#if HOTENDS == 0
- #define STATUS_HEATERS_WIDTH 18
+ #define STATUS_HEATERS_WIDTH 21
const unsigned char status_heaters_bmp[] PROGMEM = {
- B00100000,B10000010,B00000000,
+ B00000100,B00010000,B01000000,
+ B00000010,B00001000,B00100000,
+ B00000010,B00001000,B00100000,
+ B00000100,B00010000,B01000000,
+ B00001000,B00100000,B10000000,
B00010000,B01000001,B00000000,
B00010000,B01000001,B00000000,
- B00100000,B10000010,B00000000,
- B01000001,B00000100,B00000000,
- B10000010,B00001000,B00000000,
- B10000010,B00001000,B00000000,
- B01000001,B00000100,B00000000,
- B00100000,B10000010,B00000000,
+ B00001000,B00100000,B10000000,
+ B00000100,B00010000,B01000000,
B00000000,B00000000,B00000000,
- B11111111,B11111111,B11000000,
- B11111111,B11111111,B11000000
+ B00011111,B11111111,B11111000,
+ B00011111,B11111111,B11111000
};
#elif HOTENDS == 1
@@ -101,18 +101,18 @@
#define STATUS_BED_X 80
const unsigned char status_heaters_bmp[] PROGMEM = {
- B00011111,B11100000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00100000,B10000010,B00000000,
+ B00011111,B11100000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000100,B00010000,B01000000,
+ B00111111,B11110000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000010,B00001000,B00100000,
+ B00111111,B11110000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000010,B00001000,B00100000,
+ B00111111,B11110000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000100,B00010000,B01000000,
+ B00011111,B11100000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00001000,B00100000,B10000000,
+ B00011111,B11100000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00010000,B01000001,B00000000,
B00111111,B11110000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00010000,B01000001,B00000000,
- B00111111,B11110000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00010000,B01000001,B00000000,
- B00111111,B11110000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00100000,B10000010,B00000000,
- B00011111,B11100000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B01000001,B00000100,B00000000,
- B00011111,B11100000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B10000010,B00001000,B00000000,
- B00111111,B11110000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B10000010,B00001000,B00000000,
- B00111111,B11110000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B01000001,B00000100,B00000000,
- B00111111,B11110000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00100000,B10000010,B00000000,
+ B00111111,B11110000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00001000,B00100000,B10000000,
+ B00111111,B11110000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000100,B00010000,B01000000,
B00001111,B11000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
- B00000111,B10000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B11111111,B11111111,B11000000,
- B00000011,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B11111111,B11111111,B11000000
+ B00000111,B10000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00011111,B11111111,B11111000,
+ B00000011,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00011111,B11111111,B11111000
};
#elif HOTENDS == 2
@@ -120,18 +120,18 @@
#define STATUS_HEATERS_WIDTH 90
const unsigned char status_heaters_bmp[] PROGMEM = {
- B00011111,B11100000,B00000000,B00011111,B11100000,B00000000,B00000000,B00000000,B00000000,B00100000,B10000010,B00000000,
- B00111110,B11110000,B00000000,B00111100,B11110000,B00000000,B00000000,B00000000,B00000000,B00010000,B01000001,B00000000,
- B00111100,B11110000,B00000000,B00111011,B01110000,B00000000,B00000000,B00000000,B00000000,B00010000,B01000001,B00000000,
- B00111010,B11110000,B00000000,B00111111,B01110000,B00000000,B00000000,B00000000,B00000000,B00100000,B10000010,B00000000,
- B00011110,B11100000,B00000000,B00011110,B11100000,B00000000,B00000000,B00000000,B00000000,B01000001,B00000100,B00000000,
- B00011110,B11100000,B00000000,B00011101,B11100000,B00000000,B00000000,B00000000,B00000000,B10000010,B00001000,B00000000,
- B00111110,B11110000,B00000000,B00111011,B11110000,B00000000,B00000000,B00000000,B00000000,B10000010,B00001000,B00000000,
- B00111110,B11110000,B00000000,B00111000,B01110000,B00000000,B00000000,B00000000,B00000000,B01000001,B00000100,B00000000,
- B00111111,B11110000,B00000000,B00111111,B11110000,B00000000,B00000000,B00000000,B00000000,B00100000,B10000010,B00000000,
+ B00011111,B11100000,B00000000,B00011111,B11100000,B00000000,B00000000,B00000000,B00000000,B00000100,B00010000,B01000000,
+ B00111110,B11110000,B00000000,B00111100,B11110000,B00000000,B00000000,B00000000,B00000000,B00000010,B00001000,B00100000,
+ B00111100,B11110000,B00000000,B00111011,B01110000,B00000000,B00000000,B00000000,B00000000,B00000010,B00001000,B00100000,
+ B00111010,B11110000,B00000000,B00111111,B01110000,B00000000,B00000000,B00000000,B00000000,B00000100,B00010000,B01000000,
+ B00011110,B11100000,B00000000,B00011110,B11100000,B00000000,B00000000,B00000000,B00000000,B00001000,B00100000,B10000000,
+ B00011110,B11100000,B00000000,B00011101,B11100000,B00000000,B00000000,B00000000,B00000000,B00010000,B01000001,B00000000,
+ B00111110,B11110000,B00000000,B00111011,B11110000,B00000000,B00000000,B00000000,B00000000,B00010000,B01000001,B00000000,
+ B00111110,B11110000,B00000000,B00111000,B01110000,B00000000,B00000000,B00000000,B00000000,B00001000,B00100000,B10000000,
+ B00111111,B11110000,B00000000,B00111111,B11110000,B00000000,B00000000,B00000000,B00000000,B00000100,B00010000,B01000000,
B00001111,B11000000,B00000000,B00001111,B11000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
- B00000111,B10000000,B00000000,B00000111,B10000000,B00000000,B00000000,B00000000,B00000000,B11111111,B11111111,B11000000,
- B00000011,B00000000,B00000000,B00000011,B00000000,B00000000,B00000000,B00000000,B00000000,B11111111,B11111111,B11000000
+ B00000111,B10000000,B00000000,B00000111,B10000000,B00000000,B00000000,B00000000,B00000000,B00011111,B11111111,B11111000,
+ B00000011,B00000000,B00000000,B00000011,B00000000,B00000000,B00000000,B00000000,B00000000,B00011111,B11111111,B11111000
};
#else // HOTENDS > 2
@@ -139,18 +139,18 @@
#define STATUS_HEATERS_WIDTH 90
const unsigned char status_heaters_bmp[] PROGMEM = {
- B00011111,B11100000,B00000000,B00011111,B11100000,B00000000,B00011111,B11100000,B00000000,B00100000,B10000010,B00000000,
- B00111110,B11110000,B00000000,B00111100,B11110000,B00000000,B00111100,B11110000,B00000000,B00010000,B01000001,B00000000,
- B00111100,B11110000,B00000000,B00111011,B01110000,B00000000,B00111011,B01110000,B00000000,B00010000,B01000001,B00000000,
- B00111010,B11110000,B00000000,B00111111,B01110000,B00000000,B00111111,B01110000,B00000000,B00100000,B10000010,B00000000,
- B00011110,B11100000,B00000000,B00011110,B11100000,B00000000,B00011100,B11100000,B00000000,B01000001,B00000100,B00000000,
- B00011110,B11100000,B00000000,B00011101,B11100000,B00000000,B00011111,B01100000,B00000000,B10000010,B00001000,B00000000,
- B00111110,B11110000,B00000000,B00111011,B11110000,B00000000,B00111011,B01110000,B00000000,B10000010,B00001000,B00000000,
- B00111110,B11110000,B00000000,B00111000,B01110000,B00000000,B00111100,B11110000,B00000000,B01000001,B00000100,B00000000,
- B00111111,B11110000,B00000000,B00111111,B11110000,B00000000,B00111111,B11110000,B00000000,B00100000,B10000010,B00000000,
+ B00011111,B11100000,B00000000,B00011111,B11100000,B00000000,B00011111,B11100000,B00000000,B00000100,B00010000,B01000000,
+ B00111110,B11110000,B00000000,B00111100,B11110000,B00000000,B00111100,B11110000,B00000000,B00000010,B00001000,B00100000,
+ B00111100,B11110000,B00000000,B00111011,B01110000,B00000000,B00111011,B01110000,B00000000,B00000010,B00001000,B00100000,
+ B00111010,B11110000,B00000000,B00111111,B01110000,B00000000,B00111111,B01110000,B00000000,B00000100,B00010000,B01000000,
+ B00011110,B11100000,B00000000,B00011110,B11100000,B00000000,B00011100,B11100000,B00000000,B00001000,B00100000,B10000000,
+ B00011110,B11100000,B00000000,B00011101,B11100000,B00000000,B00011111,B01100000,B00000000,B00010000,B01000001,B00000000,
+ B00111110,B11110000,B00000000,B00111011,B11110000,B00000000,B00111011,B01110000,B00000000,B00010000,B01000001,B00000000,
+ B00111110,B11110000,B00000000,B00111000,B01110000,B00000000,B00111100,B11110000,B00000000,B00001000,B00100000,B10000000,
+ B00111111,B11110000,B00000000,B00111111,B11110000,B00000000,B00111111,B11110000,B00000000,B00000100,B00010000,B01000000,
B00001111,B11000000,B00000000,B00001111,B11000000,B00000000,B00001111,B11000000,B00000000,B00000000,B00000000,B00000000,
- B00000111,B10000000,B00000000,B00000111,B10000000,B00000000,B00000111,B10000000,B00000000,B11111111,B11111111,B11000000,
- B00000011,B00000000,B00000000,B00000011,B00000000,B00000000,B00000011,B00000000,B00000000,B11111111,B11111111,B11000000
+ B00000111,B10000000,B00000000,B00000111,B10000000,B00000000,B00000111,B10000000,B00000000,B00011111,B11111111,B11111000,
+ B00000011,B00000000,B00000000,B00000011,B00000000,B00000000,B00000011,B00000000,B00000000,B00011111,B11111111,B11111000
};
#endif // HOTENDS
@@ -582,7 +582,7 @@
#ifndef STATUS_BED_X
#define STATUS_BED_X 72
#endif
- #define STATUS_BED_TEXT_X STATUS_BED_X + 13
+ #define STATUS_BED_TEXT_X (STATUS_BED_X + 13)
const unsigned char status_bed_bmp[] PROGMEM = {
B11111111,B11111111,B11000000,
@@ -611,7 +611,7 @@
#else
- #define STATUS_BED_WIDTH 18
+ #define STATUS_BED_WIDTH 21
#ifndef STATUS_BED_X
#define STATUS_BED_X 80
#endif
@@ -619,40 +619,40 @@
#ifdef STATUS_BED_ANIM
const unsigned char status_bed_bmp[] PROGMEM = {
- B11111111,B11111111,B11000000,
- B11111111,B11111111,B11000000
+ B00011111,B11111111,B11111000,
+ B00011111,B11111111,B11111000
};
const unsigned char status_bed_on_bmp[] PROGMEM = {
- B00100000,B10000010,B00000000,
+ B00000100,B00010000,B01000000,
+ B00000010,B00001000,B00100000,
+ B00000010,B00001000,B00100000,
+ B00000100,B00010000,B01000000,
+ B00001000,B00100000,B10000000,
B00010000,B01000001,B00000000,
B00010000,B01000001,B00000000,
- B00100000,B10000010,B00000000,
- B01000001,B00000100,B00000000,
- B10000010,B00001000,B00000000,
- B10000010,B00001000,B00000000,
- B01000001,B00000100,B00000000,
- B00100000,B10000010,B00000000,
+ B00001000,B00100000,B10000000,
+ B00000100,B00010000,B01000000,
B00000000,B00000000,B00000000,
- B11111111,B11111111,B11000000,
- B11111111,B11111111,B11000000
+ B00011111,B11111111,B11111000,
+ B00011111,B11111111,B11111000
};
#else
const unsigned char status_bed_bmp[] PROGMEM = {
- B00100000,B10000010,B00000000,
+ B00000100,B00010000,B01000000,
+ B00000010,B00001000,B00100000,
+ B00000010,B00001000,B00100000,
+ B00000100,B00010000,B01000000,
+ B00001000,B00100000,B10000000,
B00010000,B01000001,B00000000,
B00010000,B01000001,B00000000,
- B00100000,B10000010,B00000000,
- B01000001,B00000100,B00000000,
- B10000010,B00001000,B00000000,
- B10000010,B00001000,B00000000,
- B01000001,B00000100,B00000000,
- B00100000,B10000010,B00000000,
+ B00001000,B00100000,B10000000,
+ B00000100,B00010000,B01000000,
B00000000,B00000000,B00000000,
- B11111111,B11111111,B11000000,
- B11111111,B11111111,B11000000
+ B00011111,B11111111,B11111000,
+ B00011111,B11111111,B11111000
};
#endif
@@ -684,206 +684,417 @@
#define STATUS_FAN_Y 2
#define STATUS_FAN_WIDTH 20
- const unsigned char status_fan0_bmp[] PROGMEM = {
- B00111111,B11111111,B11110000,
- B00111000,B00000000,B01110000,
- B00110000,B11111100,B00110000,
- B00100000,B11111100,B00010000,
- B00100000,B01111000,B00010000,
- B00100000,B00110000,B00010000,
- B00101100,B00000000,B11010000,
- B00101110,B00110001,B11010000,
- B00101111,B01111011,B11010000,
- B00101111,B01111011,B11010000,
- B00101110,B00110001,B11010000,
- B00101100,B00000000,B11010000,
- B00100000,B00110000,B00010000,
- B00100000,B01111000,B00010000,
- B00100000,B11111100,B00010000,
- B00110000,B11111100,B00110000,
- B00111000,B00000000,B01110000,
- B00111111,B11111111,B11110000
- };
+ #if ENABLED(STATUS_ALT_FAN_BITMAP)
- #if STATUS_FAN_FRAMES == 2
- const unsigned char status_fan1_bmp[] PROGMEM = {
+ const unsigned char status_fan0_bmp[] PROGMEM = {
+ B00000001,B11111110,B00000000,
+ B00000110,B00000001,B10000000,
+ B00001000,B11111100,B01000000,
+ B00010000,B11111100,B00100000,
+ B00010000,B01111000,B00100000,
+ B00100000,B00110000,B00010000,
+ B00101100,B00000000,B11010000,
+ B00101110,B00110001,B11010000,
+ B00101111,B01111011,B11010000,
+ B00101111,B01111011,B11010000,
+ B00101110,B00110001,B11010000,
+ B00101100,B00000000,B11010000,
+ B00100000,B00110000,B00010000,
+ B00010000,B01111000,B00100000,
+ B00010000,B11111100,B00100000,
+ B00001000,B11111100,B01000000,
+ B00000110,B00000001,B10000000,
+ B00000001,B11111110,B00000000
+ };
+
+ #if STATUS_FAN_FRAMES == 2
+ const unsigned char status_fan1_bmp[] PROGMEM = {
+ B00000001,B11111110,B00000000,
+ B00000110,B00000001,B10000000,
+ B00001001,B10000110,B01000000,
+ B00010011,B10000111,B00100000,
+ B00010111,B10000111,B10100000,
+ B00101111,B10000111,B11010000,
+ B00101111,B00000011,B11010000,
+ B00100000,B00110000,B00010000,
+ B00100000,B01111000,B00010000,
+ B00100000,B01111000,B00010000,
+ B00100000,B00110000,B00010000,
+ B00101111,B00000011,B11010000,
+ B00101111,B10000111,B11010000,
+ B00010111,B10000111,B10100000,
+ B00010011,B10000111,B00100000,
+ B00001001,B10000110,B01000000,
+ B00000110,B00000001,B10000000,
+ B00000001,B11111110,B00000000
+ };
+ #endif
+
+ #else // !STATUS_ALT_FAN_BITMAP
+
+ const unsigned char status_fan0_bmp[] PROGMEM = {
B00111111,B11111111,B11110000,
B00111000,B00000000,B01110000,
- B00110001,B10000110,B00110000,
- B00100011,B10000111,B00010000,
- B00100111,B10000111,B10010000,
- B00101111,B10000111,B11010000,
- B00101111,B00000011,B11010000,
- B00100000,B00110000,B00010000,
- B00100000,B01111000,B00010000,
+ B00110000,B11111100,B00110000,
+ B00100000,B11111100,B00010000,
B00100000,B01111000,B00010000,
B00100000,B00110000,B00010000,
- B00101111,B00000011,B11010000,
- B00101111,B10000111,B11010000,
- B00100111,B10000111,B10010000,
- B00100011,B10000111,B00010000,
- B00110001,B10000110,B00110000,
+ B00101100,B00000000,B11010000,
+ B00101110,B00110001,B11010000,
+ B00101111,B01111011,B11010000,
+ B00101111,B01111011,B11010000,
+ B00101110,B00110001,B11010000,
+ B00101100,B00000000,B11010000,
+ B00100000,B00110000,B00010000,
+ B00100000,B01111000,B00010000,
+ B00100000,B11111100,B00010000,
+ B00110000,B11111100,B00110000,
B00111000,B00000000,B01110000,
B00111111,B11111111,B11110000
};
- #endif
+
+ #if STATUS_FAN_FRAMES == 2
+ const unsigned char status_fan1_bmp[] PROGMEM = {
+ B00111111,B11111111,B11110000,
+ B00111000,B00000000,B01110000,
+ B00110001,B10000110,B00110000,
+ B00100011,B10000111,B00010000,
+ B00100111,B10000111,B10010000,
+ B00101111,B10000111,B11010000,
+ B00101111,B00000011,B11010000,
+ B00100000,B00110000,B00010000,
+ B00100000,B01111000,B00010000,
+ B00100000,B01111000,B00010000,
+ B00100000,B00110000,B00010000,
+ B00101111,B00000011,B11010000,
+ B00101111,B10000111,B11010000,
+ B00100111,B10000111,B10010000,
+ B00100011,B10000111,B00010000,
+ B00110001,B10000110,B00110000,
+ B00111000,B00000000,B01110000,
+ B00111111,B11111111,B11110000
+ };
+ #endif
+
+ #endif // !STATUS_ALT_FAN_BITMAP
#elif STATUS_FAN_FRAMES == 3
#define STATUS_FAN_WIDTH 21
- const unsigned char status_fan0_bmp[] PROGMEM = {
- B00111111,B11111111,B11111000,
- B00111110,B00000000,B11111000,
- B00111001,B00000001,B00111000,
- B00110111,B10000011,B11011000,
- B00110111,B10000011,B11011000,
- B00101111,B11000111,B11101000,
- B00100111,B11000111,B11001000,
- B00100001,B11111111,B00001000,
- B00100000,B01111100,B00001000,
- B00100000,B01111100,B00001000,
- B00100000,B01111100,B00001000,
- B00100001,B11111111,B00001000,
- B00100111,B11000111,B11001000,
- B00101111,B11000111,B11101000,
- B00110111,B10000011,B11011000,
- B00110111,B10000011,B11011000,
- B00111001,B00000001,B00111000,
- B00111110,B00000000,B11111000,
- B00111111,B11111111,B11111000
- };
- const unsigned char status_fan1_bmp[] PROGMEM = {
- B00111111,B11111111,B11111000,
- B00111110,B00110000,B11111000,
- B00111001,B11110000,B00111000,
- B00110001,B11110000,B00011000,
- B00110000,B11110000,B00011000,
- B00100000,B11110000,B01101000,
- B00100000,B00110001,B11101000,
- B00100000,B00111001,B11101000,
- B00100000,B01111111,B11111000,
- B00111111,B11111111,B11111000,
- B00111111,B11111100,B00001000,
- B00101111,B00111000,B00001000,
- B00101110,B00011000,B00001000,
- B00101100,B00011110,B00001000,
- B00110000,B00011110,B00011000,
- B00110000,B00011111,B00011000,
- B00111000,B00011111,B00111000,
- B00111110,B00011000,B11111000,
- B00111111,B11111111,B11111000
- };
- const unsigned char status_fan2_bmp[] PROGMEM = {
- B00111111,B11111111,B11111000,
- B00111110,B00011000,B11111000,
- B00111000,B00011111,B00111000,
- B00110000,B00011111,B10011000,
- B00110100,B00011111,B00011000,
- B00101110,B00011110,B00001000,
- B00101111,B00011100,B00001000,
- B00101111,B10111000,B00001000,
- B00111111,B11111100,B00001000,
- B00111111,B11111111,B11111000,
- B00100000,B01111111,B11111000,
- B00100000,B00111011,B11101000,
- B00100000,B01110001,B11101000,
- B00100000,B11110000,B11101000,
- B00110001,B11110000,B01011000,
- B00110011,B11110000,B00011000,
- B00111001,B11110000,B00111000,
- B00111110,B00110000,B11111000,
- B00111111,B11111111,B11111000
- };
+ #if ENABLED(STATUS_ALT_FAN_BITMAP)
+
+ const unsigned char status_fan0_bmp[] PROGMEM = {
+ B00000001,B11111111,B00000000,
+ B00000110,B00000000,B11000000,
+ B00001001,B00000001,B00100000,
+ B00010111,B10000011,B11010000,
+ B00010111,B10000011,B11010000,
+ B00101111,B11000111,B11101000,
+ B00100111,B11000111,B11001000,
+ B00100001,B11111111,B00001000,
+ B00100000,B01111100,B00001000,
+ B00100000,B01111100,B00001000,
+ B00100000,B01111100,B00001000,
+ B00100001,B11111111,B00001000,
+ B00100111,B11000111,B11001000,
+ B00101111,B11000111,B11101000,
+ B00010111,B10000011,B11010000,
+ B00010111,B10000011,B11010000,
+ B00001001,B00000001,B00100000,
+ B00000110,B00000000,B11000000,
+ B00000001,B11111111,B00000000
+ };
+ const unsigned char status_fan1_bmp[] PROGMEM = {
+ B00000001,B11111111,B00000000,
+ B00000110,B00110000,B11000000,
+ B00001001,B11110000,B00100000,
+ B00010001,B11110000,B00010000,
+ B00010000,B11110000,B00010000,
+ B00100000,B11110000,B01101000,
+ B00100000,B00110001,B11101000,
+ B00100000,B00111001,B11101000,
+ B00100000,B01111111,B11111000,
+ B00111111,B11111111,B11111000,
+ B00111111,B11111100,B00001000,
+ B00101111,B00111000,B00001000,
+ B00101110,B00011000,B00001000,
+ B00101100,B00011110,B00001000,
+ B00010000,B00011110,B00010000,
+ B00010000,B00011111,B00010000,
+ B00001000,B00011111,B00100000,
+ B00000110,B00011000,B11000000,
+ B00000001,B11111111,B00000000
+ };
+ const unsigned char status_fan2_bmp[] PROGMEM = {
+ B00000001,B11111111,B00000000,
+ B00000110,B00011000,B11000000,
+ B00001000,B00011111,B00100000,
+ B00010000,B00011111,B10010000,
+ B00010100,B00011111,B00010000,
+ B00101110,B00011110,B00001000,
+ B00101111,B00011100,B00001000,
+ B00101111,B10111000,B00001000,
+ B00111111,B11111100,B00001000,
+ B00111111,B11111111,B11111000,
+ B00100000,B01111111,B11111000,
+ B00100000,B00111011,B11101000,
+ B00100000,B01110001,B11101000,
+ B00100000,B11110000,B11101000,
+ B00010001,B11110000,B01010000,
+ B00010011,B11110000,B00010000,
+ B00001001,B11110000,B00100000,
+ B00000110,B00110000,B11000000,
+ B00000001,B11111111,B00000000
+ };
+
+ #else // !STATUS_ALT_FAN_BITMAP
+
+ const unsigned char status_fan0_bmp[] PROGMEM = {
+ B00111111,B11111111,B11111000,
+ B00111110,B00000000,B11111000,
+ B00111001,B00000001,B00111000,
+ B00110111,B10000011,B11011000,
+ B00110111,B10000011,B11011000,
+ B00101111,B11000111,B11101000,
+ B00100111,B11000111,B11001000,
+ B00100001,B11111111,B00001000,
+ B00100000,B01111100,B00001000,
+ B00100000,B01111100,B00001000,
+ B00100000,B01111100,B00001000,
+ B00100001,B11111111,B00001000,
+ B00100111,B11000111,B11001000,
+ B00101111,B11000111,B11101000,
+ B00110111,B10000011,B11011000,
+ B00110111,B10000011,B11011000,
+ B00111001,B00000001,B00111000,
+ B00111110,B00000000,B11111000,
+ B00111111,B11111111,B11111000
+ };
+ const unsigned char status_fan1_bmp[] PROGMEM = {
+ B00111111,B11111111,B11111000,
+ B00111110,B00110000,B11111000,
+ B00111001,B11110000,B00111000,
+ B00110001,B11110000,B00011000,
+ B00110000,B11110000,B00011000,
+ B00100000,B11110000,B01101000,
+ B00100000,B00110001,B11101000,
+ B00100000,B00111001,B11101000,
+ B00100000,B01111111,B11111000,
+ B00111111,B11111111,B11111000,
+ B00111111,B11111100,B00001000,
+ B00101111,B00111000,B00001000,
+ B00101110,B00011000,B00001000,
+ B00101100,B00011110,B00001000,
+ B00110000,B00011110,B00011000,
+ B00110000,B00011111,B00011000,
+ B00111000,B00011111,B00111000,
+ B00111110,B00011000,B11111000,
+ B00111111,B11111111,B11111000
+ };
+ const unsigned char status_fan2_bmp[] PROGMEM = {
+ B00111111,B11111111,B11111000,
+ B00111110,B00011000,B11111000,
+ B00111000,B00011111,B00111000,
+ B00110000,B00011111,B10011000,
+ B00110100,B00011111,B00011000,
+ B00101110,B00011110,B00001000,
+ B00101111,B00011100,B00001000,
+ B00101111,B10111000,B00001000,
+ B00111111,B11111100,B00001000,
+ B00111111,B11111111,B11111000,
+ B00100000,B01111111,B11111000,
+ B00100000,B00111011,B11101000,
+ B00100000,B01110001,B11101000,
+ B00100000,B11110000,B11101000,
+ B00110001,B11110000,B01011000,
+ B00110011,B11110000,B00011000,
+ B00111001,B11110000,B00111000,
+ B00111110,B00110000,B11111000,
+ B00111111,B11111111,B11111000
+ };
+
+ #endif // !STATUS_ALT_FAN_BITMAP
#elif STATUS_FAN_FRAMES == 4
#define STATUS_FAN_WIDTH 21
- const unsigned char status_fan0_bmp[] PROGMEM = {
- B00111111,B11111111,B11111000,
- B00111110,B00000000,B11111000,
- B00111000,B00111111,B00111000,
- B00110000,B01111110,B00011000,
- B00110000,B01111100,B00011000,
- B00101000,B01111100,B00001000,
- B00101100,B00111000,B00001000,
- B00101111,B00111001,B11001000,
- B00101111,B11111111,B11101000,
- B00101111,B11000111,B11101000,
- B00101111,B11111111,B11101000,
- B00100111,B00111001,B11101000,
- B00100000,B00111000,B01101000,
- B00100000,B01111100,B00101000,
- B00110000,B01111100,B00011000,
- B00110000,B11111100,B00011000,
- B00111001,B11111000,B00111000,
- B00111110,B00000000,B11111000,
- B00111111,B11111111,B11111000
- };
- const unsigned char status_fan1_bmp[] PROGMEM = {
- B00111111,B11111111,B11111000,
- B00111110,B00000000,B11111000,
- B00111000,B00001111,B00111000,
- B00110100,B00011111,B11011000,
- B00110110,B00011111,B10011000,
- B00101111,B00011111,B00001000,
- B00101111,B10011110,B00001000,
- B00101111,B11111100,B00001000,
- B00101111,B11011100,B00001000,
- B00100111,B11101111,B11001000,
- B00100000,B01110111,B11101000,
- B00100000,B01111111,B11101000,
- B00100000,B11110011,B11101000,
- B00100001,B11110001,B11101000,
- B00110011,B11110000,B11011000,
- B00110111,B11110000,B01011000,
- B00111001,B11100000,B00111000,
- B00111110,B00000000,B11111000,
- B00111111,B11111111,B11111000
- };
- const unsigned char status_fan2_bmp[] PROGMEM = {
- B00111111,B11111111,B11111000,
- B00111110,B10000000,B11111000,
- B00111001,B10000000,B00111000,
- B00110111,B10000001,B11011000,
- B00110111,B11000011,B11011000,
- B00100111,B11000111,B11101000,
- B00100011,B11000111,B11111000,
- B00100001,B11111111,B10001000,
- B00100000,B01101100,B00001000,
- B00100000,B01101100,B00001000,
- B00100000,B01101100,B00001000,
- B00100011,B11111111,B00001000,
- B00111111,B11000111,B10001000,
- B00101111,B11000111,B11001000,
- B00110111,B10000111,B11011000,
- B00110111,B00000011,B11011000,
- B00111000,B00000011,B00111000,
- B00111110,B00000010,B11111000,
- B00111111,B11111111,B11111000
- };
- const unsigned char status_fan3_bmp[] PROGMEM = {
- B00111111,B11111111,B11111000,
- B00111110,B00000000,B11111000,
- B00111001,B11110000,B00111000,
- B00110001,B11100000,B00011000,
- B00110001,B11100000,B00011000,
- B00100001,B11100001,B11101000,
- B00100000,B11110011,B11101000,
- B00100000,B01111111,B11101000,
- B00100000,B01110111,B11101000,
- B00101000,B11101110,B00101000,
- B00101111,B11011100,B00001000,
- B00101111,B11111100,B00001000,
- B00101111,B10011110,B00001000,
- B00101111,B00001111,B00001000,
- B00110000,B00001111,B00011000,
- B00110000,B00001111,B00011000,
- B00111000,B00011111,B00111000,
- B00111110,B00000000,B11111000,
- B00111111,B11111111,B11111000
- };
+ #if ENABLED(STATUS_ALT_FAN_BITMAP)
+
+ const unsigned char status_fan0_bmp[] PROGMEM = {
+ B00000001,B11111111,B00000000,
+ B00000110,B00000000,B11000000,
+ B00001000,B00111111,B00100000,
+ B00010000,B01111110,B00010000,
+ B00010000,B01111100,B00010000,
+ B00101000,B01111100,B00001000,
+ B00101100,B00111000,B00001000,
+ B00101111,B00111001,B11001000,
+ B00101111,B11111111,B11101000,
+ B00101111,B11000111,B11101000,
+ B00101111,B11111111,B11101000,
+ B00100111,B00111001,B11101000,
+ B00100000,B00111000,B01101000,
+ B00100000,B01111100,B00101000,
+ B00010000,B01111100,B00010000,
+ B00010000,B11111100,B00010000,
+ B00001001,B11111000,B00100000,
+ B00000110,B00000000,B11000000,
+ B00000001,B11111111,B00000000
+ };
+ const unsigned char status_fan1_bmp[] PROGMEM = {
+ B00000001,B11111111,B00000000,
+ B00000110,B00000000,B11000000,
+ B00001000,B00001111,B00100000,
+ B00010100,B00011111,B11010000,
+ B00010110,B00011111,B10010000,
+ B00101111,B00011111,B00001000,
+ B00101111,B10011110,B00001000,
+ B00101111,B11111100,B00001000,
+ B00101111,B11011100,B00001000,
+ B00100111,B11101111,B11001000,
+ B00100000,B01110111,B11101000,
+ B00100000,B01111111,B11101000,
+ B00100000,B11110011,B11101000,
+ B00100001,B11110001,B11101000,
+ B00010011,B11110000,B11010000,
+ B00010111,B11110000,B01010000,
+ B00001001,B11100000,B00100000,
+ B00000110,B00000000,B11000000,
+ B00000001,B11111111,B00000000
+ };
+ const unsigned char status_fan2_bmp[] PROGMEM = {
+ B00000001,B11111111,B00000000,
+ B00000110,B10000000,B11000000,
+ B00001001,B10000000,B00100000,
+ B00010111,B10000001,B11010000,
+ B00010111,B11000011,B11010000,
+ B00100111,B11000111,B11101000,
+ B00100011,B11000111,B11111000,
+ B00100001,B11111111,B10001000,
+ B00100000,B01101100,B00001000,
+ B00100000,B01101100,B00001000,
+ B00100000,B01101100,B00001000,
+ B00100011,B11111111,B00001000,
+ B00111111,B11000111,B10001000,
+ B00101111,B11000111,B11001000,
+ B00010111,B10000111,B11010000,
+ B00010111,B00000011,B11010000,
+ B00001000,B00000011,B00100000,
+ B00000110,B00000010,B11000000,
+ B00000001,B11111111,B00000000
+ };
+ const unsigned char status_fan3_bmp[] PROGMEM = {
+ B00000001,B11111111,B00000000,
+ B00000110,B00000000,B11000000,
+ B00001001,B11110000,B00100000,
+ B00010001,B11100000,B00010000,
+ B00010001,B11100000,B00010000,
+ B00100001,B11100001,B11101000,
+ B00100000,B11110011,B11101000,
+ B00100000,B01111111,B11101000,
+ B00100000,B01110111,B11101000,
+ B00101000,B11101110,B00101000,
+ B00101111,B11011100,B00001000,
+ B00101111,B11111100,B00001000,
+ B00101111,B10011110,B00001000,
+ B00101111,B00001111,B00001000,
+ B00010000,B00001111,B00010000,
+ B00010000,B00001111,B00010000,
+ B00001000,B00011111,B00100000,
+ B00000110,B00000000,B11000000,
+ B00000001,B11111111,B00000000
+ };
+
+ #else // !STATUS_ALT_FAN_BITMAP
+
+ const unsigned char status_fan0_bmp[] PROGMEM = {
+ B00111111,B11111111,B11111000,
+ B00111110,B00000000,B11111000,
+ B00111000,B00111111,B00111000,
+ B00110000,B01111110,B00011000,
+ B00110000,B01111100,B00011000,
+ B00101000,B01111100,B00001000,
+ B00101100,B00111000,B00001000,
+ B00101111,B00111001,B11001000,
+ B00101111,B11111111,B11101000,
+ B00101111,B11000111,B11101000,
+ B00101111,B11111111,B11101000,
+ B00100111,B00111001,B11101000,
+ B00100000,B00111000,B01101000,
+ B00100000,B01111100,B00101000,
+ B00110000,B01111100,B00011000,
+ B00110000,B11111100,B00011000,
+ B00111001,B11111000,B00111000,
+ B00111110,B00000000,B11111000,
+ B00111111,B11111111,B11111000
+ };
+ const unsigned char status_fan1_bmp[] PROGMEM = {
+ B00111111,B11111111,B11111000,
+ B00111110,B00000000,B11111000,
+ B00111000,B00001111,B00111000,
+ B00110100,B00011111,B11011000,
+ B00110110,B00011111,B10011000,
+ B00101111,B00011111,B00001000,
+ B00101111,B10011110,B00001000,
+ B00101111,B11111100,B00001000,
+ B00101111,B11011100,B00001000,
+ B00100111,B11101111,B11001000,
+ B00100000,B01110111,B11101000,
+ B00100000,B01111111,B11101000,
+ B00100000,B11110011,B11101000,
+ B00100001,B11110001,B11101000,
+ B00110011,B11110000,B11011000,
+ B00110111,B11110000,B01011000,
+ B00111001,B11100000,B00111000,
+ B00111110,B00000000,B11111000,
+ B00111111,B11111111,B11111000
+ };
+ const unsigned char status_fan2_bmp[] PROGMEM = {
+ B00111111,B11111111,B11111000,
+ B00111110,B10000000,B11111000,
+ B00111001,B10000000,B00111000,
+ B00110111,B10000001,B11011000,
+ B00110111,B11000011,B11011000,
+ B00100111,B11000111,B11101000,
+ B00100011,B11000111,B11111000,
+ B00100001,B11111111,B10001000,
+ B00100000,B01101100,B00001000,
+ B00100000,B01101100,B00001000,
+ B00100000,B01101100,B00001000,
+ B00100011,B11111111,B00001000,
+ B00111111,B11000111,B10001000,
+ B00101111,B11000111,B11001000,
+ B00110111,B10000111,B11011000,
+ B00110111,B00000011,B11011000,
+ B00111000,B00000011,B00111000,
+ B00111110,B00000010,B11111000,
+ B00111111,B11111111,B11111000
+ };
+ const unsigned char status_fan3_bmp[] PROGMEM = {
+ B00111111,B11111111,B11111000,
+ B00111110,B00000000,B11111000,
+ B00111001,B11110000,B00111000,
+ B00110001,B11100000,B00011000,
+ B00110001,B11100000,B00011000,
+ B00100001,B11100001,B11101000,
+ B00100000,B11110011,B11101000,
+ B00100000,B01111111,B11101000,
+ B00100000,B01110111,B11101000,
+ B00101000,B11101110,B00101000,
+ B00101111,B11011100,B00001000,
+ B00101111,B11111100,B00001000,
+ B00101111,B10011110,B00001000,
+ B00101111,B00001111,B00001000,
+ B00110000,B00001111,B00011000,
+ B00110000,B00001111,B00011000,
+ B00111000,B00011111,B00111000,
+ B00111110,B00000000,B11111000,
+ B00111111,B11111111,B11111000
+ };
+
+ #endif // !STATUS_ALT_FAN_BITMAP
#endif
@@ -1121,7 +1332,7 @@
#endif
#ifndef STATUS_BED_TEXT_X
- #define STATUS_BED_TEXT_X (STATUS_BED_X + 8)
+ #define STATUS_BED_TEXT_X (STATUS_BED_X + 11)
#endif
static_assert(
diff --git a/Marlin/src/lcd/dogm/status_screen_DOGM.cpp b/Marlin/src/lcd/dogm/status_screen_DOGM.cpp
index bff0cf1d20..4f044c0b2f 100644
--- a/Marlin/src/lcd/dogm/status_screen_DOGM.cpp
+++ b/Marlin/src/lcd/dogm/status_screen_DOGM.cpp
@@ -559,6 +559,7 @@ void MarlinUI::draw_status_message(const bool blink) {
if (--chars) {
// Print a second copy of the message
lcd_put_u8str_max(status_message, LCD_PIXEL_WIDTH - (rlen + 2) * (MENU_FONT_WIDTH));
+ lcd_put_wchar(' ');
}
}
}
diff --git a/Marlin/src/lcd/dogm/ultralcd_DOGM.cpp b/Marlin/src/lcd/dogm/ultralcd_DOGM.cpp
index dee00a073c..70a2579197 100644
--- a/Marlin/src/lcd/dogm/ultralcd_DOGM.cpp
+++ b/Marlin/src/lcd/dogm/ultralcd_DOGM.cpp
@@ -59,6 +59,10 @@
#include "../../feature/bedlevel/ubl/ubl.h"
#endif
+/**
+ * Include all needed font files
+ * (See http://marlinfw.org/docs/development/fonts.html)
+ */
#include "fontdata/fontdata_ISO10646_1.h"
#if ENABLED(USE_SMALL_INFOFONT)
#include "fontdata/fontdata_6x9_marlin.h"
diff --git a/Marlin/src/lcd/menu/menu_sdcard.cpp b/Marlin/src/lcd/menu/menu_sdcard.cpp
index f5fffb91e2..0b10b57375 100644
--- a/Marlin/src/lcd/menu/menu_sdcard.cpp
+++ b/Marlin/src/lcd/menu/menu_sdcard.cpp
@@ -33,8 +33,8 @@
#if !PIN_EXISTS(SD_DETECT)
void lcd_sd_refresh() {
- card.initsd();
encoderTopLine = 0;
+ card.initsd();
}
#endif
diff --git a/Marlin/src/lcd/thermistornames.h b/Marlin/src/lcd/thermistornames.h
index 02f2bfe0a9..ec143f7b08 100644
--- a/Marlin/src/lcd/thermistornames.h
+++ b/Marlin/src/lcd/thermistornames.h
@@ -98,6 +98,8 @@
#define THERMISTOR_NAME "Einstart S"
// High Temperature thermistors
+#elif THERMISTOR_ID == 61
+ #define THERMISTOR_NAME "Formbot 350°C"
#elif THERMISTOR_ID == 66
#define THERMISTOR_NAME "Dyze 4.7M"
diff --git a/Marlin/src/lcd/ultralcd.cpp b/Marlin/src/lcd/ultralcd.cpp
index f5ba174df0..20eae21ea3 100644
--- a/Marlin/src/lcd/ultralcd.cpp
+++ b/Marlin/src/lcd/ultralcd.cpp
@@ -52,6 +52,10 @@
char MarlinUI::status_message[MAX_MESSAGE_LENGTH + 1];
#endif
+#if ENABLED(LCD_SET_PROGRESS_MANUALLY)
+ uint8_t MarlinUI::progress_bar_percent; // = 0
+#endif
+
#if HAS_SPI_LCD
#if HAS_GRAPHICAL_LCD
@@ -102,10 +106,6 @@ uint8_t MarlinUI::lcd_status_update_delay = 1; // First update one loop delayed
millis_t MarlinUI::next_filament_display; // = 0
#endif
-#if ENABLED(LCD_SET_PROGRESS_MANUALLY)
- uint8_t MarlinUI::progress_bar_percent; // = 0
-#endif
-
millis_t next_button_update_ms;
#if HAS_GRAPHICAL_LCD
diff --git a/Marlin/src/lcd/ultralcd.h b/Marlin/src/lcd/ultralcd.h
index 54eb239b9d..77e001362c 100644
--- a/Marlin/src/lcd/ultralcd.h
+++ b/Marlin/src/lcd/ultralcd.h
@@ -271,6 +271,16 @@ public:
static uint8_t status_message_level; // Higher levels block lower levels
static inline void reset_alert_level() { status_message_level = 0; }
+ #if HAS_PRINT_PROGRESS
+ #if ENABLED(LCD_SET_PROGRESS_MANUALLY)
+ static uint8_t progress_bar_percent;
+ static void set_progress(const uint8_t progress) { progress_bar_percent = MIN(progress, 100); }
+ #endif
+ static uint8_t get_progress();
+ #else
+ static constexpr uint8_t get_progress() { return 0; }
+ #endif
+
#if HAS_SPI_LCD
static bool detected();
@@ -312,16 +322,6 @@ public:
#endif
static uint8_t lcd_status_update_delay;
- #if HAS_PRINT_PROGRESS
- #if ENABLED(LCD_SET_PROGRESS_MANUALLY)
- static uint8_t progress_bar_percent;
- static void set_progress(const uint8_t progress) { progress_bar_percent = MIN(progress, 100); }
- #endif
- static uint8_t get_progress();
- #else
- static constexpr uint8_t get_progress() { return 0; }
- #endif
-
#if HAS_LCD_CONTRAST
static int16_t contrast;
static void set_contrast(const int16_t value);
diff --git a/Marlin/src/libs/hex_print_routines.cpp b/Marlin/src/libs/hex_print_routines.cpp
index ebf8bca7ec..912c24fe7e 100644
--- a/Marlin/src/libs/hex_print_routines.cpp
+++ b/Marlin/src/libs/hex_print_routines.cpp
@@ -23,7 +23,7 @@
#include "../inc/MarlinConfig.h"
#include "../gcode/parser.h"
-#if ENABLED(AUTO_BED_LEVELING_UBL) || ENABLED(M100_FREE_MEMORY_WATCHER) || ENABLED(DEBUG_GCODE_PARSER)
+#if ENABLED(AUTO_BED_LEVELING_UBL) || ENABLED(M100_FREE_MEMORY_WATCHER) || ENABLED(DEBUG_GCODE_PARSER) || ENABLED(TMC_DEBUG)
#include "hex_print_routines.h"
@@ -78,4 +78,13 @@
void print_hex_word(const uint16_t w) { SERIAL_ECHO(hex_word(w)); }
void print_hex_address(const void * const w) { SERIAL_ECHO(hex_address(w)); }
+ void print_hex_long(const uint32_t w, const char delimiter) {
+ SERIAL_ECHOPGM("0x");
+ for (int B = 24; B >= 8; B -= 8){
+ print_hex_byte(w >> B);
+ SERIAL_CHAR(delimiter);
+ }
+ print_hex_byte(w);
+ }
+
#endif // AUTO_BED_LEVELING_UBL || M100_FREE_MEMORY_WATCHER || DEBUG_GCODE_PARSER
diff --git a/Marlin/src/libs/hex_print_routines.h b/Marlin/src/libs/hex_print_routines.h
index 2033e5670b..864306bb9c 100644
--- a/Marlin/src/libs/hex_print_routines.h
+++ b/Marlin/src/libs/hex_print_routines.h
@@ -38,6 +38,7 @@ void print_hex_nybble(const uint8_t n);
void print_hex_byte(const uint8_t b);
void print_hex_word(const uint16_t w);
void print_hex_address(const void * const w);
+void print_hex_long(const uint32_t w, const char delimiter);
#ifdef CPU_32_BIT
typedef uint32_t ptr_int_t;
diff --git a/Marlin/src/module/configuration_store.cpp b/Marlin/src/module/configuration_store.cpp
index 796f5477cb..9d7451588e 100644
--- a/Marlin/src/module/configuration_store.cpp
+++ b/Marlin/src/module/configuration_store.cpp
@@ -76,6 +76,9 @@
#if HAS_SERVOS
#include "servo.h"
+#endif
+
+#if HAS_SERVOS && HAS_SERVO_ANGLES
#define EEPROM_NUM_SERVOS NUM_SERVOS
#else
#define EEPROM_NUM_SERVOS NUM_SERVO_PLUGS
@@ -634,8 +637,8 @@ void MarlinSettings::postprocess() {
{
_FIELD_TEST(servo_angles);
- #if !HAS_SERVOS
- uint16_t servo_angles[NUM_SERVO_PLUGS][2] = { { 0, 0 } };
+ #if !HAS_SERVO_ANGLES
+ uint16_t servo_angles[EEPROM_NUM_SERVOS][2] = { { 0, 0 } };
#endif
EEPROM_WRITE(servo_angles);
}
diff --git a/Marlin/src/module/delta.cpp b/Marlin/src/module/delta.cpp
index 7d246aac40..d7bebf3ecf 100644
--- a/Marlin/src/module/delta.cpp
+++ b/Marlin/src/module/delta.cpp
@@ -206,14 +206,6 @@ void forward_kinematics_DELTA(const float &z1, const float &z2, const float &z3)
cartes[Z_AXIS] = z1 + ex[2] * Xnew + ey[2] * Ynew - ez[2] * Znew;
}
-#if ENABLED(SENSORLESS_HOMING)
- inline void delta_sensorless_homing(const bool on=true) {
- sensorless_homing_per_axis(A_AXIS, on);
- sensorless_homing_per_axis(B_AXIS, on);
- sensorless_homing_per_axis(C_AXIS, on);
- }
-#endif
-
/**
* A delta can only safely home all axes at the same time
* This is like quick_home_xy() but for 3 towers.
@@ -229,7 +221,10 @@ void home_delta() {
// Disable stealthChop if used. Enable diag1 pin on driver.
#if ENABLED(SENSORLESS_HOMING)
- delta_sensorless_homing();
+ sensorless_t stealth_states { false, false, false };
+ stealth_states.x = tmc_enable_stallguard(stepperX);
+ stealth_states.y = tmc_enable_stallguard(stepperY);
+ stealth_states.z = tmc_enable_stallguard(stepperZ);
#endif
// Move all carriages together linearly until an endstop is hit.
@@ -239,7 +234,9 @@ void home_delta() {
// Re-enable stealthChop if used. Disable diag1 pin on driver.
#if ENABLED(SENSORLESS_HOMING)
- delta_sensorless_homing(false);
+ tmc_disable_stallguard(stepperX, stealth_states.x);
+ tmc_disable_stallguard(stepperY, stealth_states.y);
+ tmc_disable_stallguard(stepperZ, stealth_states.z);
#endif
endstops.validate_homing_move();
diff --git a/Marlin/src/module/motion.cpp b/Marlin/src/module/motion.cpp
index 532f73974c..f5a4deb015 100644
--- a/Marlin/src/module/motion.cpp
+++ b/Marlin/src/module/motion.cpp
@@ -1046,40 +1046,78 @@ inline float get_homing_bump_feedrate(const AxisEnum axis) {
}
#if ENABLED(SENSORLESS_HOMING)
-
/**
* Set sensorless homing if the axis has it, accounting for Core Kinematics.
*/
- void sensorless_homing_per_axis(const AxisEnum axis, const bool enable/*=true*/) {
+ sensorless_t start_sensorless_homing_per_axis(const AxisEnum axis) {
+ sensorless_t stealth_states { false, false, false };
+
switch (axis) {
default: break;
#if X_SENSORLESS
case X_AXIS:
- tmc_stallguard(stepperX, enable);
+ stealth_states.x = tmc_enable_stallguard(stepperX);
#if CORE_IS_XY && Y_SENSORLESS
- tmc_stallguard(stepperY, enable);
+ stealth_states.y = tmc_enable_stallguard(stepperY);
#elif CORE_IS_XZ && Z_SENSORLESS
- tmc_stallguard(stepperZ, enable);
+ stealth_states.z = tmc_enable_stallguard(stepperZ);
#endif
break;
#endif
#if Y_SENSORLESS
case Y_AXIS:
- tmc_stallguard(stepperY, enable);
+ stealth_states.y = tmc_enable_stallguard(stepperY);
#if CORE_IS_XY && X_SENSORLESS
- tmc_stallguard(stepperX, enable);
+ stealth_states.x = tmc_enable_stallguard(stepperX);
#elif CORE_IS_YZ && Z_SENSORLESS
- tmc_stallguard(stepperZ, enable);
+ stealth_states.z = tmc_enable_stallguard(stepperZ);
#endif
break;
#endif
#if Z_SENSORLESS
case Z_AXIS:
- tmc_stallguard(stepperZ, enable);
+ stealth_states.z = tmc_enable_stallguard(stepperZ);
#if CORE_IS_XZ && X_SENSORLESS
- tmc_stallguard(stepperX, enable);
+ stealth_states.x = tmc_enable_stallguard(stepperX);
#elif CORE_IS_YZ && Y_SENSORLESS
- tmc_stallguard(stepperY, enable);
+ stealth_states.y = tmc_enable_stallguard(stepperY);
+ #endif
+ break;
+ #endif
+ }
+ return stealth_states;
+ }
+
+ void end_sensorless_homing_per_axis(const AxisEnum axis, sensorless_t enable_stealth) {
+ switch (axis) {
+ default: break;
+ #if X_SENSORLESS
+ case X_AXIS:
+ tmc_disable_stallguard(stepperX, enable_stealth.x);
+ #if CORE_IS_XY && Y_SENSORLESS
+ tmc_disable_stallguard(stepperY, enable_stealth.y);
+ #elif CORE_IS_XZ && Z_SENSORLESS
+ tmc_disable_stallguard(stepperZ, enable_stealth.z);
+ #endif
+ break;
+ #endif
+ #if Y_SENSORLESS
+ case Y_AXIS:
+ tmc_disable_stallguard(stepperY, enable_stealth.y);
+ #if CORE_IS_XY && X_SENSORLESS
+ tmc_disable_stallguard(stepperX, enable_stealth.x);
+ #elif CORE_IS_YZ && Z_SENSORLESS
+ tmc_disable_stallguard(stepperZ, enable_stealth.z);
+ #endif
+ break;
+ #endif
+ #if Z_SENSORLESS
+ case Z_AXIS:
+ tmc_disable_stallguard(stepperZ, enable_stealth.z);
+ #if CORE_IS_XZ && X_SENSORLESS
+ tmc_disable_stallguard(stepperX, enable_stealth.x);
+ #elif CORE_IS_YZ && Y_SENSORLESS
+ tmc_disable_stallguard(stepperY, enable_stealth.y);
#endif
break;
#endif
@@ -1126,6 +1164,10 @@ void do_homing_move(const AxisEnum axis, const float distance, const float fr_mm
home_dir(axis);
const bool is_home_dir = (axis_home_dir > 0) == (distance > 0);
+ #if ENABLED(SENSORLESS_HOMING)
+ sensorless_t stealth_states;
+ #endif
+
if (is_home_dir) {
#if HOMING_Z_WITH_PROBE && QUIET_PROBING
@@ -1134,7 +1176,7 @@ void do_homing_move(const AxisEnum axis, const float distance, const float fr_mm
// Disable stealthChop if used. Enable diag1 pin on driver.
#if ENABLED(SENSORLESS_HOMING)
- sensorless_homing_per_axis(axis);
+ stealth_states = start_sensorless_homing_per_axis(axis);
#endif
}
@@ -1175,7 +1217,7 @@ void do_homing_move(const AxisEnum axis, const float distance, const float fr_mm
// Re-enable stealthChop if used. Disable diag1 pin on driver.
#if ENABLED(SENSORLESS_HOMING)
- sensorless_homing_per_axis(axis, false);
+ end_sensorless_homing_per_axis(axis, stealth_states);
#endif
}
diff --git a/Marlin/src/module/motion.h b/Marlin/src/module/motion.h
index 702df69aec..59c0b32ff4 100644
--- a/Marlin/src/module/motion.h
+++ b/Marlin/src/module/motion.h
@@ -216,10 +216,6 @@ void set_axis_is_not_at_home(const AxisEnum axis);
void homeaxis(const AxisEnum axis);
-#if ENABLED(SENSORLESS_HOMING)
- void sensorless_homing_per_axis(const AxisEnum axis, const bool enable=true);
-#endif
-
/**
* Workspace offsets
*/
diff --git a/Marlin/src/module/planner.cpp b/Marlin/src/module/planner.cpp
index dcbd688686..9c618096c5 100644
--- a/Marlin/src/module/planner.cpp
+++ b/Marlin/src/module/planner.cpp
@@ -1546,6 +1546,99 @@ void Planner::synchronize() {
) idle();
}
+/**
+ * The following implements axis backlash correction. To minimize seams
+ * on the printed part, the backlash correction only adds steps to the
+ * current segment (instead of creating a new segment, which causes
+ * discontinuities and print artifacts).
+ *
+ * When BACKLASH_SMOOTHING_MM is enabled and non-zero, the backlash
+ * correction is spread over multiple segments, smoothing out print
+ * artifacts even more.
+ */
+#if ENABLED(BACKLASH_COMPENSATION)
+ #if ENABLED(BACKLASH_GCODE)
+ extern float backlash_distance_mm[], backlash_correction;
+ #ifdef BACKLASH_SMOOTHING_MM
+ extern float backlash_smoothing_mm;
+ #endif
+ #else
+ constexpr float backlash_distance_mm[XYZ] = BACKLASH_DISTANCE_MM,
+ backlash_correction = BACKLASH_CORRECTION;
+ #ifdef BACKLASH_SMOOTHING_MM
+ constexpr float backlash_smoothing_mm = BACKLASH_SMOOTHING_MM;
+ #endif
+ #endif
+
+ void Planner::add_backlash_correction_steps(const int32_t da, const int32_t db, const int32_t dc, const uint8_t dm, block_t * const block, float (&delta_mm)[ABCE]) {
+ static uint8_t last_direction_bits;
+ uint8_t changed_dir = last_direction_bits ^ dm;
+ // Ignore direction change if no steps are taken in that direction
+ if (da == 0) CBI(changed_dir, X_AXIS);
+ if (db == 0) CBI(changed_dir, Y_AXIS);
+ if (dc == 0) CBI(changed_dir, Z_AXIS);
+ last_direction_bits ^= changed_dir;
+
+ if (backlash_correction == 0) return;
+
+ #ifdef BACKLASH_SMOOTHING_MM
+ // The segment proportion is a value greater than 0.0 indicating how much residual_error
+ // is corrected for in this segment. The contribution is based on segment length and the
+ // smoothing distance. Since the computation of this proportion involves a floating point
+ // division, defer computation until needed.
+ float segment_proportion = 0;
+
+ // Residual error carried forward across multiple segments, so correction can be applied
+ // to segments where there is no direction change.
+ static int32_t residual_error[XYZ] = { 0 };
+ #else
+ // No leftover residual error from segment to segment
+ int32_t residual_error[XYZ] = { 0 };
+ // No direction change, no correction.
+ if (!changed_dir) return;
+ #endif
+
+ const bool positive[XYZ] = { da > 0, db > 0, dc > 0 },
+ non_zero[XYZ] = { da != 0, db != 0, dc != 0 };
+ bool made_adjustment = false;
+
+ LOOP_XYZ(i) {
+ if (backlash_distance_mm[i]) {
+ // When an axis changes direction, add axis backlash to the residual error
+ if (TEST(changed_dir, i))
+ residual_error[i] += backlash_correction * (positive[i] ? 1.0f : -1.0f) * backlash_distance_mm[i] * planner.settings.axis_steps_per_mm[i];
+
+ // Decide how much of the residual error to correct in this segment
+ int32_t error_correction = residual_error[i];
+ #ifdef BACKLASH_SMOOTHING_MM
+ if (error_correction && backlash_smoothing_mm != 0) {
+ // Take up a portion of the residual_error in this segment, but only when
+ // the current segment travels in the same direction as the correction
+ if (non_zero[i] && positive[i] == (error_correction > 0)) {
+ if (segment_proportion == 0)
+ segment_proportion = MIN(1.0f, block->millimeters / backlash_smoothing_mm);
+ error_correction *= segment_proportion;
+ }
+ else
+ error_correction = 0; // Don't take up any backlash in this segment, as it would subtract steps
+ }
+ #endif
+ // Making a correction reduces the residual error and modifies delta_mm
+ if (error_correction) {
+ block->steps[i] += ABS(error_correction);
+ residual_error[i] -= error_correction;
+ delta_mm[i] = (positive[i] ? 1.0f : -1.0f) * block->steps[i] * steps_to_mm[i];
+ made_adjustment = true;
+ }
+ }
+ }
+
+ // If any of the axes were adjusted, recompute block->millimeters
+ if (made_adjustment)
+ block->millimeters = SQRT(sq(delta_mm[X_AXIS]) + sq(delta_mm[Y_AXIS]) + sq(delta_mm[Z_AXIS]));
+ }
+#endif // BACKLASH_COMPENSATION
+
/**
* Planner::_buffer_steps
*
@@ -1738,6 +1831,70 @@ bool Planner::_populate_block(block_t * const block, bool split_move,
block->steps[C_AXIS] = ABS(dc);
#endif
+ /**
+ * This part of the code calculates the total length of the movement.
+ * For cartesian bots, the X_AXIS is the real X movement and same for Y_AXIS.
+ * But for corexy bots, that is not true. The "X_AXIS" and "Y_AXIS" motors (that should be named to A_AXIS
+ * and B_AXIS) cannot be used for X and Y length, because A=X+Y and B=X-Y.
+ * So we need to create other 2 "AXIS", named X_HEAD and Y_HEAD, meaning the real displacement of the Head.
+ * Having the real displacement of the head, we can calculate the total movement length and apply the desired speed.
+ */
+ #if IS_CORE
+ float delta_mm[Z_HEAD + 1];
+ #if CORE_IS_XY
+ delta_mm[X_HEAD] = da * steps_to_mm[A_AXIS];
+ delta_mm[Y_HEAD] = db * steps_to_mm[B_AXIS];
+ delta_mm[Z_AXIS] = dc * steps_to_mm[Z_AXIS];
+ delta_mm[A_AXIS] = (da + db) * steps_to_mm[A_AXIS];
+ delta_mm[B_AXIS] = CORESIGN(da - db) * steps_to_mm[B_AXIS];
+ #elif CORE_IS_XZ
+ delta_mm[X_HEAD] = da * steps_to_mm[A_AXIS];
+ delta_mm[Y_AXIS] = db * steps_to_mm[Y_AXIS];
+ delta_mm[Z_HEAD] = dc * steps_to_mm[C_AXIS];
+ delta_mm[A_AXIS] = (da + dc) * steps_to_mm[A_AXIS];
+ delta_mm[C_AXIS] = CORESIGN(da - dc) * steps_to_mm[C_AXIS];
+ #elif CORE_IS_YZ
+ delta_mm[X_AXIS] = da * steps_to_mm[X_AXIS];
+ delta_mm[Y_HEAD] = db * steps_to_mm[B_AXIS];
+ delta_mm[Z_HEAD] = dc * steps_to_mm[C_AXIS];
+ delta_mm[B_AXIS] = (db + dc) * steps_to_mm[B_AXIS];
+ delta_mm[C_AXIS] = CORESIGN(db - dc) * steps_to_mm[C_AXIS];
+ #endif
+ #else
+ float delta_mm[ABCE];
+ delta_mm[A_AXIS] = da * steps_to_mm[A_AXIS];
+ delta_mm[B_AXIS] = db * steps_to_mm[B_AXIS];
+ delta_mm[C_AXIS] = dc * steps_to_mm[C_AXIS];
+ #endif
+ delta_mm[E_AXIS] = esteps_float * steps_to_mm[E_AXIS_N(extruder)];
+
+ if (block->steps[A_AXIS] < MIN_STEPS_PER_SEGMENT && block->steps[B_AXIS] < MIN_STEPS_PER_SEGMENT && block->steps[C_AXIS] < MIN_STEPS_PER_SEGMENT) {
+ block->millimeters = ABS(delta_mm[E_AXIS]);
+ }
+ else {
+ if (millimeters)
+ block->millimeters = millimeters;
+ else
+ block->millimeters = SQRT(
+ #if CORE_IS_XY
+ sq(delta_mm[X_HEAD]) + sq(delta_mm[Y_HEAD]) + sq(delta_mm[Z_AXIS])
+ #elif CORE_IS_XZ
+ sq(delta_mm[X_HEAD]) + sq(delta_mm[Y_AXIS]) + sq(delta_mm[Z_HEAD])
+ #elif CORE_IS_YZ
+ sq(delta_mm[X_AXIS]) + sq(delta_mm[Y_HEAD]) + sq(delta_mm[Z_HEAD])
+ #else
+ sq(delta_mm[X_AXIS]) + sq(delta_mm[Y_AXIS]) + sq(delta_mm[Z_AXIS])
+ #endif
+ );
+
+ #if ENABLED(BACKLASH_COMPENSATION)
+ // If we make it here, at least one of the axes has more steps than
+ // MIN_STEPS_PER_SEGMENT, so the segment won't get dropped by Marlin
+ // and it is okay to add steps for backlash correction.
+ add_backlash_correction_steps(da, db, dc, dm, block, delta_mm);
+ #endif
+ }
+
block->steps[E_AXIS] = esteps;
block->step_event_count = MAX(block->steps[A_AXIS], block->steps[B_AXIS], block->steps[C_AXIS], esteps);
@@ -1925,62 +2082,6 @@ bool Planner::_populate_block(block_t * const block, bool split_move,
else
NOLESS(fr_mm_s, settings.min_travel_feedrate_mm_s);
- /**
- * This part of the code calculates the total length of the movement.
- * For cartesian bots, the X_AXIS is the real X movement and same for Y_AXIS.
- * But for corexy bots, that is not true. The "X_AXIS" and "Y_AXIS" motors (that should be named to A_AXIS
- * and B_AXIS) cannot be used for X and Y length, because A=X+Y and B=X-Y.
- * So we need to create other 2 "AXIS", named X_HEAD and Y_HEAD, meaning the real displacement of the Head.
- * Having the real displacement of the head, we can calculate the total movement length and apply the desired speed.
- */
- #if IS_CORE
- float delta_mm[Z_HEAD + 1];
- #if CORE_IS_XY
- delta_mm[X_HEAD] = da * steps_to_mm[A_AXIS];
- delta_mm[Y_HEAD] = db * steps_to_mm[B_AXIS];
- delta_mm[Z_AXIS] = dc * steps_to_mm[Z_AXIS];
- delta_mm[A_AXIS] = (da + db) * steps_to_mm[A_AXIS];
- delta_mm[B_AXIS] = CORESIGN(da - db) * steps_to_mm[B_AXIS];
- #elif CORE_IS_XZ
- delta_mm[X_HEAD] = da * steps_to_mm[A_AXIS];
- delta_mm[Y_AXIS] = db * steps_to_mm[Y_AXIS];
- delta_mm[Z_HEAD] = dc * steps_to_mm[C_AXIS];
- delta_mm[A_AXIS] = (da + dc) * steps_to_mm[A_AXIS];
- delta_mm[C_AXIS] = CORESIGN(da - dc) * steps_to_mm[C_AXIS];
- #elif CORE_IS_YZ
- delta_mm[X_AXIS] = da * steps_to_mm[X_AXIS];
- delta_mm[Y_HEAD] = db * steps_to_mm[B_AXIS];
- delta_mm[Z_HEAD] = dc * steps_to_mm[C_AXIS];
- delta_mm[B_AXIS] = (db + dc) * steps_to_mm[B_AXIS];
- delta_mm[C_AXIS] = CORESIGN(db - dc) * steps_to_mm[C_AXIS];
- #endif
- #else
- float delta_mm[ABCE];
- delta_mm[A_AXIS] = da * steps_to_mm[A_AXIS];
- delta_mm[B_AXIS] = db * steps_to_mm[B_AXIS];
- delta_mm[C_AXIS] = dc * steps_to_mm[C_AXIS];
- #endif
- delta_mm[E_AXIS] = esteps_float * steps_to_mm[E_AXIS_N(extruder)];
-
- if (block->steps[A_AXIS] < MIN_STEPS_PER_SEGMENT && block->steps[B_AXIS] < MIN_STEPS_PER_SEGMENT && block->steps[C_AXIS] < MIN_STEPS_PER_SEGMENT) {
- block->millimeters = ABS(delta_mm[E_AXIS]);
- }
- else if (!millimeters) {
- block->millimeters = SQRT(
- #if CORE_IS_XY
- sq(delta_mm[X_HEAD]) + sq(delta_mm[Y_HEAD]) + sq(delta_mm[Z_AXIS])
- #elif CORE_IS_XZ
- sq(delta_mm[X_HEAD]) + sq(delta_mm[Y_AXIS]) + sq(delta_mm[Z_HEAD])
- #elif CORE_IS_YZ
- sq(delta_mm[X_AXIS]) + sq(delta_mm[Y_HEAD]) + sq(delta_mm[Z_HEAD])
- #else
- sq(delta_mm[X_AXIS]) + sq(delta_mm[Y_AXIS]) + sq(delta_mm[Z_AXIS])
- #endif
- );
- }
- else
- block->millimeters = millimeters;
-
const float inverse_millimeters = 1.0f / block->millimeters; // Inverse millimeters to remove multiple divides
// Calculate inverse time for this move. No divide by zero due to previous checks.
diff --git a/Marlin/src/module/planner.h b/Marlin/src/module/planner.h
index 4fe90b9fa7..2592f45b54 100644
--- a/Marlin/src/module/planner.h
+++ b/Marlin/src/module/planner.h
@@ -338,6 +338,10 @@ class Planner {
volatile static uint32_t block_buffer_runtime_us; //Theoretical block buffer runtime in µs
#endif
+ #if ENABLED(BACKLASH_COMPENSATION)
+ static void add_backlash_correction_steps(const int32_t da, const int32_t db, const int32_t dc, const uint8_t dm, block_t * const block, float (&delta_mm)[ABCE]);
+ #endif
+
public:
/**
diff --git a/Marlin/src/module/probe.cpp b/Marlin/src/module/probe.cpp
index 596ebf0182..76be571444 100644
--- a/Marlin/src/module/probe.cpp
+++ b/Marlin/src/module/probe.cpp
@@ -511,6 +511,30 @@ bool set_probe_deployed(const bool deploy) {
}
#endif
+#if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ #if ENABLED(Z_MIN_PROBE_ENDSTOP)
+ #define TEST_PROBE_PIN (READ(Z_MIN_PROBE_PIN) != Z_MIN_PROBE_ENDSTOP_INVERTING)
+ #else
+ #define TEST_PROBE_PIN (READ(Z_MIN_PIN) != Z_MIN_ENDSTOP_INVERTING)
+ #endif
+
+ extern float backlash_measured_mm[];
+ extern uint8_t backlash_measured_num[];
+
+ /* Measure Z backlash by raising nozzle in increments until probe deactivates */
+ static void measure_backlash_with_probe() {
+ if (backlash_measured_num[Z_AXIS] == 255) return;
+
+ float start_height = current_position[Z_AXIS];
+ while (current_position[Z_AXIS] < (start_height + BACKLASH_MEASUREMENT_LIMIT) && TEST_PROBE_PIN)
+ do_blocking_move_to_z(current_position[Z_AXIS] + BACKLASH_MEASUREMENT_RESOLUTION, MMM_TO_MMS(BACKLASH_MEASUREMENT_FEEDRATE));
+
+ // The backlash from all probe points is averaged, so count the number of measurements
+ backlash_measured_mm[Z_AXIS] += current_position[Z_AXIS] - start_height;
+ backlash_measured_num[Z_AXIS]++;
+ }
+#endif
+
/**
* @brief Used by run_z_probe to do a single Z probe move.
*
@@ -545,11 +569,12 @@ static bool do_probe_move(const float z, const float fr_mm_s) {
// Disable stealthChop if used. Enable diag1 pin on driver.
#if ENABLED(SENSORLESS_PROBING)
+ sensorless_t stealth_states { false, false, false };
#if ENABLED(DELTA)
- tmc_stallguard(stepperX);
- tmc_stallguard(stepperY);
+ stealth_states.x = tmc_enable_stallguard(stepperX);
+ stealth_states.y = tmc_enable_stallguard(stepperY);
#endif
- tmc_stallguard(stepperZ);
+ stealth_states.z = tmc_enable_stallguard(stepperZ);
endstops.enable(true);
#endif
@@ -583,10 +608,10 @@ static bool do_probe_move(const float z, const float fr_mm_s) {
#if ENABLED(SENSORLESS_PROBING)
endstops.not_homing();
#if ENABLED(DELTA)
- tmc_stallguard(stepperX, false);
- tmc_stallguard(stepperY, false);
+ tmc_disable_stallguard(stepperX, stealth_states.x);
+ tmc_disable_stallguard(stepperY, stealth_states.y);
#endif
- tmc_stallguard(stepperZ, false);
+ tmc_disable_stallguard(stepperZ, stealth_states.z);
#endif
// Retract BLTouch immediately after a probe if it was triggered
@@ -677,6 +702,10 @@ static float run_z_probe() {
return NAN;
}
+ #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
+ measure_backlash_with_probe();
+ #endif
+
#if MULTIPLE_PROBING > 2
probes_total += current_position[Z_AXIS];
if (p > 1) do_blocking_move_to_z(current_position[Z_AXIS] + Z_CLEARANCE_MULTI_PROBE, MMM_TO_MMS(Z_PROBE_SPEED_FAST));
diff --git a/Marlin/src/module/stepper.cpp b/Marlin/src/module/stepper.cpp
index e25b4e614d..69069562cc 100644
--- a/Marlin/src/module/stepper.cpp
+++ b/Marlin/src/module/stepper.cpp
@@ -2820,74 +2820,74 @@ void Stepper::report_positions() {
void Stepper::microstep_readings() {
SERIAL_ECHOPGM("MS1,MS2,MS3 Pins\nX: ");
#if HAS_X_MICROSTEPS
- SERIAL_ECHO(READ(X_MS1_PIN));
- SERIAL_ECHO(READ(X_MS2_PIN));
+ SERIAL_CHAR('0' + READ(X_MS1_PIN));
+ SERIAL_CHAR('0' + READ(X_MS2_PIN));
#if PIN_EXISTS(X_MS3)
- SERIAL_ECHOLN(READ(X_MS3_PIN));
+ SERIAL_ECHOLN((int)READ(X_MS3_PIN));
#endif
#endif
#if HAS_Y_MICROSTEPS
SERIAL_ECHOPGM("Y: ");
- SERIAL_ECHO(READ(Y_MS1_PIN));
- SERIAL_ECHO(READ(Y_MS2_PIN));
+ SERIAL_CHAR('0' + READ(Y_MS1_PIN));
+ SERIAL_CHAR('0' + READ(Y_MS2_PIN));
#if PIN_EXISTS(Y_MS3)
- SERIAL_ECHOLN(READ(Y_MS3_PIN));
+ SERIAL_ECHOLN((int)READ(Y_MS3_PIN));
#endif
#endif
#if HAS_Z_MICROSTEPS
SERIAL_ECHOPGM("Z: ");
- SERIAL_ECHO(READ(Z_MS1_PIN));
- SERIAL_ECHO(READ(Z_MS2_PIN));
+ SERIAL_CHAR('0' + READ(Z_MS1_PIN));
+ SERIAL_CHAR('0' + READ(Z_MS2_PIN));
#if PIN_EXISTS(Z_MS3)
- SERIAL_ECHOLN(READ(Z_MS3_PIN));
+ SERIAL_ECHOLN((int)READ(Z_MS3_PIN));
#endif
#endif
#if HAS_E0_MICROSTEPS
SERIAL_ECHOPGM("E0: ");
- SERIAL_ECHO(READ(E0_MS1_PIN));
- SERIAL_ECHO(READ(E0_MS2_PIN));
+ SERIAL_CHAR('0' + READ(E0_MS1_PIN));
+ SERIAL_CHAR('0' + READ(E0_MS2_PIN));
#if PIN_EXISTS(E0_MS3)
- SERIAL_ECHOLN(READ(E0_MS3_PIN));
+ SERIAL_ECHOLN((int)READ(E0_MS3_PIN));
#endif
#endif
#if HAS_E1_MICROSTEPS
SERIAL_ECHOPGM("E1: ");
- SERIAL_ECHO(READ(E1_MS1_PIN));
- SERIAL_ECHO(READ(E1_MS2_PIN));
+ SERIAL_CHAR('0' + READ(E1_MS1_PIN));
+ SERIAL_CHAR('0' + READ(E1_MS2_PIN));
#if PIN_EXISTS(E1_MS3)
- SERIAL_ECHOLN(READ(E1_MS3_PIN));
+ SERIAL_ECHOLN((int)READ(E1_MS3_PIN));
#endif
#endif
#if HAS_E2_MICROSTEPS
SERIAL_ECHOPGM("E2: ");
- SERIAL_ECHO(READ(E2_MS1_PIN));
- SERIAL_ECHO(READ(E2_MS2_PIN));
+ SERIAL_CHAR('0' + READ(E2_MS1_PIN));
+ SERIAL_CHAR('0' + READ(E2_MS2_PIN));
#if PIN_EXISTS(E2_MS3)
- SERIAL_ECHOLN(READ(E2_MS3_PIN));
+ SERIAL_ECHOLN((int)READ(E2_MS3_PIN));
#endif
#endif
#if HAS_E3_MICROSTEPS
SERIAL_ECHOPGM("E3: ");
- SERIAL_ECHO(READ(E3_MS1_PIN));
- SERIAL_ECHO(READ(E3_MS2_PIN));
+ SERIAL_CHAR('0' + READ(E3_MS1_PIN));
+ SERIAL_CHAR('0' + READ(E3_MS2_PIN));
#if PIN_EXISTS(E3_MS3)
- SERIAL_ECHOLN(READ(E3_MS3_PIN));
+ SERIAL_ECHOLN((int)READ(E3_MS3_PIN));
#endif
#endif
#if HAS_E4_MICROSTEPS
SERIAL_ECHOPGM("E4: ");
- SERIAL_ECHO(READ(E4_MS1_PIN));
- SERIAL_ECHO(READ(E4_MS2_PIN));
+ SERIAL_CHAR('0' + READ(E4_MS1_PIN));
+ SERIAL_CHAR('0' + READ(E4_MS2_PIN));
#if PIN_EXISTS(E4_MS3)
- SERIAL_ECHOLN(READ(E4_MS3_PIN));
+ SERIAL_ECHOLN((int)READ(E4_MS3_PIN));
#endif
#endif
#if HAS_E5_MICROSTEPS
SERIAL_ECHOPGM("E5: ");
- SERIAL_ECHO(READ(E5_MS1_PIN));
- SERIAL_ECHOLN(READ(E5_MS2_PIN));
+ SERIAL_CHAR('0' + READ(E5_MS1_PIN));
+ SERIAL_ECHOLN((int)READ(E5_MS2_PIN));
#if PIN_EXISTS(E5_MS3)
- SERIAL_ECHOLN(READ(E5_MS3_PIN));
+ SERIAL_ECHOLN((int)READ(E5_MS3_PIN));
#endif
#endif
}
diff --git a/Marlin/src/module/stepper_indirection.cpp b/Marlin/src/module/stepper_indirection.cpp
index bf0cb7f681..248582ce95 100644
--- a/Marlin/src/module/stepper_indirection.cpp
+++ b/Marlin/src/module/stepper_indirection.cpp
@@ -140,7 +140,8 @@
#endif // TMC26X
#if HAS_TRINAMIC
- #define _TMC_INIT(ST, SPMM) tmc_init(stepper##ST, ST##_CURRENT, ST##_MICROSTEPS, ST##_HYBRID_THRESHOLD, SPMM)
+ enum StealthIndex : uint8_t { STEALTH_AXIS_XY, STEALTH_AXIS_Z, STEALTH_AXIS_E };
+ #define _TMC_INIT(ST, SPMM_INDEX, STEALTH_INDEX) tmc_init(stepper##ST, ST##_CURRENT, ST##_MICROSTEPS, ST##_HYBRID_THRESHOLD, planner.settings.axis_steps_per_mm[SPMM_INDEX], stealthchop_by_axis[STEALTH_INDEX])
#endif
//
@@ -201,19 +202,17 @@
#endif
template
- void tmc_init(TMCMarlin &st, const uint16_t mA, const uint16_t microsteps, const uint32_t thrs, const float spmm) {
- #if DISABLED(STEALTHCHOP) || DISABLED(HYBRID_THRESHOLD)
- UNUSED(thrs);
- UNUSED(spmm);
- #endif
+ void tmc_init(TMCMarlin &st, const uint16_t mA, const uint16_t microsteps, const uint32_t thrs, const float spmm, const bool stealth) {
st.begin();
+ static constexpr int8_t timings[] = CHOPPER_TIMING; // Default 4, -2, 1
+
CHOPCONF_t chopconf{0};
chopconf.tbl = 1;
- chopconf.toff = 3;
+ chopconf.toff = timings[0];
chopconf.intpol = INTERPOLATE;
- chopconf.hstrt = 2;
- chopconf.hend = 5;
+ chopconf.hend = timings[1] + 3;
+ chopconf.hstrt = timings[2] - 1;
st.CHOPCONF(chopconf.sr);
st.rms_current(mA, HOLD_MULTIPLIER);
@@ -221,20 +220,22 @@
st.iholddelay(10);
st.TPOWERDOWN(128); // ~2s until driver lowers to hold current
- #if ENABLED(STEALTHCHOP)
- st.en_pwm_mode(true);
+ st.en_pwm_mode(stealth);
- PWMCONF_t pwmconf{0};
- pwmconf.pwm_freq = 0b01; // f_pwm = 2/683 f_clk
- pwmconf.pwm_autoscale = true;
- pwmconf.pwm_grad = 5;
- pwmconf.pwm_ampl = 180;
- st.PWMCONF(pwmconf.sr);
+ PWMCONF_t pwmconf{0};
+ pwmconf.pwm_freq = 0b01; // f_pwm = 2/683 f_clk
+ pwmconf.pwm_autoscale = true;
+ pwmconf.pwm_grad = 5;
+ pwmconf.pwm_ampl = 180;
+ st.PWMCONF(pwmconf.sr);
- #if ENABLED(HYBRID_THRESHOLD)
- st.TPWMTHRS(12650000UL*microsteps/(256*thrs*spmm));
- #endif
+ #if ENABLED(HYBRID_THRESHOLD)
+ st.TPWMTHRS(12650000UL*microsteps/(256*thrs*spmm));
+ #else
+ UNUSED(thrs);
+ UNUSED(spmm);
#endif
+
st.GSTAT(); // Clear GSTAT
}
#endif // TMC2130
@@ -440,48 +441,46 @@
}
template
- void tmc_init(TMCMarlin &st, const uint16_t mA, const uint16_t microsteps, const uint32_t thrs, const float spmm) {
- #if DISABLED(STEALTHCHOP) || DISABLED(HYBRID_THRESHOLD)
- UNUSED(thrs);
- UNUSED(spmm);
- #endif
+ void tmc_init(TMCMarlin &st, const uint16_t mA, const uint16_t microsteps, const uint32_t thrs, const float spmm, const bool stealth) {
+ static constexpr int8_t timings[] = CHOPPER_TIMING; // Default 4, -2, 1
TMC2208_n::GCONF_t gconf{0};
gconf.pdn_disable = true; // Use UART
gconf.mstep_reg_select = true; // Select microsteps with UART
gconf.i_scale_analog = false;
+ gconf.en_spreadcycle = !stealth;
+ st.GCONF(gconf.sr);
TMC2208_n::CHOPCONF_t chopconf{0};
chopconf.tbl = 0b01; // blank_time = 24
- chopconf.toff = 5;
+ chopconf.toff = timings[0];
chopconf.intpol = INTERPOLATE;
- chopconf.hstrt = 2;
- chopconf.hend = 5;
+ chopconf.hend = timings[1] + 3;
+ chopconf.hstrt = timings[2] - 1;
st.CHOPCONF(chopconf.sr);
st.rms_current(mA, HOLD_MULTIPLIER);
st.microsteps(microsteps);
st.iholddelay(10);
st.TPOWERDOWN(128); // ~2s until driver lowers to hold current
- #if ENABLED(STEALTHCHOP)
- gconf.en_spreadcycle = false;
- TMC2208_n::PWMCONF_t pwmconf{0};
- pwmconf.pwm_lim = 12;
- pwmconf.pwm_reg = 8;
- pwmconf.pwm_autograd = true;
- pwmconf.pwm_autoscale = true;
- pwmconf.pwm_freq = 0b01;
- pwmconf.pwm_grad = 14;
- pwmconf.pwm_ofs = 36;
- st.PWMCONF(pwmconf.sr);
- #if ENABLED(HYBRID_THRESHOLD)
- st.TPWMTHRS(12650000UL*microsteps/(256*thrs*spmm));
- #endif
+ TMC2208_n::PWMCONF_t pwmconf{0};
+ pwmconf.pwm_lim = 12;
+ pwmconf.pwm_reg = 8;
+ pwmconf.pwm_autograd = true;
+ pwmconf.pwm_autoscale = true;
+ pwmconf.pwm_freq = 0b01;
+ pwmconf.pwm_grad = 14;
+ pwmconf.pwm_ofs = 36;
+ st.PWMCONF(pwmconf.sr);
+
+ #if ENABLED(HYBRID_THRESHOLD)
+ st.TPWMTHRS(12650000UL*microsteps/(256*thrs*spmm));
#else
- gconf.en_spreadcycle = true;
+ UNUSED(thrs);
+ UNUSED(spmm);
#endif
- st.GCONF(gconf.sr);
+
st.GSTAT(0b111); // Clear
delay(200);
}
@@ -543,15 +542,22 @@
#endif
template
- void tmc_init(TMCMarlin &st, const uint16_t mA, const uint16_t microsteps, const uint32_t, const float) {
+ void tmc_init(TMCMarlin &st, const uint16_t mA, const uint16_t microsteps, const uint32_t, const float, const bool) {
st.begin();
+
+ static constexpr int8_t timings[] = CHOPPER_TIMING; // Default 4, -2, 1
+
+ TMC2660_n::CHOPCONF_t chopconf{0};
+ chopconf.tbl = 1;
+ chopconf.toff = timings[0];
+ chopconf.hend = timings[1] + 3;
+ chopconf.hstrt = timings[2] - 1;
+ st.CHOPCONF(chopconf.sr);
+
st.rms_current(mA);
st.microsteps(microsteps);
- st.blank_time(24);
- st.toff(5); // Only enables the driver if used with stealthChop
st.intpol(INTERPOLATE);
- //st.hysteresis_start(3);
- //st.hysteresis_end(2);
+ st.diss2g(true); // Disable short to ground protection. Too many false readings?
}
#endif // TMC2660
@@ -605,44 +611,66 @@ void reset_stepper_drivers() {
L6470_init_to_defaults();
#endif
+ #if HAS_TRINAMIC
+ static constexpr bool stealthchop_by_axis[] = {
+ #if ENABLED(STEALTHCHOP_XY)
+ true
+ #else
+ false
+ #endif
+ ,
+ #if ENABLED(STEALTHCHOP_Z)
+ true
+ #else
+ false
+ #endif
+ ,
+ #if ENABLED(STEALTHCHOP_E)
+ true
+ #else
+ false
+ #endif
+ };
+ #endif
+
#if AXIS_IS_TMC(X)
- _TMC_INIT(X, planner.settings.axis_steps_per_mm[X_AXIS]);
+ _TMC_INIT(X, X_AXIS, STEALTH_AXIS_XY);
#endif
#if AXIS_IS_TMC(X2)
- _TMC_INIT(X2, planner.settings.axis_steps_per_mm[X_AXIS]);
+ _TMC_INIT(X2, X_AXIS, STEALTH_AXIS_XY);
#endif
#if AXIS_IS_TMC(Y)
- _TMC_INIT(Y, planner.settings.axis_steps_per_mm[Y_AXIS]);
+ _TMC_INIT(Y, Y_AXIS, STEALTH_AXIS_XY);
#endif
#if AXIS_IS_TMC(Y2)
- _TMC_INIT(Y2, planner.settings.axis_steps_per_mm[Y_AXIS]);
+ _TMC_INIT(Y2, Y_AXIS, STEALTH_AXIS_XY);
#endif
#if AXIS_IS_TMC(Z)
- _TMC_INIT(Z, planner.settings.axis_steps_per_mm[Z_AXIS]);
+ _TMC_INIT(Z, Z_AXIS, STEALTH_AXIS_Z);
#endif
#if AXIS_IS_TMC(Z2)
- _TMC_INIT(Z2, planner.settings.axis_steps_per_mm[Z_AXIS]);
+ _TMC_INIT(Z2, Z_AXIS, STEALTH_AXIS_Z);
#endif
#if AXIS_IS_TMC(Z3)
- _TMC_INIT(Z3, planner.settings.axis_steps_per_mm[Z_AXIS]);
+ _TMC_INIT(Z3, Z_AXIS, STEALTH_AXIS_Z);
#endif
#if AXIS_IS_TMC(E0)
- _TMC_INIT(E0, planner.settings.axis_steps_per_mm[E_AXIS_N(0)]);
+ _TMC_INIT(E0, E_AXIS, STEALTH_AXIS_E);
#endif
#if AXIS_IS_TMC(E1)
- _TMC_INIT(E1, planner.settings.axis_steps_per_mm[E_AXIS_N(1)]);
+ _TMC_INIT(E1, E_AXIS_N(1), STEALTH_AXIS_E);
#endif
#if AXIS_IS_TMC(E2)
- _TMC_INIT(E2, planner.settings.axis_steps_per_mm[E_AXIS_N(2)]);
+ _TMC_INIT(E2, E_AXIS_N(2), STEALTH_AXIS_E);
#endif
#if AXIS_IS_TMC(E3)
- _TMC_INIT(E3, planner.settings.axis_steps_per_mm[E_AXIS_N(3)]);
+ _TMC_INIT(E3, E_AXIS_N(3), STEALTH_AXIS_E);
#endif
#if AXIS_IS_TMC(E4)
- _TMC_INIT(E4, planner.settings.axis_steps_per_mm[E_AXIS_N(4)]);
+ _TMC_INIT(E4, E_AXIS_N(4), STEALTH_AXIS_E);
#endif
#if AXIS_IS_TMC(E5)
- _TMC_INIT(E5, planner.settings.axis_steps_per_mm[E_AXIS_N(5)]);
+ _TMC_INIT(E5, E_AXIS_N(5), STEALTH_AXIS_E);
#endif
#if USE_SENSORLESS
diff --git a/Marlin/src/module/thermistor/thermistor_1.h b/Marlin/src/module/thermistor/thermistor_1.h
index 295bd985c2..ea887952f5 100644
--- a/Marlin/src/module/thermistor/thermistor_1.h
+++ b/Marlin/src/module/thermistor/thermistor_1.h
@@ -22,17 +22,6 @@
// R25 = 100 kOhm, beta25 = 4092 K, 4.7 kOhm pull-up, bed thermistor
const short temptable_1[][2] PROGMEM = {
- { OV( 1), 355 },
- { OV( 3), 350 },
- { OV( 5), 345 },
- { OV( 7), 340 },
- { OV( 9), 335 },
- { OV( 11), 330 },
- { OV( 13), 325 },
- { OV( 15), 320 },
- { OV( 17), 315 },
- { OV( 19), 310 },
- { OV( 21), 305 },
{ OV( 23), 300 },
{ OV( 25), 295 },
{ OV( 27), 290 },
diff --git a/Marlin/src/module/thermistor/thermistor_61.h b/Marlin/src/module/thermistor/thermistor_61.h
new file mode 100644
index 0000000000..3b8d8af06a
--- /dev/null
+++ b/Marlin/src/module/thermistor/thermistor_61.h
@@ -0,0 +1,115 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+
+// R25 = 100 kOhm, beta25 = 3950 K, 4.7 kOhm pull-up,
+// Formbot / Vivedino high temp 100k thermistor
+// 100KR13950181203
+// Generated with https://www.thingiverse.com/thing:103668
+// Using table 1 with datasheet values
+// Resistance 100k Ohms at 25deg. C
+//Resistance Tolerance + / -1%
+//B Value 3950K at 25/50 deg. C
+//B Value Tolerance + / - 1%
+const short temptable_61[][2] PROGMEM = {
+ { OV(5) , 400 },
+{ OV(12) , 350 },
+{ OV(13) , 345 },
+{ OV(14) , 340 },
+{ OV(14) , 335 },
+{ OV(15) , 330 },
+{ OV(16) , 325 },
+{ OV(17) , 320 },
+{ OV(19) , 315 },
+{ OV(20) , 310 },
+{ OV(21) , 305 },
+{ OV(23) , 300 },
+{ OV(24) , 295 },
+{ OV(26) , 290 },
+{ OV(28) , 285 },
+{ OV(30) , 280 },
+{ OV(33) , 275 },
+{ OV(35) , 270 },
+{ OV(38) , 265 },
+{ OV(41) , 260 },
+{ OV(44) , 255 },
+{ OV(48) , 250 },
+{ OV(52) , 245 },
+{ OV(56) , 240 },
+{ OV(61) , 235 },
+{ OV(66) , 230 },
+{ OV(72) , 225 },
+{ OV(79) , 220 },
+{ OV(86) , 215 },
+{ OV(93) , 210 },
+{ OV(102) , 205 },
+{ OV(111) , 200 },
+{ OV(122) , 195 },
+{ OV(133) , 190 },
+{ OV(146) , 185 },
+{ OV(160) , 180 },
+{ OV(175) , 175 },
+{ OV(191) , 170 },
+{ OV(210) , 165 },
+{ OV(229) , 160 },
+{ OV(251) , 155 },
+{ OV(274) , 150 },
+{ OV(299) , 145 },
+{ OV(327) , 140 },
+{ OV(355) , 135 },
+{ OV(386) , 130 },
+{ OV(419) , 125 },
+{ OV(452) , 120 },
+{ OV(488) , 115 },
+{ OV(524) , 110 },
+{ OV(561) , 105 },
+{ OV(598) , 100 },
+{ OV(635) , 95 },
+{ OV(672) , 90 },
+{ OV(707) , 85 },
+{ OV(742) , 80 },
+{ OV(780) , 75 },
+{ OV(810) , 70 },
+{ OV(833) , 65 },
+{ OV(860) , 60 },
+{ OV(883) , 55 },
+{ OV(905) , 50 },
+{ OV(923) , 45 },
+{ OV(940) , 40 },
+{ OV(954) , 35 },
+{ OV(967) , 30 },
+{ OV(977) , 25 },
+{ OV(986) , 20 },
+{ OV(993) , 15 },
+{ OV(999) , 10 },
+{ OV(1004) , 5 },
+{ OV(1009) , 0 },
+{ OV(1012) , -5 },
+{ OV(1014) , -10 },
+{ OV(1016) , -15 },
+{ OV(1018) , -20 },
+{ OV(1019) , -25 },
+{ OV(1020) , -30 },
+{ OV(1021) , -35 },
+{ OV(1022) , -40 }
+};
+
+
diff --git a/Marlin/src/module/thermistor/thermistors.h b/Marlin/src/module/thermistor/thermistors.h
index 953fdf7fea..cc8ebcdf24 100644
--- a/Marlin/src/module/thermistor/thermistors.h
+++ b/Marlin/src/module/thermistor/thermistors.h
@@ -98,6 +98,9 @@
#if ANY_THERMISTOR_IS(60) // beta25 = 3950 K, R25 = 100 kOhm, Pull-up = 4.7 kOhm, "Maker's Tool Works Kapton Bed"
#include "thermistor_60.h"
#endif
+#if ANY_THERMISTOR_IS(61) // beta25 = 3950 K, R25 = 100 kOhm, Pull-up = 4.7 kOhm, "Formbot / Vivedino 350°C Thermistor"
+ #include "thermistor_61.h"
+#endif
#if ANY_THERMISTOR_IS(66) // beta25 = 4500 K, R25 = 2.5 MOhm, Pull-up = 4.7 kOhm, "DyzeDesign 500 °C Thermistor"
#include "thermistor_66.h"
#endif
diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h
index da1b0cd435..2b5d3fc2c7 100644
--- a/Marlin/src/pins/pins.h
+++ b/Marlin/src/pins/pins.h
@@ -109,7 +109,7 @@
#elif MB(MKS_GEN_L)
#include "pins_MKS_GEN_L.h" // ATmega1280, ATmega2560 env:megaatmega1280 env:megaatmega2560
#elif MB(KFB_2)
- #include "pins_KFB_2.h" // ATmega2560 env:megaatmega2560
+ #include "pins_BIQU_KFB_2.h" // ATmega2560 env:megaatmega2560
#elif MB(ZRIB_V20)
#include "pins_ZRIB_V20.h" // ATmega1280, ATmega2560 env:megaatmega1280 env:megaatmega2560 (MKS_GEN_13)
#elif MB(FELIX2)
diff --git a/Marlin/src/pins/pinsDebug.h b/Marlin/src/pins/pinsDebug.h
index d8d6966a7e..792eb6db72 100644
--- a/Marlin/src/pins/pinsDebug.h
+++ b/Marlin/src/pins/pinsDebug.h
@@ -140,11 +140,11 @@ inline void report_pin_state_extended(pin_t pin, bool ignore, bool extended = fa
if (pin == 46 || pin == 47) {
if (pin == 46) {
print_input_or_output(GET_OUTPUT(46));
- SERIAL_ECHO(READ(46));
+ SERIAL_CHAR('0' + READ(46));
}
else if (pin == 47) {
print_input_or_output(GET_OUTPUT(47));
- SERIAL_ECHO(READ(47));
+ SERIAL_CHAR('0' + READ(47));
}
}
else
@@ -196,11 +196,11 @@ inline void report_pin_state_extended(pin_t pin, bool ignore, bool extended = fa
SERIAL_ECHO_SP(12);
if (pin == 46) {
print_input_or_output(GET_OUTPUT(46));
- SERIAL_ECHO(READ(46));
+ SERIAL_CHAR('0' + READ(46));
}
else {
print_input_or_output(GET_OUTPUT(47));
- SERIAL_ECHO(READ(47));
+ SERIAL_CHAR('0' + READ(47));
}
}
else
diff --git a/Marlin/src/pins/pins_ARCHIM2.h b/Marlin/src/pins/pins_ARCHIM2.h
index 3d532a426f..473963dc4b 100644
--- a/Marlin/src/pins/pins_ARCHIM2.h
+++ b/Marlin/src/pins/pins_ARCHIM2.h
@@ -38,6 +38,8 @@
#ifndef __SAM3X8E__
#error "Oops! Select 'Archim' in 'Tools > Board.'"
+#elif DISABLED(TMC_USE_SW_SPI)
+ #error "Archim2 requires Software SPI. Enable TMC_USE_SW_SPI in Configuration_adv.h."
#endif
#define BOARD_NAME "Archim 2.0"
diff --git a/Marlin/src/pins/pins_MKS_SBASE.h b/Marlin/src/pins/pins_MKS_SBASE.h
index 4784a8c2a0..e868ed1f46 100644
--- a/Marlin/src/pins/pins_MKS_SBASE.h
+++ b/Marlin/src/pins/pins_MKS_SBASE.h
@@ -55,6 +55,10 @@
#define Z_MIN_PIN P1_28 // The original Mks Sbase DIO19 has a 10k pullup to 3.3V or 5V, 1K series, so when using a Zprobe we must use DIO41 (J8 P1.22)
#define Z_MAX_PIN P1_29 // 10k pullup to 3.3V, 1K series
+#ifndef Z_MIN_PROBE_PIN
+ #define Z_MIN_PROBE_PIN P4_28 // Connector J8
+#endif
+
//
// Steppers
//
@@ -119,7 +123,6 @@
#define PIN_P1_23 P1_23 // PWM Capable
#define PIN_P2_12 P2_12 // Interrupt Capable
#define PIN_P2_11 P2_11 // Interrupt Capable
-#define PIN_P4_28 P4_28
//
// Prusa i3 MK2 Multi Material Multiplexer Support
diff --git a/Marlin/src/pins/pins_ULTRATRONICS_PRO.h b/Marlin/src/pins/pins_ULTRATRONICS_PRO.h
index 699d472586..057fbc2d9a 100644
--- a/Marlin/src/pins/pins_ULTRATRONICS_PRO.h
+++ b/Marlin/src/pins/pins_ULTRATRONICS_PRO.h
@@ -56,30 +56,51 @@
#define X_STEP_PIN 35
#define X_DIR_PIN 34
#define X_ENABLE_PIN 37
+#ifndef X_CS_PIN
+ #define X_CS_PIN 18
+#endif
#define Y_STEP_PIN 22
#define Y_DIR_PIN 23
#define Y_ENABLE_PIN 33
+#ifndef Y_CS_PIN
+ #define Y_CS_PIN 19
+#endif
#define Z_STEP_PIN 25
#define Z_DIR_PIN 26
#define Z_ENABLE_PIN 24
+#ifndef Z_CS_PIN
+ #define Z_CS_PIN 16
+#endif
#define E0_STEP_PIN 47
#define E0_DIR_PIN 46
#define E0_ENABLE_PIN 48
+#ifndef E0_CS_PIN
+ #define E0_CS_PIN 17
+#endif
#define E1_STEP_PIN 44
#define E1_DIR_PIN 36
#define E1_ENABLE_PIN 45
+#ifndef E1_CS_PIN
+ #define E1_CS_PIN -1
+#endif
#define E2_STEP_PIN 42
#define E2_DIR_PIN 41
#define E2_ENABLE_PIN 43
+#ifndef E2_CS_PIN
+ #define E2_CS_PIN -1
+#endif
#define E3_STEP_PIN 39
#define E3_DIR_PIN 38
#define E3_ENABLE_PIN 40
+#ifndef E3_CS_PIN
+ #define E3_CS_PIN -1
+#endif
//
// Temperature Sensors
diff --git a/Marlin/src/sd/cardreader.cpp b/Marlin/src/sd/cardreader.cpp
index a8893e0f12..fb21aab814 100644
--- a/Marlin/src/sd/cardreader.cpp
+++ b/Marlin/src/sd/cardreader.cpp
@@ -384,6 +384,8 @@ void CardReader::initsd() {
SERIAL_ECHO_MSG(MSG_SD_CARD_OK);
}
setroot();
+
+ ui.refresh();
}
void CardReader::release() {
diff --git a/buildroot/share/fonts/README.md b/buildroot/share/fonts/README.md
index ee9d8e00bb..4e6f6f9b15 100644
--- a/buildroot/share/fonts/README.md
+++ b/buildroot/share/fonts/README.md
@@ -16,7 +16,7 @@ http://creativecommons.org/publicdomain/zero/1.0/
- ISO10646_Kana.fon ([fe2bd23](https://github.com/MarlinFirmware/Marlin/commit/fe2bd237d556439499dfdee852c1550c7a16430a))
- Marlin_symbols.fon ([fe2bd23](https://github.com/MarlinFirmware/Marlin/commit/fe2bd237d556439499dfdee852c1550c7a16430a))
-Additional changes to the original font files being distritubted with Marlin are copyrighted under the terms of the [GPLv3](http://www.gnu.org/licenses/gpl-3.0.txt) license.
+Additional changes to the original font files distributed with Marlin are copyrighted under the terms of the [GPLv3](http://www.gnu.org/licenses/gpl-3.0.txt) license.
## Documentation
diff --git a/buildroot/share/git/mfpub b/buildroot/share/git/mfpub
index 200602506c..1295513339 100755
--- a/buildroot/share/git/mfpub
+++ b/buildroot/share/git/mfpub
@@ -115,10 +115,28 @@ git clean -d -f
git checkout gh-pages || { echo "Something went wrong!"; exit 1; }
rsync -av ${TMPFOLDER}/ ./
+opensite() {
+ TOOL=$(which gnome-open xdg-open open | awk '{ print $1 }')
+ URL="http://marlinfw.org/"
+ if [ -z "$TOOL" ]; then
+ echo "Can't find a tool to open the URL:"
+ echo $URL
+ else
+ echo "Opening the site in the browser..."
+ "$TOOL" "$URL"
+ fi
+}
+
# Commit and push the new live site directly
git add --all
git commit --message "Built from ${COMMIT}"
-git push upstream
+git push upstream | {
+ while IFS= read -r line
+ do
+ [[ $line =~ "gh-pages -> gh-pages" ]] && opensite
+ echo "$line"
+ done
+}
# remove the temporary folder
rm -rf ${TMPFOLDER}
diff --git a/buildroot/share/tests/megaatmega2560_tests b/buildroot/share/tests/megaatmega2560_tests
index 501eb8d96c..6a962796b2 100644
--- a/buildroot/share/tests/megaatmega2560_tests
+++ b/buildroot/share/tests/megaatmega2560_tests
@@ -38,7 +38,7 @@ opt_enable PIDTEMPBED FIX_MOUNTED_PROBE Z_SAFE_HOMING \
FWRETRACT ARC_P_CIRCLES ADVANCED_PAUSE_FEATURE CNC_WORKSPACE_PLANES CNC_COORDINATE_SYSTEMS \
POWER_LOSS_RECOVERY POWER_LOSS_PIN POWER_LOSS_STATE FAST_FILE_TRANSFER \
LCD_PROGRESS_BAR LCD_PROGRESS_BAR_TEST PINS_DEBUGGING \
- MAX7219_DEBUG LED_CONTROL_MENU CASE_LIGHT_ENABLE CASE_LIGHT_USE_NEOPIXEL CODEPENDENT_XY_HOMING
+ MAX7219_DEBUG LED_CONTROL_MENU CASE_LIGHT_ENABLE CASE_LIGHT_USE_NEOPIXEL CODEPENDENT_XY_HOMING BACKLASH_COMPENSATION BACKLASH_GCODE
opt_set FANMUX0_PIN 53
exec_test $1 $2 "RAMPS with 2 extruders, RRDFGSC, Linear ABL, LEDs, and many options"
@@ -296,7 +296,7 @@ exec_test $1 $2 "Delta Config (FLSUN AC because it's complex)"
use_example_configs SCARA
opt_enable USE_ZMIN_PLUG FIX_MOUNTED_PROBE AUTO_BED_LEVELING_BILINEAR PAUSE_BEFORE_DEPLOY_STOW \
EEPROM_SETTINGS EEPROM_CHITCHAT ULTIMAKERCONTROLLER \
- MONITOR_DRIVER_STATUS STEALTHCHOP HYBRID_THRESHOLD SENSORLESS_HOMING
+ MONITOR_DRIVER_STATUS STEALTHCHOP_XY STEALTHCHOP_Z STEALTHCHOP_E HYBRID_THRESHOLD SENSORLESS_HOMING
opt_set X_DRIVER_TYPE TMC2130
opt_set Y_DRIVER_TYPE TMC2130
opt_set Z_DRIVER_TYPE TMC2130
@@ -311,7 +311,7 @@ opt_set Y_DRIVER_TYPE TMC2208
opt_set Z_DRIVER_TYPE TMC2208
opt_set E0_DRIVER_TYPE TMC2208
opt_disable Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN
-opt_enable REPRAPWORLD_KEYPAD MONITOR_DRIVER_STATUS STEALTHCHOP HYBRID_THRESHOLD TMC_DEBUG
+opt_enable REPRAPWORLD_KEYPAD MONITOR_DRIVER_STATUS STEALTHCHOP_XY STEALTHCHOP_Z STEALTHCHOP_E HYBRID_THRESHOLD TMC_DEBUG
exec_test $1 $2 "TMC2208 Config"
#
# tvrrug Config need to check board type for sanguino atmega644p
diff --git a/platformio.ini b/platformio.ini
index 27216c0609..9396ad440b 100644
--- a/platformio.ini
+++ b/platformio.ini
@@ -31,7 +31,7 @@ build_flags = -fmax-errors=5
lib_deps =
https://github.com/MarlinFirmware/U8glib-HAL/archive/dev.zip
LiquidCrystal@1.3.4
- https://github.com/teemuatlut/TMCStepper.git
+ TMCStepper@<1.0.0
Adafruit NeoPixel@1.1.3
https://github.com/lincomatic/LiquidTWI2/archive/30aa480.zip
https://github.com/ameyer/Arduino-L6470/archive/master.zip
@@ -86,7 +86,6 @@ framework = arduino
board = at90usb1286
build_flags = ${common.build_flags}
lib_deps = ${common.lib_deps}
-lib_ldf_mode = deep+
src_filter = ${common.default_src_filter} +
extra_scripts = pre:buildroot/share/atom/create_custom_upload_command_CDC.py
monitor_speed = 250000
@@ -103,7 +102,6 @@ framework = arduino
board = at90usb1286
build_flags = ${common.build_flags}
lib_deps = ${common.lib_deps}
-lib_ldf_mode = deep+
src_filter = ${common.default_src_filter} +
extra_scripts = pre:buildroot/share/atom/create_custom_upload_command_DFU.py
monitor_speed = 250000
@@ -164,7 +162,7 @@ monitor_speed = 250000
lib_deps = Servo
LiquidCrystal
https://github.com/MarlinFirmware/U8glib-HAL/archive/dev.zip
- https://github.com/teemuatlut/TMCStepper.git
+ TMCStepper@<1.0.0
[env:LPC1769]
platform = https://github.com/p3p/pio-nxplpc-arduino-lpc176x/archive/master.zip
@@ -182,7 +180,7 @@ monitor_speed = 250000
lib_deps = Servo
LiquidCrystal
https://github.com/MarlinFirmware/U8glib-HAL/archive/dev.zip
- https://github.com/teemuatlut/TMCStepper.git
+ TMCStepper@<1.0.0
#
# Melzi and clones (ATmega1284p)