Как установить степпер и после этого заставить его двигаться на 45 градусов
Я пытаюсь позволить шаговому двигателю найти исходное положение (с помощью микропереключателя) после включения питания. После этого переместите его на 45 градусов (или эквивалентно шагам) и подождите 3 секунды. Ниже приведен код, который я нашел/адаптировал.
Настройка работает, но не гладко.
Часть Stepper1() вообще не работает (только рывковые движения).
Мне также хотелось бы, чтобы двигатель отключался во время ожидания, что, по моему мнению, должно быть достигнуто с помощью digitalWrite(M2en,HIGH);
но когда я помещаю это в начало и конец (LOW, HIGH) Stepper1() никогда не работало. Любые идеи были бы великолепны.
#include "AccelStepper.h"
int M2dirpin = 4; //Вывод направления Y двигателя
int M2steppin = 5; //Вывод шага двигателя Y
int M2en=12; //Вывод включения двигателя Y
#define home_switch 9 // Контакт 9 подключен к Home Switch (MicroSwitch)
// Настройка AccelStepper
AccelStepper stepperX(1, 5, 4); // (1,2,3) = (Выделенная плата, ШАГ, НАПРАВЛЕНИЕ)
// Переменные шагового хода
long initial_homing = -1; // Используется для домашнего шагового двигателя при запуске
void setup() {
pinMode(home_switch, INPUT_PULLUP);
pinMode(M2dirpin,OUTPUT);
pinMode(M2steppin,OUTPUT);
pinMode(M2en,OUTPUT);
digitalWrite(M2en,LOW);
Serial.begin(9600); // Запускаем последовательный монитор со скоростью 9600 Бод
stepperX.setMaxSpeed(50.0); // Установка максимальной скорости шагового двигателя (медленнее, чтобы повысить точность)
stepperX.setAcceleration(50.0); // Установка ускорения шагового двигателя
// Запускаем процедуру возврата шагового двигателя при запуске
Serial.print("Stepper is Homing . . . . . . . . . . . ");
while (digitalRead(home_switch)) { // Заставляем шаговый двигатель двигаться против часовой стрелки, пока переключатель не будет активирован
stepperX.moveTo(initial_homing); // Устанавливаем позицию для перемещения
initial_homing--; // Уменьшаем на 1 для следующего хода, если необходимо
stepperX.run(); // Начинаем перемещать степпер
delay(20);
}
stepperX.setCurrentPosition(0); // Устанавливаем текущую позицию как ноль
stepperX.setMaxSpeed(50.0); // Установка максимальной скорости шагового двигателя (медленнее, чтобы повысить точность)
stepperX.setAcceleration(50.0); // Установка ускорения шагового двигателя
initial_homing = 1;
while (!digitalRead(home_switch)) { // Заставляем шаговый двигатель двигаться по часовой стрелке, пока переключатель не будет деактивирован
stepperX.moveTo(initial_homing);
stepperX.run();
initial_homing++;
delay(20);
}
stepperX.setCurrentPosition(0);
Serial.println("Homing Completed");
Serial.println("");
// Двигаемся на 10 шагов вперед от концевого выключателя (чтобы выйти из переключателя)
while (stepperX.currentPosition() != 10)
{
stepperX.setSpeed(10);
stepperX.run();
}
}
void loop()
{
//степпер1();
}
void stepper1()
{
stepperX.move(22.5);
stepperX.run();
delay(3000);
}
@digit, 👍0
1 ответ
Лучший ответ:
Вам нужно чаще вызывать run
. Из документации:
Вы должны вызывать это как можно чаще, но по крайней мере один раз за минимальный интервал времени шага, желательно в основном цикле. Обратите внимание, что каждый вызов run() будет выполнять не более одного шага, и то только тогда, когда шаг должен быть выполнен, в зависимости от текущей скорости и времени, прошедшего с момента последнего шага.
Таким образом, один вызов run
и последующая задержка заставят двигатель сделать только один шаг. Поэтому вам нужно переписать, например:
stepperX.run();
delay(3000);
в
unsigned long startMillis = millis();
while( millis()-startMillis<3000 )
{
stepperX.run();
}
Во-вторых, move
работает только с целыми числами, stepperX.move(22.5);
фактически станет stepperX.move(22);
< /п>
Наконец, почему вы используете совершенно другой метод, чем остальные, чтобы переместить мотор на 10 шагов? Я бы использовал moveTo(10), как и везде.
- Как я могу использовать степпер для определенной степени?
- Arduino uno + cnc Shield v3 + драйвер шагового двигателя A4988 + AccelStepper?
- Шаговый двигатель не поворачивается/не поворачивается против часовой стрелки
- Шаговый двигатель с концевыми выключателями
- Запустить два степпера одновременно
- Попытка понять постоянную скорость AccelStepper
- Шаговый двигатель - концевой выключатель положения
- Могу ли я запретить библиотеке Stepper удерживать двигатель?