dda.c: correct current position for CoreXY
This commit is contained in:
parent
eacb5bbbed
commit
5cf1b34924
11
dda.c
11
dda.c
|
|
@ -952,14 +952,21 @@ void update_current_position() {
|
||||||
|
|
||||||
if (dda != NULL) {
|
if (dda != NULL) {
|
||||||
uint32_t axis_um;
|
uint32_t axis_um;
|
||||||
|
axes_int32_t delta_um, um;
|
||||||
|
|
||||||
for (i = X; i < AXIS_COUNT; i++) {
|
for (i = X; i < AXIS_COUNT; i++) {
|
||||||
axis_um = muldiv(move_state.steps[i],
|
axis_um = muldiv(move_state.steps[i],
|
||||||
1000000,
|
1000000,
|
||||||
pgm_read_dword(&steps_per_m_P[i]));
|
pgm_read_dword(&steps_per_m_P[i]));
|
||||||
|
|
||||||
current_position.axis[i] =
|
delta_um[i] = (int32_t)get_direction(dda, i) * axis_um;
|
||||||
dda->endpoint.axis[i] - (int32_t)get_direction(dda, i) * axis_um;
|
}
|
||||||
|
|
||||||
|
delta_to_axes(delta_um, um);
|
||||||
|
um[E] = delta_um[E];
|
||||||
|
|
||||||
|
for (i = X; i < AXIS_COUNT; i++) {
|
||||||
|
current_position.axis[i] = dda->endpoint.axis[i] - um[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dda->endpoint.e_relative) {
|
if (dda->endpoint.e_relative) {
|
||||||
|
|
|
||||||
|
|
@ -55,3 +55,17 @@ void axes_um_to_steps_corexy(const axes_int32_t um, axes_int32_t steps) {
|
||||||
steps[Y] = um_to_steps(um[X] - um[Y], Y);
|
steps[Y] = um_to_steps(um[X] - um[Y], Y);
|
||||||
steps[Z] = um_to_steps(um[Z], Z);
|
steps[Z] = um_to_steps(um[Z], Z);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void delta_to_axes_cartesian(const axes_int32_t delta_um, axes_int32_t um) {
|
||||||
|
enum axis_e i;
|
||||||
|
|
||||||
|
for (i = X; i < E; i++) {
|
||||||
|
um[i] = delta_um[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void delta_to_axes_corexy(const axes_int32_t delta_um, axes_int32_t um) {
|
||||||
|
um[X] = (delta_um[X] + delta_um[Y]) / 2;
|
||||||
|
um[Y] = (delta_um[X] - delta_um[Y]) / 2;
|
||||||
|
um[Z] = delta_um[Z];
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -52,4 +52,22 @@ inline void axes_um_to_steps(const axes_int32_t um, axes_int32_t steps) {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void delta_to_axes_cartesian(const axes_int32_t delta_um, axes_int32_t um);
|
||||||
|
void delta_to_axes_corexy(const axes_int32_t delta_um, axes_int32_t um);
|
||||||
|
// void delta_to_axes_scara(const axes_int32_t delta_um, axes_int32_t um);
|
||||||
|
|
||||||
|
static void delta_to_axes(const axes_int32_t, axes_int32_t)
|
||||||
|
__attribute__ ((always_inline));
|
||||||
|
inline void delta_to_axes(const axes_int32_t delta_um, axes_int32_t um) {
|
||||||
|
#if defined KINEMATICS_STRAIGHT
|
||||||
|
delta_to_axes_cartesian(delta_um, um);
|
||||||
|
#elif defined KINEMATICS_COREXY
|
||||||
|
delta_to_axes_corexy(delta_um, um);
|
||||||
|
// #elif defined KINEMATICS_SCARA
|
||||||
|
// delta_to_axes_scara(delta_um, um);
|
||||||
|
#else
|
||||||
|
#error KINEMATICS not defined or unknown, edit your config.h.
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* _DDA_KINEMATICS_H */
|
#endif /* _DDA_KINEMATICS_H */
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue