Skip to content

Commit 15ee0d0

Browse files
ellenspgjdodd
andauthored
✨ MAG_MOUNTED_PROBE_SERVO_NR (#27551)
Co-authored-by: gjdodd <graham.dodd@airintake.co.uk>
1 parent 23fa941 commit 15ee0d0

File tree

7 files changed

+53
-5
lines changed

7 files changed

+53
-5
lines changed

Marlin/Configuration.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1540,6 +1540,20 @@
15401540
#define PROBE_DEPLOY_FEEDRATE (133*60) // (mm/min) Probe deploy speed
15411541
#define PROBE_STOW_FEEDRATE (133*60) // (mm/min) Probe stow speed
15421542

1543+
/**
1544+
* Magnetically Mounted Probe with a Servo mechanism
1545+
* Probe Deploy and Stow both follow the same basic sequence:
1546+
* - Rotate the SERVO to its Deployed angle
1547+
* - Perform XYZ moves to deploy or stow the PROBE
1548+
* - Rotate the SERVO to its Stowed angle
1549+
*/
1550+
//#define MAG_MOUNTED_PROBE_SERVO_NR 0 // Servo Number for this probe
1551+
#ifdef MAG_MOUNTED_PROBE_SERVO_NR
1552+
#define MAG_MOUNTED_PROBE_SERVO_ANGLES { 90, 0 } // Servo Angles for Deployed, Stowed
1553+
#define MAG_MOUNTED_PRE_DEPLOY { PROBE_DEPLOY_FEEDRATE, { 15, 160, 30 } } // Safe position for servo activation
1554+
#define MAG_MOUNTED_PRE_STOW { PROBE_DEPLOY_FEEDRATE, { 15, 160, 30 } } // Safe position for servo deactivation
1555+
#endif
1556+
15431557
#define MAG_MOUNTED_DEPLOY_1 { PROBE_DEPLOY_FEEDRATE, { 245, 114, 30 } } // Move to side Dock & Attach probe
15441558
#define MAG_MOUNTED_DEPLOY_2 { PROBE_DEPLOY_FEEDRATE, { 210, 114, 30 } } // Move probe off dock
15451559
#define MAG_MOUNTED_DEPLOY_3 { PROBE_DEPLOY_FEEDRATE, { 0, 0, 0 } } // Extra move if needed

Marlin/src/inc/Conditionals-3-etc.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,10 @@
135135
#ifdef Z_PROBE_SERVO_NR
136136
#define HAS_Z_SERVO_PROBE 1
137137
#endif
138-
#if ANY(HAS_Z_SERVO_PROBE, SWITCHING_EXTRUDER, SWITCHING_NOZZLE)
138+
#ifdef MAG_MOUNTED_PROBE_SERVO_NR
139+
#define HAS_MAG_MOUNTED_SERVO_PROBE 1
140+
#endif
141+
#if ANY(HAS_Z_SERVO_PROBE, HAS_MAG_MOUNTED_SERVO_PROBE, SWITCHING_EXTRUDER, SWITCHING_NOZZLE)
139142
#define HAS_SERVO_ANGLES 1
140143
#endif
141144
#if !HAS_SERVO_ANGLES

Marlin/src/inc/Conditionals-4-adv.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,10 @@
5353
#undef NUM_SERVOS
5454
#define NUM_SERVOS INCREMENT(Z_PROBE_SERVO_NR)
5555
#endif
56+
#if HAS_MAG_MOUNTED_SERVO_PROBE && NUM_SERVOS <= MAG_MOUNTED_PROBE_SERVO_NR
57+
#undef NUM_SERVOS
58+
#define NUM_SERVOS INCREMENT(MAG_MOUNTED_PROBE_SERVO_NR)
59+
#endif
5660
#if ENABLED(CHAMBER_VENT) && NUM_SERVOS <= CHAMBER_VENT_SERVO_NR
5761
#undef NUM_SERVOS
5862
#define NUM_SERVOS INCREMENT(CHAMBER_VENT_SERVO_NR)

Marlin/src/inc/SanityCheck.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -982,7 +982,7 @@ static_assert(NUM_SERVOS <= NUM_SERVO_PLUGS, "NUM_SERVOS (or some servo index) i
982982
/**
983983
* Servo deactivation depends on servo endstops, switching nozzle, or switching extruder
984984
*/
985-
#if ENABLED(DEACTIVATE_SERVOS_AFTER_MOVE) && NONE(HAS_Z_SERVO_PROBE, POLARGRAPH) && !defined(SWITCHING_NOZZLE_SERVO_NR) && !defined(SWITCHING_EXTRUDER_SERVO_NR) && !defined(SWITCHING_TOOLHEAD_SERVO_NR)
985+
#if ENABLED(DEACTIVATE_SERVOS_AFTER_MOVE) && NONE(HAS_Z_SERVO_PROBE, POLARGRAPH) && !defined(SWITCHING_NOZZLE_SERVO_NR) && !defined(SWITCHING_EXTRUDER_SERVO_NR) && !defined(SWITCHING_TOOLHEAD_SERVO_NR) && !defined(MAG_MOUNTED_PROBE_SERVO_NR)
986986
#error "Z_PROBE_SERVO_NR, switching nozzle, switching toolhead, switching extruder, or POLARGRAPH is required for DEACTIVATE_SERVOS_AFTER_MOVE."
987987
#endif
988988

Marlin/src/module/probe.cpp

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@
8282
#include "../feature/host_actions.h" // for PROMPT_USER_CONTINUE
8383
#endif
8484

85-
#if HAS_Z_SERVO_PROBE
85+
#if HAS_Z_SERVO_PROBE || HAS_MAG_MOUNTED_SERVO_PROBE
8686
#include "servo.h"
8787
#endif
8888

@@ -272,6 +272,13 @@ xyz_pos_t Probe::offset; // Initialized by settings.load
272272
typedef struct { float fr_mm_min; xyz_pos_t where; } mag_probe_move_t;
273273

274274
inline void run_deploy_moves() {
275+
#ifdef MAG_MOUNTED_PRE_DEPLOY
276+
constexpr mag_probe_move_t pre_deploy = MAG_MOUNTED_PRE_DEPLOY;
277+
do_blocking_move_to(pre_deploy.where, MMM_TO_MMS(pre_deploy.fr_mm_min));
278+
#endif
279+
#if HAS_MAG_MOUNTED_SERVO_PROBE
280+
servo[MAG_MOUNTED_PROBE_SERVO_NR].move(servo_angles[MAG_MOUNTED_PROBE_SERVO_NR][0]);
281+
#endif
275282
#ifdef MAG_MOUNTED_DEPLOY_1
276283
constexpr mag_probe_move_t deploy_1 = MAG_MOUNTED_DEPLOY_1;
277284
do_blocking_move_to(deploy_1.where, MMM_TO_MMS(deploy_1.fr_mm_min));
@@ -292,9 +299,19 @@ xyz_pos_t Probe::offset; // Initialized by settings.load
292299
constexpr mag_probe_move_t deploy_5 = MAG_MOUNTED_DEPLOY_5;
293300
do_blocking_move_to(deploy_5.where, MMM_TO_MMS(deploy_5.fr_mm_min));
294301
#endif
302+
#if HAS_MAG_MOUNTED_SERVO_PROBE
303+
servo[MAG_MOUNTED_PROBE_SERVO_NR].move(servo_angles[MAG_MOUNTED_PROBE_SERVO_NR][1]);
304+
#endif
295305
}
296306

297307
inline void run_stow_moves() {
308+
#ifdef MAG_MOUNTED_PRE_STOW
309+
constexpr mag_probe_move_t pre_stow = MAG_MOUNTED_PRE_STOW;
310+
do_blocking_move_to(pre_stow.where, MMM_TO_MMS(pre_stow.fr_mm_min));
311+
#endif
312+
#if HAS_MAG_MOUNTED_SERVO_PROBE
313+
servo[MAG_MOUNTED_PROBE_SERVO_NR].move(servo_angles[MAG_MOUNTED_PROBE_SERVO_NR][0]);
314+
#endif
298315
#ifdef MAG_MOUNTED_STOW_1
299316
constexpr mag_probe_move_t stow_1 = MAG_MOUNTED_STOW_1;
300317
do_blocking_move_to(stow_1.where, MMM_TO_MMS(stow_1.fr_mm_min));
@@ -315,6 +332,9 @@ xyz_pos_t Probe::offset; // Initialized by settings.load
315332
constexpr mag_probe_move_t stow_5 = MAG_MOUNTED_STOW_5;
316333
do_blocking_move_to(stow_5.where, MMM_TO_MMS(stow_5.fr_mm_min));
317334
#endif
335+
#if HAS_MAG_MOUNTED_SERVO_PROBE
336+
servo[MAG_MOUNTED_PROBE_SERVO_NR].move(servo_angles[MAG_MOUNTED_PROBE_SERVO_NR][1]);
337+
#endif
318338
}
319339

320340
#endif // MAG_MOUNTED_PROBE
@@ -541,7 +561,7 @@ bool Probe::set_deployed(const bool deploy, const bool no_return/*=false*/) {
541561
#if ENABLED(PROBE_TRIGGERED_WHEN_STOWED_TEST)
542562

543563
// Only deploy/stow if needed
544-
if (PROBE_TRIGGERED() == deploy) {
564+
if (PROBE_TRIGGERED() == deploy || !deploy) {
545565
if (!deploy) endstops.enable_z_probe(false); // Switch off triggered when stowed probes early
546566
// otherwise an Allen-Key probe can't be stowed.
547567
probe_specific_action(deploy);

Marlin/src/module/servo.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,9 @@
6363
#endif
6464
constexpr uint16_t sazp[] = Z_SERVO_ANGLES;
6565
static_assert(COUNT(sazp) == 2, "Z_SERVO_ANGLES needs 2 angles.");
66+
#elif defined(MAG_MOUNTED_PROBE_SERVO_ANGLES)
67+
constexpr uint16_t sazp[] = MAG_MOUNTED_PROBE_SERVO_ANGLES;
68+
static_assert(COUNT(sazp) == 2, "MAG_MOUNTED_PROBE_SERVO_ANGLES needs 2 angles.");
6669
#else
6770
constexpr uint16_t sazp[2] = { 0 };
6871
#endif
@@ -82,6 +85,9 @@
8285
#ifndef Z_PROBE_SERVO_NR
8386
#define Z_PROBE_SERVO_NR -1
8487
#endif
88+
#ifndef MAG_MOUNTED_PROBE_SERVO_NR
89+
#define MAG_MOUNTED_PROBE_SERVO_NR -1
90+
#endif
8591
8692
#define SASN(J,I) TERN(SWITCHING_NOZZLE_TWO_SERVOS, sasn[J][I], sasn[I])
8793
@@ -91,6 +97,7 @@
9197
: N == SWITCHING_NOZZLE_SERVO_NR ? SASN(0,I) \
9298
: N == SWITCHING_NOZZLE_E1_SERVO_NR ? SASN(1,I) \
9399
: N == Z_PROBE_SERVO_NR ? sazp[I] \
100+
: N == MAG_MOUNTED_PROBE_SERVO_NR ? sazp[I] \
94101
: 0 )
95102
96103
#if ENABLED(EDITABLE_SERVO_ANGLES)

buildroot/tests/LPC1769

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ exec_test $1 $2 "Azteeg X5GT Example Configuration" "$3"
1515
restore_configs
1616
opt_set MOTHERBOARD BOARD_SMOOTHIEBOARD \
1717
EXTRUDERS 2 TEMP_SENSOR_0 -5 TEMP_SENSOR_1 -4 TEMP_SENSOR_BED 5 TEMP_0_CS_PIN P1_29 \
18-
GRID_MAX_POINTS_X 16 \
18+
MAG_MOUNTED_PROBE_SERVO_NR 0 GRID_MAX_POINTS_X 16 \
1919
NOZZLE_CLEAN_START_POINT "{ { 10, 10, 3 }, { 10, 10, 3 } }" \
2020
NOZZLE_CLEAN_END_POINT "{ { 10, 20, 3 }, { 10, 20, 3 } }"
2121
opt_enable TFTGLCD_PANEL_SPI SDSUPPORT ADAPTIVE_FAN_SLOWING REPORT_ADAPTIVE_FAN_SLOWING TEMP_TUNING_MAINTAIN_FAN \

0 commit comments

Comments
 (0)