Marlin 1.1 и TMC2208 - программная настройка тока и шагов

Подписаться на 3Dtoday
zlebnik
Идет загрузка
Загрузка
04.12.17
1378
26
печатает на RepRap
RepRap
15
Заказал на 11.11 китайские TMC2208, и мне очень повезло - совсем недавно появился форк Marlin 1.1.x с поддержкой UART-конфигурации этих драйверов (и SPI-конфигурации их братьев - TMC2130): https://github.com/teemuatlut/Marlin

Все бы ничего, если не одно но - не компилируется именно с TMC2208, и все тут.
Оказалось, что библиотека для TMC2208 совсем чуть-чуть несовместима с этой прошивкой, поэтому небольшой допил исходного кода - и все работает! (а, еще пришлось поправить pins_RAMPS.h в форке - он почему-то был безумно сломан, поэтому ничего не работало). Ссылка на модифицированную версию: https://yadi.sk/d/m5LQ8A-X3QJnFp. Внимание, там конфигурация все-таки больше для моего принтера, поэтому не забудьте проверить :)

Как настраивать TMC*-драйверы в прошивке:

В Configuration_adv.h ищем строчки:
//#define HAVE_TMC2130
//#define HAVE_TMC2208

Раскомментируем нужные и в следующей секции уже указываем, где именно какие драйверы стоят - на X/Y/Z/E*.
Далее - указываем использовать/нет интерполяцию (то есть для Arduino будет драйвер с 1/16 микрошагами, а для двигателя - 1/256), микрошаги для Arduino (TMC2130/2208 программно умеют настраиваться до 1/256), ток на шаговике (указывается среднеквадратичный; для понимания, какой это максимальный ток - надо это умножить на 1.41), использовать/нет StealthChop. Для X/Y оси я указал 16 микрошагов и 1200 mA ток - это соответствует ~1.7A максимального тока.

Заливать прошивку лучше с помощью PlatformIO- подтягивает автоматически нужные библиотеки прямо в проект, никакие платы/порты выбирать не нужно, все уже написано. Если при помощи Arduino IDE заливать - это нужно установить GitHub-версию библиотеки отсюда: https://github.com/teemuatlut/TMC2208Stepper

У меня эти драйверы тягают X/Y на Hypercube Evolution, проблем пока не успел увидеть. Достаточно тихие, чтобы я задумался о смене вентиляторов :)
Подписаться на 3Dtoday
15
Комментарии к статье

Комментарии

4 Дек 21:19
2
Спасибо, как раз вовремя. Такие же заказал. Жду. И тут вы с плюшками )
4 Дек 21:53
2
А для 32-битной arduino due порт библиотеки есть, не знаете ? Хотелось бы к кимбре прикрутить такую плюшку ...
4 Дек 22:27
2
В теории, под Due сами библиотеки (для 2130 и 2208) завестись должны, так что поприкручивать попробовать можно
5 Дек 10:39
2
Проглядел навскидку код библиотеки - навскидку там просто общение по serial-у. Так что да, библиотека компилится (пробовал один из примеров). Единственно, что всплыло - в Library.properties есть строка architecture=avr и компилятор предупреждает, что либа для другой архитектуры, но компилит без ошибок. Можно поставить architecture=* и этот warning уйдет.
5 Дек 00:25
1
Так а сами драйвера надо дополнительно подключать к рамсу ? Сам уарт порт.
5 Дек 00:32
2
Нет, он на одной из ног и это используется
5 Дек 01:55
2
Смотрел даташит на 2208. Последовательный порт у них разведен на ногу ресет на плате рампс,а этот вывод как известно соединет со слип, и никуда к ардуине не подключенсидит. Так что как происходит настройка, мне непонятно. У меня стоят 2208.
5 Дек 10:47
2
На картинке с imgur-а ноги uart выведены "наверх" и подключаются к рампсу дюпонтами. Причем каждый драйвер к отдельной ноге. Если же почитать даташит на 2208, то там есть интересный момент - в режиме write-only на одну ногу можно посадить хоть все драйвера 2208 и тогда они одной командой сконфигурятся одинаково.
Ну а вообще у 2208 read- и write-входы объединены, к двум портам контроллера одна нога 2208 подключается одновременно, но через резистор (10к чтоли). И для чтения, естественно, нужно либо расселять на разные serial-ы, либо как-то коммутировать. В общем случае получается, что для одного драйвера нужны 2 пина контроллера (чтение/запись). Читать, кстати, может быть полезно - можно настроить ахтунг при перегреве. Если это не нужно, можно использовать только 1 пин. И кстати, библиотека, вроде бы, все это нормально переварит - и 1 пин на всех на запись и по 1 пину каждому тоже на запись и по 2 пина для чтения/записи. Нужно будет только их определить ну и правильно подключить.
ЗЫ: на картинке очень похоже, что 3 драйвера подключены раздельно, но только для записи ...
5 Дек 11:00
1
Про эту картинку речь ?)
5 Дек 11:07
1
ага) Но только с учетом того, что там 3 картинки - что паять, что "отломать" и эта - куда вставлять))
6 Дек 23:47
1
Посыпаю голову пеплом - у меня они так удачно заработали, что я думал, что они программируются :(
Поизучал распиновки - получается, что читать можно совсем с малого "свободного" (при наличии экрана) числа ног, и Ymin/max - как раз одни из них.
Но в целом на них можно только писать, поэтому можно использовать другие ноги меги.
Спасибо большое за указание на такой косяк!
7 Дек 12:19
1
Ну это вам в первую очередь спасибо, что нашли и "опубликовали" ссылку на проекты teemuatlut, особенно библиотеку для работы с 2208 :) Мысль "ай как хорошо бы рулить дровами из прошивки" периодически мелькала, но все что-то мешало и отвлекало. А тут - готовая либа. Минус только в том, что плату драйвера все же нужно "обработать напильником", чтобы получить read-write доступ ну и (лично для меня) придется патчить mk4duo (marlinkimbra.it), чтобы эта прошивка поддерживала 2208.
Попробую пока на коленке собрать схему и погонять примеры из комплекта с билиотекой ...
10 Дек 18:33
1
Попробовал добавить поддержку tmc2208 в прошивку MarlinKimbra простым методом - копирование кода из марлина (проект teemuatlut) в секции, аналогичные tmc2130. Но наступил на грабли - в проекте teemuatlut для управления драйверами используется библиотека SoftwareSerial, чтобы можно было каждому драйверу выделить свой софтовый уарт. Но для arduino due такой библиотеки нет, поэтому "прямая аналогия" потерпела полную неудачу. У due есть 4 "железных" уарта, причем один из них занят самой прошивкой для управления. Остаются еще 3 уарта, но их не так-то просто использовать в том виде, как это сделано в "том марлине". Короче, более-менее нормальная поддержка пока есть только для 8-битных прошивок Марлин. Для due ИМХО лучше использовать "коммутатор" из даташита для 2208 (77hc4066). Тогда все драйвера будут подключаться к одному hardware serial-порту, а выбор конкретного драйвера будет осуществляться через 77hc4066. Тогда даже пинов будет нужно столько же или даже меньше - 2 для уарта и по 1 пину для каждого подключаемого драйвера. Проблем со схемой особо нет. А вот с кодом все сложнее - для 32 бит все слишком другое и совместимости с 8 битами толком не будет ...
10 Дек 18:40
0
в секции, аналогичные tmc2130
Давеча я запилил пост от Томаса на эту тему - проверьте раздел и изменения - для самоконтроля -
не всё там просто:

http://3dtoday.ru/blogs/ski/learn-3denglish-122-thomas-modic-dsproxy-or-sounds-trinamic-on-classic/
С Уважением,
Ski.
10 Дек 18:41
0
сами драйвера надо дополнительно подключать к рамсу
Найдете метод распайки от Томаса у меня - вот здесь:

http://3dtoday.ru/blogs/ski/learn-3denglish-122-thomas-modic-dsproxy-or-sounds-trinamic-on-classic/
С Уважением,
Ski.
10 Дек 22:11
1
Эмоциональное видео :) Ну а если серьезно, то сухой остаток - драйверами 2130 можно рулить из прошивки Марлин. Я, правда, уже основательно прошерстил код teemuatlut и могу сказать, что в его форке 2130 поддерживает и установку тока и смену режима и автоматический подбор тока и "температурный ахтунг" и вроде как даже остановку без концевика sensorless homing (фишка stallGuard). А вот для 2208 не все это можно сделать, т.к. у него нет, например, stallGuard-а. И интерфейс общения контроллера с драйвером другой (uart у 2208 вместо spi у 2130), из-за чего форкнутый Марлин использует плохо портируемый код.
Кстати, если посмотреть внимательно, то опция автоматической настройки тока довольно опасная, как мне показалось. Потому что оценивает допустимый ток по температуре чипа. Точнее, даже не по температуре, а по границе - перегрелся или нет. И эта граница довольно высокая - минимум 120 градусов у 2208. Как-то стремно греть чип до такой температуры :)
В общем, т.к. у меня есть только ардуина due (32 бит) с шилдом, то ставить буду, видимо, Марлина 2.0 или его форк (например, mk4duo). А "поддержку" для 2208 сделаю просто фрагментом кода для своего конкретного случая, потому что с трудом представляю, как это можно впилить в код, который может компилиться и для 8бит и для 32бит.
10 Дек 22:27
0
Эмоциональное видео
Очень рад, что Вам - понравилось.
Там я ещё пару комментов отметил - в том числе и по Вашим словам о 2208.

Я бы ещё одну ложку дёгтя - показал...

Надо бы часть расчётов - делать - на "упреждение".
А это - возможно пожалуй только на 32-х битах.

Так что к Вашим словам про
.. с трудом представляю, как это можно впилить в код, который может компилиться и для 8бит и для 32бит...
... могу лишь высказать предположение - что у Вас в среде 8-битных Ардуино Мега - будет больше поклонников каждый со своими вопросами (и может быть - с дельными подсказками),
а в среде 32-битных - могут даже и "денежки" появится, за некоторую заказную "проприетарность", но таких разработчиков очень мало,
и за советом идти очень далеко.

Так что если делаете "мод", то конечно-же отладка - по собственной методике, две одинаковые механики с мозгами разной разрядности.
Ну и памятка - одному человеку, пусть даже очень талантливому, осуществлять поддержку ДВУХ ПРОШИВОК РАЗНОЙ разрядности - практически невозможно.
5 Дек 00:35
2
Обнаружил, что включение 2208 на оси Z ломает концевик Y - еще одна ошибка в pins_RAMPS.h. Вот исправленный: https://yadi.sk/d/bD0Z9Q3G3QKMAD

Нужно закомментировать:

#define Z_HARDWARE_SERIAL Serial3
и
#define Z2_HARDWARE_SERIAL Serial1
5 Дек 10:33
1
а как узнать что конфигурация загрузилась в драйвер ? Я поставил ток по осям X Y = 150 что должно было вызвать пропуски, ничего не изменилось, то есть конфигурация не была загружена.

Надо ли при этом джамперы ставить/снимать с РАМПСа?
5 Дек 17:51
1
А драйвер вобще в программируемом режиме?
Если обычный режим, то ток устанавливается резистором по старинке
5 Дек 18:41
1
Интересно)) А как это понять ?)
5 Дек 19:19
1
ну это, посмотреть на него, как запаяны перемычки на брюхе
5 Дек 17:47
1
Зачем форк?
Оно и в официальной версии поддерживается, причём уже достаточно давно, вроде уже с прошлого года.
5 Дек 20:04
1
В официальном Марлине tmc2208 не поддерживается для управления из прошивки. Есть секция для 26хх чтоли, и все.

И в статье, судя по всему, автор забыл упомянуть, что в стоке на плате драйвера контакт uart ни к чему не подсоединен. Чтобы вывести его на пин, нужно запаять перемычку (см. https://imgur.com/a/T3Xgk). Схема есть тут: https://github.com/watterott/SilentStepStick/blob/master/hardware/SilentStepStick-TMC2208_v10.pdf или https://github.com/watterott/SilentStepStick/blob/master/hardware/SilentStepStick-TMC2208_v11.pdf. И PDN_UART можно вывести на 4 (в 10й версии платы) или 4 или 5 вывод (в 11йверсии) разъема JP1 платы.

При этом перемычки на рампсе становятся необязательны, т.к. микростеп задается через уарт. И подбор тока через Vref тоже становится необязательным - им тоже можно рулить через уарт.
6 Дек 07:34
1
действительно, 2208 что-то нет пока, хотя тот же 2130 уже давно есть.
11 Дек 16:53
0
Просто оставлю здесь эту ссылку: https://github.com/MarlinFirmware/Marlin/pull/8712

ЗЫ: для 8-битного Марлина готова поддержка 2208 в фицияльной версии :) Может и в 2.0 запилят ...

Для написания комментариев, пожалуйста, авторизуйтесь.

Читайте в блогах

Coming soon

Бесплатный Fusion360 (САПР)

барбос и его тень в blender

3Dtoday за 60 секунд от 15 декабря

Обзор 3D-принтера NABU mini или как сделать 3D-принтер правильно!

Эксклюзивное интервью: как сделать собственный скейтборд с помощью генеративного дизайна и 3D-печати