Невозможно управлять двигателем с помощью ESP32 с помощью переключателя логического уровня.

Я использую ESP32, микрошаговый двигатель TB6600 и шаговый двигатель Nema 23. Я пытаюсь управлять двигателем с помощью esp32, но TB6600 требует сигнала 5 В. Я попытался исправить это с помощью преобразователя логических уровней ( в частности, это), но когда я пытаюсь управлять двигателем, я слышу очень легкий гул от двигателя и никакого движения.

Контроллер двигателя и двигатель работают, как я тестировал с помощью Arduino Uno.

void setup() {
  pinMode(15, OUTPUT);
  pinMode(16, OUTPUT);
  pinMode(17, OUTPUT);
  digitalWrite(16, HIGH);
}

void loop() {
 
  digitalWrite(15,LOW);
  digitalWrite(15,HIGH);
  digitalWrite(17, HIGH);
   delay(200);
}

Изображение схемы Схема Arduino

Принципиальная схема Принципиальная схема

, 👍0

Обсуждение

Судя по всему, входы ENA, DIR и PUL являются светодиодами оптопар: https://www.dfrobot.com/product-1547.html. Я думаю, вам не нужен этот переключатель логического уровня, который в любом случае предназначен только для очень малых токов. Странно, однако, что указано 5в. Проводка в приведенной мной ссылке подразумевает, что НИЗКИЙ включен, а ВЫСОКИЙ выключен. Убедитесь, что любой пример кода, который вы используете, соответствует вашей проводке., @6v6gt

Какой ток необходим TB6600 на входах? Двунаправленные переключатели уровня не могут обеспечить большой ток на стороне высокого напряжения, поскольку они в основном закорачивают НИЗКИЙ уровень через МОП-транзисторы (ВЫСОКИЙ уровень подтягивается резисторами в несколько килоом к ВН)., @KIIV

Когда вы подключаете цепь, замечаете ли вы, что ваш двигатель нагревается? Кроме того, почему вы устанавливаете контакт 17 на высокий уровень в своем контуре?, @jonathan

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


2 ответа


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

0

Я понял проблему: переключатель логического уровня, который я использовал, предназначен для датчиков I2C и, следовательно, способен преобразовывать только сигналы с открытым стоком и не может выполнять преобразование уровня push/pull, то есть он не может предоставить данные сигнал на микрошаговый двигатель. Я заменил переключатель на переключатель, способный выполнять push/pull перевод, в частности Это

,

0

Я не использовал такую систему, поэтому просто предполагаю. Но в Руководстве написано:

Когда «EN» находится в действительном состоянии, двигатель находится в свободном состоянии (автономный режим). режим). В этом режиме вы можете регулировать положение вала двигателя вручную. Когда «EN» в недействительном состоянии двигатель будет находиться в режиме автоматического управления. (Источник).

Не совсем понятно, что имеется в виду под «вручную». Но вы установите вывод 17 на ВЫСОКИЙ уровень, и результат будет соответствовать описанию. Может быть, установить 17 на НИЗКИЙ?

С другой стороны: между digitalWrite(15,LOW); и digitalWrite(15,HIGH); нет задержки/времени. Это создаст очень короткий импульс, который может быть слишком коротким для перевода электроники переключения уровня. Может помочь некоторая delay() или эквивалентный неблокирующий код между двумя операциями записи.

,

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