General DELTA_IK macro
This commit is contained in:
parent
c694608450
commit
caa5093498
@ -427,7 +427,7 @@
|
|||||||
|
|
||||||
#if ENABLED(DELTA) // apply delta inverse_kinematics
|
#if ENABLED(DELTA) // apply delta inverse_kinematics
|
||||||
|
|
||||||
DELTA_RAW_IK();
|
DELTA_IK(raw);
|
||||||
planner.buffer_segment(delta[A_AXIS], delta[B_AXIS], delta[C_AXIS], in_raw[E_AXIS], fr, active_extruder);
|
planner.buffer_segment(delta[A_AXIS], delta[B_AXIS], delta[C_AXIS], in_raw[E_AXIS], fr, active_extruder);
|
||||||
|
|
||||||
#elif IS_SCARA // apply scara inverse_kinematics (should be changed to save raw->logical->raw)
|
#elif IS_SCARA // apply scara inverse_kinematics (should be changed to save raw->logical->raw)
|
||||||
|
@ -121,7 +121,7 @@ void recalc_delta_settings() {
|
|||||||
}while(0)
|
}while(0)
|
||||||
|
|
||||||
void inverse_kinematics(const float raw[XYZ]) {
|
void inverse_kinematics(const float raw[XYZ]) {
|
||||||
DELTA_RAW_IK();
|
DELTA_IK(raw);
|
||||||
// DELTA_DEBUG();
|
// DELTA_DEBUG();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -76,17 +76,17 @@ void recalc_delta_settings();
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Macro to obtain the Z position of an individual tower
|
// Macro to obtain the Z position of an individual tower
|
||||||
#define DELTA_Z(T) raw[Z_AXIS] + _SQRT( \
|
#define DELTA_Z(V,T) V[Z_AXIS] + _SQRT( \
|
||||||
delta_diagonal_rod_2_tower[T] - HYPOT2( \
|
delta_diagonal_rod_2_tower[T] - HYPOT2( \
|
||||||
delta_tower[T][X_AXIS] - raw[X_AXIS], \
|
delta_tower[T][X_AXIS] - V[X_AXIS], \
|
||||||
delta_tower[T][Y_AXIS] - raw[Y_AXIS] \
|
delta_tower[T][Y_AXIS] - V[Y_AXIS] \
|
||||||
) \
|
) \
|
||||||
)
|
)
|
||||||
|
|
||||||
#define DELTA_RAW_IK() do { \
|
#define DELTA_IK(V) do { \
|
||||||
delta[A_AXIS] = DELTA_Z(A_AXIS); \
|
delta[A_AXIS] = DELTA_Z(V, A_AXIS); \
|
||||||
delta[B_AXIS] = DELTA_Z(B_AXIS); \
|
delta[B_AXIS] = DELTA_Z(V, B_AXIS); \
|
||||||
delta[C_AXIS] = DELTA_Z(C_AXIS); \
|
delta[C_AXIS] = DELTA_Z(V, C_AXIS); \
|
||||||
}while(0)
|
}while(0)
|
||||||
|
|
||||||
void inverse_kinematics(const float raw[XYZ]);
|
void inverse_kinematics(const float raw[XYZ]);
|
||||||
|
@ -613,7 +613,7 @@ float soft_endstop_min[XYZ] = { X_MIN_BED, Y_MIN_BED, Z_MIN_POS },
|
|||||||
LOOP_XYZE(i) raw[i] += segment_distance[i];
|
LOOP_XYZE(i) raw[i] += segment_distance[i];
|
||||||
|
|
||||||
#if ENABLED(DELTA)
|
#if ENABLED(DELTA)
|
||||||
DELTA_RAW_IK(); // Delta can inline its kinematics
|
DELTA_IK(raw); // Delta can inline its kinematics
|
||||||
#else
|
#else
|
||||||
inverse_kinematics(raw);
|
inverse_kinematics(raw);
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user