Skip to content

Commit d9885e2

Browse files
Farva42thinkyhead
authored andcommitted
✨ MAG_MOUNTED_PROBE (MarlinFirmware#24420)
Co-Authored-By: Scott Lahteine <[email protected]>
1 parent 0861ee6 commit d9885e2

7 files changed

+105
-9
lines changed

Marlin/Configuration.h

+21
Original file line numberDiff line numberDiff line change
@@ -1343,6 +1343,27 @@
13431343
#define Z_PROBE_RETRACT_X X_MAX_POS
13441344
#endif
13451345

1346+
/**
1347+
* Magnetically Mounted Probe
1348+
* For probes such as Euclid, Klicky, Klackender, etc.
1349+
*/
1350+
//#define MAG_MOUNTED_PROBE
1351+
#if ENABLED(MAG_MOUNTED_PROBE)
1352+
#define PROBE_DEPLOY_FEEDRATE (133*60) // (mm/min) Probe deploy speed
1353+
#define PROBE_STOW_FEEDRATE (133*60) // (mm/min) Probe stow speed
1354+
1355+
#define MAG_MOUNTED_DEPLOY_1 { PROBE_DEPLOY_FEEDRATE, { 245, 114, 30 } } // Move to side Dock & Attach probe
1356+
#define MAG_MOUNTED_DEPLOY_2 { PROBE_DEPLOY_FEEDRATE, { 210, 114, 30 } } // Move probe off dock
1357+
#define MAG_MOUNTED_DEPLOY_3 { PROBE_DEPLOY_FEEDRATE, { 0, 0, 0 } } // Extra move if needed
1358+
#define MAG_MOUNTED_DEPLOY_4 { PROBE_DEPLOY_FEEDRATE, { 0, 0, 0 } } // Extra move if needed
1359+
#define MAG_MOUNTED_DEPLOY_5 { PROBE_DEPLOY_FEEDRATE, { 0, 0, 0 } } // Extra move if needed
1360+
#define MAG_MOUNTED_STOW_1 { PROBE_STOW_FEEDRATE, { 245, 114, 20 } } // Move to dock
1361+
#define MAG_MOUNTED_STOW_2 { PROBE_STOW_FEEDRATE, { 245, 114, 0 } } // Place probe beside remover
1362+
#define MAG_MOUNTED_STOW_3 { PROBE_STOW_FEEDRATE, { 230, 114, 0 } } // Side move to remove probe
1363+
#define MAG_MOUNTED_STOW_4 { PROBE_STOW_FEEDRATE, { 210, 114, 20 } } // Side move to remove probe
1364+
#define MAG_MOUNTED_STOW_5 { PROBE_STOW_FEEDRATE, { 0, 0, 0 } } // Extra move if needed
1365+
#endif
1366+
13461367
// Duet Smart Effector (for delta printers) - https://bit.ly/2ul5U7J
13471368
// When the pin is defined you can use M672 to set/reset the probe sensitivity.
13481369
//#define DUET_SMART_EFFECTOR

Marlin/Configuration_adv.h

+3
Original file line numberDiff line numberDiff line change
@@ -1319,6 +1319,9 @@
13191319
#define XATC_Y_POSITION Y_CENTER // (mm) Y position to probe
13201320
#define XATC_Z_OFFSETS { 0, 0, 0 } // Z offsets for X axis sample points
13211321
#endif
1322+
1323+
// Show Deploy / Stow Probe options in the Motion menu.
1324+
#define PROBE_DEPLOY_STOW_MENU
13221325
#endif
13231326

13241327
// Include a page of printer information in the LCD Main Menu

Marlin/src/inc/Conditionals_LCD.h

+7-4
Original file line numberDiff line numberDiff line change
@@ -1049,9 +1049,12 @@
10491049
#endif
10501050

10511051
/**
1052-
* Set a flag for any type of bed probe, including the paper-test
1052+
* Set flags for any form of bed probe
10531053
*/
1054-
#if ANY(HAS_Z_SERVO_PROBE, FIX_MOUNTED_PROBE, NOZZLE_AS_PROBE, TOUCH_MI_PROBE, Z_PROBE_ALLEN_KEY, Z_PROBE_SLED, SOLENOID_PROBE, SENSORLESS_PROBING, RACK_AND_PINION_PROBE, MAGLEV4)
1054+
#if ANY(TOUCH_MI_PROBE, Z_PROBE_ALLEN_KEY, SOLENOID_PROBE, Z_PROBE_SLED, RACK_AND_PINION_PROBE, SENSORLESS_PROBING, MAGLEV4, MAG_MOUNTED_PROBE)
1055+
#define HAS_STOWABLE_PROBE 1
1056+
#endif
1057+
#if ANY(HAS_STOWABLE_PROBE, HAS_Z_SERVO_PROBE, FIX_MOUNTED_PROBE, NOZZLE_AS_PROBE)
10551058
#define HAS_BED_PROBE 1
10561059
#endif
10571060

@@ -1209,13 +1212,13 @@
12091212
#if NONE(Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN, HAS_DELTA_SENSORLESS_PROBING)
12101213
#define USES_Z_MIN_PROBE_PIN 1
12111214
#endif
1212-
#if Z_HOME_TO_MIN && TERN1(USES_Z_MIN_PROBE_PIN, ENABLED(USE_PROBE_FOR_Z_HOMING))
1215+
#if Z_HOME_TO_MIN && (DISABLED(USES_Z_MIN_PROBE_PIN) || USE_PROBE_FOR_Z_HOMING)
12131216
#define HOMING_Z_WITH_PROBE 1
12141217
#endif
12151218
#ifndef Z_PROBE_LOW_POINT
12161219
#define Z_PROBE_LOW_POINT -5
12171220
#endif
1218-
#if ENABLED(Z_PROBE_ALLEN_KEY)
1221+
#if EITHER(Z_PROBE_ALLEN_KEY, MAG_MOUNTED_PROBE)
12191222
#define PROBE_TRIGGERED_WHEN_STOWED_TEST 1 // Extra test for Allen Key Probe
12201223
#endif
12211224
#if MULTIPLE_PROBING > 1

Marlin/src/inc/Conditionals_adv.h

+4
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,10 @@
7979
#define SERVO_DELAY { 50 }
8080
#endif
8181

82+
#if !HAS_STOWABLE_PROBE
83+
#undef PROBE_DEPLOY_STOW_MENU
84+
#endif
85+
8286
#if !HAS_EXTRUDERS
8387
#define NO_VOLUMETRICS
8488
#undef TEMP_SENSOR_0

Marlin/src/inc/SanityCheck.h

+10-3
Original file line numberDiff line numberDiff line change
@@ -1627,8 +1627,8 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
16271627
*/
16281628
#if 1 < 0 \
16291629
+ (DISABLED(BLTOUCH) && HAS_Z_SERVO_PROBE) \
1630-
+ COUNT_ENABLED(PROBE_MANUALLY, BLTOUCH, FIX_MOUNTED_PROBE, NOZZLE_AS_PROBE, TOUCH_MI_PROBE, SOLENOID_PROBE, Z_PROBE_ALLEN_KEY, Z_PROBE_SLED, RACK_AND_PINION_PROBE, SENSORLESS_PROBING, MAGLEV4)
1631-
#error "Please enable only one probe option: PROBE_MANUALLY, SENSORLESS_PROBING, BLTOUCH, FIX_MOUNTED_PROBE, NOZZLE_AS_PROBE, TOUCH_MI_PROBE, SOLENOID_PROBE, Z_PROBE_ALLEN_KEY, Z_PROBE_SLED, MAGLEV4, or Z Servo."
1630+
+ COUNT_ENABLED(PROBE_MANUALLY, BLTOUCH, FIX_MOUNTED_PROBE, NOZZLE_AS_PROBE, TOUCH_MI_PROBE, SOLENOID_PROBE, Z_PROBE_ALLEN_KEY, Z_PROBE_SLED, RACK_AND_PINION_PROBE, SENSORLESS_PROBING, MAGLEV4, MAG_MOUNTED_PROBE)
1631+
#error "Please enable only one probe option: PROBE_MANUALLY, SENSORLESS_PROBING, BLTOUCH, FIX_MOUNTED_PROBE, NOZZLE_AS_PROBE, TOUCH_MI_PROBE, SOLENOID_PROBE, Z_PROBE_ALLEN_KEY, Z_PROBE_SLED, MAGLEV4, MAG_MOUNTED_PROBE or Z Servo."
16321632
#endif
16331633

16341634
#if HAS_BED_PROBE
@@ -1734,13 +1734,20 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
17341734
#endif
17351735
#endif
17361736

1737+
/**
1738+
* Mag mounted probe requirements
1739+
*/
1740+
#if BOTH(MAG_MOUNTED_PROBE, USE_PROBE_FOR_Z_HOMING) && DISABLED(Z_SAFE_HOMING)
1741+
#error "MAG_MOUNTED_PROBE requires Z_SAFE_HOMING if it's being used to home Z."
1742+
#endif
1743+
17371744
/**
17381745
* MagLev V4 probe requirements
17391746
*/
17401747
#if ENABLED(MAGLEV4)
17411748
#if !PIN_EXISTS(MAGLEV_TRIGGER)
17421749
#error "MAGLEV4 requires MAGLEV_TRIGGER_PIN to be defined."
1743-
#elif DISABLED(Z_SAFE_HOMING)
1750+
#elif ENABLED(HOMING_Z_WITH_PROBE) && DISABLED(Z_SAFE_HOMING)
17441751
#error "MAGLEV4 requires Z_SAFE_HOMING."
17451752
#elif MAGLEV_TRIGGER_DELAY != 15
17461753
#error "MAGLEV_TRIGGER_DELAY should not be changed. Comment out this line to continue."

Marlin/src/lcd/menu/menu_motion.cpp

+8
Original file line numberDiff line numberDiff line change
@@ -348,6 +348,14 @@ void menu_motion() {
348348
GCODES_ITEM(MSG_AUTO_Z_ALIGN, F("G34"));
349349
#endif
350350

351+
//
352+
// Probe Deploy/Stow
353+
//
354+
#if ENABLED(PROBE_DEPLOY_STOW_MENU)
355+
GCODES_ITEM(MSG_MANUAL_DEPLOY, F("M401"));
356+
GCODES_ITEM(MSG_MANUAL_STOW, F("M402"));
357+
#endif
358+
351359
//
352360
// Assisted Bed Tramming
353361
//

Marlin/src/module/probe.cpp

+52-2
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,57 @@ xyz_pos_t Probe::offset; // Initialized by settings.load()
264264
#endif
265265
}
266266

267-
#endif // Z_PROBE_ALLEN_KEY
267+
#elif ENABLED(MAG_MOUNTED_PROBE)
268+
269+
typedef struct { float fr_mm_min; xyz_pos_t where; } mag_probe_move_t;
270+
271+
inline void run_deploy_moves_script() {
272+
#ifdef MAG_MOUNTED_DEPLOY_1
273+
constexpr mag_probe_move_t deploy_1 = MAG_MOUNTED_DEPLOY_1;
274+
do_blocking_move_to(deploy_1.where, MMM_TO_MMS(deploy_1.fr_mm_min));
275+
#endif
276+
#ifdef MAG_MOUNTED_DEPLOY_2
277+
constexpr mag_probe_move_t deploy_2 = MAG_MOUNTED_DEPLOY_2;
278+
do_blocking_move_to(deploy_2.where, MMM_TO_MMS(deploy_2.fr_mm_min));
279+
#endif
280+
#ifdef MAG_MOUNTED_DEPLOY_3
281+
constexpr mag_probe_move_t deploy_3 = MAG_MOUNTED_DEPLOY_3;
282+
do_blocking_move_to(deploy_3.where, MMM_TO_MMS(deploy_3.fr_mm_min));
283+
#endif
284+
#ifdef MAG_MOUNTED_DEPLOY_4
285+
constexpr mag_probe_move_t deploy_4 = MAG_MOUNTED_DEPLOY_4;
286+
do_blocking_move_to(deploy_4.where, MMM_TO_MMS(deploy_4.fr_mm_min));
287+
#endif
288+
#ifdef MAG_MOUNTED_DEPLOY_5
289+
constexpr mag_probe_move_t deploy_5 = MAG_MOUNTED_DEPLOY_5;
290+
do_blocking_move_to(deploy_5.where, MMM_TO_MMS(deploy_5.fr_mm_min));
291+
#endif
292+
}
293+
294+
inline void run_stow_moves_script() {
295+
#ifdef MAG_MOUNTED_STOW_1
296+
constexpr mag_probe_move_t stow_1 = MAG_MOUNTED_STOW_1;
297+
do_blocking_move_to(stow_1.where, MMM_TO_MMS(stow_1.fr_mm_min));
298+
#endif
299+
#ifdef MAG_MOUNTED_STOW_2
300+
constexpr mag_probe_move_t stow_2 = MAG_MOUNTED_STOW_2;
301+
do_blocking_move_to(stow_2.where, MMM_TO_MMS(stow_2.fr_mm_min));
302+
#endif
303+
#ifdef MAG_MOUNTED_STOW_3
304+
constexpr mag_probe_move_t stow_3 = MAG_MOUNTED_STOW_3;
305+
do_blocking_move_to(stow_3.where, MMM_TO_MMS(stow_3.fr_mm_min));
306+
#endif
307+
#ifdef MAG_MOUNTED_STOW_4
308+
constexpr mag_probe_move_t stow_4 = MAG_MOUNTED_STOW_4;
309+
do_blocking_move_to(stow_4.where, MMM_TO_MMS(stow_4.fr_mm_min));
310+
#endif
311+
#ifdef MAG_MOUNTED_STOW_5
312+
constexpr mag_probe_move_t stow_5 = MAG_MOUNTED_STOW_5;
313+
do_blocking_move_to(stow_5.where, MMM_TO_MMS(stow_5.fr_mm_min));
314+
#endif
315+
}
316+
317+
#endif // MAG_MOUNTED_PROBE
268318

269319
#if HAS_QUIET_PROBING
270320

@@ -350,7 +400,7 @@ FORCE_INLINE void probe_specific_action(const bool deploy) {
350400

351401
servo[Z_PROBE_SERVO_NR].move(servo_angles[Z_PROBE_SERVO_NR][deploy ? 0 : 1]);
352402

353-
#elif EITHER(TOUCH_MI_PROBE, Z_PROBE_ALLEN_KEY)
403+
#elif ANY(TOUCH_MI_PROBE, Z_PROBE_ALLEN_KEY, MAG_MOUNTED_PROBE)
354404

355405
deploy ? run_deploy_moves_script() : run_stow_moves_script();
356406

0 commit comments

Comments
 (0)