Драйверы Trinamic + UART
Владимир ШумовЭта статья будет посвящена подключению драйверов шаговый двигателей через интерфейс UART. Только не задавайте вопрос, зачем это делать, если воспользоваться возможностью управления моторами во время печати все равно невозможно. У меня нет ответа на этот вопрос. Я действительно не знаю, зачем это делать.
Что дает подключение драйверов по UART?
Если кратко, то настроить работу драйвера и контролировать его работу. На практике для 3D принтера настраивается всего 2 параметра:
1. Предельный ток обмоток
2. Дробление шага
Оба эти параметра можно настроить снаружи драйвера аппаратно и не мудрить с программным управлением по UART. Для этого рядом с драйвером есть переменный резистор, задающий опорное напряжение (и как следствие ток обмоток мотора), и перемычки под драйвером (на платах 2 крайние левые).
Для любителей поэкспериментировать в прошивке SHUI доступны практически все регистры управления настройками драйвера. Подробнее о их назначении можно прочитать в спецификации драйвера. Ищется легко: TMC2209 datasheet.
Позже я еще вернусь к полезным опциям, которые доступны в SHUI, относятся они к диагностике системы.
Теория
Интерфейс UART имеет 2 интересующие нас сигнальные шины RX (receive, приемник) и TX (transmit, передатчик) . RX ведущего устройства соединяется с TX ведомого и наоборот.

В таком виде прием и передача сигнала могут идти одновременно. Но когда прикладной протокол разработан так, что прием и передача данных идут в режиме запрос-ответ, на шине можно сэкономить, оставив всего одно соединение.

Шина TX отделяется от обобщенной шины обмена резистором, чтобы не нагружать ее сильным сигналом 0 или 1 и таким образом блокировать передачу с другой стороны. Если прикладной протокол обмена содержит в себе данные об адресе устройства (его уникальном номере), а ведомое устройство можно настроить так, чтобы этот адрес был ему известен, на шину можно подключить несколько ведомых устройств. Все они будут принимать данные от ведущего, но отвечать (и принимать к исполнению) будет тот, чей адрес совпал с данными переданными в пакете обмена.
Драйверы Trinamic как раз используют протокол обмена по интерфейсу UART с одной аппаратной линией обмена и адресом в пакете обмена (важно). В спецификации приведена схема:

Назначение резистора 1k описано выше, а выводы драйверов MS1 и Ms2 как раз сообщают по какому адресу драйверы должны отвечать. Исходя из того, что выводов 2, и составить можно всего 4 комбинации их подключения к 0 или 1, такая схема позволяет подключить всего 4 адресуемых и управляемых драйвера на шину. Отдельно замечу, что обрыв (не подключенные) MS1, Ms2 воспринимаются драйвером, как логический 0, адрес #0.
❗️Внимание❗️ Адрес могут иметь только драйвера 2209 и 2226, драйверы 2208 и 2225 всегда имеют адрес #0. Поэтму, схемы, где к одному порту подключаются несколько драйверов работают только для 2209 и 2226.
Практика RN11, RN12, RN13 (SHUI-WIFI)
Схема подключения SHUI-WIFI
В прошивке SHUI встроены алгоритмы, которые позволяют подключить драйверы по UART на платах, где такое подключение штатно не предусмотрено: RN11, RN12, RN13. На сайте у Виктора, можно найти описания подключения. Все достаточно подробно. Здесь я разберу только магию дополнительных резисторов. Почему и зачем они.
Рассмотрим схему драйвера TMC2209 от TwoTrees:

На схеме нас интересует резистор R8 номиналом 20k. Составим схему влияния четырех подключенных драйверов на амплитуды шины обмены:

Резисторы R6 устанавливается на модуль WiFi, или эквивалентно на шину UART, а резистор R5 на один из драйверов, так, чтобы быть подключенным к +5. Это обеспечивает адресная перемычка. Поэтому драйвер должен иметь адрес #2 или #3 (подробнее у Виктора).
Контроллер нормально воспринимает сигналы амплитудой 5 вольт и никаких согласований не требуется. Если во время передачи от драйвера TMC2209 к микроконтроллеру никаких проблем не видно, так как сильный сигнал от драйвера напрямую соединен с микроконтроллером, то передача от микроконтроллера к драйверу имеет понижение амплитуды сигнала, так как проходит через делитель напряжения.
Драйвер Trinamic работает от 5 вольт. Микроконтроллер работает от 3.3 вольт, размах сигнала на шине при передаче от контроллера к драйверу не может быть выше 3х вольт. Сделаем расчет амплитуды сигнала, который получится на входе драйверов trimamic. 4 параллельных сопротивления 20к эквивалентны одному 5к. Резистор R5 пока учитывать не будем. Делитель 1/5 амплитуду сигнала 3 вольта снизит до 3/6 * 5 = 2,5
В спецификации драйвера не нашел, но в памяти всплывают цифры: для схем питающихся от 5 вольт, гарантированный уровень ноля должен быть ниже 0.6 вольт, гарантированный уровень 1 - 2.6. То есть сигнал, благодаря делителю напряжения, может уйти за пределы допустимых амплитуд, а значит не воспринят логикой драйвера.
Автор прошивки просто убрал резисторы R8 с драйверов, таким образом влияние входного сопротивления снизилось.
Поднять амплитуду сигнала можно и с помощью резистора устанавливаемого на драйвер. По схеме R5. Минус решения с резистором в том, что помимо амплитуды логической единицы, будет поднята и амплитуда логического ноля.
В качестве вывода. Я бы рекомендовал выполнять подстройку резистора R6, уменьшая его номинал, если часть драйверов не определяется.
Предварительно, надо убедиться, что всё подключение работает верно. Для этого оставить в слотах только один драйвер, потом постепенно добавлять по одному, каждый раз проверяя стабильность их определения детектором. И только доведя при подстройке значение резистора R6 до 470-500 ом, изменять резистор R5 в меньшую сторону. Для обладающих скиллом пайки smd компонент убрать с драйверов резисторы R8.
Практика RN30, RN20
Тип подключения Marlin или MKS
Тут все просто. Каждый драйвер подключен к своему порту и никаких согласований не требуется. Единственное, что надо учесть, это то, что прошивка SHUI предполагает, что все драйверы будут отвечать на адресе #0, то есть перемычки задающие адрес должны быть сняты.
Все 5 драйверов могут управляться по UART
Практика RN11, RN12, RN13 (SHUI-PORT)
В отличии от ранней схемы подключения SHUI-WIFI, где драйверы trinamic разделяли с модулем WiFi аппаратный UART, схема SHUI-PORT использует любой свободный порт на плате, не имеющий обвязки резисторами. Это может быть PB2, PE5, порты незанятого слота драйвера. Полудуплексный интерфейс UART реализуется программно, а порт переключается из режима TX и режим RX. Никаких обвязывающих резисторов, разделяющих сигналы не требуется, так как разделять нечего. Данная схема работает для 4х драйверов. Драйверы должны иметь последовательные адреса 0-3.
Электрическое подключение простейше. Все выводы UART драйверов в один пучок и на свободный порт, который надо будет указать в настройках маппинга портов - sw-uart.
В настоящий момент, я бы рекомендовал эту схему подключения, если у вас установлено 4 драйвера.
Практика RN11, RN12, RN13 (SHUI-WIFI 5 драйверов)
Выше приведенное описание подключения SHUI-WiFi является не полным. Подключение это работает совместно с SHUI-PORT, а это означает, что 4 драйвера можно подключить по схеме с аппаратным портом UART занятым WiFi, а пятый драйвер с адресом #0 по схеме SHUI-PORT. Следовательно подключение типа SHUI-WIFI(+PORT) в теории может обеспечит взаимодействие по UART c 8 драйверами, но ограничено пятью.
Если к дополнительному порту подключается только один драйвер, значит и 2225, 2228 могут быть использованы ;) в качестве этого одного 👹.
Польза от подключения
В версии прошивки от ... лето 2024 появился виджет, отображающий регистр состояния драйвера UART. Из наиболее интересного флаги:
- Обрыв, замыкание обмоток (A, B отдельно)
- Критический нагрев, перегрев драйвера
- Драйвер в работе, исполняются шаги
Мне кажется, эти флаги очень даже помогут найти проблему, если вдруг мотор начал работать как-то не так, или шлейф имеет не верную разводку пинов, обрыв, замыкание.
В целом, при наличии опыта диагностирования и настройки 3d принтера подключение драйверов по UART - развлечение из разряда "потому что могу" или "потому что уже есть".
Покидать камнями в автора статьи можно в группе SHUI-PUBLIC