sadr0b0t / stepper_h

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

Выход за границы, если в prepare_steps/whirl указать step_delay, в который не уместятся 3 периода таймера #9

Closed sadr0b0t closed 7 years ago

sadr0b0t commented 7 years ago

Если задать step_delay так, что в него не уместятся 3 периода таймера, мотор может выйти за границы рабочей области.

при периоде таймера 200мкс

prepare_steps(&sm_x, -300, 400);

Причина: на каждый шаг нужно минимум 3 тика таймера (1й тик проверяет границы, второй взводит step, 3й шагает).

Вообще, это в точности продолжение проблемы здесь: https://github.com/1i7/stepper_h/issues/1

Только там было исправление для значения 0 (это корректное значение - его можно исправить на минимальную задержку, т.е. максимальную скорость). Теперь нужно придумать, что делать со значениями, которые больше 0, но меньше допустимой минимальной задержки. Можно делать автоматическое исправление или как-то сообщать об ошибке.

sadr0b0t commented 7 years ago

Тест-кейс, сейчас фейлится https://github.com/1i7/stepper_h/commit/b3ed9261d467f084405a5039580d2d43e74f7885

sadr0b0t commented 7 years ago

В общем так, фейлить prepare_steps/whirl и т.п. нельзя, т.к. иначе у нас получится 3 места возможных ошибок:

При этом, даже проверив на корректность значения в prepare_steps, мы не можем гарантировать, что ошибка не произойдет на одном из шаго в цикле. Клиентский код получит награмождение проверок с дублирующимися ошибками, поэтому все нафиг: фейлим или в stepper_start_cycle или уже в самом цикле с cycle_status/motor_status.

Кстати, коды возврата в stepper_start_cycle тоже дублируют статусы ошибок в cycle_status, при этом, чтобы узнать наверняка, корректно ли завершился цикл, cycle_status все равно нужно проверять. Поэтому, стоит еще хорошенько подумать, нужны или эти коды возврата, или отключить их и оставить только cycle_status, как и было раньше.

sadr0b0t commented 7 years ago

Проверка в stepper_start_cycle, тесты проходят https://github.com/1i7/stepper_h/commit/3696019504b519d72d0564a0e1e66fa22eda2119