Как стать автором
Обновить

Комментарии 15

спасибо огромное за статью!
только печально видеть, что вы используете драйвер L298N :(
есть же специально разработанные драйвера типа A4988
их преимущество в том, что они держат заданный ток в обмотках мотора
а в вашем случае моторы будут перегреваться

А недостаток в том, что A4988 перегрузки не держат в силу размера корпуса.

Неправильно ты, дядя Фёдор, платы крепишь, гвоздь надо в самый центр ардуины забивать, так держаться лучше будет.

Ну то есть похоже что библиотека NemaStepper является простейшей тонкой оболочкой для реализации типичной ардуиновской кооперативной многозадачности для управления степперами.


Это нормально, но меня удивила ваша фраза "Когда я искал решение моей проблемы, единственной подходящей библиотекой оказалась она". Это звучит примерно как "я искал, как увеличить переменную на 1, и перепробовав несколько, нашел только библиотеку Increment". У всех естественно возникнет вопрос: а чем вам простое ++i не подошло? Вот так же и здесь: зачем было искать библиотеку для кооперативного управления степпер-моторами (особенно если это потребовало усилий), когда это, мягко говоря, элементарное действие?

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

А вообще, управление несколькими моторами может оказаться неожиданно сложной задачей.
Навскидку:
Заголовок спойлера
— направление DIR нужно выставлять заранее, за несколько микросекунд до STEP/PUL
— STEP должен быть определенной, одинаковой, длины. Нельзя просто в цикле или прерывании его переключать 1 / 0, плюс к этому драйвер может ловить шаг по переднему или заднему фронту
— нужно гарантировать равномерность шагов (и равномерность ускорения). Если на простом Arduino это и решается просто, то уже на более сложном окружении ESP32 приходится идти на хитрые трюки, чтобы обеспечить равномерность. И это на 80 мегагерцах!
— шаги нужно выдавать одновременно на несколько моторов. На самом деле одновременно, а не по очереди. Нельзя делать смелые предположения, «а пусть один мотор запаздывает на несколько микросекунд от остальных».
— на «другом конце» может оказаться вообще не шаговый драйвер, а PID контроллер, например.

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


ага, хитрые трюки заключаются в использовании периферии.
reports that porting the code over to the ESP32 wasn’t terrible, but it wasn’t exactly a walk in the park either. The bulk of the code went by without too much trouble, but when it came to the parts that needed precise timing things got tricky
but when it came to the parts that needed precise timing things got tricky

Беда в том что почти все адуриновские библиотеки работают с внешним миром через программный ногодрыг. Для авр которая больше ничего кроме кручения двигателей не делает это вполне допустимо.
Для есп32 такой фокус уже не прокатывает. Однако у есп32 есть довольно богатая периферия, для которой точно выдержать тайминги импульсов никаких проблем не составляет. Для этого надо только почитать даташит и подумать :)

Зачем такие жуткие манипуляции со строками
      String command = ((String)inString[0] + (String)inString[1] + (String)inString[2]);
      String param;
      int len = inString.length();
      for (int i = 3; i < len; i++) {
        param = (String)param + (String)inString[i];
      }
если класс String имеет функцию substring()?

Так же зачем в цепочке из множества if() в случае нахождения совпадения команды проверять и остальные варианты, заведомо не совпадающие?
Для тех, кто захочет поиграть с шаговыми двигателями — не советую идти по пути автора.
Для этих целей есть более современные решения, основанные на step/dir драйверах.
A4988, DRV8825, TB6560 и пр.
В них есть ограничение тока, поэтому драйвер не превратится в барбекю + заметно проще и дешевле конструкция.
Ну, по мне так, l298n будет использовать попроще чем вышеперечисленные драйверы.
Ну, по мне так, l298n будет использовать попроще чем вышеперечисленные драйверы.

чем проще то? для A4988 достаточно двух проволок — DIR (направление) и STEP (шаг), для 298n надо четыре минимум.

Ну, кому как

Два провода для A4988, поддержка биполярных шаговых двигателей (это где 4 провода, а не 6), встроенный контроль тока (чтобы не пожечь двигатель и сам драйвер). В общем все то, чего не хватает дубовой l298n из прошлого века.

В l298n есть много неэффективностей. Но не ясно при чем здесь биполярные двигатели. l298n прекрасно поддерживает биполярные двигатели.

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.