Как стать автором
Обновить

Использование блоков UDB контроллеров PSoC фирмы Cypress для уменьшения числа прерываний в 3D-принтере

Время на прочтение 14 мин
Количество просмотров 3.7K
Всего голосов 13: ↑13 и ↓0 +13
Комментарии 6

Комментарии 6

Как быть с точностью?
Если мы, к примеру 1000 раз переместимся на 100 мм вперед и на 100 мм вперед, вернется ли мотор в стартовое положение или набежит большая погрешность?
Если с механикой все в порядке, то вернется ровно в стартовое положение.
Судя по осциллограммам, всё будет верно. Если честно, я просто добился осциллограмм, как в настоящем 3D принтере (я их снимал в 2016-м, когда Marlin на STM32 перетаскивал), а на практике пока времени не было проверять. Здесь речь идёт скорее о практических опытах с UDB, чтобы разбавить сухую теорию. А играть приятнее с чем-то реальным. Проблема частых прерываний в 3D принтере — вполне реальная вещь.

В целом, что описано в данной статье — это сферический конь в вакууме. Если головку резко дёрнуть — двигатель пропустит шаги при разгоне. Тут-то погрешность и набежит. Чтобы этого не происходило — как я отметил в тексте, надо добавлять ускорения. Чуть попозже опишу, как я этого добивался (снова — применительно к практике работы с UDB). Тут — просто и так огромный текст получился.
При пропуске понятно, но при генерации импульсов STEP ведь не ведется точный подсчет, и возможно есть вероятность, что задав 40000 Гц и период 100 мс один раз сгенерирует 4000 шагов, второй 4002, третий 3999?
Число шагов программа кладёт в D1, во время работы оно попадает в A1. Автомат будет работать, пока это значение не занулится. Так что шаги отсчитываются точно.
Спасибо, с ходу разобраться трудно.
Интересно продолжение про замедление/разгон.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории