Сага о абсолютном энкодере и шаговом двигателе
В качестве подопытного было приобретено несколько разных магнитных энкодеров наподобие тех, что используются в таких проектах как mechaduino (или его китайская инкарнация как MSK Servo42) или же в системах стабилизации камер (внезапно там используются те же магнитные энкодеры). В итоге у меня оказалось два их от разных производителей:
- AS5048A с разрешением 12bit (если пересчитать в угол по нехитрой формуле 360/2**12 ~ 0.08789 градуса)
- TLE5012b с разрешением 15bit (опять же если пересчитать в угол то 360/2**15 ~ 0.01099 градуса)
На макетке была собрана конструкция из stm32f103c8t6 aka bluepill энкодера и драйвера шагового двигателя tmc2130 (взял то что было под руками). Всё это счастье было запрограммировано на довольно простые действия:
- stm32 имеет прерывания на трех пинах которые подключены к Step/Dir/Enable на плате управления принтером
- при получении сигналов на Step/Dir/Enable производится stm32 делает шаг через tmc2130
- после завершения шага (если успевает) считывает положение двигателя через энкодер tle5012b (на валу двигателя помещён магнит)
- stm32 печатает в UART инфу о количестве шагов, микрошаге, количесве оборотов и текущем угле поворота двигателя (энкодер таки абсолютный и умеет считать обороты)
Как происходило тестирование:
- Был выбран набор скоростей: 10, 25, 50, 75, 100, 125, 150, 200, 250 мм/с
- Для каждой скорости передвижение с X0 до X160 и обратно и ожидание в крайних положения по 2 секунды (это 4 оборота движка в одну строну и в другую) повторялось по 25 раз
- Данные с энкодера писались в лог (скриптик с сериал консоли всё писал в файлики)
- На низких скоростях (до 50 мм/с), у нас повторяемость очень неплохая, на уровне погрешности измерения энкодера
- На скорости 75мм/с (а это у нас ~1.875 оборота в секунду) ошибка повторяемости позиционирования шаговика становится сравнимой с одним микрошагом
- На скоростях 100, 125, 150 и 200 мм/с у нас ошибка повторяемости позиционирования шаговика снова становится сравнимой с погрешностью датчика угла поворота (особенность драйвера tmc2130, для него это другой режим работы и он пытается делать точное позиционирование)
- А вот на скорости в 250мм/с система идёт в разнос и повторяемость падает до ~0.7 градусов (что примерно 7 шагов при дроблении 1/16, или если пересчитать в мм то это будет ~0.1 мм в среднем)
То что мы видим при скорости 10мм/с (да довольно медленно)На картинках нарисовано чтение с датчика и счётчик шагов (данные датчика это синяя линия) а так же идеальные значения углов для данного номера шага (хе хе, довольно просто посчитать) а так же вертикальными черточками различия реально измеренного от идеального. Какие выводы можно сделать по этой картинке:
- Шаги у нас не равномерны (что в целом понятно, исходя из физики двигателя)
- Какие то шаги у нас почти точно попадают в идеальные значения углов поворота (но не все..., совсем не все...)
- Хотя точность позиционирования у нас не очень высокая, но повторяемость хорошая (синяя линия на картинке это статистика по 25 повторам
Теперь посмотрим что будет если шаговик пойдёт немного быстрее 25 мм/сКартинка в целом не поменялась, но ошибка позиционирования возросла (разница между реальным и идеальным положением)
Теперь 50 мм/сВидно что позиционирование стало ещё хуже...
Теперь 75 мм/сВсё поплыло ещё дальше...
100 мм/сОшибка осталась на прежнем уровне (tmc2130 перешел в другой режим работы)
125мм/с150 мм/с200 мм/си 250мм/сКак видим, с увеличением скорости ошибка позиционирования растёт... Что можно нарисовать примерно так...Картинка похожа на первую. Опять же зеленая линия это среднее. Оражневая медиана. Какие выводы можно сделать?
- Что приятно средняя ошибка позиционирования примерно 0. Что означает что шаговик с одинаковой вероятность как проскакивает положение, так и недоходит до него (по этому среднее и есть 0).
- А вот медиана уже становится большой. На уровне 0.5-0.8 градуса.
- Разброс ошибок довольно большой, он растёт с примерно 0.2 градусов при 10мм/с до 4 градусов при 250мм/с, что соответсвует разбросу хода от 0.02 до 0.5 мм (хе хе.. кто там хвастался что печатает на скорости 200+мм/с....?)
- Ещё замечу, что всё это измерялось на свободном шаговике без нагрузки. С нагрузкой будет все печальнее (и я это проверю в следующей части)
Что из всего этого следует?
Если хочется повышать качество печати, то надо слегка поменять подход к позиционирования шаговика в прошивках (позицоинирование у него не линейное, и это надо учитывать). По идее надо сделать умный closed-loop шаговик, которые будет в состоянии корректировать нелинейности при перемещении.
Продолжение следует...
Еще больше интересных статей
Апгрейды для Sprite Extruder Ender 3: обдув K3D, азотированные шестерни FYSETC Sprite Extruder Gear, сопло 0.6. Печать композитами.
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Всем привет! )
Я знаю, что сейчас не 202...
duet web control не регулируются обороты вентилятора обдува детали на BTT SKR V1.4
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
принтер у меня самодельно переделанный из ки...
Настраиваем прошивку Marlin и заливаем её в 3D принтер
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Комментарии и вопросы
Задумывался!) и движок есть, к...
Всё это я курил и прикидывал.....
Как я и написал "Вам шашечки и...
Всем привет, кто-либо ставил 2...
Всем привет. Печатал коробку д...
Всем привет. Мой опыт в 3д печ...
Доброго времени суток, подскаж...