Необходима помощь в управлении несколькими шаговыми двигателями на arduino UNO

Я совершенно новичок в Arduino, но имею хороший опыт работы с Raspberry Pi и микрочипами.

Моя проблема в том, что мне трудно управлять многими шаговыми двигателями одновременно. Я использую библиотеку AccelStepper(https://www.airspayce.com/mikem/arduino/AccelStepper/index.html). Код довольно прост, и я заставил его отлично работать в течение длительного времени с тремя двигателями, однако у него были проблемы с запуском более трех двигателей, у меня сейчас подключено 5 двигателей, и все они вибрируют или пропускают шаги.

Кто-нибудь может помочь мне заставить работать 5 моторов.

Вот код, который я запускаю:

#include <MultiStepper.h>
#include <AccelStepper.h>
#include <Stepper.h>

AccelStepper stepper1(AccelStepper::FULL4WIRE, 8, 10, 9, 11);
AccelStepper stepper2(AccelStepper::FULL4WIRE, 4, 5, 6, 7);
AccelStepper stepper3(AccelStepper::FULL4WIRE, 12, 13, 2, 3);
AccelStepper stepper4(AccelStepper::FULL4WIRE, A0, A1, A2, A3);
AccelStepper stepper5(AccelStepper::FULL4WIRE, 0, 1, A4, A5);

void setup()
{  
    //Serial.begin(9600);
    pinMode(0, OUTPUT);
    pinMode(1, OUTPUT);
    pinMode(A0, OUTPUT);
    pinMode(A1, OUTPUT);
    pinMode(A2, OUTPUT);
    pinMode(A3, OUTPUT);
    pinMode(A4, OUTPUT);
    pinMode(A5, OUTPUT);
    Serial.print(" a0:");
    Serial.print(digitalRead(A0));
    stepper1.setMaxSpeed(600.0);
    stepper1.setAcceleration(50.0);
    stepper1.moveTo(3240);
    
    stepper2.setMaxSpeed(50);
    stepper2.setAcceleration(1);
    stepper2.moveTo(800);
    
    stepper3.setMaxSpeed(300.0);
    stepper3.setAcceleration(200.0);
    stepper3.moveTo(1500); 

    stepper4.setMaxSpeed(300.0);
    stepper4.setAcceleration(200.0);
    stepper4.moveTo(1500000);

    stepper5.setMaxSpeed(300.0);
    stepper5.setAcceleration(200.0);
    stepper5.moveTo(1500000);
}
void loop()
{
    // Change direction at the limits
    
    if (stepper1.distanceToGo() == 0)
        stepper1.moveTo(-stepper1.currentPosition());
    if (stepper2.distanceToGo() == 0)
        stepper2.moveTo(-stepper2.currentPosition());
    if (stepper3.distanceToGo() == 0)
        stepper3.moveTo(-stepper3.currentPosition());
    if (stepper4.distanceToGo() == 0)
        stepper4.moveTo(-stepper4.currentPosition());
    if (stepper5.distanceToGo() == 0)
        stepper5.moveTo(-stepper5.currentPosition());
    stepper1.run();
    stepper2.run();
    stepper3.run();
    stepper4.run();
    stepper5.run();
}

Я не думаю, что проблема заключается в коде, потому что, как я уже говорил, он прекрасно работал с тремя двигателями, а код для 4 и 5-это просто копипаст.

Я думаю, что это может быть проблема с питанием, у меня есть настенная розетка, которая может преобразовываться в диапазон постоянного напряжения от 3 до 12, при 5 В двигателям явно не хватает мощности для работы. При 6 В они действительно включаются, но работают совсем плохо(как я уже говорил выше), а при 7,5 В Arduino, кажется, постоянно перезапускается: двигатели запускаются всего на секунду.

Вот двигатели 28BYJ-48 с драйверами, которые я купил у amazon: https://www.amazon.com/gp/product/B01CP18J4A/

Может ли кто-нибудь объяснить мне, почему он перезапускается при 7,5 вольтах? Я читал, что минимальная мощность должна быть около 7 вольт, так что для меня это не имеет смысла.

Цените любую помощь, которую я могу получить, пожалуйста, помните, что я новичок в этом деле. Спасибо.

, 👍2

Обсуждение

Как это все устроено? Сколько мощности может обеспечить ваш источник питания и сколько нужно двигателям?, @Mat

@Mat Двигатели подключаются к драйверам подключи и играй, а провод от драйверов к плате можно увидеть в строках 4-7 кода. Питание для плат поступает от 5 В-контактного разъема Arduino, и заземление также поступает от Arduino. Amazon утверждает, что двигатели рассчитаны на 5 В. Наконец, если вы прочитаете мой абзац выше, вы сможете увидеть, как работает мой источник питания, @KidWithComputer

Ты говоришь только о вольтах. Этого недостаточно, вам тоже нужны усилители для передачи ватт (т. Е. Мощности)., @Mat

контакты "0 и" 1 используются для "Последовательного", @jsotola

@jsotla, они используются только для последовательного, если в вашем коде есть оператор serial begin, @KidWithComputer

@Mat Достаточно ли у меня усилителей для запуска как Arduino, так и двигателей?, @KidWithComputer