Arduino Uno + шаговый драйвер MSD-11-EM + NEMA 17
Я работаю над кодом Arduino для управления вращением шагового двигателя. Я хочу вращать шаговый двигатель всего на 4 оборота.
Код работает нормально, но он будет запущен только один раз, так как я поместил его в setup()
.
Я хочу знать, будет ли в цепи течь обратный ток, который может повредить Arduino или шаговый двигатель. Что, если я захочу запустить шаговый двигатель в loop()
? Я пробовал, но это заставит шаговый двигатель работать непрерывно.
Как сделать так, чтобы степпер сделал всего 4 оборота, а затем остановился?
Я хочу запустить его в loop()
.
Ниже приведен код, который я использую:
#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);
}
}
@Sonali_B, 👍3
3 ответа
В цикле добавьте флаг для изменения после того, что вы хотели, а также оператор для проверки флага.
Код ниже (предполагается, что содержимого 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 оборота.
Я не могу проверить, что вы делаете в операторе 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
Мне все еще интересно, как работает код, который я опубликовал ранее, но не волнуйтесь, код ниже работает так, как и ожидалось.
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
- Arduino uno + cnc Shield v3 + драйвер шагового двигателя A4988 + AccelStepper?
- Как управлять двумя шаговыми двигателями и использовать ультразвуковой датчик вместе?
- Шаговый двигатель с микрошаговым драйвером
- AMIS30543 | Таблица КРУГОВОГО ПЕРЕВОДЧИКА данных
- АМИС30543 | Понимание таблицы данных Регистр состояния
- Печать string and integer LCD
- Почему мои часы реального времени показывают неверное время с моего ПК?
- Отправьте несколько значений int из Python в Arduino, используя pySerial
Я использовал цикл for для вращения шагового двигателя четыре раза. Если бы я удалил цикл for, шаговый двигатель продолжал бы вращаться непрерывно. Команда "myStepper.step(stepsPerRevolution)" заставит шаговый двигатель вращаться до тех пор, пока он не завершит отсчет "stepsPerRevolution", а увеличение и уменьшение количества просто повлияет на скорость шагового двигателя, что не то, что мне нужно. Мне нужно четыре раза вращения шагового двигателя, и цикл for упрощает это., @Sonali_B