Skip to content

Commit f468457

Browse files
danym21christran206
authored andcommitted
Add Sensorless Homing current (MarlinFirmware#15690)
1 parent f70df0a commit f468457

File tree

107 files changed

+6420
-5512
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

107 files changed

+6420
-5512
lines changed

Marlin/Configuration_adv.h

+60-52
Original file line numberDiff line numberDiff line change
@@ -1822,94 +1822,101 @@
18221822
#define INTERPOLATE true // Interpolate X/Y/Z_MICROSTEPS to 256
18231823

18241824
#if AXIS_IS_TMC(X)
1825-
#define X_CURRENT 580 // (mA) RMS current. Multiply by 1.414 for peak current.
1826-
#define X_MICROSTEPS 16 // 0..256
1827-
#define X_RSENSE 0.11
1828-
#define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ...
1825+
#define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current.
1826+
#define X_CURRENT_HOME X_CURRENT // (mA) RMS current for sensorless homing
1827+
#define X_MICROSTEPS 16 // 0..256
1828+
#define X_RSENSE 0.11
1829+
#define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ...
18291830
#endif
18301831

18311832
#if AXIS_IS_TMC(X2)
1832-
#define X2_CURRENT 800
1833-
#define X2_MICROSTEPS 16
1834-
#define X2_RSENSE 0.11
1835-
#define X2_CHAIN_POS -1
1833+
#define X2_CURRENT 800
1834+
#define X2_CURRENT_HOME X2_CURRENT
1835+
#define X2_MICROSTEPS 16
1836+
#define X2_RSENSE 0.11
1837+
#define X2_CHAIN_POS -1
18361838
#endif
18371839

18381840
#if AXIS_IS_TMC(Y)
1839-
#define Y_CURRENT 650
1840-
#define Y_MICROSTEPS 16
1841-
#define Y_RSENSE 0.11
1842-
#define Y_CHAIN_POS -1
1841+
#define Y_CURRENT 800
1842+
#define Y_CURRENT_HOME Y_CURRENT
1843+
#define Y_MICROSTEPS 16
1844+
#define Y_RSENSE 0.11
1845+
#define Y_CHAIN_POS -1
18431846
#endif
18441847

18451848
#if AXIS_IS_TMC(Y2)
1846-
#define Y2_CURRENT 800
1847-
#define Y2_MICROSTEPS 16
1848-
#define Y2_RSENSE 0.11
1849-
#define Y2_CHAIN_POS -1
1849+
#define Y2_CURRENT 800
1850+
#define Y2_CURRENT_HOME Y2_CURRENT
1851+
#define Y2_MICROSTEPS 16
1852+
#define Y2_RSENSE 0.11
1853+
#define Y2_CHAIN_POS -1
18501854
#endif
18511855

18521856
#if AXIS_IS_TMC(Z)
1853-
#define Z_CURRENT 580
1854-
#define Z_MICROSTEPS 16
1855-
#define Z_RSENSE 0.11
1856-
#define Z_CHAIN_POS -1
1857+
#define Z_CURRENT 800
1858+
#define Z_CURRENT_HOME Z_CURRENT
1859+
#define Z_MICROSTEPS 16
1860+
#define Z_RSENSE 0.11
1861+
#define Z_CHAIN_POS -1
18571862
#endif
18581863

18591864
#if AXIS_IS_TMC(Z2)
1860-
#define Z2_CURRENT 800
1861-
#define Z2_MICROSTEPS 16
1862-
#define Z2_RSENSE 0.11
1863-
#define Z2_CHAIN_POS -1
1865+
#define Z2_CURRENT 800
1866+
#define Z2_CURRENT_HOME Z2_CURRENT
1867+
#define Z2_MICROSTEPS 16
1868+
#define Z2_RSENSE 0.11
1869+
#define Z2_CHAIN_POS -1
18641870
#endif
18651871

18661872
#if AXIS_IS_TMC(Z3)
1867-
#define Z3_CURRENT 800
1868-
#define Z3_MICROSTEPS 16
1869-
#define Z3_RSENSE 0.11
1870-
#define Z3_CHAIN_POS -1
1873+
#define Z3_CURRENT 800
1874+
#define Z3_CURRENT_HOME Z3_CURRENT
1875+
#define Z3_MICROSTEPS 16
1876+
#define Z3_RSENSE 0.11
1877+
#define Z3_CHAIN_POS -1
18711878
#endif
18721879

18731880
#if AXIS_IS_TMC(E0)
1874-
#define E0_CURRENT 650
1875-
#define E0_MICROSTEPS 16
1876-
#define E0_RSENSE 0.11
1877-
#define E0_CHAIN_POS -1
1881+
#define E0_CURRENT 800
1882+
#define E0_MICROSTEPS 16
1883+
#define E0_RSENSE 0.11
1884+
#define E0_CHAIN_POS -1
18781885
#endif
18791886

18801887
#if AXIS_IS_TMC(E1)
1881-
#define E1_CURRENT 800
1882-
#define E1_MICROSTEPS 16
1883-
#define E1_RSENSE 0.11
1884-
#define E1_CHAIN_POS -1
1888+
#define E1_CURRENT 800
1889+
#define E1_MICROSTEPS 16
1890+
#define E1_RSENSE 0.11
1891+
#define E1_CHAIN_POS -1
18851892
#endif
18861893

18871894
#if AXIS_IS_TMC(E2)
1888-
#define E2_CURRENT 800
1889-
#define E2_MICROSTEPS 16
1890-
#define E2_RSENSE 0.11
1891-
#define E2_CHAIN_POS -1
1895+
#define E2_CURRENT 800
1896+
#define E2_MICROSTEPS 16
1897+
#define E2_RSENSE 0.11
1898+
#define E2_CHAIN_POS -1
18921899
#endif
18931900

18941901
#if AXIS_IS_TMC(E3)
1895-
#define E3_CURRENT 800
1896-
#define E3_MICROSTEPS 16
1897-
#define E3_RSENSE 0.11
1898-
#define E3_CHAIN_POS -1
1902+
#define E3_CURRENT 800
1903+
#define E3_MICROSTEPS 16
1904+
#define E3_RSENSE 0.11
1905+
#define E3_CHAIN_POS -1
18991906
#endif
19001907

19011908
#if AXIS_IS_TMC(E4)
1902-
#define E4_CURRENT 800
1903-
#define E4_MICROSTEPS 16
1904-
#define E4_RSENSE 0.11
1905-
#define E4_CHAIN_POS -1
1909+
#define E4_CURRENT 800
1910+
#define E4_MICROSTEPS 16
1911+
#define E4_RSENSE 0.11
1912+
#define E4_CHAIN_POS -1
19061913
#endif
19071914

19081915
#if AXIS_IS_TMC(E5)
1909-
#define E5_CURRENT 800
1910-
#define E5_MICROSTEPS 16
1911-
#define E5_RSENSE 0.11
1912-
#define E5_CHAIN_POS -1
1916+
#define E5_CURRENT 800
1917+
#define E5_MICROSTEPS 16
1918+
#define E5_RSENSE 0.11
1919+
#define E5_CHAIN_POS -1
19131920
#endif
19141921

19151922
/**
@@ -2083,6 +2090,7 @@
20832090
#define Y_STALL_SENSITIVITY 8
20842091
//#define Z_STALL_SENSITIVITY 8
20852092
//#define SPI_ENDSTOPS // TMC2130 only
2093+
//#define HOME_USING_SPREADCYCLE
20862094
//#define IMPROVE_HOMING_RELIABILITY
20872095
#endif
20882096

Marlin/src/gcode/calibrate/G28.cpp

+56
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,7 @@ void GcodeSuite::G28(const bool always_home_all) {
230230
}
231231
#endif
232232

233+
// Home (O)nly if position is unknown
233234
if (!homing_needed() && parser.boolval('O')) {
234235
if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("> homing not needed, skip\n<<< G28");
235236
return;
@@ -256,6 +257,40 @@ void GcodeSuite::G28(const bool always_home_all) {
256257
workspace_plane = PLANE_XY;
257258
#endif
258259

260+
#define HAS_CURRENT_HOME(N) (defined(N##_CURRENT_HOME) && N##_CURRENT_HOME != N##_CURRENT)
261+
#define HAS_HOMING_CURRENT (HAS_CURRENT_HOME(X) || HAS_CURRENT_HOME(X2) || HAS_CURRENT_HOME(Y) || HAS_CURRENT_HOME(Y2))
262+
263+
#if HAS_HOMING_CURRENT
264+
auto debug_current = [](const char * const s, const int16_t a, const int16_t b){
265+
DEBUG_ECHO(s); DEBUG_ECHOLNPGM(" current: ", a, " -> ", b);
266+
};
267+
#if HAS_CURRENT_HOME(X)
268+
const int16_t tmc_save_current_X = stepperX.getMilliamps();
269+
stepperX.rms_current(X_CURRENT_HOME);
270+
if (DEBUGGING(LEVELING)) debug_current("X", tmc_save_current_X, X_CURRENT_HOME);
271+
#endif
272+
#if HAS_CURRENT_HOME(X2)
273+
const int16_t tmc_save_current_X2 = stepperX2.getMilliamps();
274+
stepperX2.rms_current(X2_CURRENT_HOME);
275+
if (DEBUGGING(LEVELING)) debug_current("X2", tmc_save_current_X2, X2_CURRENT_HOME);
276+
#endif
277+
#if HAS_CURRENT_HOME(Y)
278+
const int16_t tmc_save_current_Y = stepperY.getMilliamps();
279+
stepperY.rms_current(Y_CURRENT_HOME);
280+
if (DEBUGGING(LEVELING)) debug_current("Y", tmc_save_current_Y, Y_CURRENT_HOME);
281+
#endif
282+
#if HAS_CURRENT_HOME(Y2)
283+
const int16_t tmc_save_current_Y2 = stepperY2.getMilliamps();
284+
stepperY2.rms_current(Y2_CURRENT_HOME);
285+
if (DEBUGGING(LEVELING)) debug_current("Y2", tmc_save_current_Y2, Y2_CURRENT_HOME);
286+
#endif
287+
#endif
288+
289+
#if BOTH(STEALTHCHOP_XY, HOME_USING_SPREADCYCLE)
290+
if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Set XY to spreadCycle...");
291+
process_subcommands_now_P(PSTR("M569S0XY"));
292+
#endif
293+
259294
#if ENABLED(IMPROVE_HOMING_RELIABILITY)
260295
slow_homing_t slow_homing = begin_slow_homing();
261296
#endif
@@ -466,6 +501,27 @@ void GcodeSuite::G28(const bool always_home_all) {
466501
tool_change(old_tool_index, NO_FETCH);
467502
#endif
468503

504+
#if HAS_HOMING_CURRENT
505+
if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Restore driver current...");
506+
#if HAS_CURRENT_HOME(X)
507+
stepperX.rms_current(tmc_save_current_X);
508+
#endif
509+
#if HAS_CURRENT_HOME(X2)
510+
stepperX2.rms_current(tmc_save_current_X2);
511+
#endif
512+
#if HAS_CURRENT_HOME(Y)
513+
stepperY.rms_current(tmc_save_current_Y);
514+
#endif
515+
#if HAS_CURRENT_HOME(Y2)
516+
stepperY2.rms_current(tmc_save_current_Y2);
517+
#endif
518+
#endif
519+
520+
#if BOTH(STEALTHCHOP_XY, HOME_USING_SPREADCYCLE)
521+
if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Set XY to StealthChop...");
522+
process_subcommands_now_P(PSTR("M569S1XY"));
523+
#endif
524+
469525
ui.refresh();
470526

471527
report_current_position();

0 commit comments

Comments
 (0)