Arduino Uno + шаговый драйвер MSD-11-EM + NEMA 17

Я работаю над кодом Arduino для управления вращением шагового двигателя. Я хочу вращать шаговый двигатель всего на 4 оборота.

Код работает нормально, но он будет запущен только один раз, так как я поместил его в setup().

Я хочу знать, будет ли в цепи течь обратный ток, который может повредить Arduino или шаговый двигатель. Что, если я захочу запустить шаговый двигатель в loop()? Я пробовал, но это заставит шаговый двигатель работать непрерывно.

Как сделать так, чтобы степпер сделал всего 4 оборота, а затем остановился?

Я хочу запустить его в loop().

arduino-stepper wiring

Ниже приведен код, который я использую:

#include <Stepper.h>

const int stepsPerRevolution = 2100;  
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);

void setup() {
  // устанавливаем скорость 60 об/мин:
  myStepper.setSpeed(110);
  // инициализируем последовательный порт:
  Serial.begin(9600);
  for(int i=0;i<25;i++) {
    Serial.println("Anti-clockwise");
    myStepper.step(stepsPerRevolution);
    delay(50);
  }
}

, 👍3


3 ответа


2

В цикле добавьте флаг для изменения после того, что вы хотели, а также оператор для проверки флага.
Код ниже (предполагается, что содержимого for() достаточно для выполнения 4 оборотов):

#include <Stepper.h>

const int stepsPerRevolution = 2100;  
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);
bool flag = true;

void setup() {
 // устанавливаем скорость 60 об/мин:
 myStepper.setSpeed(110);
 // инициализируем последовательный порт:
 Serial.begin(9600);     
}  

void loop {  
 if (flag) {  
   for(int i=0;i<25;i++) {
     Serial.println("Anti-clockwise");
     myStepper.step(stepsPerRevolution);
     delay(50);
   }
   flag = false;
 }
}

Это решение дает вам возможность добавить кнопку для смены флага и выполнить еще 4 оборота.

,

1

Я не могу проверить, что вы делаете в операторе for, но если вы хотите выполнить это только 4 раза, этот набросок подойдет

#include <Stepper.h>

const int stepsPerRevolution = 2100;
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);

void setup()
{
    // устанавливаем скорость 60 об/мин:
    myStepper.setSpeed(110);
// инициализируем последовательный порт:
    Serial.begin(9600);
}

void loop() {
    static int count = 0;

    if(count < 4)
    {
        count++;

        for(int i=0; i<25; i++) {
            Serial.println("Anti-clockwise");
            myStepper.step(stepsPerRevolution);
            delay(50);
        }
    }
}

count сохраняет подсчет того, сколько раз вы выполняете цикл for. Он объявлен static, чтобы сохранять свое значение между выполнениями loop(); в противном случае он будет равен нулю в каждом loop

,

Я использовал цикл for для вращения шагового двигателя четыре раза. Если бы я удалил цикл for, шаговый двигатель продолжал бы вращаться непрерывно. Команда "myStepper.step(stepsPerRevolution)" заставит шаговый двигатель вращаться до тех пор, пока он не завершит отсчет "stepsPerRevolution", а увеличение и уменьшение количества просто повлияет на скорость шагового двигателя, что не то, что мне нужно. Мне нужно четыре раза вращения шагового двигателя, и цикл for упрощает это., @Sonali_B


2

Мне все еще интересно, как работает код, который я опубликовал ранее, но не волнуйтесь, код ниже работает так, как и ожидалось.

int dirpin_T1 = 7;
int dirH_T1 = 8;
int steppin_T1 = 9;
void setup() {
  pinMode(dirpin_T1, OUTPUT);
  pinMode(dirH_T1, OUTPUT);
  pinMode(steppin_T1, OUTPUT);
}

void loop() {
  static int count = 0;
  if(count < 4) {
    count++;
    digitalWrite(dirpin_T1, LOW); // Задаем направление.
    digitalWrite(dirH_T1, LOW);
    delay(1000);
    for (int i = 0; i<3193; i++) {
      // Итерация для 4000 микрошагов.(32767)
      digitalWrite(steppin_T1, LOW);
      // Это изменение от НИЗКОГО к ВЫСОКОМУ создает
      digitalWrite(steppin_T1, HIGH);
      // «Восходящий край», чтобы водитель знал, когда следует сделать шаг.
      delayMicroseconds(500);
    }
  }
}
,

Пожалуйста, не забывайте сбрасывать настройки Arduino каждый раз, когда включаете его, чтобы запустить шаговый двигатель, поскольку он не будет запускать цикл снова, достаточно сделать четыре оборота, и он остановится., @Sonali_B

Научитесь правильно делать отступы в коде. Регулярно нажимайте cmd/ctrl-T в Arduino IDE, чтобы очистить свой код., @dda