ソースを参照

Quiet M906/M913/M914 with axes. Patch for DISTINCT_E_FACTORS.

Scott Lahteine 7年前
コミット
cfc13ed7f3

+ 1
- 0
Marlin/src/feature/tmc_util.cpp ファイルの表示

@@ -331,6 +331,7 @@ void _tmc_say_sgt(const TMC_AxisEnum axis, const int8_t sgt) {
331 331
       }
332 332
     }
333 333
   #endif
334
+
334 335
   #if ENABLED(HAVE_TMC2208)
335 336
     static void tmc_status(TMC2208Stepper &st, const TMC_debug_enum i) {
336 337
       switch (i) {

+ 0
- 3
Marlin/src/feature/tmc_util.h ファイルの表示

@@ -55,7 +55,6 @@ void tmc_get_current(TMC &st, const TMC_AxisEnum axis) {
55 55
 template<typename TMC>
56 56
 void tmc_set_current(TMC &st, const TMC_AxisEnum axis, const int mA) {
57 57
   st.setCurrent(mA, R_SENSE, HOLD_MULTIPLIER);
58
-  tmc_get_current(st, axis);
59 58
 }
60 59
 template<typename TMC>
61 60
 void tmc_report_otpw(TMC &st, const TMC_AxisEnum axis) {
@@ -73,7 +72,6 @@ void tmc_get_pwmthrs(TMC &st, const TMC_AxisEnum axis, const uint16_t spmm) {
73 72
 template<typename TMC>
74 73
 void tmc_set_pwmthrs(TMC &st, const TMC_AxisEnum axis, const int32_t thrs, const uint32_t spmm) {
75 74
   st.TPWMTHRS(_tmc_thrs(st.microsteps(), thrs, spmm));
76
-  tmc_get_pwmthrs(st, axis, spmm);
77 75
 }
78 76
 template<typename TMC>
79 77
 void tmc_get_sgt(TMC &st, const TMC_AxisEnum axis) {
@@ -82,7 +80,6 @@ void tmc_get_sgt(TMC &st, const TMC_AxisEnum axis) {
82 80
 template<typename TMC>
83 81
 void tmc_set_sgt(TMC &st, const TMC_AxisEnum axis, const int8_t sgt_val) {
84 82
   st.sgt(sgt_val);
85
-  tmc_get_sgt(st, axis);
86 83
 }
87 84
 
88 85
 void monitor_tmc_driver();

+ 92
- 38
Marlin/src/gcode/feature/trinamic/M906.cpp ファイルの表示

@@ -33,46 +33,100 @@
33 33
  * Report driver currents when no axis specified
34 34
  */
35 35
 void GcodeSuite::M906() {
36
-  uint16_t values[XYZE];
37
-  LOOP_XYZE(i) values[i] = parser.intval(axis_codes[i]);
36
+  #define TMC_SAY_CURRENT(Q) tmc_get_current(stepper##Q, TMC_##Q)
37
+  #define TMC_SET_CURRENT(Q) tmc_set_current(stepper##Q, TMC_##Q, value)
38 38
 
39
-  #define TMC_SET_GET_CURRENT(P,Q) do { \
40
-    if (values[P##_AXIS]) tmc_set_current(stepper##Q, TMC_##Q, values[P##_AXIS]); \
41
-    else tmc_get_current(stepper##Q, TMC_##Q); } while(0)
39
+  bool report = true;
40
+  LOOP_XYZE(i) if (uint16_t value = parser.intval(axis_codes[i])) {
41
+    report = false;
42
+    switch (i) {
43
+      case X_AXIS:
44
+        #if X_IS_TRINAMIC
45
+          TMC_SET_CURRENT(X);
46
+        #endif
47
+        #if X2_IS_TRINAMIC
48
+          TMC_SET_CURRENT(X2);
49
+        #endif
50
+        break;
51
+      case Y_AXIS:
52
+        #if Y_IS_TRINAMIC
53
+          TMC_SET_CURRENT(Y);
54
+        #endif
55
+        #if Y2_IS_TRINAMIC
56
+          TMC_SET_CURRENT(Y2);
57
+        #endif
58
+        break;
59
+      case Z_AXIS:
60
+        #if Z_IS_TRINAMIC
61
+          TMC_SET_CURRENT(Z);
62
+        #endif
63
+        #if Z2_IS_TRINAMIC
64
+          TMC_SET_CURRENT(Z2);
65
+        #endif
66
+        break;
67
+      case E_AXIS:
68
+        #if E0_IS_TRINAMIC
69
+          TMC_SET_CURRENT(E0);
70
+        #endif
71
+        #if E1_IS_TRINAMIC
72
+          TMC_SET_CURRENT(E1);
73
+        #endif
74
+        #if E2_IS_TRINAMIC
75
+          TMC_SET_CURRENT(E2);
76
+        #endif
77
+        #if E3_IS_TRINAMIC
78
+          TMC_SET_CURRENT(E3);
79
+        #endif
80
+        #if E4_IS_TRINAMIC
81
+          TMC_SET_CURRENT(E4);
82
+        #endif
83
+        break;
84
+    }
85
+  }
42 86
 
43
-  #if X_IS_TRINAMIC
44
-    TMC_SET_GET_CURRENT(X,X);
45
-  #endif
46
-  #if X2_IS_TRINAMIC
47
-    TMC_SET_GET_CURRENT(X,X2);
48
-  #endif
49
-  #if Y_IS_TRINAMIC
50
-    TMC_SET_GET_CURRENT(Y,Y);
51
-  #endif
52
-  #if Y2_IS_TRINAMIC
53
-    TMC_SET_GET_CURRENT(Y,Y2);
54
-  #endif
55
-  #if Z_IS_TRINAMIC
56
-    TMC_SET_GET_CURRENT(Z,Z);
57
-  #endif
58
-  #if Z2_IS_TRINAMIC
59
-    TMC_SET_GET_CURRENT(Z,Z2);
60
-  #endif
61
-  #if E0_IS_TRINAMIC
62
-    TMC_SET_GET_CURRENT(E,E0);
63
-  #endif
64
-  #if E1_IS_TRINAMIC
65
-    TMC_SET_GET_CURRENT(E,E1);
66
-  #endif
67
-  #if E2_IS_TRINAMIC
68
-    TMC_SET_GET_CURRENT(E,E2);
69
-  #endif
70
-  #if E3_IS_TRINAMIC
71
-    TMC_SET_GET_CURRENT(E,E3);
72
-  #endif
73
-  #if E4_IS_TRINAMIC
74
-    TMC_SET_GET_CURRENT(E,E4);
75
-  #endif
87
+  if (report) LOOP_XYZE(i) switch (i) {
88
+    case X_AXIS:
89
+      #if X_IS_TRINAMIC
90
+        TMC_SAY_CURRENT(X);
91
+      #endif
92
+      #if X2_IS_TRINAMIC
93
+        TMC_SAY_CURRENT(X2);
94
+      #endif
95
+      break;
96
+    case Y_AXIS:
97
+      #if Y_IS_TRINAMIC
98
+        TMC_SAY_CURRENT(Y);
99
+      #endif
100
+      #if Y2_IS_TRINAMIC
101
+        TMC_SAY_CURRENT(Y2);
102
+      #endif
103
+      break;
104
+    case Z_AXIS:
105
+      #if Z_IS_TRINAMIC
106
+        TMC_SAY_CURRENT(Z);
107
+      #endif
108
+      #if Z2_IS_TRINAMIC
109
+        TMC_SAY_CURRENT(Z2);
110
+      #endif
111
+      break;
112
+    case E_AXIS:
113
+      #if E0_IS_TRINAMIC
114
+        TMC_SAY_CURRENT(E0);
115
+      #endif
116
+      #if E1_IS_TRINAMIC
117
+        TMC_SAY_CURRENT(E1);
118
+      #endif
119
+      #if E2_IS_TRINAMIC
120
+        TMC_SAY_CURRENT(E2);
121
+      #endif
122
+      #if E3_IS_TRINAMIC
123
+        TMC_SAY_CURRENT(E3);
124
+      #endif
125
+      #if E4_IS_TRINAMIC
126
+        TMC_SAY_CURRENT(E4);
127
+      #endif
128
+      break;
129
+  }
76 130
 }
77 131
 
78 132
 #endif // HAS_TRINAMIC

+ 155
- 66
Marlin/src/gcode/feature/trinamic/M911-M915.cpp ファイルの表示

@@ -80,46 +80,102 @@ void GcodeSuite::M912() {
80 80
  */
81 81
 #if ENABLED(HYBRID_THRESHOLD)
82 82
   void GcodeSuite::M913() {
83
-    uint16_t values[XYZE];
84
-    LOOP_XYZE(i) values[i] = parser.intval(axis_codes[i]);
83
+    #define TMC_SAY_PWMTHRS(P,Q) tmc_get_pwmthrs(stepper##Q, TMC_##Q, planner.axis_steps_per_mm[P##_AXIS])
84
+    #define TMC_SET_PWMTHRS(P,Q) tmc_set_pwmthrs(stepper##Q, TMC_##Q, value, planner.axis_steps_per_mm[P##_AXIS])
85
+    #define TMC_SAY_PWMTHRS_E(E) do{ const uint8_t extruder = E; tmc_get_pwmthrs(stepperE##E, TMC_E##E, planner.axis_steps_per_mm[E_AXIS_N]); }while(0)
86
+    #define TMC_SET_PWMTHRS_E(E) do{ const uint8_t extruder = E; tmc_set_pwmthrs(stepperE##E, TMC_E##E, value, planner.axis_steps_per_mm[E_AXIS_N]); }while(0)
85 87
 
86
-    #define TMC_SET_GET_PWMTHRS(P,Q) do { \
87
-      if (values[P##_AXIS]) tmc_set_pwmthrs(stepper##Q, TMC_##Q, values[P##_AXIS], planner.axis_steps_per_mm[P##_AXIS]); \
88
-      else tmc_get_pwmthrs(stepper##Q, TMC_##Q, planner.axis_steps_per_mm[P##_AXIS]); } while(0)
88
+    bool report = true;
89
+    LOOP_XYZE(i) if (int32_t value = parser.longval(axis_codes[i])) {
90
+      report = false;
91
+      switch (i) {
92
+        case X_AXIS:
93
+          #if X_IS_TRINAMIC
94
+            TMC_SET_PWMTHRS(X,X);
95
+          #endif
96
+          #if X2_IS_TRINAMIC
97
+            TMC_SET_PWMTHRS(X,X2);
98
+          #endif
99
+          break;
100
+        case Y_AXIS:
101
+          #if Y_IS_TRINAMIC
102
+            TMC_SET_PWMTHRS(Y,Y);
103
+          #endif
104
+          #if Y2_IS_TRINAMIC
105
+            TMC_SET_PWMTHRS(Y,Y2);
106
+          #endif
107
+          break;
108
+        case Z_AXIS:
109
+          #if Z_IS_TRINAMIC
110
+            TMC_SET_PWMTHRS(Z,Z);
111
+          #endif
112
+          #if Z2_IS_TRINAMIC
113
+            TMC_SET_PWMTHRS(Z,Z2);
114
+          #endif
115
+          break;
116
+        case E_AXIS:
117
+          #if E0_IS_TRINAMIC
118
+            TMC_SET_PWMTHRS_E(0);
119
+          #endif
120
+          #if E1_IS_TRINAMIC
121
+            TMC_SET_PWMTHRS_E(1);
122
+          #endif
123
+          #if E2_IS_TRINAMIC
124
+            TMC_SET_PWMTHRS_E(2);
125
+          #endif
126
+          #if E3_IS_TRINAMIC
127
+            TMC_SET_PWMTHRS_E(3);
128
+          #endif
129
+          #if E4_IS_TRINAMIC
130
+            TMC_SET_PWMTHRS_E(4);
131
+          #endif
132
+          break;
133
+      }
134
+    }
89 135
 
90
-    #if X_IS_TRINAMIC
91
-      TMC_SET_GET_PWMTHRS(X,X);
92
-    #endif
93
-    #if X2_IS_TRINAMIC
94
-      TMC_SET_GET_PWMTHRS(X,X2);
95
-    #endif
96
-    #if Y_IS_TRINAMIC
97
-      TMC_SET_GET_PWMTHRS(Y,Y);
98
-    #endif
99
-    #if Y2_IS_TRINAMIC
100
-      TMC_SET_GET_PWMTHRS(Y,Y2);
101
-    #endif
102
-    #if Z_IS_TRINAMIC
103
-      TMC_SET_GET_PWMTHRS(Z,Z);
104
-    #endif
105
-    #if Z2_IS_TRINAMIC
106
-      TMC_SET_GET_PWMTHRS(Z,Z2);
107
-    #endif
108
-    #if E0_IS_TRINAMIC
109
-      TMC_SET_GET_PWMTHRS(E,E0);
110
-    #endif
111
-    #if E1_IS_TRINAMIC
112
-      TMC_SET_GET_PWMTHRS(E,E1);
113
-    #endif
114
-    #if E2_IS_TRINAMIC
115
-      TMC_SET_GET_PWMTHRS(E,E2);
116
-    #endif
117
-    #if E3_IS_TRINAMIC
118
-      TMC_SET_GET_PWMTHRS(E,E3);
119
-    #endif
120
-    #if E4_IS_TRINAMIC
121
-      TMC_SET_GET_PWMTHRS(E,E4);
122
-    #endif
136
+    if (report) LOOP_XYZE(i) switch (i) {
137
+      case X_AXIS:
138
+        #if X_IS_TRINAMIC
139
+          TMC_SAY_PWMTHRS(X,X);
140
+        #endif
141
+        #if X2_IS_TRINAMIC
142
+          TMC_SAY_PWMTHRS(X,X2);
143
+        #endif
144
+        break;
145
+      case Y_AXIS:
146
+        #if Y_IS_TRINAMIC
147
+          TMC_SAY_PWMTHRS(Y,Y);
148
+        #endif
149
+        #if Y2_IS_TRINAMIC
150
+          TMC_SAY_PWMTHRS(Y,Y2);
151
+        #endif
152
+        break;
153
+      case Z_AXIS:
154
+        #if Z_IS_TRINAMIC
155
+          TMC_SAY_PWMTHRS(Z,Z);
156
+        #endif
157
+        #if Z2_IS_TRINAMIC
158
+          TMC_SAY_PWMTHRS(Z,Z2);
159
+        #endif
160
+        break;
161
+      case E_AXIS:
162
+        #if E0_IS_TRINAMIC
163
+          TMC_SAY_PWMTHRS_E(0);
164
+        #endif
165
+        #if E1_IS_TRINAMIC
166
+          TMC_SAY_PWMTHRS_E(1);
167
+        #endif
168
+        #if E2_IS_TRINAMIC
169
+          TMC_SAY_PWMTHRS_E(2);
170
+        #endif
171
+        #if E3_IS_TRINAMIC
172
+          TMC_SAY_PWMTHRS_E(3);
173
+        #endif
174
+        #if E4_IS_TRINAMIC
175
+          TMC_SAY_PWMTHRS_E(4);
176
+        #endif
177
+        break;
178
+    }
123 179
   }
124 180
 #endif // HYBRID_THRESHOLD
125 181
 
@@ -128,34 +184,67 @@ void GcodeSuite::M912() {
128 184
  */
129 185
 #if ENABLED(SENSORLESS_HOMING)
130 186
   void GcodeSuite::M914() {
131
-    #define TMC_SET_GET_SGT(P,Q) do { \
132
-      if (parser.seen(axis_codes[P##_AXIS])) tmc_set_sgt(stepper##Q, TMC_##Q, parser.value_int()); \
133
-      else tmc_get_sgt(stepper##Q, TMC_##Q); } while(0)
134
-
135
-    #ifdef X_HOMING_SENSITIVITY
136
-      #if ENABLED(X_IS_TMC2130) || ENABLED(IS_TRAMS)
137
-        TMC_SET_GET_SGT(X,X);
138
-      #endif
139
-      #if ENABLED(X2_IS_TMC2130)
140
-        TMC_SET_GET_SGT(X,X2);
141
-      #endif
142
-    #endif
143
-    #ifdef Y_HOMING_SENSITIVITY
144
-      #if ENABLED(Y_IS_TMC2130) || ENABLED(IS_TRAMS)
145
-        TMC_SET_GET_SGT(Y,Y);
146
-      #endif
147
-      #if ENABLED(Y2_IS_TMC2130)
148
-        TMC_SET_GET_SGT(Y,Y2);
149
-      #endif
150
-    #endif
151
-    #ifdef Z_HOMING_SENSITIVITY
152
-      #if ENABLED(Z_IS_TMC2130) || ENABLED(IS_TRAMS)
153
-        TMC_SET_GET_SGT(Z,Z);
154
-      #endif
155
-      #if ENABLED(Z2_IS_TMC2130)
156
-        TMC_SET_GET_SGT(Z,Z2);
157
-      #endif
158
-    #endif
187
+    #define TMC_SAY_SGT(Q) tmc_get_sgt(stepper##Q, TMC_##Q)
188
+    #define TMC_SET_SGT(Q) tmc_set_sgt(stepper##Q, TMC_##Q, value)
189
+
190
+    bool report = true;
191
+    LOOP_XYZ(i) if (parser.seen(axis_codes[i])) {
192
+      const int8_t value = (int8_t)constrain(parser.value_int(), -63, 64);
193
+      report = false;
194
+      switch (i) {
195
+        case X_AXIS:
196
+          #if ENABLED(X_IS_TMC2130) || ENABLED(IS_TRAMS)
197
+            TMC_SET_SGT(X);
198
+          #endif
199
+          #if ENABLED(X2_IS_TMC2130)
200
+            TMC_SET_SGT(X2);
201
+          #endif
202
+          break;
203
+        case Y_AXIS:
204
+          #if ENABLED(Y_IS_TMC2130) || ENABLED(IS_TRAMS)
205
+            TMC_SET_SGT(Y);
206
+          #endif
207
+          #if ENABLED(Y2_IS_TMC2130)
208
+            TMC_SET_SGT(Y2);
209
+          #endif
210
+          break;
211
+        case Z_AXIS:
212
+          #if ENABLED(Z_IS_TMC2130) || ENABLED(IS_TRAMS)
213
+            TMC_SET_SGT(Z);
214
+          #endif
215
+          #if ENABLED(Z2_IS_TMC2130)
216
+            TMC_SET_SGT(Z2);
217
+          #endif
218
+          break;
219
+      }
220
+    }
221
+
222
+    if (report) LOOP_XYZ(i) switch (i) {
223
+      case X_AXIS:
224
+        #if ENABLED(X_IS_TMC2130) || ENABLED(IS_TRAMS)
225
+          TMC_SAY_SGT(X);
226
+        #endif
227
+        #if ENABLED(X2_IS_TMC2130)
228
+          TMC_SAY_SGT(X2);
229
+        #endif
230
+        break;
231
+      case Y_AXIS:
232
+        #if ENABLED(Y_IS_TMC2130) || ENABLED(IS_TRAMS)
233
+          TMC_SAY_SGT(Y);
234
+        #endif
235
+        #if ENABLED(Y2_IS_TMC2130)
236
+          TMC_SAY_SGT(Y2);
237
+        #endif
238
+        break;
239
+      case Z_AXIS:
240
+        #if ENABLED(Z_IS_TMC2130) || ENABLED(IS_TRAMS)
241
+          TMC_SAY_SGT(Z);
242
+        #endif
243
+        #if ENABLED(Z2_IS_TMC2130)
244
+          TMC_SAY_SGT(Z2);
245
+        #endif
246
+        break;
247
+    }
159 248
   }
160 249
 #endif // SENSORLESS_HOMING
161 250
 

読み込み中…
キャンセル
保存