Беспроводная (но быстрая) передача вывода STEP и DIR от Arduino к шаговому драйверу

Очень короткая версия: Ищете способ беспроводного получения сигналов STEP и DIR (только эти два сигнала) от Arduino к шаговому драйверу DRV8825 примерно в метре:

Arduino -> STEP и DIR IO контакты ->> передатчик ) ) ( ( приемник ->>> DRV8825>>>

Длинная версия: Для проекта я установил Arduino на деревянную плату. Arduino имеет экран GRBL (в основном это плата прорыва для четырех драйверов двигателей для шаговых двигателей (в моем случае DRV8825)). К этой установке подключен шаговый двигатель. Источник питания (НЕ на деревянной плате) для двигателя составляет 24 В, и я использую понижающий преобразователь, чтобы снизить его до 5 В для Arduino. Вся эта плата вращается, и 24 В передается на нее с помощью специального скользящего контакта с двумя контактами (24 В и gnd).

Теперь все это работает нормально, но проблема вот в чем: у меня есть второй двигатель, которым я хочу управлять с того же экрана GRBL. Но этот мотор НЕ на вращающейся плате. Если я помещу драйвер двигателя рядом с этим двигателем и запитаю его от того же источника питания (параллельно скользящему контакту) У меня есть все, что мне нужно, кроме сигналов STEP и DIR от Arduino.

Потому что я никак не могу добавить еще 2 контакта к скользящему контакту (плюс сигнал, вероятно, будет слишком шумным в любом случае) Я ищу способ в основном добавить беспроводной мост между выходными контактами STEP и DIR на Arduino и входными контактами STEP и DIR на драйвере двигателя. Двигатель и драйвер находятся примерно в метре от Arduino, так что уровень сигнала не должен быть проблемой.

Я считаю, что эти хорошо известные передатчики 433 МГц слишком медленны для чего-то подобного, но я читал, что большинство модулей nRF24L01 работают быстрее. Прежде чем заказать некоторые из них для тестовой установки, мне было интересно, знает ли кто-нибудь уже, может ли это сработать или нет, знает ли полезную альтернативу или имеет некоторые предложения по ключевым словам для поиска при попытке найти другое решение. Я могу найти много "беспроводных" драйверов двигателей в Интернете, но большинство из них являются полностью автономными устройствами, где микроконтроллер находится на плате, он просто управляется через Wi-Fi/bluetooth.

, 👍5


1 ответ


-1

(Переместился в "ответ" для пространства; это определенно не ответ. Извините всех!)

Незначительные моменты:

  • Это экран контроллера двигателя; GRBL находится на Arduino.
  • Вам понадобится контроллер двигателя на каждом двигателе; не ясно, понятно ли это.
  • Я бы также рассмотрел оптическую связь, хотя у нее есть другой набор проблем.

В конечном счете, я мог бы подойти к этому по-другому: вместо того, чтобы один GCode box пытался синхронизировать и контролировать себя и (по существу) независимую систему, я бы рассмотрел наличие одного GCode box (GBOX), управляющего двумя независимыми системами (M1, M2).

GBOX будет ноутбуком/RPi/чем угодно, что обрабатывает "реальный" GCode. Основываясь на командах GCode, которые в конце концов просто говорят двигателям, что делать, я бы отправил каждую команду GCode в соответствующую систему M1/M2.

Однако, насколько хорошо это работает, во многом зависит от GCode; Диагонали, дуги и т.д. Требуют сотрудничества с двигателем, Поэтому такая команда, как G02 X2Y0 R2, Может вызвать проблемы, Даже если мы можем вытащить данные X и Y. Как генерируется GCode имеет значение, но обратите внимание, что GBOX также может интерполировать "хитрые" команды, чтобы разбить их на что-то, что может понять двухцелевая система.

"Смысл" движения также имеет значение: там "становится из одного места в другое" и "перемещение из одного места в другое при рисовании линии": Первое может (или не может) требования вокруг, что на самом деле означает, что в то время как последняя требует координации движения, и даже если вы разбиваете команды правильно, даже доли секунды разница в получении/время работы будет иметь значения. Конечно, вы также можете передавать команды обоих двигателей обоим двигателям и полагаться на синхронизацию или перекрестную синхронизацию для запуска их соответствующих команд.

В конце концов , это может быть единственным реальным способом сделать эту работу, чтобы "независимые" системы могли синхронизироваться друг с другом, чтобы они знали, что они (а) готовы к запуску и (б) запускаются одновременно. GBOX также может потенциально обрабатывать эту синхронизацию, поскольку команда "Go!!!" является примерно такой же детерминированной, как и она, особенно если M1/M2 может одновременно получать широковещательный сигнал.

https://www.zikodrive.com/motor-control-case-studies-and-applications-2/a-remote-controlled-and-synchronised-stepper-motor-controller/ (очень) кратко обсуждает вопросы синхронизации удаленных двигателей, где их относительное положение имеет значение.

,

Не то чтобы я задумывался над подобными вещами :p У нас был аналогичный подход к аналогичному, но не беспроводному проекту, но требуемое управление движением было ограничено по объему, а синхронизация была тривиальной, потому что вторая система была ограничена по объему и не требовала одновременного взаимодействия с основной системой., @Dave Newton

Этот сигнал "ВПЕРЕД" звучит как отличная идея. Я могу создать две настройки, заставить их использовать один и тот же GCode, но подключать только соответствующие двигатели. Это должно гарантировать, что они используют правильное время (поэтому двигатель X будет ждать двигателя Y). В моем G-коде много прямых движений, так что я мог бы даже выполнять их построчно с промежутками между ними, чтобы предотвратить медленно увеличивающееся смещение. Я позаимствовал пару NRF24L01, поэтому я собираюсь быстро попробовать идею моста ввода-вывода, но также мог бы использовать их для синхронизации двух настроек. Спасибо за предложение!, @Jasper