sadr0b0t / stepper_h

Stepper motor control library for ChipKIT/Arduino
GNU Lesser General Public License v3.0
3 stars 1 forks source link

Учитывать погрешность времени шага на фронте таймера при установлении времени до следующего шага #7

Closed sadr0b0t closed 7 years ago

sadr0b0t commented 7 years ago

Поимпульсный разбор таймера в процессе шагания показал, что при скоростях, некратных периоду таймера, погрешность шага (разница между временем "идеального" шага и временем реального шага на фронте таймера) не учитывается при взведении таймера на следующий шаг.

Грубо говоря, если у нас реальный шаг произошел на фронте таймера за 50 микросекунд до его "идеального" времени, при взведении таймера на следующий шаг эти 50 микросекунд учтены не будут, следующий шаг будет опять совершен с погрешностью и т.п. За весь цикл эта погрешность накопится на каждом шаге и мотор приедет в пункт назначения раньше, чем требуется. Хотя при определенных скоростях, небольшом количестве шагов, высокой частоте таймера и т.п. погрешность может быть маленькая и "на глаз" ее заметить будет сложно.

Проблема ловится в тесте test_aliquant_speed_tick_by_tick https://github.com/1i7/stepper_h/blob/master/test/stepper_test.cpp#L260

Для ее решения нужно просто добавлять погрешность времени сделанного шага при взведении таймера на следующий шаг.

sadr0b0t commented 7 years ago

вот так просто https://github.com/1i7/stepper_h/commit/bab5cb15b1a0090f05ad2e143bde6707a7f162c8