Поимпульсный разбор таймера в процессе шагания показал, что при скоростях, некратных периоду таймера, погрешность шага (разница между временем "идеального" шага и временем реального шага на фронте таймера) не учитывается при взведении таймера на следующий шаг.
Грубо говоря, если у нас реальный шаг произошел на фронте таймера за 50 микросекунд до его "идеального" времени, при взведении таймера на следующий шаг эти 50 микросекунд учтены не будут, следующий шаг будет опять совершен с погрешностью и т.п. За весь цикл эта погрешность накопится на каждом шаге и мотор приедет в пункт назначения раньше, чем требуется. Хотя при определенных скоростях, небольшом количестве шагов, высокой частоте таймера и т.п. погрешность может быть маленькая и "на глаз" ее заметить будет сложно.
Поимпульсный разбор таймера в процессе шагания показал, что при скоростях, некратных периоду таймера, погрешность шага (разница между временем "идеального" шага и временем реального шага на фронте таймера) не учитывается при взведении таймера на следующий шаг.
Грубо говоря, если у нас реальный шаг произошел на фронте таймера за 50 микросекунд до его "идеального" времени, при взведении таймера на следующий шаг эти 50 микросекунд учтены не будут, следующий шаг будет опять совершен с погрешностью и т.п. За весь цикл эта погрешность накопится на каждом шаге и мотор приедет в пункт назначения раньше, чем требуется. Хотя при определенных скоростях, небольшом количестве шагов, высокой частоте таймера и т.п. погрешность может быть маленькая и "на глаз" ее заметить будет сложно.
Проблема ловится в тесте test_aliquant_speed_tick_by_tick https://github.com/1i7/stepper_h/blob/master/test/stepper_test.cpp#L260
Для ее решения нужно просто добавлять погрешность времени сделанного шага при взведении таймера на следующий шаг.