roboforum.ru

Технический форум по робототехнике.

Абсолютный магнитный энкодер и шаговик

Абсолютный магнитный энкодер и шаговик

alexxy » 09 май 2019, 00:30

Данная тема по сути репост моего же поста с 3dtoday. Так что обсуждать можно и тут и там ;)

Давно я тут не писал постов про принтеры и электронику, но тут назрела тема использования абсолютного энкодера и попытке делать вменяемое упралвение шаговым двигателем с рассчётом на точность позиционирования (не путать с повторяемостью). В качестве подопытного было приобретено несколько разных магнитных энкодеров наподобие тех, что используются в таких проектах как mechaduino (или его китайская инкарнация как MSK Servo42) или же в системах стабилизации камер (внезапно там используются те же магнитные энкодеры). В итоге у меня оказалось два их от разных производителей:

  • AS5048A с разрешением 14bit (если пересчитать в угол по нехитрой формуле 360/2**14 ~ 0.022 градуса)
  • TLE5012b с разрешением 15bit (опять же если пересчитать в угол то 360/2**15 ~ 0.011 градуса)

В итоге я остановился на втором варианте, так как его разрешения хватает что бы легко ловить повороты даже для двигателя в 400 шагов на оборот при 32 микрошаге (а это получится примерно так 360/(400*32) ~ 0.028125 градуса), хотя это уже и экстремальный вариант.

На макетке была собрана конструкция из stm32f103c8t6 aka bluepill энкодера и драйвера шагового двигателя tmc2130 (взял то что было под руками). Всё это счастье было запрограммировано на довольно простые действия:

  • stm32 имеет прерывания на трех пинах которые подключены к Step/Dir/Enable на плате управления принтером при получении сигналов на Step/Dir/Enable производится stm32 делает шаг через tmc2130 после завершения шага (если успевает) считывает положение двигателя через энкодер tle5012b (на валу двигателя помещён магнит)
  • stm32 печатает в UART инфу о количестве шагов, микрошаге, количесве оборотов и текущем угле поворота двигателя (энкодер таки абсолютный и умеет считать обороты)

Дальше у меня возникла идея проверить насколько точно шаговик встаёт по шагам. Для этого в управляющей плате принтера (которая тоже stm32 но пожирнее) были выставлены виртуальные 80 steps/mm для оси X (в принципе это значение стандартное для 20 зубой шпули для GT2) а драйвер двигателя был выставлен в 16 микрошаг (двигатель у меня 1.8 градуса, 200 шагов на оборот, и как следствия с 16 микрошагом каждый шаг соответсвует 360/(200*16) = 0.1125 градуса, запомним эту цифру). Я решил посмотреть как у нас зависит точность выставления угла поворота от скорости принтера (а как следствие и точность).

Как происходило тестирование:

  • Был выбран набор скоростей: 10, 25, 50, 75, 100, 125, 150, 200, 250 мм/с
  • Для каждой скорости передвижение с X0 до X160 и обратно и ожидание в крайних положения по 2 секунды (это 4 оборота движка в одну строну и в другую) повторялось по 25 раз
  • Данные с энкодера писались в лог (скриптик с сериал консоли всё писал в файлики)
В итоге получилось довольно занятная картинка:
repeatability.png


На картинке выше нарисована статистика собранная по каждой скорости в виде так называемого boxplot (прямоугольник это все значения которые были в измерениях и лежат в пределах одного стандартного отклонения, зеленая линия это среднее значение, оражевая линия это медиана). На картинке нарисовано отклонение от значения медианы для каждой измеренной точки для каждой скорости. Как её интерпретировать:
  • На низких скоростях (до 50 мм/с), у нас повторяемость очень неплохая, на уровне погрешности измерения энкодера
  • На скорости 75мм/с (а это у нас ~1.875 оборота в секунду) ошибка повторяемости позиционирования шаговика становится сравнимой с одним микрошагом
  • На скоростях 100, 125, 150 и 200 мм/с у нас ошибка повторяемости позиционирования шаговика снова становится сравнимой с погрешностью датчика угла поворота (особенность драйвера tmc2130, для него это другой режим работы и он пытается делать точное позиционирование)
  • А вот на скорости в 250мм/с система идёт в разнос и повторяемость падает до ~0.7 градусов (что примерно 7 шагов при дроблении 1/16, или если пересчитать в мм то это будет ~0.1 мм в среднем)

Но это если речь идёт о повторяемости а не о точности. А это разные понятия. Так что теперь поговрим про точность. Будем считать, как это далают прошивки большниства принтеров, что перемещение на один микрошаг у нас всегда одианково (в данном случае это 0.1125 градуса или 0.0125 мм если у нас 80 шагов на мм). Посмотрим насколько это так.

То что мы видим при скорости 10мм/с (да довольно медленно)
f10mmps_real_vs_ideal.png


На картинках нарисовано чтение с датчика и счётчик шагов (данные датчика это синяя линия) а так же идеальные значения углов для данного номера шага (хе хе, довольно просто посчитать) а так же вертикальными черточками различия реально измеренного от идеального. Какие выводы можно сделать по этой картинке:
Шаги у нас не равномерны (что в целом понятно, исходя из физики двигателя)
Какие то шаги у нас почти точно попадают в идеальные значения углов поворота (но не все..., совсем не все...)
Хотя точность позиционирования у нас не очень высокая, но повторяемость хорошая (синяя линия на картинке это статистика по 25 повторам

Теперь посмотрим что будет если шаговик пойдёт немного быстрее 25 мм/с
f25mmps_real_vs_ideal.png


Картинка в целом не поменялась, но ошибка позиционирования возросла (разница между реальным и идеальным положением)

Теперь 50 мм/с
f50mmps_real_vs_ideal.png


Видно что позиционирование стало ещё хуже...

Теперь 75 мм/с
f75mmps_real_vs_ideal.png

Всё поплыло ещё дальше...

100 мм/с
f100mmps_real_vs_ideal.png


Ошибка осталась на прежнем уровне (tmc2130 перешел в другой режим работы)

125мм/с
f125mmps_real_vs_ideal.png

150 мм/с
f150mmps_real_vs_ideal.png

200 мм/с
f200mmps_real_vs_ideal.png

и 250мм/с
f250mmps_real_vs_ideal.png

Как видим, с увеличением скорости ошибка позиционирования растёт... Что можно нарисовать примерно так...
poss_errors.png

Картинка похожа на первую. Опять же зеленая линия это среднее. Оражневая медиана. Какие выводы можно сделать?
Что приятно средняя ошибка позиционирования примерно 0. Что означает что шаговик с одинаковой вероятность как проскакивает положение, так и недоходит до него (по этому среднее и есть 0).
А вот медиана уже становится большой. На уровне 0.5-0.8 градуса.
Разброс ошибок довольно большой, он растёт с примерно 0.2 градусов при 10мм/с до 4 градусов при 250мм/с, что соответсвует разбросу хода от 0.02 до 0.5 мм (хе хе.. кто там хвастался что печатает на скорости 200+мм/с....?)
Ещё замечу, что всё это измерялось на свободном шаговике без нагрузки. С нагрузкой будет все печальнее (и я это проверю в следующей части)
Что из всего этого следует?

Если хочется повышать качество печати, то надо слегка поменять подход к позиционирования шаговика в прошивках (позицоинирование у него не линейное, и это надо учитывать). По идее надо сделать умный closed-loop шаговик, которые будет в состоянии корректировать нелинейности при перемещении.

Здравая критика, и идеи приветствуются

Re: Абсолютный магнитный энкодер и шаговик

setar » 11 май 2019, 13:50

Похоже задача с точностью позиционирования и повторяемости уже не раз возникала перед конструкторами классических принтеров, особенно высокоточных струйников. И система обратной связи положения головы через энкодер плюс безколлекторный двигатель похоже там не с проста...

Re: Абсолютный магнитный энкодер и шаговик

pamalofeev » 12 май 2019, 23:05

Струйник всё-таки отдельная история, там нет необходимости в точном позиционировании, достаточно знать, где находится головка. Но я за ОС! Но ОС на ШД, мягко говоря не правильно, ИМХО..
Мне кажется, что 3д принтеры уже стали достаточно массовым явлением, и кто-то должен уже надоумить китайцев клепать нормальные bldc привода с ОС, вместо навешивания всех тех костылей на драйвера ШД для борьбы с шумом и пропусками.

Re: Абсолютный магнитный энкодер и шаговик

Myp » 13 май 2019, 18:58

alexxy писал(а):По идее надо сделать умный closed-loop шаговик

Ещё один? может уже всётаки пора на брушлесы перейти?

Re: Абсолютный магнитный энкодер и шаговик

alexxy » 14 май 2019, 10:37

Myp писал(а):
alexxy писал(а):По идее надо сделать умный closed-loop шаговик

Ещё один? может уже всётаки пора на брушлесы перейти?


Я как то пока не вижу принтеров с bldc + cl

Re: Абсолютный магнитный энкодер и шаговик

TedBeer » 14 май 2019, 13:22

Можете поучавствовать (2 дня осталось) - IVI: The Closed-Loop 3D Printer
Ну и проект уже 3 года как пробежавший по разным сайтам -
Add a closed loop control to your 3D printer and never worry about missed steps again
Хотя конечно по первой ссылке степперы, во втором обычный DC.

Re: Абсолютный магнитный энкодер и шаговик

Madf » 14 май 2019, 15:25

alexxy писал(а):Я как то пока не вижу принтеров с bldc + cl

Да их трудно найти: https://odriverobotics.com/


https://www.youtube.com/watch?v=FUh36RUHzdU

А принтеров нет потому как - дорого, основной прыжок всей этой "технологии" - это была цена.

Re: Абсолютный магнитный энкодер и шаговик

alexxy » 15 май 2019, 15:23

Про odrive я в курсе. Но для принтеров нет прошивок которые его умеют ;)

Re: Абсолютный магнитный энкодер и шаговик

Strijar » 15 май 2019, 15:55

alexxy писал(а):Про odrive я в курсе. Но для принтеров нет прошивок которые его умеют ;)


А зачем прошивка? Вот они же пишут - "Step/direction -- Existing motion controllers". Т.е. можно подключить как обычный драйвер шаговика.


Rambler\'s Top100 Mail.ru counter