소스 검색

Followup to menu refactor. TMC warnings, sanity. (#12288)

- Followup fixes for menu refactor
- Fix TMC sanity checks, unused var warnings
Ludy 6 년 전
부모
커밋
9f77df2590

+ 5
- 1
Marlin/src/gcode/feature/trinamic/M906.cpp 파일 보기

@@ -37,7 +37,11 @@ void GcodeSuite::M906() {
37 37
   #define TMC_SET_CURRENT(Q) tmc_set_current(stepper##Q, value)
38 38
 
39 39
   bool report = true;
40
-  const uint8_t index = parser.byteval('I');
40
+
41
+  #if AXIS_IS_TMC(X) || AXIS_IS_TMC(X2) || AXIS_IS_TMC(Y) || AXIS_IS_TMC(Y2) || AXIS_IS_TMC(Z) || AXIS_IS_TMC(Z2) || AXIS_IS_TMC(Z3)
42
+    const uint8_t index = parser.byteval('I'); 
43
+  #endif
44
+
41 45
   LOOP_XYZE(i) if (uint16_t value = parser.intval(axis_codes[i])) {
42 46
     report = false;
43 47
     switch (i) {

+ 91
- 58
Marlin/src/gcode/feature/trinamic/M911-M915.cpp 파일 보기

@@ -30,10 +30,20 @@
30 30
 #include "../../../module/planner.h"
31 31
 #include "../../queue.h"
32 32
 
33
-#define M91x_USE(ST) (AXIS_DRIVER_TYPE(ST, TMC2130) || (AXIS_DRIVER_TYPE(ST, TMC2208) && PIN_EXISTS(ST##_SERIAL_RX)))
34
-#define M91x_USE_E(N) (E_STEPPERS > N && M91x_USE(E##N))
35
-
36 33
 #if ENABLED(MONITOR_DRIVER_STATUS)
34
+
35
+  #define M91x_USE(ST) (AXIS_DRIVER_TYPE(ST, TMC2130) || (AXIS_DRIVER_TYPE(ST, TMC2208) && PIN_EXISTS(ST##_SERIAL_RX)))
36
+  #define M91x_USE_E(N) (E_STEPPERS > N && M91x_USE(E##N))
37
+
38
+  #define M91x_SOME_X (M91x_USE(X) || M91x_USE(X2))
39
+  #define M91x_SOME_Y (M91x_USE(Y) || M91x_USE(Y2))
40
+  #define M91x_SOME_Z (M91x_USE(Z) || M91x_USE(Z2) || M91x_USE(Z3))
41
+  #define M91x_SOME_E (M91x_USE_E(0) || M91x_USE_E(1) || M91x_USE_E(2) || M91x_USE_E(3) || M91x_USE_E(4) || M91x_USE_E(5))
42
+
43
+  #if !M91x_SOME_X && !M91x_SOME_Y && !M91x_SOME_Z && !M91x_SOME_E
44
+    #error "MONITOR_DRIVER_STATUS requires at least one TMC2130 or serial-connected TMC2208."
45
+  #endif
46
+
37 47
   /**
38 48
    * M911: Report TMC stepper driver overtemperature pre-warn flag
39 49
    *       This flag is held by the library, persisting until cleared by M912
@@ -93,68 +103,89 @@
93 103
    *       M912 E1  ; clear E1 only
94 104
    */
95 105
   void GcodeSuite::M912() {
96
-      const bool hasX = parser.seen(axis_codes[X_AXIS]),
97
-                 hasY = parser.seen(axis_codes[Y_AXIS]),
98
-                 hasZ = parser.seen(axis_codes[Z_AXIS]),
99
-                 hasE = parser.seen(axis_codes[E_AXIS]),
100
-                 hasNone = !hasX && !hasY && !hasZ && !hasE;
101
-
102
-      #if M91x_USE(X) || M91x_USE(X2)
103
-        const int8_t xval = int8_t(parser.byteval(axis_codes[X_AXIS], 0xFF));
104
-        #if M91x_USE(X)
105
-          if (hasNone || xval == 1 || (hasX && xval < 0)) tmc_clear_otpw(stepperX);
106
-        #endif
107
-        #if M91x_USE(X2)
108
-          if (hasNone || xval == 2 || (hasX && xval < 0)) tmc_clear_otpw(stepperX2);
109
-        #endif
106
+    #if M91x_SOME_X
107
+      const bool hasX = parser.seen(axis_codes[X_AXIS]);
108
+    #else
109
+      constexpr bool hasX = false;
110
+    #endif
111
+
112
+    #if M91x_SOME_Y
113
+      const bool hasY = parser.seen(axis_codes[Y_AXIS]);
114
+    #else
115
+      constexpr bool hasY = false;
116
+    #endif
117
+
118
+    #if M91x_SOME_Z
119
+      const bool hasZ = parser.seen(axis_codes[Z_AXIS]);
120
+    #else
121
+      constexpr bool hasZ = false;
122
+    #endif
123
+
124
+    #if M91x_SOME_E
125
+      const bool hasE = parser.seen(axis_codes[E_AXIS]);
126
+    #else
127
+      constexpr bool hasE = false;
128
+    #endif
129
+
130
+    const bool hasNone = !hasX && !hasY && !hasZ && !hasE;
131
+
132
+    #if M91x_SOME_X
133
+      const int8_t xval = int8_t(parser.byteval(axis_codes[X_AXIS], 0xFF));
134
+      #if M91x_USE(X)
135
+        if (hasNone || xval == 1 || (hasX && xval < 0)) tmc_clear_otpw(stepperX);
136
+      #endif
137
+      #if M91x_USE(X2)
138
+        if (hasNone || xval == 2 || (hasX && xval < 0)) tmc_clear_otpw(stepperX2);
110 139
       #endif
140
+    #endif
111 141
 
112
-      #if M91x_USE(Y) || M91x_USE(Y2)
113
-        const int8_t yval = int8_t(parser.byteval(axis_codes[Y_AXIS], 0xFF));
114
-        #if M91x_USE(Y)
115
-          if (hasNone || yval == 1 || (hasY && yval < 0)) tmc_clear_otpw(stepperY);
116
-        #endif
117
-        #if M91x_USE(Y2)
118
-          if (hasNone || yval == 2 || (hasY && yval < 0)) tmc_clear_otpw(stepperY2);
119
-        #endif
142
+    #if M91x_SOME_Y
143
+      const int8_t yval = int8_t(parser.byteval(axis_codes[Y_AXIS], 0xFF));
144
+      #if M91x_USE(Y)
145
+        if (hasNone || yval == 1 || (hasY && yval < 0)) tmc_clear_otpw(stepperY);
120 146
       #endif
147
+      #if M91x_USE(Y2)
148
+        if (hasNone || yval == 2 || (hasY && yval < 0)) tmc_clear_otpw(stepperY2);
149
+      #endif
150
+    #endif
121 151
 
122
-      #if M91x_USE(Z) || M91x_USE(Z2) || M91x_USE(Z3)
123
-        const int8_t zval = int8_t(parser.byteval(axis_codes[Z_AXIS], 0xFF));
124
-        #if M91x_USE(Z)
125
-          if (hasNone || zval == 1 || (hasZ && zval < 0)) tmc_clear_otpw(stepperZ);
126
-        #endif
127
-        #if M91x_USE(Z2)
128
-          if (hasNone || zval == 2 || (hasZ && zval < 0)) tmc_clear_otpw(stepperZ2);
129
-        #endif
130
-        #if M91x_USE(Z3)
131
-          if (hasNone || zval == 3 || (hasZ && zval < 0)) tmc_clear_otpw(stepperZ3);
132
-        #endif
152
+    #if M91x_SOME_Z
153
+      const int8_t zval = int8_t(parser.byteval(axis_codes[Z_AXIS], 0xFF));
154
+      #if M91x_USE(Z)
155
+        if (hasNone || zval == 1 || (hasZ && zval < 0)) tmc_clear_otpw(stepperZ);
133 156
       #endif
157
+      #if M91x_USE(Z2)
158
+        if (hasNone || zval == 2 || (hasZ && zval < 0)) tmc_clear_otpw(stepperZ2);
159
+      #endif
160
+      #if M91x_USE(Z3)
161
+        if (hasNone || zval == 3 || (hasZ && zval < 0)) tmc_clear_otpw(stepperZ3);
162
+      #endif
163
+    #endif
134 164
 
135
-      #if M91x_USE_E(0) || M91x_USE_E(1) || M91x_USE_E(2) || M91x_USE_E(3) || M91x_USE_E(4) || M91x_USE_E(5)
136
-        const int8_t eval = int8_t(parser.byteval(axis_codes[E_AXIS], 0xFF));
137
-        #if M91x_USE_E(0)
138
-          if (hasNone || eval == 0 || (hasE && eval < 0)) tmc_clear_otpw(stepperE0);
139
-        #endif
140
-        #if M91x_USE_E(1)
141
-          if (hasNone || eval == 1 || (hasE && eval < 0)) tmc_clear_otpw(stepperE1);
142
-        #endif
143
-        #if M91x_USE_E(2)
144
-          if (hasNone || eval == 2 || (hasE && eval < 0)) tmc_clear_otpw(stepperE2);
145
-        #endif
146
-        #if M91x_USE_E(3)
147
-          if (hasNone || eval == 3 || (hasE && eval < 0)) tmc_clear_otpw(stepperE3);
148
-        #endif
149
-        #if M91x_USE_E(4)
150
-          if (hasNone || eval == 4 || (hasE && eval < 0)) tmc_clear_otpw(stepperE4);
151
-        #endif
152
-        #if M91x_USE_E(5)
153
-          if (hasNone || eval == 5 || (hasE && eval < 0)) tmc_clear_otpw(stepperE5);
154
-        #endif
165
+    #if M91x_SOME_E
166
+      const int8_t eval = int8_t(parser.byteval(axis_codes[E_AXIS], 0xFF));
167
+      #if M91x_USE_E(0)
168
+        if (hasNone || eval == 0 || (hasE && eval < 0)) tmc_clear_otpw(stepperE0);
169
+      #endif
170
+      #if M91x_USE_E(1)
171
+        if (hasNone || eval == 1 || (hasE && eval < 0)) tmc_clear_otpw(stepperE1);
172
+      #endif
173
+      #if M91x_USE_E(2)
174
+        if (hasNone || eval == 2 || (hasE && eval < 0)) tmc_clear_otpw(stepperE2);
175
+      #endif
176
+      #if M91x_USE_E(3)
177
+        if (hasNone || eval == 3 || (hasE && eval < 0)) tmc_clear_otpw(stepperE3);
178
+      #endif
179
+      #if M91x_USE_E(4)
180
+        if (hasNone || eval == 4 || (hasE && eval < 0)) tmc_clear_otpw(stepperE4);
181
+      #endif
182
+      #if M91x_USE_E(5)
183
+        if (hasNone || eval == 5 || (hasE && eval < 0)) tmc_clear_otpw(stepperE5);
155 184
       #endif
185
+    #endif
156 186
   }
157
-#endif
187
+
188
+#endif // MONITOR_DRIVER_STATUS
158 189
 
159 190
 /**
160 191
  * M913: Set HYBRID_THRESHOLD speed.
@@ -167,7 +198,9 @@
167 198
     #define TMC_SET_PWMTHRS_E(E) tmc_set_pwmthrs(stepperE##E, value, planner.settings.axis_steps_per_mm[E_AXIS_N(E)])
168 199
 
169 200
     bool report = true;
170
-    const uint8_t index = parser.byteval('I');
201
+    #if AXIS_IS_TMC(X) || AXIS_IS_TMC(X2) || AXIS_IS_TMC(Y) || AXIS_IS_TMC(Y2) || AXIS_IS_TMC(Z) || AXIS_IS_TMC(Z2) || AXIS_IS_TMC(Z3)
202
+      const uint8_t index = parser.byteval('I');
203
+    #endif
171 204
     LOOP_XYZE(i) if (int32_t value = parser.longval(axis_codes[i])) {
172 205
       report = false;
173 206
       switch (i) {

+ 6
- 8
Marlin/src/inc/Conditionals_post.h 파일 보기

@@ -857,15 +857,13 @@
857 857
   #define AXIS_HAS_STEALTHCHOP(ST) (AXIS_DRIVER_TYPE(ST, TMC2130) || AXIS_DRIVER_TYPE(ST, TMC2208))
858 858
 
859 859
   #define USE_SENSORLESS (ENABLED(SENSORLESS_HOMING) || ENABLED(SENSORLESS_PROBING))
860
-  #if USE_SENSORLESS
861
-    // Disable Z axis sensorless homing if a probe is used to home the Z axis
862
-    #if HOMING_Z_WITH_PROBE
863
-      #undef Z_STALL_SENSITIVITY
864
-    #endif
865
-    #define X_SENSORLESS (AXIS_HAS_STALLGUARD(X) && defined(X_STALL_SENSITIVITY))
866
-    #define Y_SENSORLESS (AXIS_HAS_STALLGUARD(Y) && defined(Y_STALL_SENSITIVITY))
867
-    #define Z_SENSORLESS (AXIS_HAS_STALLGUARD(Z) && defined(Z_STALL_SENSITIVITY))
860
+  // Disable Z axis sensorless homing if a probe is used to home the Z axis
861
+  #if HOMING_Z_WITH_PROBE
862
+    #undef Z_STALL_SENSITIVITY
868 863
   #endif
864
+  #define X_SENSORLESS (AXIS_HAS_STALLGUARD(X) && defined(X_STALL_SENSITIVITY))
865
+  #define Y_SENSORLESS (AXIS_HAS_STALLGUARD(Y) && defined(Y_STALL_SENSITIVITY))
866
+  #define Z_SENSORLESS (AXIS_HAS_STALLGUARD(Z) && defined(Z_STALL_SENSITIVITY))
869 867
 #endif
870 868
 
871 869
 // Endstops and bed probe

+ 54
- 18
Marlin/src/inc/SanityCheck.h 파일 보기

@@ -19,6 +19,7 @@
19 19
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
20 20
  *
21 21
  */
22
+#pragma once
22 23
 
23 24
 /**
24 25
  * SanityCheck.h
@@ -26,9 +27,6 @@
26 27
  * Test configuration values for errors at compile-time.
27 28
  */
28 29
 
29
-#ifndef _SANITYCHECK_H_
30
-#define _SANITYCHECK_H_
31
-
32 30
 /**
33 31
  * Require gcc 4.7 or newer (first included with Arduino 1.6.8) for C++11 features.
34 32
  */
@@ -1707,31 +1705,62 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE && Y_MAX_LENGTH >= Y_BED_SIZE,
1707 1705
  * Check existing CS pins against enabled TMC SPI drivers.
1708 1706
  */
1709 1707
 #if AXIS_DRIVER_TYPE(X, TMC2130) && !PIN_EXISTS(X_CS)
1710
-  #error "X_CS_PIN is required for TMC2130. Define X_CS_PIN in Configuration_adv.h."
1708
+  #error "TMC2130 on X requires X_CS_PIN."
1711 1709
 #elif AXIS_DRIVER_TYPE(X2, TMC2130) && !PIN_EXISTS(X2_CS)
1712
-  #error "X2_CS_PIN is required for X2. Define X2_CS_PIN in Configuration_adv.h."
1710
+  #error "TMC2130 on X2 requires X2_CS_PIN."
1713 1711
 #elif AXIS_DRIVER_TYPE(Y, TMC2130) && !PIN_EXISTS(Y_CS)
1714
-  #error "Y_CS_PIN is required for TMC2130. Define Y_CS_PIN in Configuration_adv.h."
1712
+  #error "TMC2130 on Y requires Y_CS_PIN."
1715 1713
 #elif AXIS_DRIVER_TYPE(Y2, TMC2130) && !PIN_EXISTS(Y2_CS)
1716
-  #error "Y2_CS_PIN is required for TMC2130. Define Y2_CS_PIN in Configuration_adv.h."
1714
+  #error "TMC2130 on Y2 requires Y2_CS_PIN."
1717 1715
 #elif AXIS_DRIVER_TYPE(Z, TMC2130) && !PIN_EXISTS(Z_CS)
1718
-  #error "Z_CS_PIN is required for TMC2130. Define Z_CS_PIN in Configuration_adv.h."
1716
+  #error "TMC2130 on Z requires Z_CS_PIN."
1719 1717
 #elif AXIS_DRIVER_TYPE(Z2, TMC2130) && !PIN_EXISTS(Z2_CS)
1720
-  #error "Z2_CS_PIN is required for TMC2130. Define Z2_CS_PIN in Configuration_adv.h."
1718
+  #error "TMC2130 on Z2 requires Z2_CS_PIN."
1721 1719
 #elif AXIS_DRIVER_TYPE(Z3, TMC2130) && !PIN_EXISTS(Z3_CS)
1722
-  #error "Z3_CS_PIN is required for TMC2130. Define Z3_CS_PIN in Configuration_adv.h."
1720
+  #error "TMC2130 on Z3 requires Z3_CS_PIN."
1723 1721
 #elif AXIS_DRIVER_TYPE(E0, TMC2130) && !PIN_EXISTS(E0_CS)
1724
-  #error "E0_CS_PIN is required for TMC2130. Define E0_CS_PIN in Configuration_adv.h."
1722
+  #error "TMC2130 on E0 requires E0_CS_PIN."
1725 1723
 #elif AXIS_DRIVER_TYPE(E1, TMC2130) && !PIN_EXISTS(E1_CS)
1726
-  #error "E1_CS_PIN is required for TMC2130. Define E1_CS_PIN in Configuration_adv.h."
1724
+  #error "TMC2130 on E1 requires E1_CS_PIN."
1727 1725
 #elif AXIS_DRIVER_TYPE(E2, TMC2130) && !PIN_EXISTS(E2_CS)
1728
-  #error "E2_CS_PIN is required for TMC2130. Define E2_CS_PIN in Configuration_adv.h."
1726
+  #error "TMC2130 on E2 requires E2_CS_PIN."
1729 1727
 #elif AXIS_DRIVER_TYPE(E3, TMC2130) && !PIN_EXISTS(E3_CS)
1730
-  #error "E3_CS_PIN is required for TMC2130. Define E3_CS_PIN in Configuration_adv.h."
1728
+  #error "TMC2130 on E3 requires E3_CS_PIN."
1731 1729
 #elif AXIS_DRIVER_TYPE(E4, TMC2130) && !PIN_EXISTS(E4_CS)
1732
-  #error "E4_CS_PIN is required for TMC2130. Define E4_CS_PIN in Configuration_adv.h."
1730
+  #error "TMC2130 on E4 requires E4_CS_PIN."
1733 1731
 #elif AXIS_DRIVER_TYPE(E5, TMC2130) && !PIN_EXISTS(E5_CS)
1734
-  #error "E5_CS_PIN is required for TMC2130. Define E5_CS_PIN in Configuration_adv.h."
1732
+  #error "TMC2130 on E5 requires E5_CS_PIN."
1733
+#endif
1734
+
1735
+/**
1736
+ * Check existing RX/TX pins against enable TMC UART drivers.
1737
+ */
1738
+#if AXIS_DRIVER_TYPE(X, TMC2208) && !(defined(X_HARDWARE_SERIAL) || (PIN_EXISTS(X_SERIAL_RX) && PIN_EXISTS(X_SERIAL_TX)))
1739
+  #error "TMC2208 on X requires X_HARDWARE_SERIAL or both X_SERIAL_RX_PIN and X_SERIAL_TX_PIN."
1740
+#elif AXIS_DRIVER_TYPE(X2, TMC2208) && !(defined(X2_HARDWARE_SERIAL) || (PIN_EXISTS(X2_SERIAL_RX) && PIN_EXISTS(X2_SERIAL_TX)))
1741
+  #error "TMC2208 on X2 requires X2_HARDWARE_SERIAL or both X2_SERIAL_RX_PIN and X2_SERIAL_TX_PIN."
1742
+#elif AXIS_DRIVER_TYPE(Y, TMC2208) && !(defined(Y_HARDWARE_SERIAL) || (PIN_EXISTS(Y_SERIAL_RX) && PIN_EXISTS(Y_SERIAL_TX)))
1743
+  #error "TMC2208 on Y requires Y_HARDWARE_SERIAL or both Y_SERIAL_RX_PIN and Y_SERIAL_TX_PIN."
1744
+#elif AXIS_DRIVER_TYPE(Y2, TMC2208) && !(defined(Y2_HARDWARE_SERIAL) || (PIN_EXISTS(Y2_SERIAL_RX) && PIN_EXISTS(Y2_SERIAL_TX)))
1745
+  #error "TMC2208 on Y2 requires Y2_HARDWARE_SERIAL or both Y2_SERIAL_RX_PIN and Y2_SERIAL_TX_PIN."
1746
+#elif AXIS_DRIVER_TYPE(Z, TMC2208) && !(defined(Z_HARDWARE_SERIAL) || (PIN_EXISTS(Z_SERIAL_RX) && PIN_EXISTS(Z_SERIAL_TX)))
1747
+  #error "TMC2208 on Z requires Z_HARDWARE_SERIAL or both Z_SERIAL_RX_PIN and Z_SERIAL_TX_PIN."
1748
+#elif AXIS_DRIVER_TYPE(Z2, TMC2208) && !(defined(Z2_HARDWARE_SERIAL) || (PIN_EXISTS(Z2_SERIAL_RX) && PIN_EXISTS(Z2_SERIAL_TX)))
1749
+  #error "TMC2208 on Z2 requires Z2_HARDWARE_SERIAL or both Z2_SERIAL_RX_PIN and Z2_SERIAL_TX_PIN."
1750
+#elif AXIS_DRIVER_TYPE(Z3, TMC2208) && !(defined(Z3_HARDWARE_SERIAL) || (PIN_EXISTS(Z3_SERIAL_RX) && PIN_EXISTS(Z3_SERIAL_TX)))
1751
+  #error "TMC2208 on Z3 requires Z3_HARDWARE_SERIAL or both Z3_SERIAL_RX_PIN and Z3_SERIAL_TX_PIN."
1752
+#elif AXIS_DRIVER_TYPE(E0, TMC2208) && !(defined(E0_HARDWARE_SERIAL) || (PIN_EXISTS(E0_SERIAL_RX) && PIN_EXISTS(E0_SERIAL_TX)))
1753
+  #error "TMC2208 on E0 requires E0_HARDWARE_SERIAL or both E0_SERIAL_RX_PIN and E0_SERIAL_TX_PIN."
1754
+#elif AXIS_DRIVER_TYPE(E1, TMC2208) && !(defined(E1_HARDWARE_SERIAL) || (PIN_EXISTS(E1_SERIAL_RX) && PIN_EXISTS(E1_SERIAL_TX)))
1755
+  #error "TMC2208 on E1 requires E1_HARDWARE_SERIAL or both E1_SERIAL_RX_PIN and E1_SERIAL_TX_PIN."
1756
+#elif AXIS_DRIVER_TYPE(E2, TMC2208) && !(defined(E2_HARDWARE_SERIAL) || (PIN_EXISTS(E2_SERIAL_RX) && PIN_EXISTS(E2_SERIAL_TX)))
1757
+  #error "TMC2208 on E2 requires E2_HARDWARE_SERIAL or both E2_SERIAL_RX_PIN and E2_SERIAL_TX_PIN."
1758
+#elif AXIS_DRIVER_TYPE(E3, TMC2208) && !(defined(E3_HARDWARE_SERIAL) || (PIN_EXISTS(E3_SERIAL_RX) && PIN_EXISTS(E3_SERIAL_TX)))
1759
+  #error "TMC2208 on E3 requires E3_HARDWARE_SERIAL or both E3_SERIAL_RX_PIN and E3_SERIAL_TX_PIN."
1760
+#elif AXIS_DRIVER_TYPE(E4, TMC2208) && !(defined(E4_HARDWARE_SERIAL) || (PIN_EXISTS(E4_SERIAL_RX) && PIN_EXISTS(E4_SERIAL_TX)))
1761
+  #error "TMC2208 on E4 requires E4_HARDWARE_SERIAL or both E4_SERIAL_RX_PIN and E4_SERIAL_TX_PIN."
1762
+#elif AXIS_DRIVER_TYPE(E5, TMC2208) && !(defined(E5_HARDWARE_SERIAL) || (PIN_EXISTS(E5_SERIAL_RX) && PIN_EXISTS(E5_SERIAL_TX)))
1763
+  #error "TMC2208 on E5 requires E5_HARDWARE_SERIAL or both E5_SERIAL_RX_PIN and E5_SERIAL_TX_PIN."
1735 1764
 #endif
1736 1765
 
1737 1766
 /**
@@ -1797,6 +1826,15 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE && Y_MAX_LENGTH >= Y_BED_SIZE,
1797 1826
   #endif
1798 1827
 #endif
1799 1828
 
1829
+// Sensorless homing/probing requirements
1830
+#if ENABLED(SENSORLESS_HOMING) && !(X_SENSORLESS || Y_SENSORLESS || Z_SENSORLESS)
1831
+  #error "SENSORLESS_HOMING requires a TMC stepper driver with StallGuard on X, Y, or Z axes."
1832
+#elif ENABLED(SENSORLESS_PROBING) && ENABLED(DELTA) && !(X_SENSORLESS && Y_SENSORLESS && Z_SENSORLESS)
1833
+  #error "SENSORLESS_PROBING for DELTA requires TMC stepper drivers with StallGuard on X, Y, and Z axes."
1834
+#elif ENABLED(SENSORLESS_PROBING) && !Z_SENSORLESS
1835
+  #error "SENSORLESS_PROBING requires a TMC stepper driver with StallGuard on Z."
1836
+#endif
1837
+
1800 1838
 // Sensorless homing is required for both combined steppers in an H-bot
1801 1839
 #if CORE_IS_XY && X_SENSORLESS != Y_SENSORLESS
1802 1840
   #error "CoreXY requires both X and Y to use sensorless homing if either does."
@@ -1904,5 +1942,3 @@ static_assert(COUNT(sanity_arr_3) <= XYZE_N, "DEFAULT_MAX_ACCELERATION has too m
1904 1942
 #if ENABLED(SD_FIRMWARE_UPDATE) && !defined(__AVR_ATmega2560__)
1905 1943
   #error "SD_FIRMWARE_UPDATE requires an ATmega2560-based (Arduino Mega) board."
1906 1944
 #endif
1907
-
1908
-#endif // _SANITYCHECK_H_

+ 4
- 0
Marlin/src/lcd/menu/menu_bed_leveling.cpp 파일 보기

@@ -32,6 +32,10 @@
32 32
 #include "../../module/planner.h"
33 33
 #include "../../feature/bedlevel/bedlevel.h"
34 34
 
35
+#if HAS_BED_PROBE && DISABLED(BABYSTEP_ZPROBE_OFFSET)
36
+  #include "../../module/probe.h"
37
+#endif
38
+
35 39
 #if ENABLED(PROBE_MANUALLY) || ENABLED(MESH_BED_LEVELING)
36 40
 
37 41
   #include "../../module/motion.h"

+ 3
- 3
Marlin/src/lcd/menu/menu_motion.cpp 파일 보기

@@ -155,9 +155,9 @@ static void _lcd_move_xyz(PGM_P name, AxisEnum axis) {
155 155
     lcd_implementation_drawedit(name, move_menu_scale >= 0.1f ? ftostr41sign(pos) : ftostr43sign(pos));
156 156
   }
157 157
 }
158
-inline void lcd_move_x() { _lcd_move_xyz(PSTR(MSG_MOVE_X), X_AXIS); }
159
-inline void lcd_move_y() { _lcd_move_xyz(PSTR(MSG_MOVE_Y), Y_AXIS); }
160
-inline void lcd_move_z() { _lcd_move_xyz(PSTR(MSG_MOVE_Z), Z_AXIS); }
158
+void lcd_move_x() { _lcd_move_xyz(PSTR(MSG_MOVE_X), X_AXIS); }
159
+void lcd_move_y() { _lcd_move_xyz(PSTR(MSG_MOVE_Y), Y_AXIS); }
160
+void lcd_move_z() { _lcd_move_xyz(PSTR(MSG_MOVE_Z), Z_AXIS); }
161 161
 static void _lcd_move_e(
162 162
   #if E_MANUAL > 1
163 163
     const int8_t eindex=-1

+ 34
- 30
Marlin/src/lcd/ultralcd.cpp 파일 보기

@@ -224,10 +224,27 @@ bool lcd_blink() {
224 224
   volatile uint8_t buttons_reprapworld_keypad;
225 225
 #endif
226 226
 
227
-#if ENABLED(ADC_KEYPAD)
227
+#if ENABLED(REPRAPWORLD_KEYPAD) || ENABLED(ADC_KEYPAD)
228
+  #define REPRAPWORLD_BTN_OFFSET         0 // bit offset into buttons for shift register values
228 229
 
229
-  #define KEYPAD_HOME EN_REPRAPWORLD_KEYPAD_F1
230
-  #define KEYPAD_EN_C EN_REPRAPWORLD_KEYPAD_MIDDLE
230
+  #define BLEN_REPRAPWORLD_KEYPAD_F3     0
231
+  #define BLEN_REPRAPWORLD_KEYPAD_F2     1
232
+  #define BLEN_REPRAPWORLD_KEYPAD_F1     2
233
+
234
+  #define BLEN_REPRAPWORLD_KEYPAD_DOWN   3
235
+  #define BLEN_REPRAPWORLD_KEYPAD_RIGHT  4
236
+  #define BLEN_REPRAPWORLD_KEYPAD_MIDDLE 5
237
+  #define BLEN_REPRAPWORLD_KEYPAD_UP     6
238
+  #define BLEN_REPRAPWORLD_KEYPAD_LEFT   7
239
+  #define EN_REPRAPWORLD_KEYPAD_DOWN     (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_DOWN))
240
+  #define EN_REPRAPWORLD_KEYPAD_RIGHT    (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_RIGHT))
241
+  #define EN_REPRAPWORLD_KEYPAD_MIDDLE   (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_MIDDLE))
242
+  #define EN_REPRAPWORLD_KEYPAD_UP       (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_UP))
243
+  #define EN_REPRAPWORLD_KEYPAD_LEFT     (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_LEFT))
244
+  
245
+#endif // REPRAPWORLD_KEYPAD || ADC_KEYPAD
246
+
247
+#if ENABLED(ADC_KEYPAD)
231 248
 
232 249
   inline bool handle_adc_keypad() {
233 250
     #define ADC_MIN_KEY_DELAY 100
@@ -259,42 +276,27 @@ bool lcd_blink() {
259 276
 
260 277
 #elif ENABLED(REPRAPWORLD_KEYPAD)
261 278
 
262
-  #define REPRAPWORLD_BTN_OFFSET 0 // bit offset into buttons for shift register values
263
-
264
-  #define BLEN_REPRAPWORLD_KEYPAD_F3     0
265
-  #define BLEN_REPRAPWORLD_KEYPAD_F2     1
266
-  #define BLEN_REPRAPWORLD_KEYPAD_F1     2
267
-  #define BLEN_REPRAPWORLD_KEYPAD_DOWN   3
268
-  #define BLEN_REPRAPWORLD_KEYPAD_RIGHT  4
269
-  #define BLEN_REPRAPWORLD_KEYPAD_MIDDLE 5
270
-  #define BLEN_REPRAPWORLD_KEYPAD_UP     6
271
-  #define BLEN_REPRAPWORLD_KEYPAD_LEFT   7
272
-
273
-  #define EN_REPRAPWORLD_KEYPAD_F3      (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_F3))
274
-  #define EN_REPRAPWORLD_KEYPAD_F2      (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_F2))
275
-  #define EN_REPRAPWORLD_KEYPAD_F1      (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_F1))
276
-  #define EN_REPRAPWORLD_KEYPAD_DOWN    (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_DOWN))
277
-  #define EN_REPRAPWORLD_KEYPAD_RIGHT   (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_RIGHT))
278
-  #define EN_REPRAPWORLD_KEYPAD_MIDDLE  (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_MIDDLE))
279
-  #define EN_REPRAPWORLD_KEYPAD_UP      (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_UP))
280
-  #define EN_REPRAPWORLD_KEYPAD_LEFT    (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_LEFT))
279
+  #define KEYPAD_HOME EN_REPRAPWORLD_KEYPAD_F1
280
+  #define KEYPAD_EN_C EN_REPRAPWORLD_KEYPAD_MIDDLE
281 281
 
282
-  #define REPRAPWORLD_KEYPAD_MOVE_Z_DOWN  (buttons_reprapworld_keypad & EN_REPRAPWORLD_KEYPAD_F3)
282
+  #define EN_REPRAPWORLD_KEYPAD_F1        (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_F1))
283
+  #define EN_REPRAPWORLD_KEYPAD_F2        (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_F2))
284
+  #define EN_REPRAPWORLD_KEYPAD_F3        (_BV(REPRAPWORLD_BTN_OFFSET + BLEN_REPRAPWORLD_KEYPAD_F3))
285
+  
283 286
   #define REPRAPWORLD_KEYPAD_MOVE_Z_UP    (buttons_reprapworld_keypad & EN_REPRAPWORLD_KEYPAD_F2)
287
+  #define REPRAPWORLD_KEYPAD_MOVE_Z_DOWN  (buttons_reprapworld_keypad & EN_REPRAPWORLD_KEYPAD_F3)
284 288
   #define REPRAPWORLD_KEYPAD_MOVE_Y_DOWN  (buttons_reprapworld_keypad & EN_REPRAPWORLD_KEYPAD_DOWN)
285 289
   #define REPRAPWORLD_KEYPAD_MOVE_X_RIGHT (buttons_reprapworld_keypad & EN_REPRAPWORLD_KEYPAD_RIGHT)
286 290
   #define REPRAPWORLD_KEYPAD_MOVE_Y_UP    (buttons_reprapworld_keypad & EN_REPRAPWORLD_KEYPAD_UP)
287 291
   #define REPRAPWORLD_KEYPAD_MOVE_X_LEFT  (buttons_reprapworld_keypad & EN_REPRAPWORLD_KEYPAD_LEFT)
288 292
 
289
-  #define KEYPAD_HOME EN_REPRAPWORLD_KEYPAD_MIDDLE
290
-  #define KEYPAD_EN_C EN_REPRAPWORLD_KEYPAD_F1
291 293
   #define REPRAPWORLD_KEYPAD_MOVE_HOME    (buttons_reprapworld_keypad & KEYPAD_HOME)
292 294
   #define REPRAPWORLD_KEYPAD_MOVE_MENU    (buttons_reprapworld_keypad & KEYPAD_EN_C)
293 295
 
294 296
   #define REPRAPWORLD_KEYPAD_PRESSED      (buttons_reprapworld_keypad & ( \
295
-                                            EN_REPRAPWORLD_KEYPAD_F3 | \
296
-                                            EN_REPRAPWORLD_KEYPAD_F2 | \
297 297
                                             EN_REPRAPWORLD_KEYPAD_F1 | \
298
+                                            EN_REPRAPWORLD_KEYPAD_F2 | \
299
+                                            EN_REPRAPWORLD_KEYPAD_F3 | \
298 300
                                             EN_REPRAPWORLD_KEYPAD_DOWN | \
299 301
                                             EN_REPRAPWORLD_KEYPAD_RIGHT | \
300 302
                                             EN_REPRAPWORLD_KEYPAD_MIDDLE | \
@@ -302,6 +304,10 @@ bool lcd_blink() {
302 304
                                             EN_REPRAPWORLD_KEYPAD_LEFT) \
303 305
                                           )
304 306
 
307
+  void lcd_move_x();
308
+  void lcd_move_y();
309
+  void lcd_move_z();
310
+
305 311
   void _reprapworld_keypad_move(const AxisEnum axis, const int16_t dir) {
306 312
     move_menu_scale = REPRAPWORLD_KEYPAD_MOVE_STEP;
307 313
     encoderPosition = dir;
@@ -347,9 +353,7 @@ bool lcd_blink() {
347 353
         if (REPRAPWORLD_KEYPAD_MOVE_Y_DOWN)   reprapworld_keypad_move_y_down();
348 354
         if (REPRAPWORLD_KEYPAD_MOVE_Y_UP)     reprapworld_keypad_move_y_up();
349 355
       }
350
-      else {
351
-        if (REPRAPWORLD_KEYPAD_MOVE_HOME)     reprapworld_keypad_move_home();
352
-      }
356
+      else if (REPRAPWORLD_KEYPAD_MOVE_HOME)  reprapworld_keypad_move_home();
353 357
     }
354 358
   }
355 359
 

+ 2
- 1
buildroot/share/tests/LPC1768_tests 파일 보기

@@ -70,7 +70,8 @@ opt_disable Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN
70 70
 opt_set X_DRIVER_TYPE TMC2130
71 71
 opt_set Y_DRIVER_TYPE TMC2130
72 72
 opt_set Z_DRIVER_TYPE TMC2130
73
-opt_enable_adv TMC_USE_SW_SPI MONITOR_DRIVER_STATUS STEALTHCHOP HYBRID_THRESHOLD TMC_DEBUG SENSORLESS_PROBING
73
+opt_enable_adv TMC_USE_SW_SPI MONITOR_DRIVER_STATUS STEALTHCHOP HYBRID_THRESHOLD TMC_DEBUG \
74
+               SENSORLESS_PROBING X_STALL_SENSITIVITY Y_STALL_SENSITIVITY Z_STALL_SENSITIVITY
74 75
 exec_test $1 $2 "Delta Config (generic) + BOARD_COHESION3D_REMIX + UBL + EEPROM_SETTINGS + SENSORLESS_PROBING"
75 76
 
76 77
 # clean up

Loading…
취소
저장