Skip to content

Commit fc97827

Browse files
committed
FT: Reverse DIR bits, Multi-Axis
1 parent 1f5b886 commit fc97827

File tree

5 files changed

+41
-37
lines changed

5 files changed

+41
-37
lines changed

Marlin/src/inc/SanityCheck.h

+6-2
Original file line numberDiff line numberDiff line change
@@ -4033,8 +4033,12 @@ static_assert(_PLUS_TEST(4), "HOMING_FEEDRATE_MM_M values must be positive.");
40334033
/**
40344034
* Fixed-Time Motion limitations
40354035
*/
4036-
#if ENABLED(FT_MOTION) && (NUM_AXES > 3 || E_STEPPERS > 1 || NUM_Z_STEPPERS > 1 || ANY(DUAL_X_CARRIAGE, HAS_DUAL_X_STEPPERS, HAS_DUAL_Y_STEPPERS, HAS_MULTI_EXTRUDER, MIXING_EXTRUDER))
4037-
#error "FT_MOTION is currently limited to machines with 3 linear axes and a single extruder."
4036+
#if ENABLED(FT_MOTION)
4037+
#if NUM_AXES > 3
4038+
#error "FT_MOTION is currently limited to machines with 3 linear axes."
4039+
#elif ENABLED(MIXING_EXTRUDER)
4040+
#error "FT_MOTION is incompatible with MIXING_EXTRUDER."
4041+
#endif
40384042
#endif
40394043

40404044
// Multi-Stepping Limit

Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/extended/circular_progress.cpp

+8-8
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,11 @@
2727
namespace FTDI {
2828
void draw_circular_progress(CommandProcessor& cmd, int x, int y, int w, int h, float percent, char *text, uint32_t bgcolor, uint32_t fgcolor) {
2929
const float rim = 0.3;
30-
const float a = percent/100.0*2.0*PI;
31-
const float a1 = min(PI/2, a);
32-
const float a2 = min(PI/2, a-a1);
33-
const float a3 = min(PI/2, a-a1-a2);
34-
const float a4 = min(PI/2, a-a1-a2-a3);
30+
const float a = percent/100.0*2.0*M_PI;
31+
const float a1 = min(M_PI/2, a);
32+
const float a2 = min(M_PI/2, a-a1);
33+
const float a3 = min(M_PI/2, a-a1-a2);
34+
const float a4 = min(M_PI/2, a-a1-a2-a3);
3535

3636
const int ro = min(w,h) * 8;
3737
const int rr = ro * rim;
@@ -69,21 +69,21 @@ namespace FTDI {
6969
cmd.cmd(VERTEX2F(cx + ro*sin(a1) + 16,cy - ro*cos(a1) + 8));
7070

7171
// Paint lower-right quadrant
72-
if (a > PI/2) {
72+
if (a > M_PI/2) {
7373
cmd.cmd(BEGIN(EDGE_STRIP_R));
7474
cmd.cmd(VERTEX2F(cx, cy));
7575
cmd.cmd(VERTEX2F(cx + ro*cos(a2),cy + ro*sin(a2) + 16));
7676
}
7777

7878
// Paint lower-left quadrant
79-
if (a > PI) {
79+
if (a > M_PI) {
8080
cmd.cmd(BEGIN(EDGE_STRIP_B));
8181
cmd.cmd(VERTEX2F(cx, cy));
8282
cmd.cmd(VERTEX2F(cx - ro*sin(a3) - 8,cy + ro*cos(a3)));
8383
}
8484

8585
// Paint upper-left quadrant
86-
if (a > 1.5*PI) {
86+
if (a > 1.5*M_PI) {
8787
cmd.cmd(BEGIN(EDGE_STRIP_L));
8888
cmd.cmd(VERTEX2F(cx, cy));
8989
cmd.cmd(VERTEX2F(cx - ro*cos(a4),cy - ro*sin(a4)));

Marlin/src/module/ft_motion.cpp

+5-5
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@ void FxdTiCtrl::loop() {
288288
// To be called on init or mode or zeta change.
289289
void FxdTiCtrl::updateShapingA(const_float_t zeta/*=FTM_SHAPING_ZETA*/, const_float_t vtol/*=FTM_SHAPING_V_TOL*/) {
290290

291-
const float K = exp( -zeta * PI / sqrt(1.0f - sq(zeta)) ),
291+
const float K = exp( -zeta * M_PI / sqrt(1.0f - sq(zeta)) ),
292292
K2 = sq(K);
293293

294294
switch (cfg_mode) {
@@ -862,40 +862,40 @@ void FxdTiCtrl::convertToSteps(const uint32_t idx) {
862862
SBI(stepperCmdBuff_ApplyDir[dir_index], dir_bit);
863863
#if HAS_X_AXIS
864864
if (x_delta > 0) {
865-
stepperCmdBuff[stepperCmdBuff_produceIdx] |= _BV(FT_BIT_DIR_X);
866865
x_dirState = stepDirState_POS;
867866
}
868867
else {
868+
stepperCmdBuff[stepperCmdBuff_produceIdx] |= _BV(FT_BIT_DIR_X);
869869
x_dirState = stepDirState_NEG;
870870
}
871871
#endif
872872

873873
#if HAS_Y_AXIS
874874
if (y_delta > 0) {
875-
stepperCmdBuff[stepperCmdBuff_produceIdx] |= _BV(FT_BIT_DIR_Y);
876875
y_dirState = stepDirState_POS;
877876
}
878877
else {
878+
stepperCmdBuff[stepperCmdBuff_produceIdx] |= _BV(FT_BIT_DIR_Y);
879879
y_dirState = stepDirState_NEG;
880880
}
881881
#endif
882882

883883
#if HAS_Z_AXIS
884884
if (z_delta > 0) {
885-
stepperCmdBuff[stepperCmdBuff_produceIdx] |= _BV(FT_BIT_DIR_Z);
886885
z_dirState = stepDirState_POS;
887886
}
888887
else {
888+
stepperCmdBuff[stepperCmdBuff_produceIdx] |= _BV(FT_BIT_DIR_Z);
889889
z_dirState = stepDirState_NEG;
890890
}
891891
#endif
892892

893893
#if HAS_EXTRUDERS
894894
if (e_delta > 0) {
895-
stepperCmdBuff[stepperCmdBuff_produceIdx] |= _BV(FT_BIT_DIR_E);
896895
e_dirState = stepDirState_POS;
897896
}
898897
else {
898+
stepperCmdBuff[stepperCmdBuff_produceIdx] |= _BV(FT_BIT_DIR_E);
899899
e_dirState = stepDirState_NEG;
900900
}
901901
#endif

Marlin/src/module/planner.cpp

+8-8
Original file line numberDiff line numberDiff line change
@@ -3173,14 +3173,14 @@ bool Planner::buffer_line(const xyze_pos_t &cart, const_feedRate_t fr_mm_s
31733173
if (delta.a <= POLAR_FAST_RADIUS )
31743174
calculated_feedrate = settings.max_feedrate_mm_s[Y_AXIS];
31753175
else {
3176-
// Normalized vector of movement
3177-
const float diffBLength = ABS((2.0f * PI * diff.a) * (diff.b / 360.0f)),
3178-
diffTheta = DEGREES(ATAN2(diff.a, diffBLength)),
3179-
normalizedTheta = 1.0f - (ABS(diffTheta > 90.0f ? 180.0f - diffTheta : diffTheta) / 90.0f);
3180-
3181-
// Normalized position along the radius
3182-
const float radiusRatio = PRINTABLE_RADIUS/delta.a;
3183-
calculated_feedrate += (fr_mm_s * radiusRatio * normalizedTheta);
3176+
// Normalized vector of movement
3177+
const float diffBLength = ABS((2.0f * M_PI * diff.a) * (diff.b / 360.0f)),
3178+
diffTheta = DEGREES(ATAN2(diff.a, diffBLength)),
3179+
normalizedTheta = 1.0f - (ABS(diffTheta > 90.0f ? 180.0f - diffTheta : diffTheta) / 90.0f);
3180+
3181+
// Normalized position along the radius
3182+
const float radiusRatio = PRINTABLE_RADIUS/delta.a;
3183+
calculated_feedrate += (fr_mm_s * radiusRatio * normalizedTheta);
31843184
}
31853185
}
31863186
const feedRate_t feedrate = calculated_feedrate;

Marlin/src/module/stepper.cpp

+14-14
Original file line numberDiff line numberDiff line change
@@ -3448,36 +3448,36 @@ void Stepper::report_positions() {
34483448
#if HAS_Z_AXIS
34493449
// Z is handled differently to update the stepper
34503450
// counts (needed by Marlin for bed level probing).
3451-
const bool z_dir = TEST(command, FT_BIT_DIR_Z),
3451+
const bool z_rev = TEST(command, FT_BIT_DIR_Z),
34523452
z_step = TEST(command, FT_BIT_STEP_Z);
34533453
#endif
34543454

34553455
if (applyDir) {
3456-
TERN_(HAS_X_AXIS, X_DIR_WRITE(TEST(command, FT_BIT_DIR_X)));
3457-
TERN_(HAS_Y_AXIS, Y_DIR_WRITE(TEST(command, FT_BIT_DIR_Y)));
3458-
TERN_(HAS_Z_AXIS, Z_DIR_WRITE(z_dir));
3459-
TERN_(HAS_EXTRUDERS, E0_DIR_WRITE(TEST(command, FT_BIT_DIR_E)));
3456+
TERN_(HAS_X_AXIS, X_APPLY_DIR(!TEST(command, FT_BIT_DIR_X), false));
3457+
TERN_(HAS_Y_AXIS, Y_APPLY_DIR(!TEST(command, FT_BIT_DIR_Y), false));
3458+
TERN_(HAS_Z_AXIS, Z_APPLY_DIR(!z_rev, false));
3459+
TERN_(HAS_EXTRUDERS, TEST(command, FT_BIT_DIR_E) ? REV_E_DIR(stepper_extruder) : FWD_E_DIR(stepper_extruder));
34603460
DIR_WAIT_AFTER();
34613461
}
34623462

3463-
TERN_(HAS_X_AXIS, X_STEP_WRITE(TEST(command, FT_BIT_STEP_X)));
3464-
TERN_(HAS_Y_AXIS, Y_STEP_WRITE(TEST(command, FT_BIT_STEP_Y)));
3465-
TERN_(HAS_Z_AXIS, Z_STEP_WRITE(z_step));
3466-
TERN_(HAS_EXTRUDERS, E0_STEP_WRITE(TEST(command, FT_BIT_STEP_E)));
3463+
TERN_(HAS_X_AXIS, X_APPLY_STEP(TEST(command, FT_BIT_STEP_X)));
3464+
TERN_(HAS_Y_AXIS, Y_APPLY_STEP(TEST(command, FT_BIT_STEP_Y)));
3465+
TERN_(HAS_Z_AXIS, Z_APPLY_STEP(z_step));
3466+
TERN_(HAS_EXTRUDERS, E_APPLY_STEP(TEST(command, FT_BIT_STEP_E)));
34673467

34683468
START_TIMED_PULSE();
34693469

34703470
#if HAS_Z_AXIS
34713471
// Update step counts
3472-
if (z_step) count_position.z += z_dir ? 1 : -1;
3472+
if (z_step) count_position.z += z_rev ? -1 : 1;
34733473
#endif
34743474

34753475
AWAIT_HIGH_PULSE();
34763476

3477-
X_STEP_WRITE(0);
3478-
TERN_(HAS_Y_AXIS, Y_STEP_WRITE(0));
3479-
TERN_(HAS_Z_AXIS, Z_STEP_WRITE(0));
3480-
TERN_(HAS_EXTRUDERS, E0_STEP_WRITE(0));
3477+
TERN_(HAS_X_AXIS, X_APPLY_STEP(0));
3478+
TERN_(HAS_Y_AXIS, Y_APPLY_STEP(0));
3479+
TERN_(HAS_Z_AXIS, Z_APPLY_STEP(0));
3480+
TERN_(HAS_EXTRUDERS, E_APPLY_STEP(0));
34813481

34823482
} // Stepper::fxdTiCtrl_stepper
34833483

0 commit comments

Comments
 (0)