Два степпера один за другим
Я хочу запустить два шаговых двигателя один за другим Шаг 1 должен вращаться до 5 И шаговый 2 должен двигаться 1ротация Вот код
Шаговый 1-это nema 34 И шаг 2-это nema 24
#include <AccelStepper.h>
// Define a stepper and the pins it will use
AccelStepper stepper1 (1, 3, 2); // Defaults to 4 pins on 2, 3, 4, 5 mortor (A)
AccelStepper stepper2 (1, 5, 4); // Defaults to 4 pins on 2, 3, 4, 5 motor (B)
long Steps_For_Distance1 = 3; // 3cm
long Steps_For_Distance2 = 5; // 5cm
long currentPos = 0;
long targetPos = 200;
long targetPos_Reverse = -200;
long Motor_Speed1 = 50;
long Motor_Speed2 = 400;
long Motor_Speed3 = 800;
int Op_Sw = 0;
const int buttonPin = 2; // the number of the pushbutton pin
const int ledPin = 13; // the number of the LED pin
// variables will change:
int buttonState = 0; // variable for reading the pushbutton status
void setup()
{
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
}
void checkStepper1_For_DT(AccelStepper &astepper)
{
if (astepper.distanceToGo() == 0)
{
// Random change to speed, position and acceleration
// Make sure we dont get 0 speed or accelerations
astepper.setCurrentPosition(currentPos);
astepper.moveTo(targetPos);
astepper.setSpeed(Motor_Speed1);
astepper.setAcceleration(100);
}
}
void checkStepper2_For_360(AccelStepper &astepper)
{
if (astepper.distanceToGo() == 0)
{
// Random change to speed, position and acceleration
// Make sure we dont get 0 speed or accelerations
astepper.moveTo(targetPos);
astepper.setMaxSpeed(Motor_Speed2);
astepper.setAcceleration(100);
}
}
void PatternToBeLooped_For_Cycle1()
{
int count = 0;
for (count == 0; count <= 5; count ++)
{
checkStepper1_For_DT(stepper1);
stepper1.runSpeedToPosition();
}
checkStepper2_For_360(stepper2);
stepper2.runSpeedToPosition();
}
void loop() {
PatternToBeLooped_For_Cycle1();
}
Я запустил код Но это не сработало Оба двигателя работают одновременно
Пожалуйста, помогите мне
Где я допустил ошибку
Заранее спасибо
У меня была попытка с задержкой (1000); Но Тем не менее, они оба шаговых движутся одновременно и получают задержку в одно и то же время
@user8708050, 👍2
Обсуждение1 ответ
Я заглянул в источник библиотеки AccelStepper здесь, которая может быть вашей библиотекой или похожей на нее. Функция runSpeedToPosition()
не блокируется до тех пор, пока не будет достигнута нужная позиция. Вместо этого внутри функции вы видите код, который выполняет шаг, когда достигается нужное время (в соответствии с millis ()
), рассчитанное по скорости, иначе он вернет значение false. Предполагается, что вы должны очень часто вызывать эту функцию во время движения двигателя. Это позволяет вам управлять несколькими двигателями одновременно с разными скоростями.
Поскольку вы не хотите управлять обоими двигателями одновременно, вам придется делать петлю, пока первый двигатель не достигнет желаемого положения; затем проделайте то же самое со вторым двигателем. Попробуйте что-нибудь вроде этого:
void PatternToBeLooped_For_Cycle1()
{
int count = 0;
for (count == 0; count <= 5; count ++)
{
checkStepper1_For_DT(stepper1);
while(stepper1.currentPosition() != stepper1.targetPosition()) stepper1.runSpeedToPosition();
}
checkStepper2_For_360(stepper2);
while(stepper2.currentPosition() != stepper2.targetPosition()) stepper2.runSpeedToPosition();
}
Примечание: При этом изменении функция PatternToBeLooped_For_Cycle1()
блокирует выполнение функции цикла до тех пор, пока двигатели не выполнят свое движение. Чтобы избежать этого, вы можете использовать оператор if, который выполняет код для stepper1 или stepper2 в зависимости от функции millis ()
. Это работает так же, как пример BlinkWithoutDelay в среде IDE Arduino.
- Можно ли измерить скорость акселерометром? Насколько точно?
- Как я могу использовать степпер для определенной степени?
- В чем разница между акселерометром, гироскопом и датчиком магнитометра?
- Arduino uno + cnc Shield v3 + драйвер шагового двигателя A4988 + AccelStepper?
- OVF в последовательном мониторе вместо данных
- Построение графика данных датчика Arduino в реальном времени на Processing, MatLab или Python
- Шаговый двигатель не поворачивается/не поворачивается против часовой стрелки
- Шаговый двигатель с концевыми выключателями
пожалуйста, покажите схему подключения, @jsotola
Может быть, они движутся не одновременно, а очень быстро друг за другом, так что вы не видите разницы? Попробуйте поместить задержку между двумя операторами stepper run в вашу циклическую функцию и посмотрите, что произойдет, @chrisl
-Вывод Dir для arduino gnd, @user8708050
-Dir pin , - импульсный pin к arduino gnd. И + dir к arduino 3 pin ,5pin. И +импульс к контакту 2,4, @user8708050