Closed sadr0b0t closed 7 years ago
Тест-кейс, сейчас фейлится https://github.com/1i7/stepper_h/commit/b3ed9261d467f084405a5039580d2d43e74f7885
В общем так, фейлить prepare_steps/whirl и т.п. нельзя, т.к. иначе у нас получится 3 места возможных ошибок:
При этом, даже проверив на корректность значения в prepare_steps, мы не можем гарантировать, что ошибка не произойдет на одном из шаго в цикле. Клиентский код получит награмождение проверок с дублирующимися ошибками, поэтому все нафиг: фейлим или в stepper_start_cycle или уже в самом цикле с cycle_status/motor_status.
Кстати, коды возврата в stepper_start_cycle тоже дублируют статусы ошибок в cycle_status, при этом, чтобы узнать наверняка, корректно ли завершился цикл, cycle_status все равно нужно проверять. Поэтому, стоит еще хорошенько подумать, нужны или эти коды возврата, или отключить их и оставить только cycle_status, как и было раньше.
Проверка в stepper_start_cycle, тесты проходят https://github.com/1i7/stepper_h/commit/3696019504b519d72d0564a0e1e66fa22eda2119
Если задать step_delay так, что в него не уместятся 3 периода таймера, мотор может выйти за границы рабочей области.
при периоде таймера 200мкс
Причина: на каждый шаг нужно минимум 3 тика таймера (1й тик проверяет границы, второй взводит step, 3й шагает).
Вообще, это в точности продолжение проблемы здесь: https://github.com/1i7/stepper_h/issues/1
Только там было исправление для значения 0 (это корректное значение - его можно исправить на минимальную задержку, т.е. максимальную скорость). Теперь нужно придумать, что делать со значениями, которые больше 0, но меньше допустимой минимальной задержки. Можно делать автоматическое исправление или как-то сообщать об ошибке.