Всем привет в этой статье хочу рассказать о опыте использования драйвера шагового двигателя TMC2209 V3 и технологии stallGuard.
stallGuard™ – технология обеспечивающая измерение нагрузки для шаговых двигателей, которая позволяет исключить из механики концевые выключатели. крайние точки определяются напряжением на двигателе.
Давайте начнем с предыстории. Разрабатывая достаточно сложный проект, связанный с перемещением, мы решили уменьшить количество проводов и датчиков. Я давно знал о возможности убрать концевые датчики и позиционировать прибор по изменению нагрузки благодаря моему опыту работы с 3D принтером. Моя модель принтера - ANYCUBIC Kobra(нажмите чтобы посметь на товар AliExpress). Хороши принтер с технологией stallGuard, и работает она тут прекрасно
И так для начало нужно было определиться с драйверами которые поддерживают данную технологию. В открытом доступе я нашел несколько вариантов: TMC2130, TMC2109, TMC2226, TMC5160 и TMC5161.
Мы начали с приобретения драйверов TMC2130, однако подключение их по протоколу SPI оказалось неудобным, требуя подключения 8 проводов для управления и передачи данных. Необходимыми были STRP и DIR для управления скоростью вращения и направлением, EN для включения и выключения драйвера, а также DIAG в качестве выхода концевика, остальные для протокола SPI. Кроме того, этот драйвер требовал постоянного поддержания напряжения на пине VMOT, что требовало дополнительной обвязки в виде диода Шоттки.
После тестирования этих драйверов мы решили использовать их в другом проекте. В конечном итоге у меня оказались драйверы TMC2209.
Хотя данный драйвер обладает несколько урезанным функционалом, он требует всего 5 проводов для подключения. Также есть возможность обойтись и 4 проводами, сохраняя функционал, используя программный опрос состояния нагрузки на валу. Однако предпочтительнее использовать выход DIAG.
Управление настройками и выводом данных драйвера осуществляется через однопроводной протокол связи UART.
Таким образом, возможно подключить до 4 драйверов, присвоив каждому свой номер. Для этого нужно сконфигурировать пины MS1 и MS2, подавая логический уровень на эти пины. В среде Arduino номера драйверов будут выглядеть так:
#define DRIVER_ADDRESS 0b00 // TMC2209 Driver address according to MS1 and MS2
#define DRIVER_ADDRESS_2 0b01 // Адрес второго драйвера
#define DRIVER_ADDRESS_3 0b10 // Адрес третьего драйвера
#define DRIVER_ADDRESS_3 0b11 // Адрес четвертого драйвера
При таком подключении можно задать ток, чувствительность stallGuard, деление шага, включить вращение изменять скорость и множество других параметров, а также запрашивать информацию о состоянии драйвера. Позвольте представить пример моего тестирования данного драйвера.
Изначально мы планировали полностью управлять этим драйвером через UART, но это оказалось затруднительным, так как не было ясно, как задать угол поворота в технической спецификации. Описание работы было на языке расы Гэкхо на техническом языке, очень не понятно. Поэтому в итоге мы добавили STRP, DIR и EN, а через UART настраивали параметры и включали stallGuard, считывая сигнал с пина DIAG как с концевика.
В итоге для проекта была сделана такая вот плата.
На данный момент все работает хорошо! В процессе изучения были сожжены 3 драйвера, проверяете схему и драйвера перед тем как их устанавливать! Данной технологией буду пользоваться. Если будут вопросы задавайте по возможности отвечу, на этом все подписываетесь!