Browse Source

Limited backlash editing with Core kinematics (#17281)

Scott Lahteine 5 years ago
parent
commit
53fe572bbd
No account linked to committer's email address

+ 8
- 12
Marlin/src/gcode/calibrate/G28.cpp View File

255
   #define HAS_HOMING_CURRENT (HAS_CURRENT_HOME(X) || HAS_CURRENT_HOME(X2) || HAS_CURRENT_HOME(Y) || HAS_CURRENT_HOME(Y2))
255
   #define HAS_HOMING_CURRENT (HAS_CURRENT_HOME(X) || HAS_CURRENT_HOME(X2) || HAS_CURRENT_HOME(Y) || HAS_CURRENT_HOME(Y2))
256
 
256
 
257
   #if HAS_HOMING_CURRENT
257
   #if HAS_HOMING_CURRENT
258
-    auto debug_current = [](const char * const s, const int16_t a, const int16_t b){
259
-      DEBUG_ECHO(s); DEBUG_ECHOLNPAIR(" current: ", a, " -> ", b);
258
+    auto debug_current = [](PGM_P const s, const int16_t a, const int16_t b){
259
+      serialprintPGM(s); DEBUG_ECHOLNPAIR(" current: ", a, " -> ", b);
260
     };
260
     };
261
     #if HAS_CURRENT_HOME(X)
261
     #if HAS_CURRENT_HOME(X)
262
       const int16_t tmc_save_current_X = stepperX.getMilliamps();
262
       const int16_t tmc_save_current_X = stepperX.getMilliamps();
263
       stepperX.rms_current(X_CURRENT_HOME);
263
       stepperX.rms_current(X_CURRENT_HOME);
264
-      if (DEBUGGING(LEVELING)) debug_current("X", tmc_save_current_X, X_CURRENT_HOME);
264
+      if (DEBUGGING(LEVELING)) debug_current(PSTR("X"), tmc_save_current_X, X_CURRENT_HOME);
265
     #endif
265
     #endif
266
     #if HAS_CURRENT_HOME(X2)
266
     #if HAS_CURRENT_HOME(X2)
267
       const int16_t tmc_save_current_X2 = stepperX2.getMilliamps();
267
       const int16_t tmc_save_current_X2 = stepperX2.getMilliamps();
268
       stepperX2.rms_current(X2_CURRENT_HOME);
268
       stepperX2.rms_current(X2_CURRENT_HOME);
269
-      if (DEBUGGING(LEVELING)) debug_current("X2", tmc_save_current_X2, X2_CURRENT_HOME);
269
+      if (DEBUGGING(LEVELING)) debug_current(PSTR("X2"), tmc_save_current_X2, X2_CURRENT_HOME);
270
     #endif
270
     #endif
271
     #if HAS_CURRENT_HOME(Y)
271
     #if HAS_CURRENT_HOME(Y)
272
       const int16_t tmc_save_current_Y = stepperY.getMilliamps();
272
       const int16_t tmc_save_current_Y = stepperY.getMilliamps();
273
       stepperY.rms_current(Y_CURRENT_HOME);
273
       stepperY.rms_current(Y_CURRENT_HOME);
274
-      if (DEBUGGING(LEVELING)) debug_current("Y", tmc_save_current_Y, Y_CURRENT_HOME);
274
+      if (DEBUGGING(LEVELING)) debug_current(PSTR("Y"), tmc_save_current_Y, Y_CURRENT_HOME);
275
     #endif
275
     #endif
276
     #if HAS_CURRENT_HOME(Y2)
276
     #if HAS_CURRENT_HOME(Y2)
277
       const int16_t tmc_save_current_Y2 = stepperY2.getMilliamps();
277
       const int16_t tmc_save_current_Y2 = stepperY2.getMilliamps();
278
       stepperY2.rms_current(Y2_CURRENT_HOME);
278
       stepperY2.rms_current(Y2_CURRENT_HOME);
279
-      if (DEBUGGING(LEVELING)) debug_current("Y2", tmc_save_current_Y2, Y2_CURRENT_HOME);
279
+      if (DEBUGGING(LEVELING)) debug_current(PSTR("Y2"), tmc_save_current_Y2, Y2_CURRENT_HOME);
280
     #endif
280
     #endif
281
   #endif
281
   #endif
282
 
282
 
345
     #endif
345
     #endif
346
 
346
 
347
     // Home Y (before X)
347
     // Home Y (before X)
348
-    #if ENABLED(HOME_Y_BEFORE_X)
349
-
350
-      if (doY || (doX && ENABLED(CODEPENDENT_XY_HOMING)))
351
-        homeaxis(Y_AXIS);
352
-
353
-    #endif
348
+    if (ENABLED(HOME_Y_BEFORE_X) && (doY || (ENABLED(CODEPENDENT_XY_HOMING) && doX)))
349
+      homeaxis(Y_AXIS);
354
 
350
 
355
     // Home X
351
     // Home X
356
     if (doX || (doY && ENABLED(CODEPENDENT_XY_HOMING) && DISABLED(HOME_Y_BEFORE_X))) {
352
     if (doX || (doY && ENABLED(CODEPENDENT_XY_HOMING) && DISABLED(HOME_Y_BEFORE_X))) {

+ 85
- 59
Marlin/src/gcode/calibrate/G425.cpp View File

37
 #include "../../module/endstops.h"
37
 #include "../../module/endstops.h"
38
 #include "../../feature/bedlevel/bedlevel.h"
38
 #include "../../feature/bedlevel/bedlevel.h"
39
 
39
 
40
+#if !AXIS_CAN_CALIBRATE(X)
41
+  #undef CALIBRATION_MEASURE_LEFT
42
+  #undef CALIBRATION_MEASURE_RIGHT
43
+#endif
44
+
45
+#if !AXIS_CAN_CALIBRATE(Y)
46
+  #undef CALIBRATION_MEASURE_FRONT
47
+  #undef CALIBRATION_MEASURE_BACK
48
+#endif
49
+
50
+#if !AXIS_CAN_CALIBRATE(Z)
51
+  #undef CALIBRATION_MEASURE_AT_TOP_EDGES
52
+#endif
53
+
54
+
40
 /**
55
 /**
41
  * G425 backs away from the calibration object by various distances
56
  * G425 backs away from the calibration object by various distances
42
  * depending on the confidence level:
57
  * depending on the confidence level:
207
 inline void probe_side(measurements_t &m, const float uncertainty, const side_t side, const bool probe_top_at_edge=false) {
222
 inline void probe_side(measurements_t &m, const float uncertainty, const side_t side, const bool probe_top_at_edge=false) {
208
   const xyz_float_t dimensions = CALIBRATION_OBJECT_DIMENSIONS;
223
   const xyz_float_t dimensions = CALIBRATION_OBJECT_DIMENSIONS;
209
   AxisEnum axis;
224
   AxisEnum axis;
210
-  float dir;
225
+  float dir = 1;
211
 
226
 
212
   park_above_object(m, uncertainty);
227
   park_above_object(m, uncertainty);
213
 
228
 
214
   switch (side) {
229
   switch (side) {
215
-    case TOP: {
216
-      const float measurement = measure(Z_AXIS, -1, true, &m.backlash[TOP], uncertainty);
217
-      m.obj_center.z = measurement - dimensions.z / 2;
218
-      m.obj_side[TOP] = measurement;
219
-      return;
220
-    }
221
-    case RIGHT: axis = X_AXIS; dir = -1; break;
222
-    case FRONT: axis = Y_AXIS; dir =  1; break;
223
-    case LEFT:  axis = X_AXIS; dir =  1; break;
224
-    case BACK:  axis = Y_AXIS; dir = -1; break;
230
+    #if AXIS_CAN_CALIBRATE(Z)
231
+      case TOP: {
232
+        const float measurement = measure(Z_AXIS, -1, true, &m.backlash[TOP], uncertainty);
233
+        m.obj_center.z = measurement - dimensions.z / 2;
234
+        m.obj_side[TOP] = measurement;
235
+        return;
236
+      }
237
+    #endif
238
+    #if AXIS_CAN_CALIBRATE(X)
239
+      case LEFT:  axis = X_AXIS; break;
240
+      case RIGHT: axis = X_AXIS; dir = -1; break;
241
+    #endif
242
+    #if AXIS_CAN_CALIBRATE(Y)
243
+      case FRONT: axis = Y_AXIS; break;
244
+      case BACK:  axis = Y_AXIS; dir = -1; break;
245
+    #endif
225
     default: return;
246
     default: return;
226
   }
247
   }
227
 
248
 
228
   if (probe_top_at_edge) {
249
   if (probe_top_at_edge) {
229
-    // Probe top nearest the side we are probing
230
-    current_position[axis] = m.obj_center[axis] + (-dir) * (dimensions[axis] / 2 - m.nozzle_outer_dimension[axis]);
231
-    calibration_move();
232
-    m.obj_side[TOP] = measure(Z_AXIS, -1, true, &m.backlash[TOP], uncertainty);
233
-    m.obj_center.z = m.obj_side[TOP] - dimensions.z / 2;
250
+    #if AXIS_CAN_CALIBRATE(Z)
251
+      // Probe top nearest the side we are probing
252
+      current_position[axis] = m.obj_center[axis] + (-dir) * (dimensions[axis] / 2 - m.nozzle_outer_dimension[axis]);
253
+      calibration_move();
254
+      m.obj_side[TOP] = measure(Z_AXIS, -1, true, &m.backlash[TOP], uncertainty);
255
+      m.obj_center.z = m.obj_side[TOP] - dimensions.z / 2;
256
+    #endif
234
   }
257
   }
235
 
258
 
236
-  // Move to safe distance to the side of the calibration object
237
-  current_position[axis] = m.obj_center[axis] + (-dir) * (dimensions[axis] / 2 + m.nozzle_outer_dimension[axis] / 2 + uncertainty);
238
-  calibration_move();
259
+  if (AXIS_CAN_CALIBRATE(X) && axis == X_AXIS || AXIS_CAN_CALIBRATE(Y) && axis == Y_AXIS) {
260
+    // Move to safe distance to the side of the calibration object
261
+    current_position[axis] = m.obj_center[axis] + (-dir) * (dimensions[axis] / 2 + m.nozzle_outer_dimension[axis] / 2 + uncertainty);
262
+    calibration_move();
239
 
263
 
240
-  // Plunge below the side of the calibration object and measure
241
-  current_position.z = m.obj_side[TOP] - CALIBRATION_NOZZLE_TIP_HEIGHT * 0.7;
242
-  calibration_move();
243
-  const float measurement = measure(axis, dir, true, &m.backlash[side], uncertainty);
244
-  m.obj_center[axis] = measurement + dir * (dimensions[axis] / 2 + m.nozzle_outer_dimension[axis] / 2);
245
-  m.obj_side[side] = measurement;
264
+    // Plunge below the side of the calibration object and measure
265
+    current_position.z = m.obj_side[TOP] - (CALIBRATION_NOZZLE_TIP_HEIGHT) * 0.7f;
266
+    calibration_move();
267
+    const float measurement = measure(axis, dir, true, &m.backlash[side], uncertainty);
268
+    m.obj_center[axis] = measurement + dir * (dimensions[axis] / 2 + m.nozzle_outer_dimension[axis] / 2);
269
+    m.obj_side[side] = measurement;
270
+  }
246
 }
271
 }
247
 
272
 
248
 /**
273
 /**
252
  *   uncertainty        in     - How far away from the calibration object to begin probing
277
  *   uncertainty        in     - How far away from the calibration object to begin probing
253
  */
278
  */
254
 inline void probe_sides(measurements_t &m, const float uncertainty) {
279
 inline void probe_sides(measurements_t &m, const float uncertainty) {
255
-  #ifdef CALIBRATION_MEASURE_AT_TOP_EDGES
280
+  #if ENABLED(CALIBRATION_MEASURE_AT_TOP_EDGES)
256
     constexpr bool probe_top_at_edge = true;
281
     constexpr bool probe_top_at_edge = true;
257
   #else
282
   #else
258
     // Probing at the exact center only works if the center is flat. Probing on a washer
283
     // Probing at the exact center only works if the center is flat. Probing on a washer
261
     probe_side(m, uncertainty, TOP);
286
     probe_side(m, uncertainty, TOP);
262
   #endif
287
   #endif
263
 
288
 
264
-  #ifdef CALIBRATION_MEASURE_RIGHT
289
+  #if ENABLED(CALIBRATION_MEASURE_RIGHT)
265
     probe_side(m, uncertainty, RIGHT, probe_top_at_edge);
290
     probe_side(m, uncertainty, RIGHT, probe_top_at_edge);
266
   #endif
291
   #endif
267
 
292
 
268
-  #ifdef CALIBRATION_MEASURE_FRONT
293
+  #if ENABLED(CALIBRATION_MEASURE_FRONT)
269
     probe_side(m, uncertainty, FRONT, probe_top_at_edge);
294
     probe_side(m, uncertainty, FRONT, probe_top_at_edge);
270
   #endif
295
   #endif
271
 
296
 
272
-  #ifdef CALIBRATION_MEASURE_LEFT
297
+  #if ENABLED(CALIBRATION_MEASURE_LEFT)
273
     probe_side(m, uncertainty, LEFT,  probe_top_at_edge);
298
     probe_side(m, uncertainty, LEFT,  probe_top_at_edge);
274
   #endif
299
   #endif
275
-  #ifdef CALIBRATION_MEASURE_BACK
300
+  #if ENABLED(CALIBRATION_MEASURE_BACK)
276
     probe_side(m, uncertainty, BACK,  probe_top_at_edge);
301
     probe_side(m, uncertainty, BACK,  probe_top_at_edge);
277
   #endif
302
   #endif
278
 
303
 
313
 #if ENABLED(CALIBRATION_REPORTING)
338
 #if ENABLED(CALIBRATION_REPORTING)
314
   inline void report_measured_faces(const measurements_t &m) {
339
   inline void report_measured_faces(const measurements_t &m) {
315
     SERIAL_ECHOLNPGM("Sides:");
340
     SERIAL_ECHOLNPGM("Sides:");
316
-    SERIAL_ECHOLNPAIR("  Top: ", m.obj_side[TOP]);
341
+    #if AXIS_CAN_CALIBRATE(Z)
342
+      SERIAL_ECHOLNPAIR("  Top: ", m.obj_side[TOP]);
343
+    #endif
317
     #if ENABLED(CALIBRATION_MEASURE_LEFT)
344
     #if ENABLED(CALIBRATION_MEASURE_LEFT)
318
       SERIAL_ECHOLNPAIR("  Left: ", m.obj_side[LEFT]);
345
       SERIAL_ECHOLNPAIR("  Left: ", m.obj_side[LEFT]);
319
     #endif
346
     #endif
343
 
370
 
344
   inline void report_measured_backlash(const measurements_t &m) {
371
   inline void report_measured_backlash(const measurements_t &m) {
345
     SERIAL_ECHOLNPGM("Backlash:");
372
     SERIAL_ECHOLNPGM("Backlash:");
346
-    #if ENABLED(CALIBRATION_MEASURE_LEFT)
347
-      SERIAL_ECHOLNPAIR("  Left: ", m.backlash[LEFT]);
348
-    #endif
349
-    #if ENABLED(CALIBRATION_MEASURE_RIGHT)
350
-      SERIAL_ECHOLNPAIR("  Right: ", m.backlash[RIGHT]);
373
+    #if AXIS_CAN_CALIBRATE(X)
374
+      #if ENABLED(CALIBRATION_MEASURE_LEFT)
375
+        SERIAL_ECHOLNPAIR("  Left: ", m.backlash[LEFT]);
376
+      #endif
377
+      #if ENABLED(CALIBRATION_MEASURE_RIGHT)
378
+        SERIAL_ECHOLNPAIR("  Right: ", m.backlash[RIGHT]);
379
+      #endif
351
     #endif
380
     #endif
352
-    #if ENABLED(CALIBRATION_MEASURE_FRONT)
353
-      SERIAL_ECHOLNPAIR("  Front: ", m.backlash[FRONT]);
381
+    #if AXIS_CAN_CALIBRATE(Y)
382
+      #if ENABLED(CALIBRATION_MEASURE_FRONT)
383
+        SERIAL_ECHOLNPAIR("  Front: ", m.backlash[FRONT]);
384
+      #endif
385
+      #if ENABLED(CALIBRATION_MEASURE_BACK)
386
+        SERIAL_ECHOLNPAIR("  Back: ", m.backlash[BACK]);
387
+      #endif
354
     #endif
388
     #endif
355
-    #if ENABLED(CALIBRATION_MEASURE_BACK)
356
-      SERIAL_ECHOLNPAIR("  Back: ", m.backlash[BACK]);
389
+    #if AXIS_CAN_CALIBRATE(Z)
390
+      SERIAL_ECHOLNPAIR("  Top: ", m.backlash[TOP]);
357
     #endif
391
     #endif
358
-    SERIAL_ECHOLNPAIR("  Top: ", m.backlash[TOP]);
359
     SERIAL_EOL();
392
     SERIAL_EOL();
360
   }
393
   }
361
 
394
 
369
     #if HAS_Y_CENTER
402
     #if HAS_Y_CENTER
370
       SERIAL_ECHOLNPAIR_P(SP_Y_STR, m.pos_error.y);
403
       SERIAL_ECHOLNPAIR_P(SP_Y_STR, m.pos_error.y);
371
     #endif
404
     #endif
372
-    SERIAL_ECHOLNPAIR_P(SP_Z_STR, m.pos_error.z);
405
+    if (AXIS_CAN_CALIBRATE(Z)) SERIAL_ECHOLNPAIR_P(SP_Z_STR, m.pos_error.z);
373
     SERIAL_EOL();
406
     SERIAL_EOL();
374
   }
407
   }
375
 
408
 
417
     probe_sides(m, uncertainty);
450
     probe_sides(m, uncertainty);
418
 
451
 
419
     #if ENABLED(BACKLASH_GCODE)
452
     #if ENABLED(BACKLASH_GCODE)
453
+
420
       #if HAS_X_CENTER
454
       #if HAS_X_CENTER
421
         backlash.distance_mm.x = (m.backlash[LEFT] + m.backlash[RIGHT]) / 2;
455
         backlash.distance_mm.x = (m.backlash[LEFT] + m.backlash[RIGHT]) / 2;
422
       #elif ENABLED(CALIBRATION_MEASURE_LEFT)
456
       #elif ENABLED(CALIBRATION_MEASURE_LEFT)
433
         backlash.distance_mm.y = m.backlash[BACK];
467
         backlash.distance_mm.y = m.backlash[BACK];
434
       #endif
468
       #endif
435
 
469
 
436
-      backlash.distance_mm.z = m.backlash[TOP];
470
+      if (AXIS_CAN_CALIBRATE(Z)) backlash.distance_mm.z = m.backlash[TOP];
437
     #endif
471
     #endif
438
   }
472
   }
439
 
473
 
440
   #if ENABLED(BACKLASH_GCODE)
474
   #if ENABLED(BACKLASH_GCODE)
441
     // Turn on backlash compensation and move in all
475
     // Turn on backlash compensation and move in all
442
-    // directions to take up any backlash
476
+    // allowed directions to take up any backlash
443
     {
477
     {
444
       // New scope for TEMPORARY_BACKLASH_CORRECTION
478
       // New scope for TEMPORARY_BACKLASH_CORRECTION
445
       TEMPORARY_BACKLASH_CORRECTION(all_on);
479
       TEMPORARY_BACKLASH_CORRECTION(all_on);
446
       TEMPORARY_BACKLASH_SMOOTHING(0.0f);
480
       TEMPORARY_BACKLASH_SMOOTHING(0.0f);
447
-      const xyz_float_t move = { 3, 3, 3 };
481
+      const xyz_float_t move = { AXIS_CAN_CALIBRATE(X) * 3, AXIS_CAN_CALIBRATE(Y) * 3, AXIS_CAN_CALIBRATE(Z) * 3 };
448
       current_position += move; calibration_move();
482
       current_position += move; calibration_move();
449
       current_position -= move; calibration_move();
483
       current_position -= move; calibration_move();
450
     }
484
     }
482
 
516
 
483
   // Adjust the hotend offset
517
   // Adjust the hotend offset
484
   #if HAS_HOTEND_OFFSET
518
   #if HAS_HOTEND_OFFSET
485
-    #if HAS_X_CENTER
486
-      hotend_offset[extruder].x += m.pos_error.x;
487
-    #endif
488
-    #if HAS_Y_CENTER
489
-      hotend_offset[extruder].y += m.pos_error.y;
490
-    #endif
491
-    hotend_offset[extruder].z += m.pos_error.z;
519
+    if (ENABLED(HAS_X_CENTER) && AXIS_CAN_CALIBRATE(X)) hotend_offset[extruder].x += m.pos_error.x;
520
+    if (ENABLED(HAS_Y_CENTER) && AXIS_CAN_CALIBRATE(Y)) hotend_offset[extruder].y += m.pos_error.y;
521
+                             if (AXIS_CAN_CALIBRATE(Z)) hotend_offset[extruder].z += m.pos_error.z;
492
     normalize_hotend_offsets();
522
     normalize_hotend_offsets();
493
   #endif
523
   #endif
494
 
524
 
495
   // Correct for positional error, so the object
525
   // Correct for positional error, so the object
496
   // is at the known actual spot
526
   // is at the known actual spot
497
   planner.synchronize();
527
   planner.synchronize();
498
-  #if HAS_X_CENTER
499
-    update_measurements(m, X_AXIS);
500
-  #endif
501
-  #if HAS_Y_CENTER
502
-    update_measurements(m, Y_AXIS);
503
-  #endif
504
-  update_measurements(m, Z_AXIS);
528
+  if (ENABLED(HAS_X_CENTER) && AXIS_CAN_CALIBRATE(X)) update_measurements(m, X_AXIS);
529
+  if (ENABLED(HAS_Y_CENTER) && AXIS_CAN_CALIBRATE(Y)) update_measurements(m, Y_AXIS);
530
+                           if (AXIS_CAN_CALIBRATE(Z)) update_measurements(m, Z_AXIS);
505
 
531
 
506
   sync_plan_position();
532
   sync_plan_position();
507
 }
533
 }

+ 3
- 3
Marlin/src/gcode/calibrate/M425.cpp View File

47
   bool noArgs = true;
47
   bool noArgs = true;
48
 
48
 
49
   LOOP_XYZ(a) {
49
   LOOP_XYZ(a) {
50
-    if (parser.seen(XYZ_CHAR(a))) {
50
+    if (CAN_CALIBRATE(a) && parser.seen(XYZ_CHAR(a))) {
51
       planner.synchronize();
51
       planner.synchronize();
52
       backlash.distance_mm[a] = parser.has_value() ? parser.value_linear_units() : backlash.get_measurement(AxisEnum(a));
52
       backlash.distance_mm[a] = parser.has_value() ? parser.value_linear_units() : backlash.get_measurement(AxisEnum(a));
53
       noArgs = false;
53
       noArgs = false;
74
     SERIAL_ECHOLNPGM("active:");
74
     SERIAL_ECHOLNPGM("active:");
75
     SERIAL_ECHOLNPAIR("  Correction Amount/Fade-out:     F", backlash.get_correction(), " (F1.0 = full, F0.0 = none)");
75
     SERIAL_ECHOLNPAIR("  Correction Amount/Fade-out:     F", backlash.get_correction(), " (F1.0 = full, F0.0 = none)");
76
     SERIAL_ECHOPGM("  Backlash Distance (mm):        ");
76
     SERIAL_ECHOPGM("  Backlash Distance (mm):        ");
77
-    LOOP_XYZ(a) {
77
+    LOOP_XYZ(a) if (CAN_CALIBRATE(a)) {
78
       SERIAL_CHAR(' ', XYZ_CHAR(a));
78
       SERIAL_CHAR(' ', XYZ_CHAR(a));
79
       SERIAL_ECHO(backlash.distance_mm[a]);
79
       SERIAL_ECHO(backlash.distance_mm[a]);
80
       SERIAL_EOL();
80
       SERIAL_EOL();
87
     #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
87
     #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
88
       SERIAL_ECHOPGM("  Average measured backlash (mm):");
88
       SERIAL_ECHOPGM("  Average measured backlash (mm):");
89
       if (backlash.has_any_measurement()) {
89
       if (backlash.has_any_measurement()) {
90
-        LOOP_XYZ(a) if (backlash.has_measurement(AxisEnum(a))) {
90
+        LOOP_XYZ(a) if (CAN_CALIBRATE(a) && backlash.has_measurement(AxisEnum(a))) {
91
           SERIAL_CHAR(' ', XYZ_CHAR(a));
91
           SERIAL_CHAR(' ', XYZ_CHAR(a));
92
           SERIAL_ECHO(backlash.get_measurement(AxisEnum(a)));
92
           SERIAL_ECHO(backlash.get_measurement(AxisEnum(a)));
93
         }
93
         }

+ 13
- 0
Marlin/src/inc/Conditionals_post.h View File

139
   #define CORESIGN(n) (ANY(COREYX, COREZX, COREZY) ? (-(n)) : (n))
139
   #define CORESIGN(n) (ANY(COREYX, COREZX, COREZY) ? (-(n)) : (n))
140
 #endif
140
 #endif
141
 
141
 
142
+// Calibration codes only for non-core axes
143
+#if EITHER(BACKLASH_GCODE, CALIBRATION_GCODE)
144
+  #if IS_CORE
145
+    #define X_AXIS_INDEX 0
146
+    #define Y_AXIS_INDEX 1
147
+    #define Z_AXIS_INDEX 2
148
+    #define CAN_CALIBRATE(A,B) (A##_AXIS_INDEX == B##_INDEX)
149
+  #else
150
+    #define CAN_CALIBRATE(...) 1
151
+  #endif
152
+#endif
153
+#define AXIS_CAN_CALIBRATE(A) CAN_CALIBRATE(A,NORMAL_AXIS)
154
+
142
 /**
155
 /**
143
  * No adjustable bed on non-cartesians
156
  * No adjustable bed on non-cartesians
144
  */
157
  */

+ 2
- 1
Marlin/src/inc/MarlinConfig.h View File

35
 #include "Conditionals_post.h"
35
 #include "Conditionals_post.h"
36
 #include HAL_PATH(../HAL, inc/Conditionals_post.h)
36
 #include HAL_PATH(../HAL, inc/Conditionals_post.h)
37
 
37
 
38
+#include "../core/types.h"  // Ahead of sanity-checks
39
+
38
 #include "SanityCheck.h"
40
 #include "SanityCheck.h"
39
 #include HAL_PATH(../HAL, inc/SanityCheck.h)
41
 #include HAL_PATH(../HAL, inc/SanityCheck.h)
40
 
42
 
41
 // Include all core headers
43
 // Include all core headers
42
-#include "../core/types.h"
43
 #include "../core/language.h"
44
 #include "../core/language.h"
44
 #include "../core/utility.h"
45
 #include "../core/utility.h"
45
 #include "../core/serial.h"
46
 #include "../core/serial.h"

+ 3
- 3
Marlin/src/lcd/menu/menu_backlash.cpp View File

39
   EDIT_ITEM_FAST(percent, MSG_BACKLASH_CORRECTION, &backlash.correction, all_off, all_on);
39
   EDIT_ITEM_FAST(percent, MSG_BACKLASH_CORRECTION, &backlash.correction, all_off, all_on);
40
 
40
 
41
   #define EDIT_BACKLASH_DISTANCE(N) EDIT_ITEM_FAST(float43, MSG_BACKLASH_##N, &backlash.distance_mm[_AXIS(N)], 0.0f, 9.9f);
41
   #define EDIT_BACKLASH_DISTANCE(N) EDIT_ITEM_FAST(float43, MSG_BACKLASH_##N, &backlash.distance_mm[_AXIS(N)], 0.0f, 9.9f);
42
-  EDIT_BACKLASH_DISTANCE(A);
43
-  EDIT_BACKLASH_DISTANCE(B);
44
-  EDIT_BACKLASH_DISTANCE(C);
42
+  if (AXIS_CAN_CALIBRATE(A)) EDIT_BACKLASH_DISTANCE(A);
43
+  if (AXIS_CAN_CALIBRATE(B)) EDIT_BACKLASH_DISTANCE(B);
44
+  if (AXIS_CAN_CALIBRATE(C)) EDIT_BACKLASH_DISTANCE(C);
45
 
45
 
46
   #ifdef BACKLASH_SMOOTHING_MM
46
   #ifdef BACKLASH_SMOOTHING_MM
47
     EDIT_ITEM_FAST(float43, MSG_BACKLASH_SMOOTHING, &backlash.smoothing_mm, 0.0f, 9.9f);
47
     EDIT_ITEM_FAST(float43, MSG_BACKLASH_SMOOTHING, &backlash.smoothing_mm, 0.0f, 9.9f);

Loading…
Cancel
Save