Возникла проблема с синхронным управлением 2 шаговыми двигателями.

Тема в разделе "Arduino & Shields", создана пользователем Samsonov Vladimir, 27 май 2021.

Метки:
  1. Я новичок и не могу сделать так, чтобы 2 шаговых двигателя работали синхронно.
    Вот код который я использую:
    Код (C++):
    #include <Stepper.h> // Подключение библиотеки для работы с Шаговым Двигателем

    #define steps 200 // Количество шагов на один оборот

    // Создание экземпляра класса для работы с Шаговым Двигателем. Указываем кол-во шагов на один оборот
    // и пины Arduino, к которым подключены обмотки двигателя
    Stepper myStepper(steps, 8, 9, 10, 11);
    Stepper myStepper1(steps, 4, 5, 6, 7);
       void setup() {

    myStepper.setSpeed(60); // Устанавливаем скорость двигателей вращения об./мин.
    myStepper1.setSpeed(60);
    }

       void loop() {
       myStepper.step(100); // Вращаем двигатель в одну сторону на 200 шагов
       myStepper1.step(50); // Вращаем двигатель в одну сторону на 100 шагов
       delay(1000); // Ждём одну секунду
       myStepper.step(-100); // Вращаем двигатель в обратную сторону на 200 шагов
       myStepper1.step(-50); // Вращаем двигатель в обратную сторону на 100 шагов
       delay(1000); // Ждём одну секунду
    }
    При использование данной программы двигатели работают по очереди. Как сделать так, что бы они работали одновременно?
     
  2. parovoZZ

    parovoZZ Гуру

    на дурине - никак. Медленная она.
     
  3. a1000

    a1000 Гуру

    Ну как вы хотели. Вы подаёте команду
    Код (C++):
    myStepper.step(100); // Вращаем двигатель в одну сторону на 200 шагов
    Это не какая-то одиночная элементарная команда. Вы вызываете функцию из библиотеки Stepper.h, которая создаёт на выходах 8, 9, 10, 11 последовательность импульсов необходимых для поворота ШД на 200 шагов. И пока она не отработает, ничего другого выполняться не будет. Только после выполнения данной функции (поворота ШД на 200 шагов), микроконтроллер приступит к выполнению следующей строки
    Код (C++):
    myStepper1.step(50); // Вращаем двигатель в одну сторону на 100 шагов
     
  4. b707

    b707 Гуру

    не использовать библиотеку Stepper, написать код для ШД самому
    Задачка, в общем, элементарная
     
  5. SergeiL

    SergeiL Оракул Модератор

    А со Stepper, если не сразу на полную, а поочередно, в цикле, на единицу, то первый, то второй двигать?