Сага о абсолютном энкодере и шаговом двигателе
В качестве подопытного было приобретено несколько разных магнитных энкодеров наподобие тех, что используются в таких проектах как 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 шаговик, которые будет в состоянии корректировать нелинейности при перемещении.
Продолжение следует...
Еще больше интересных статей
Реализация I2C на MKS Robin nano v1.2 + Бонус прошивка по UART
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Размотчик филамента. Бесшумная версия.
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Blue Pill & SSD1306, ну очень маленькие.., но 32 бит!
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Решил я тут попробовать перейти с 8 бит на 32.
Готовы...
Комментарии и вопросы
"Я описал целиком бизнес модел...
О, вы кажется не совсем понима...
Наипоследний вопросВас уже оди...
Всем привет подскажите пожалуй...
Здравствуйте! У меня принтер A...
Я недавно начал печать на этом...
Всем доброго дня.Приобрёл прин...