Комментарии 15
только печально видеть, что вы используете драйвер L298N :(
есть же специально разработанные драйвера типа A4988
их преимущество в том, что они держат заданный ток в обмотках мотора
а в вашем случае моторы будут перегреваться
Ну то есть похоже что библиотека NemaStepper является простейшей тонкой оболочкой для реализации типичной ардуиновской кооперативной многозадачности для управления степперами.
Это нормально, но меня удивила ваша фраза "Когда я искал решение моей проблемы, единственной подходящей библиотекой оказалась она". Это звучит примерно как "я искал, как увеличить переменную на 1, и перепробовав несколько, нашел только библиотеку Increment". У всех естественно возникнет вопрос: а чем вам простое ++i
не подошло? Вот так же и здесь: зачем было искать библиотеку для кооперативного управления степпер-моторами (особенно если это потребовало усилий), когда это, мягко говоря, элементарное действие?
А вообще, управление несколькими моторами может оказаться неожиданно сложной задачей.
Навскидку:
— 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 будет использовать попроще чем вышеперечисленные драйверы.
чем проще то? для A4988 достаточно двух проволок — DIR (направление) и STEP (шаг), для 298n надо четыре минимум.
Ну, кому как
Управление несколькими шаговыми двигателями Nema 17 одновременно или NemaStepper