Запуск двух двигателей NEMA 17, один за другим, с использованием Arduino Uno.
Я новичок в Arduino. Я пытаюсь запустить два шаговых двигателя NEMA 17 через соответствующие драйвер A4988 и управление через Arduino Uno.
Идея состоит в том, что первый шаговый двигатель выполнит первое горизонтальное сканирование, а затем, достигнув исходного положения, второй шаговый двигатель переместится на один шаг в вертикальном направлении. Это своего рода растровое сканирование, которое я хочу выполнить с обоими моторами.
Когда я запускаю код, работает только двигатель горизонтальной развертки, а двигатель вертикальной развертки не движется. Я проверил свою схему, двигатели и драйверы, и все работает нормально. Я думаю, что в моем коде есть ошибка. Это код базового уровня, и я был бы очень признателен за помощь.
int x, y; // шаговый двигатель 'x' и шаговый двигатель 'y'
#define BAUD (9600)
void setup()
{
Serial.begin(BAUD);
pinMode(6,OUTPUT); // Включить для х
pinMode(5,OUTPUT); // Шаг для х
pinMode(4,OUTPUT); // Каталог для x
digitalWrite(6,LOW); // Установить низкий уровень разрешения для x
pinMode(9,OUTPUT); // Включить для y
pinMode(8,OUTPUT); // Шаг для y
pinMode(7,OUTPUT); // Каталог для y
digitalWrite(9,LOW); // Установите низкий уровень разрешения для y
}
void loop()
{
digitalWrite(9,LOW); // Установите низкий уровень разрешения для y
for(y = 0; y < 20; y++)
{
digitalWrite(6,LOW); // Установить низкий уровень разрешения для x
digitalWrite(4,HIGH); // Установить Dir на высокий уровень для x - по часовой стрелке
Serial.println("CLOCKWISE HORIZONTAL SCANNING IN PROGRESS");
for(x = 0; x < 50; x++) // Цикл 50 раз
{
digitalWrite(5,HIGH); // Вывод максимума для x
delay(10); // Ждать
digitalWrite(5,LOW); // Выводим низкий уровень для x
delay(100); // Ждать
}
digitalWrite(6,LOW); // Установить низкий уровень разрешения для x
digitalWrite(4,LOW); // Установить Dir на низкий уровень для x - против часовой стрелки
Serial.println("ANTICLOCKWISE HORIZONTAL SCANNING IN PROGRESS");
for(x = 0; x < 50; x++) // Цикл 50 раз
{
digitalWrite(5,HIGH); // Высокий уровень вывода
delay(10); // Ждать
digitalWrite(5,LOW); // Низкий уровень вывода
delay(100); // Ждать
}
Serial.println("ONE STEP CLIMB ON VERTCAL AXIS");
digitalWrite(7,HIGH); // Устанавливаем Dir высоким для y
digitalWrite(8,HIGH); // Выводим высокий уровень для y
delay(100); // Ждать
digitalWrite(8,LOW); // Выводим низкий уровень для y
delay(100); // Ждать
}
digitalWrite(9,LOW); // Установите низкий уровень разрешения для y
digitalWrite(7,LOW); // Установить Dir на низкий уровень для y
Serial.println("RESETTING ON VERTCAL AXIS");
for(y = 0; y < 20; y++) // Цикл 20 раз
{
digitalWrite(8,HIGH); // Выводим высокий уровень для y
delay(10); // Ждать
digitalWrite(8,LOW); // Выводим низкий уровень для y
delay(100); // Ждать
}
}
Нужно ли мне следить за предоставленной задержкой??
@anshul_p, 👍1
Обсуждение1 ответ
Незначительная проблема, которая, вероятно, не повлияет на ваш результат, заключается в том, что
Serial.println("ONE STEP CLIMB ON VERTCAL AXIS");
--> digitalWrite(9,LOW); // Эта строка требует добавления
digitalWrite(7,HIGH); // Устанавливаем Dir высоким для y
Я не вижу в коде ничего, что мешало бы запуску моторов. Хорошо, чтобы начать движение, потребуется ~13 секунд, но оно должно двигаться.
Итак, без какого-либо оборудования, прикрепленного к шпинделям двигателя, можно ли переключить двигатели, чтобы проверить, не обрыва ли проводки? Когда один двигатель работает, а другой нет, это означает, что либо двигатель сломан, либо проводка сломана, либо цепь драйвера нарушена. Если неисправность перемещается, то это неисправность двигателя/проводки, если она не меняется, то это неисправность драйвера.
это в начале, и это никогда не модифицируется..., @frarugi87
@ frarugi87 - Да, и то же самое для оси X, но это также установлено в цикле. Это просто мое естественное недоверие инженера-программиста к оборудованию, которое говорит, что это может быть так, потому что вы никогда не знаете, что пикси делают на этой синей плате. :), @Code Gorilla
- Питание двух шаговых двигателей с драйверами A4988
- Шаговый двигатель не работает с платой A4988
- Как подключить MPU-6050 к Arduino, на которой уже установлен CNC Shield V3?
- CD rom stepper нагревается
- Почему мой шаговый двигатель работает, когда я открываю последовательный порт?
- Нужна помощь в выяснении того, как организовать систему для запуска шагового двигателя на низкой скорости без пропуска шагов.
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
Глупый вопрос, но вы ожидаете, что моторы будут двигаться одновременно?, @Code Gorilla
Прежде всего, я нахожу странным, что вы указываете скорость передачи в качестве макроса, а контакты - в качестве констант. Я настоятельно рекомендую объявлять имена контактов как константы (например, const byte X_EN = 6;), чтобы вы могли легко переопределить их и не забыть. Тогда вы уверены, что второй мотор не двигается? Может быть, шаговый двигатель делает 200 шагов/оборот, и за один оборот вы перемещаетесь на 1 мм, поэтому полные 20 шагов составляют 0,1 мм, и вы этого не видите... Можете ли вы попробовать поменять местами двигатели X и Y?, @frarugi87
@ code gorilla - Нет, оба двигателя не будут работать одновременно. X мотор - 50 шагов вправо, затем 50 шагов влево. Тогда двигатель Y переместится на один шаг вверх. Снова двигатель X перемещается на 50 шагов вправо, а затем на 50 шагов влево. Затем снова двигатель Y переместится на один шаг вверх. Этот цикл продолжается в течение 20 шагов двигателя Y. В конце 20-го мотор Y перемещается на 20 шагов вниз. цикл продолжается., @anshul_p
@frarugi - Да второй мотор вообще не работает. Я также попытался поменять местами оба двигателя. Но никакого результата. Я хочу поделиться одной вещью: я использую драйверы A4988 и HR4988. Это какие-то проблемы?? Потому что, когда они используются вместе, двигатель, подключенный к A4988, не работает, а двигатель, подключенный к HR4988, работает. Когда я поменял местами драйвера, ни один из двух двигателей не работает., @anshul_p