[1.1.x] Hangprinter support (#9180)
This commit is contained in:
parent
14bf319db8
commit
330c4bcbb9
26 changed files with 5525 additions and 739 deletions
|
|
@ -465,6 +465,8 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE && Y_MAX_LENGTH >= Y_BED_SIZE,
|
|||
#if ENABLED(BABYSTEPPING)
|
||||
#if ENABLED(SCARA)
|
||||
#error "BABYSTEPPING is not implemented for SCARA yet."
|
||||
#elif ENABLED(HANGPRINTER)
|
||||
#error "BABYSTEPPING is not implemented for HANGPRINTER."
|
||||
#elif ENABLED(DELTA) && ENABLED(BABYSTEP_XY)
|
||||
#error "BABYSTEPPING only implemented for Z axis on deltabots."
|
||||
#elif ENABLED(BABYSTEP_ZPROBE_OFFSET) && ENABLED(MESH_BED_LEVELING)
|
||||
|
|
@ -527,8 +529,12 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE && Y_MAX_LENGTH >= Y_BED_SIZE,
|
|||
/**
|
||||
* Individual axis homing is useless for DELTAS
|
||||
*/
|
||||
#if ENABLED(INDIVIDUAL_AXIS_HOMING_MENU) && ENABLED(DELTA)
|
||||
#error "INDIVIDUAL_AXIS_HOMING_MENU is incompatible with DELTA kinematics."
|
||||
#if ENABLED(INDIVIDUAL_AXIS_HOMING_MENU)
|
||||
#if ENABLED(DELTA)
|
||||
#error "INDIVIDUAL_AXIS_HOMING_MENU is incompatible with DELTA kinematics."
|
||||
#elif ENABLED(HANGPRINTER)
|
||||
#error "INDIVIDUAL_AXIS_HOMING_MENU is incompatible with HANGPRINTER kinematics."
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/**
|
||||
|
|
@ -686,6 +692,7 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE && Y_MAX_LENGTH >= Y_BED_SIZE,
|
|||
* Allow only one kinematic type to be defined
|
||||
*/
|
||||
#if 1 < 0 \
|
||||
+ ENABLED(HANGPRINTER) \
|
||||
+ ENABLED(DELTA) \
|
||||
+ ENABLED(MORGAN_SCARA) \
|
||||
+ ENABLED(MAKERARM_SCARA) \
|
||||
|
|
@ -695,7 +702,7 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE && Y_MAX_LENGTH >= Y_BED_SIZE,
|
|||
+ ENABLED(COREYX) \
|
||||
+ ENABLED(COREZX) \
|
||||
+ ENABLED(COREZY)
|
||||
#error "Please enable only one of DELTA, MORGAN_SCARA, MAKERARM_SCARA, COREXY, COREYX, COREXZ, COREZX, COREYZ, or COREZY."
|
||||
#error "Please enable only one of HANGPRINTER, DELTA, MORGAN_SCARA, MAKERARM_SCARA, COREXY, COREYX, COREXZ, COREZX, COREYZ, or COREZY."
|
||||
#endif
|
||||
|
||||
/**
|
||||
|
|
@ -717,6 +724,42 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE && Y_MAX_LENGTH >= Y_BED_SIZE,
|
|||
#endif
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Hangprinter requirements
|
||||
*/
|
||||
#if ENABLED(HANGPRINTER)
|
||||
#if EXTRUDERS > 4
|
||||
#error "Marlin supports a maximum of 4 EXTRUDERS when driving a Hangprinter."
|
||||
#elif ENABLED(CONVENTIONAL_GEOMETRY)
|
||||
#if ANCHOR_A_Y > 0
|
||||
#error "ANCHOR_A_Y should be negative by convention."
|
||||
#elif (ANCHOR_B_X) * (ANCHOR_C_X) > 0
|
||||
#error "ANCHOR_B_X and ANCHOR_C_X should have opposite signs by convention."
|
||||
#elif ANCHOR_B_Y < 0
|
||||
#error "ANCHOR_B_Y should be positive by convention."
|
||||
#elif ANCHOR_C_Y < 0
|
||||
#error "ANCHOR_C_Y should be positive by convention."
|
||||
#elif ANCHOR_A_Z > 0
|
||||
#error "ANCHOR_A_Z should be negative by convention."
|
||||
#elif ANCHOR_B_Z > 0
|
||||
#error "ANCHOR_B_Z should be negative by convention."
|
||||
#elif ANCHOR_C_Z > 0
|
||||
#error "ANCHOR_C_Z should be negative by convention."
|
||||
#elif ANCHOR_D_Z < 0
|
||||
#error "ANCHOR_D_Z should be positive by convention."
|
||||
#endif
|
||||
#endif
|
||||
#elif ENABLED(LINE_BUILDUP_COMPENSATION_FEATURE)
|
||||
#error "LINE_BUILDUP_COMPENSATION_FEATURE is only compatible with HANGPRINTER."
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Mechaduino requirements
|
||||
*/
|
||||
#if ENABLED(MECHADUINO_I2C_COMMANDS) && DISABLED(EXPERIMENTAL_I2CBUS)
|
||||
#error "MECHADUINO_I2C_COMMANDS requires EXPERIMENTAL_I2CBUS to be enabled."
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Probes
|
||||
*/
|
||||
|
|
@ -1211,6 +1254,7 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE && Y_MAX_LENGTH >= Y_BED_SIZE,
|
|||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Endstop Tests
|
||||
*/
|
||||
|
|
@ -1218,33 +1262,33 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE && Y_MAX_LENGTH >= Y_BED_SIZE,
|
|||
#define _PLUG_UNUSED_TEST(AXIS,PLUG) (DISABLED(USE_##PLUG##MIN_PLUG) && DISABLED(USE_##PLUG##MAX_PLUG) && !(ENABLED(AXIS##_DUAL_ENDSTOPS) && WITHIN(AXIS##2_USE_ENDSTOP, _##PLUG##MAX_, _##PLUG##MIN_)))
|
||||
#define _AXIS_PLUG_UNUSED_TEST(AXIS) (_PLUG_UNUSED_TEST(AXIS,X) && _PLUG_UNUSED_TEST(AXIS,Y) && _PLUG_UNUSED_TEST(AXIS,Z))
|
||||
|
||||
// At least 3 endstop plugs must be used
|
||||
#if _AXIS_PLUG_UNUSED_TEST(X)
|
||||
#error "You must enable USE_XMIN_PLUG or USE_XMAX_PLUG."
|
||||
#endif
|
||||
#if _AXIS_PLUG_UNUSED_TEST(Y)
|
||||
#error "You must enable USE_YMIN_PLUG or USE_YMAX_PLUG."
|
||||
#endif
|
||||
#if _AXIS_PLUG_UNUSED_TEST(Z)
|
||||
#error "You must enable USE_ZMIN_PLUG or USE_ZMAX_PLUG."
|
||||
#endif
|
||||
|
||||
// Delta and Cartesian use 3 homing endstops
|
||||
#if !IS_SCARA
|
||||
#if X_HOME_DIR < 0 && DISABLED(USE_XMIN_PLUG)
|
||||
#error "Enable USE_XMIN_PLUG when homing X to MIN."
|
||||
#elif X_HOME_DIR > 0 && DISABLED(USE_XMAX_PLUG)
|
||||
#error "Enable USE_XMAX_PLUG when homing X to MAX."
|
||||
#elif Y_HOME_DIR < 0 && DISABLED(USE_YMIN_PLUG)
|
||||
#error "Enable USE_YMIN_PLUG when homing Y to MIN."
|
||||
#elif Y_HOME_DIR > 0 && DISABLED(USE_YMAX_PLUG)
|
||||
#error "Enable USE_YMAX_PLUG when homing Y to MAX."
|
||||
#if DISABLED(HANGPRINTER)
|
||||
// At least 3 endstop plugs must be used
|
||||
#if _AXIS_PLUG_UNUSED_TEST(X)
|
||||
#error "You must enable USE_XMIN_PLUG or USE_XMAX_PLUG."
|
||||
#elif _AXIS_PLUG_UNUSED_TEST(Y)
|
||||
#error "You must enable USE_YMIN_PLUG or USE_YMAX_PLUG."
|
||||
#elif _AXIS_PLUG_UNUSED_TEST(Z)
|
||||
#error "You must enable USE_ZMIN_PLUG or USE_ZMAX_PLUG."
|
||||
#endif
|
||||
|
||||
// Delta and Cartesian use 3 homing endstops
|
||||
#if !IS_SCARA
|
||||
#if X_HOME_DIR < 0 && DISABLED(USE_XMIN_PLUG)
|
||||
#error "Enable USE_XMIN_PLUG when homing X to MIN."
|
||||
#elif X_HOME_DIR > 0 && DISABLED(USE_XMAX_PLUG)
|
||||
#error "Enable USE_XMAX_PLUG when homing X to MAX."
|
||||
#elif Y_HOME_DIR < 0 && DISABLED(USE_YMIN_PLUG)
|
||||
#error "Enable USE_YMIN_PLUG when homing Y to MIN."
|
||||
#elif Y_HOME_DIR > 0 && DISABLED(USE_YMAX_PLUG)
|
||||
#error "Enable USE_YMAX_PLUG when homing Y to MAX."
|
||||
#endif
|
||||
#endif
|
||||
#if Z_HOME_DIR < 0 && DISABLED(USE_ZMIN_PLUG)
|
||||
#error "Enable USE_ZMIN_PLUG when homing Z to MIN."
|
||||
#elif Z_HOME_DIR > 0 && DISABLED(USE_ZMAX_PLUG)
|
||||
#error "Enable USE_ZMAX_PLUG when homing Z to MAX."
|
||||
#endif
|
||||
#endif
|
||||
#if Z_HOME_DIR < 0 && DISABLED(USE_ZMIN_PLUG)
|
||||
#error "Enable USE_ZMIN_PLUG when homing Z to MIN."
|
||||
#elif Z_HOME_DIR > 0 && DISABLED(USE_ZMAX_PLUG)
|
||||
#error "Enable USE_ZMAX_PLUG when homing Z to MAX."
|
||||
#endif
|
||||
|
||||
// Dual endstops requirements
|
||||
|
|
@ -1544,17 +1588,24 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE && Y_MAX_LENGTH >= Y_BED_SIZE,
|
|||
#endif
|
||||
|
||||
/**
|
||||
* Require 4 or more elements in per-axis initializers
|
||||
* Require 5/4 or more elements in per-axis initializers
|
||||
*/
|
||||
#if ENABLED(HANGPRINTER)
|
||||
#define MIN_ELEMENTS "5"
|
||||
#else
|
||||
#define MIN_ELEMENTS "4"
|
||||
#endif
|
||||
|
||||
constexpr float sanity_arr_1[] = DEFAULT_AXIS_STEPS_PER_UNIT,
|
||||
sanity_arr_2[] = DEFAULT_MAX_FEEDRATE,
|
||||
sanity_arr_3[] = DEFAULT_MAX_ACCELERATION;
|
||||
static_assert(COUNT(sanity_arr_1) >= XYZE, "DEFAULT_AXIS_STEPS_PER_UNIT requires 4 (or more) elements.");
|
||||
static_assert(COUNT(sanity_arr_2) >= XYZE, "DEFAULT_MAX_FEEDRATE requires 4 (or more) elements.");
|
||||
static_assert(COUNT(sanity_arr_3) >= XYZE, "DEFAULT_MAX_ACCELERATION requires 4 (or more) elements.");
|
||||
static_assert(COUNT(sanity_arr_1) <= XYZE_N, "DEFAULT_AXIS_STEPS_PER_UNIT has too many elements.");
|
||||
static_assert(COUNT(sanity_arr_2) <= XYZE_N, "DEFAULT_MAX_FEEDRATE has too many elements.");
|
||||
static_assert(COUNT(sanity_arr_3) <= XYZE_N, "DEFAULT_MAX_ACCELERATION has too many elements.");
|
||||
|
||||
static_assert(COUNT(sanity_arr_1) >= NUM_AXIS, "DEFAULT_AXIS_STEPS_PER_UNIT requires " MIN_ELEMENTS " (or more) elements for HANGPRINTER.");
|
||||
static_assert(COUNT(sanity_arr_2) >= NUM_AXIS, "DEFAULT_MAX_FEEDRATE requires " MIN_ELEMENTS " (or more) elements for HANGPRINTER.");
|
||||
static_assert(COUNT(sanity_arr_3) >= NUM_AXIS, "DEFAULT_MAX_ACCELERATION requires " MIN_ELEMENTS " (or more) elements for HANGPRINTER.");
|
||||
static_assert(COUNT(sanity_arr_1) <= NUM_AXIS_N, "DEFAULT_AXIS_STEPS_PER_UNIT has too many elements.");
|
||||
static_assert(COUNT(sanity_arr_2) <= NUM_AXIS_N, "DEFAULT_MAX_FEEDRATE has too many elements.");
|
||||
static_assert(COUNT(sanity_arr_3) <= NUM_AXIS_N, "DEFAULT_MAX_ACCELERATION has too many elements.");
|
||||
|
||||
/**
|
||||
* Sanity checks for Spindle / Laser
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue