Одновременное управление 4-мя шаговыми двигателями

Имеется скетч для управления шаговым двигателем с библиотекой AccelStepper

#include <AccelStepper.h>

//Пины управления двигателей
#define step1  2
#define dir1   3
#define en1    4

//Пин кнопки
#define start_button 8

AccelStepper stepper1(1, step1, dir1);  // Инициализация шагового двигателя 

bool flag = false;                      // Флаг для определения активации рабочего режима

void setup() {
  pinMode(start_button, INPUT_PULLUP);  // Настройка пина кнопки как вход с подтяжкой к питанию
  pinMode(en1, OUTPUT);                 // Настройка пина включения двигателя 
  digitalWrite(en1, HIGH);              // Выключение двигателя 
  
}

void loop() {
  if (!digitalRead(start_button)) {     // Если кнопка нажата
    digitalWrite(en1, LOW);             // Включаем двигатель 
    flag = true;                        // Устанавливаем флаг активации рабочего режима
    delay(2800);                        // Задержка перед началом движения после нажатия кнопки
  }

  if (flag) {                           // Если флаг активации рабочего режима установлен
        
    // Первый этап двигателя 1
    stepper1.setMaxSpeed(5000);          //Установка максимальной скорости
    stepper1.setAcceleration(10000);     //Установка ускорения, в шагах в секунду за секунду
    stepper1.move(-9040);                // Количество шагов
    while (stepper1.distanceToGo() != 0) {
      stepper1.run();
    }
    
    delay(1000);                         // Пауза между движениями
    
    // Второй этап двигателя 1
    stepper1.setMaxSpeed(1200);          //Установка максимальной скорости
    stepper1.setAcceleration(4000);      //Установка ускорения, в шагах в секунду за секунду
    stepper1.move(6040);                 // Количество шагов
    while (stepper1.distanceToGo() != 0) {
      stepper1.run();
    }

    delay(1000);                         // Пауза между движениями
    
    // Третий этап двигателя 1
    stepper1.setMaxSpeed(3000);          //Установка максимальной скорости
    stepper1.setAcceleration(40000);     //Установка ускорения, в шагах в секунду за секунду
    stepper1.move(3000);                 // Количество шагов
    while (stepper1.distanceToGo() != 0) {
      stepper1.run();
      
    }
    
    delay(1000);                          // Пауза после завершения движения
    flag = false;                         // Сбрасываем флаг активации рабочего режима
    digitalWrite(en1, HIGH);              // Выключаем двигатель 
  }
}

Необходимо доработать для одновременного управления 4 шаговыми двигателями, у каждого двигателя свои параметры (скорость, разгон/торможение, количество шагов, количество этапов, пауза между этапами). Кнопка запуска одна. Не обязательно использовать AccelStepper, но нужен плавный разгон и торможение. Максимальная скорость для двигателя 1 и 2.
Ардуино нано (желательно)
1 двигатель NEMA 23, драйвер DM542
2 двигатель NEMA 23, драйвер DM542
3 двигатель NEMA 17, драйвер A4988/DRV8825
4 двигатель NEMA 17, драйвер A4988/DRV8825

Знать эти параметры не надо?

такие же как в примере кода выше

5000 шагов дешевые ардуино не тянут, в курсе? Максимум 4000. В сумме на все моторы.

да, заметили, но 5000 в 1/2 шага достаточно

Ардуино это предпочтение, если есть иные варианты то рассмотрим

Я раскручивал до 6000об/мин двигатель.

если у всех 4х моторов “такие же”, значит они одинаковые

С разгоном? С подсчетом шагов, или выполнением еще какой-то логики? Или просто механический долбежь импульсов?

Библиотека AccelStepper для Arduino Nano явно тяжеловата. особенно для приличных скоростей. и, тем более, 4 моторов на один процессор. Проверено. Пришлось AccelStepper крутить на отдельном проце, использовал доступный ESP8266 на 160 Мгц. Получилась двухпроцессорная связка. Это известные грабли, все начальные эксперименты с библиотекой AccelStepper дают такой результат. Можете потратить время. чтобы убедиться в этом. Многие потратили , и убедились. Удачи!