Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add klicky probe support #24420

Merged
merged 8 commits into from
Jul 7, 2022
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions Marlin/Configuration.h
Original file line number Diff line number Diff line change
Expand Up @@ -1224,6 +1224,45 @@
#define Z_PROBE_RETRACT_X X_MAX_POS
#endif

// A probe mounted by magnets, can be used for Z-homing depending on design like euclid probe, Klicky probe, & Klackender probe
// Requires Z_SAFE_HOMING if being used for Z-homing
// Coordinates for deploy and stow moves. Uncomment and edit as appropriate for your printer/probe.
//#define MAG_MOUNTED_PROBE
#if ENABLED(MAG_MOUNTED_PROBE)
#define PROBE_DEPLOY_FEEDRATE (133*60) //Probe deploy speed
#define PROBE_STOW_FEEDRATE (133*60) //Probe stow speed
#define MAG_MOUNTED_DEPLOY_1 {245, 114, 30} //Move to side Dock & Attach probe
#define MAG_MOUNTED_DEPLOY_1_FEEDRATE PROBE_DEPLOY_FEEDRATE

#define MAG_MOUNTED_DEPLOY_2 {210, 114, 30} //Move probe off dock
#define MAG_MOUNTED_DEPLOY_2_FEEDRATE PROBE_DEPLOY_FEEDRATE

#define MAG_MOUNTED_DEPLOY_3 {0, 0, 0} //Extra move if needed
#define MAG_MOUNTED_DEPLOY_3_FEEDRATE PROBE_DEPLOY_FEEDRATE

#define MAG_MOUNTED_DEPLOY_4 {0, 0, 0} //Extra move if needed
#define MAG_MOUNTED_DEPLOY_4_FEEDRATE PROBE_DEPLOY_FEEDRATE

#define MAG_MOUNTED_DEPLOY_5 {0, 0, 0} //Extra move if needed
#define MAG_MOUNTED_DEPLOY_5_FEEDRATE PROBE_DEPLOY_FEEDRATE

#define MAG_MOUNTED_STOW_1 { 245, 114, 20 } // Move to dock
#define MAG_MOUNTED_STOW_1_FEEDRATE PROBE_STOW_FEEDRATE

#define MAG_MOUNTED_STOW_2 { 245, 114, 0 } //Place probe beside remover
#define MAG_MOUNTED_STOW_2_FEEDRATE PROBE_STOW_FEEDRATE

#define MAG_MOUNTED_STOW_3 { 230, 114, 0 } //Side move to remove probe
#define MAG_MOUNTED_STOW_3_FEEDRATE PROBE_STOW_FEEDRATE

#define MAG_MOUNTED_STOW_4 { 210, 114, 20 } //Side move to remove probe
#define MAG_MOUNTED_STOW_4_FEEDRATE PROBE_STOW_FEEDRATE

#define MAG_MOUNTED_STOW_5 { 0, 0, 0 } //Extra move if needed
#define MAG_MOUNTED_STOW_5_FEEDRATE PROBE_STOW_FEEDRATE

#endif // MAG_MOUNTED_PROBE //

// Duet Smart Effector (for delta printers) - https://bit.ly/2ul5U7J
// When the pin is defined you can use M672 to set/reset the probe sensitivity.
//#define DUET_SMART_EFFECTOR
Expand All @@ -1243,6 +1282,9 @@
// For Z_PROBE_ALLEN_KEY see the Delta example configurations.
//

//Add probe deploy and stow options to the motion menu.
//#define PROBE_DEPLOY_STOW_MENU

/**
* Nozzle-to-Probe offsets { X, Y, Z }
*
Expand Down
4 changes: 2 additions & 2 deletions Marlin/src/inc/Conditionals_LCD.h
Original file line number Diff line number Diff line change
Expand Up @@ -1048,7 +1048,7 @@
/**
* Set a flag for any type of bed probe, including the paper-test
*/
#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)
#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, MAG_MOUNTED_PROBE)
#define HAS_BED_PROBE 1
#endif

Expand Down Expand Up @@ -1212,7 +1212,7 @@
#ifndef Z_PROBE_LOW_POINT
#define Z_PROBE_LOW_POINT -5
#endif
#if ENABLED(Z_PROBE_ALLEN_KEY)
#if EITHER(Z_PROBE_ALLEN_KEY, MAG_MOUNTED_PROBE)
#define PROBE_TRIGGERED_WHEN_STOWED_TEST 1 // Extra test for Allen Key Probe
#endif
#if MULTIPLE_PROBING > 1
Expand Down
18 changes: 16 additions & 2 deletions Marlin/src/inc/SanityCheck.h
Original file line number Diff line number Diff line change
Expand Up @@ -1615,8 +1615,8 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
*/
#if 1 < 0 \
+ (DISABLED(BLTOUCH) && HAS_Z_SERVO_PROBE) \
+ 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)
#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."
+ 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)
#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."
#endif

#if HAS_BED_PROBE
Expand Down Expand Up @@ -1722,6 +1722,20 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
#endif
#endif

/**
* Mag mounted probe requirements
*/
#if ENABLED(MAG_MOUNTED_PROBE) && ENABLED(USE_PROBE_FOR_Z_HOMING) && DISABLED(Z_SAFE_HOMING)
#error "MAG_MOUNTED_PROBE requires Z_SAFE_HOMING if it's being used to home Z"
#endif

/**
* Probe stow and deploy menu requirments
*/
#if NONE(BLTOUCH, TOUCH_MI_PROBE, SOLENOID_PROBE, Z_PROBE_ALLEN_KEY, Z_PROBE_SLED, RACK_AND_PINION_PROBE, SENSORLESS_PROBING, MAGLEV4, MAG_MOUNTED_PROBE) && ENABLED(PROBE_DEPLOY_STOW_MENU)
#error "Probe stow & deploy menu requres a probe with probe and deploy scripts"
#endif

/**
* MagLev V4 probe requirements
*/
Expand Down
8 changes: 8 additions & 0 deletions Marlin/src/lcd/menu/menu_motion.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -348,6 +348,14 @@ void menu_motion() {
GCODES_ITEM(MSG_AUTO_Z_ALIGN, F("G34"));
#endif

//
// Deploy/Stow probe
//
#if ENABLED(PROBE_DEPLOY_STOW_MENU)
GCODES_ITEM(MSG_MANUAL_DEPLOY, F("M401"));
GCODES_ITEM(MSG_MANUAL_STOW, F("M402"));
#endif

//
// Assisted Bed Tramming
//
Expand Down
53 changes: 51 additions & 2 deletions Marlin/src/module/probe.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -259,7 +259,56 @@ xyz_pos_t Probe::offset; // Initialized by settings.load()
#endif
}

#endif // Z_PROBE_ALLEN_KEY

#elif ENABLED(MAG_MOUNTED_PROBE)

inline void run_deploy_moves_script() {
#ifdef MAG_MOUNTED_DEPLOY_1
constexpr xyz_pos_t deploy_1 = MAG_MOUNTED_DEPLOY_1;
do_blocking_move_to(deploy_1, MMM_TO_MMS(MAG_MOUNTED_DEPLOY_1_FEEDRATE));
#endif
#ifdef MAG_MOUNTED_DEPLOY_2
constexpr xyz_pos_t deploy_2 = MAG_MOUNTED_DEPLOY_2;
do_blocking_move_to(deploy_2, MMM_TO_MMS(MAG_MOUNTED_DEPLOY_2_FEEDRATE));
#endif
#ifdef MAG_MOUNTED_DEPLOY_3
constexpr xyz_pos_t deploy_3 = MAG_MOUNTED_DEPLOY_3;
do_blocking_move_to(deploy_3, MMM_TO_MMS(MAG_MOUNTED_DEPLOY_3_FEEDRATE));
#endif
#ifdef MAG_MOUNTED_DEPLOY_4
constexpr xyz_pos_t deploy_4 = MAG_MOUNTED_DEPLOY_4;
do_blocking_move_to(deploy_4, MMM_TO_MMS(MAG_MOUNTED_DEPLOY_4_FEEDRATE));
#endif
#ifdef MAG_MOUNTED_DEPLOY_5
constexpr xyz_pos_t deploy_5 = MAG_MOUNTED_DEPLOY_5;
do_blocking_move_to(deploy_5, MMM_TO_MMS(MAG_MOUNTED_DEPLOY_5_FEEDRATE));
#endif
}

inline void run_stow_moves_script() {
#ifdef MAG_MOUNTED_STOW_1
constexpr xyz_pos_t stow_1 = MAG_MOUNTED_STOW_1;
do_blocking_move_to(stow_1, MMM_TO_MMS(MAG_MOUNTED_STOW_1_FEEDRATE));
#endif
#ifdef MAG_MOUNTED_STOW_2
constexpr xyz_pos_t stow_2 = MAG_MOUNTED_STOW_2;
do_blocking_move_to(stow_2, MMM_TO_MMS(MAG_MOUNTED_STOW_2_FEEDRATE));
#endif
#ifdef MAG_MOUNTED_STOW_3
constexpr xyz_pos_t stow_3 = MAG_MOUNTED_STOW_3;
do_blocking_move_to(stow_3, MMM_TO_MMS(MAG_MOUNTED_STOW_3_FEEDRATE));
#endif
#ifdef MAG_MOUNTED_STOW_4
constexpr xyz_pos_t stow_4 = MAG_MOUNTED_STOW_4;
do_blocking_move_to(stow_4, MMM_TO_MMS(MAG_MOUNTED_STOW_4_FEEDRATE));
#endif
#ifdef MAG_MOUNTED_STOW_5
constexpr xyz_pos_t stow_5 = MAG_MOUNTED_STOW_5;
do_blocking_move_to(stow_5, MMM_TO_MMS(MAG_MOUNTED_STOW_5_FEEDRATE));
#endif
}

#endif // MISC Z probes

#if HAS_QUIET_PROBING

Expand Down Expand Up @@ -345,7 +394,7 @@ FORCE_INLINE void probe_specific_action(const bool deploy) {

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

#elif EITHER(TOUCH_MI_PROBE, Z_PROBE_ALLEN_KEY)
#elif ANY(TOUCH_MI_PROBE, Z_PROBE_ALLEN_KEY, MAG_MOUNTED_PROBE)

deploy ? run_deploy_moves_script() : run_stow_moves_script();

Expand Down