ARDUINO Не знаю как заставить два шаговых двигателя работать одновременно

10.09.2019
5
0
1
#1
Помогите пожалуйста!
Не знаю как заставить два шаговых двигателя работать одновременно.
С помощью mills у меня не получилось.

C++:
#include <Stepper.h>

const int stepsPerRevolution = 1200;

Stepper myStepper1(stepsPerRevolution, 3, 4);
Stepper myStepper2(stepsPerRevolution, 5, 6);

void setup() { 
  myStepper1.setSpeed(60);
  myStepper1.step(200);

  myStepper2.setSpeed(100);
  myStepper2.step(400);
}

void loop() {
 
  myStepper1.step(stepsPerRevolution);
  myStepper1.step(-stepsPerRevolution);

  myStepper2.step(stepsPerRevolution);
  myStepper2.step(-stepsPerRevolution);
 
}
 

Александр Симонов

Проходящий мимо
02.08.2018
185
36
38
#2
Шагай по одному шагу, то одним, то вторым шаговиком.
Либо используй библиотеку AccelStepper, она умеет управлять несколькими движками без блокировки.
 
02.08.2018
185
36
38
#4
@Александр Симонов, У меня получалось двигать двумя двигателями одновременно с помощью библиотеки AccelStepper, но когда писал к коду одного из двигателей условный оператор if, то опять последовательно начинали работать.
Покажи этот код с if-ами
 
#5
Я перепутал, не if, а цикл for ставил

Код:
#include <AccelStepper.h>

AccelStepper stepper1(1, 3, 4);
AccelStepper stepper2(1, 5, 6);

void setup()
{
    stepper1.setMaxSpeed(500);
    stepper1.setAcceleration(2000);
    stepper1.moveTo(100000);
   
   
    stepper2.setAcceleration(2000);
    stepper2.moveTo(500);
}
void loop()
{
    // Change direction at the limits
    if (stepper1.distanceToGo() == 0)
        stepper1.moveTo(-stepper1.currentPosition());
       
    for (int i = 500; i < 900; i += 30){  
        if (stepper2.distanceToGo() == 0)
            stepper2.moveTo(-stepper2.currentPosition());
            stepper2.setMaxSpeed(i);
    }
    stepper1.run();
    stepper2.run();
}
 
Последнее редактирование:
#8
@Александр Симонов, Вот в этом коде работает только первый движок.

C++:
#include <AccelStepper.h>

AccelStepper stepper1(1, 3, 4); //использует пин 3 и 4 для dir и step, 1 - режим "external driver" (A4988)
AccelStepper stepper2(1, 5, 6);

void setup()
{ 
 
  stepper1.setAcceleration(4000);

  stepper2.setAcceleration(4000);
  stepper2.moveTo(3000);
  stepper2.setMaxSpeed(300);
}
void loop(){
  for (int i = 500; i < 900; i += 30){   
    stepper1.setMaxSpeed(i);
    stepper1.moveTo(500);
    while (stepper1.currentPosition() != 500)
      stepper1.run();
    stepper1.runToNewPosition(0);
  }
 
  stepper2.run();
}
 
02.08.2018
185
36
38
#9
@Александр Симонов, Вот в этом коде работает только первый движок.

C++:
#include <AccelStepper.h>

AccelStepper stepper1(1, 3, 4); //использует пин 3 и 4 для dir и step, 1 - режим "external driver" (A4988)
AccelStepper stepper2(1, 5, 6);

void setup()
{

  stepper1.setAcceleration(4000);

  stepper2.setAcceleration(4000);
  stepper2.moveTo(3000);
  stepper2.setMaxSpeed(300);
}
void loop(){
  for (int i = 500; i < 900; i += 30){  
    stepper1.setMaxSpeed(i);
    stepper1.moveTo(500);
    while (stepper1.currentPosition() != 500)
      stepper1.run();
    stepper1.runToNewPosition(0);
  }

  stepper2.run();
}
Ты пользуешься блокирующей функцией runToNewPosition. Читай внимательней документацию и примеры кода.