dda.c: resort calculation for high frequencies

This commit is contained in:
Nico Tonnhofer 2017-04-02 20:14:16 +02:00
parent f9c8652715
commit 89bb0ae3bb
1 changed files with 7 additions and 3 deletions

10
dda.c
View File

@ -292,10 +292,14 @@ void dda_create(DDA *dda, const TARGET *target) {
// 60 * 16 MHz * 5 mm is > 32 bits // 60 * 16 MHz * 5 mm is > 32 bits
uint32_t move_duration, md_candidate; uint32_t move_duration, md_candidate;
move_duration = distance * ((60 * F_CPU) / (dda->endpoint.F * 1000UL)); // md = um * (60s/min) * (ticks/s) / (1000um/mm) / (mm/min)
// = um * (mm/1000um) * (min/mm) * (60s/min) * (ticks/s)
// = (mm/1000) * ( /mm) * (60s) * (ticks/s)
// = (1/1000 ) * (60 * ticks )
move_duration = distance * (60UL * (F_CPU / 1000) / dda->endpoint.F);
for (i = X; i < AXIS_COUNT; i++) { for (i = X; i < AXIS_COUNT; i++) {
md_candidate = delta_um[i] * ((60 * F_CPU) / md_candidate = delta_um[i] * (60UL * (F_CPU / 1000) /
(pgm_read_dword(&maximum_feedrate_P[i]) * 1000UL)); pgm_read_dword(&maximum_feedrate_P[i]));
if (md_candidate > move_duration) if (md_candidate > move_duration)
move_duration = md_candidate; move_duration = md_candidate;
} }