Имеется скетч для управления шаговым двигателем с библиотекой 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