aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2025-05-07 21:02:33 -0400
committerKevin O'Connor <kevin@koconnor.net>2025-05-09 09:52:05 -0400
commit885f63cff00176f67ce70cdffb80ba776b17c5ab (patch)
tree41ad3482cc25b40bd4e80cfa6de657ebff3aa866
parentefabe63357b66addcf2ded42a5e601549e058c8a (diff)
downloadkutter-885f63cff00176f67ce70cdffb80ba776b17c5ab.tar.gz
kutter-885f63cff00176f67ce70cdffb80ba776b17c5ab.tar.xz
kutter-885f63cff00176f67ce70cdffb80ba776b17c5ab.zip
stepper: Ensure minimum time between step pin and dir pin change
Commit 8faed8d9 made it possible to utilize stepper_event_full() while utilizing tmc "step on both edges" optimation. That commit would ensure a minimum step pulse duration, but it did not ensure a minimum duration between step pin and dir pin changes. Commits 0d27195f and 554ae78d optimized the gpio handling on stm32h7 chips, which could potentially cause a very small amount of time between step pin and dir pin changes. Enforce a minimum time after a step pin update before updating the dir pin. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
-rw-r--r--src/stepper.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/stepper.c b/src/stepper.c
index 84655fe9..b74a3ced 100644
--- a/src/stepper.c
+++ b/src/stepper.c
@@ -109,6 +109,10 @@ stepper_load_next(struct stepper *s)
shutdown("Stepper too far in past");
s->time.waketime = min_next_time;
}
+ if (was_active && need_dir_change && s->flags & SF_SINGLE_SCHED)
+ // Must ensure minimum time between step change and dir change
+ while (timer_is_before(timer_read_time(), min_next_time))
+ ;
}
// Set new direction (if needed)