Возможно ли связать выводы направления шагового двигателя?

Я собираю 3D-принтер. Мне было интересно, будет ли целесообразно вместо запуска отдельных линий шага и направления для каждого драйвера шагового двигателя связать все направляющие штифты вместе и просто задать глобальное направление сразу же, как я буду подавать импульсы на каждую линию шага.

Это освободит некоторые ценные контакты микроконтроллера для других целей.

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

Может ли кто-нибудь более опытный в этом деле поделиться со мной своей мудростью?

, 👍4


3 ответа


Лучший ответ:

3

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

Одна оговорка, которая может стать препятствием, заключается в том, что направляющий штифт должен оставаться постоянным для всего направления шагового импульса, что не сработает, если вам нужно сделать шаг на втором двигателе до того, как импульс закончится в первом. Но я бы не ожидал, что это так. Я бы ожидал, что значение направляющего штифта будет выбрано на краю шагового импульса и проигнорировано после этого. Проверка того, так ли это, потребует либо экспериментов, либо поиска в листах данных.


,

0

Нет, вы потеряете доступ к обычным слайсерам

3D-принтер создает 3D-объекты, накладывая друг на друга 2D-пути. Допустим, мы хотим напечатать треугольник с угловыми точками (0,0), (1,1), (2,0)

Для этого мы можем использовать следующий блок кода:

G90 // абсолютный режим
G0 X0 Y0 F1000 // перейти к началу координат
G91 // относительный режим
G1 X1 Y1 // перейти к (1,1)
G1 X1 Y-1 // перейти к (2,0)

Есть причина, по которой я использовал относительный режим: ТАК на самом деле даются команды двигателям. Вы либо посылаете сигнал по линии направления, либо нет, и вы делаете это из-за знака порядка движения. Как показывает простой пример выше, эти две абсолютно должны быть независимыми, чтобы разрешить любое движение, в котором одна из координат XY уменьшается, а другая увеличивается.

Только если вы также напишете слайсер, запрещающий любую команду движения с не тем же знаком, вы сможете связать их. Пользовательское написание поведения слайсера не стоит освобожденных пинов. Вы также покупаете это небольшое удобство ценой скорости: шагание по лестнице также печально известно своей медлительностью, поскольку у вас есть гораздо больше строк, выполняемых одна за другой - вместо простых 2 строк кода для вершины треугольника.

,

3

Я еще не собрал принтер и не приобрел все необходимое оборудование, но я провел минимальный тест с двумя драйверами и двумя двигателями.

Кажется, все работает отлично. Я устанавливаю один общий штифт направления перед импульсом каждого шагового штифта и могу вращать двигатели одновременно в одном и том же или противоположных направлениях.

Проверяя технические характеристики нескольких шаговых драйверов, очевидно, вывод направления выбирается один раз в начале каждого шага:

Указанные минимальные времена сигнала различаются:

Водитель Высокий шаг Ступенька пониже Настройка каталога Удержание направления
A4988 1000 нс 1000 нс 200 нс 200 нс
DRV8825 1900 нс 1900 нс 650 нс 650 нс
TMC2208/9 100 нс 100 нс 20 нс 20 нс

Я не знаю, может ли «емкость шины» быть проблемой на такой частоте, но это увеличило бы минимальное время. Каждая прямая запись в регистры порта 16 МГц Arduino Nano, которую я использую, занимает минимум 2 цикла = 125 нс. При некоторых аппаратных настройках определенно потребуется вставить задержку между установкой направления и шагом импульса, хотя мои драйверы TMC, похоже, вполне довольны отсутствием дополнительной задержки, поэтому двигатели продолжают (фактически) шагать в унисон.

Я посмотрел исходный код Teacup и, похоже, макросы для записи направления и шага каждого двигателя изолированы в одном месте (pinio.h), поэтому, надеюсь, изменения для вставки хака будут минимальными.

Это здорово, потому что это дает мне 3 бонусных контакта MCU.

,