Получение состояния шагового двигателя
- Войдите на сайт для отправки комментариев
Здравствуйте.
Вот делаю небольшой проект, связанный с управлением шаговыми двигателями (3шт, X,Y,Z). Использую библиотеку Stepper. Собственно запуск двигателя производится командой Stepper_X.step(STEP); , предварительно посчитав STEP в программе на ПК.
Собственно вопрос: Эта комманда запускает двигатель (например на большое кол-во шагов) и продолжает выполнение комман МК или ждет на этой команде, пока двигатель не закончит? По логике вещей не должен останавливаться т.к. тогда будет невозможным запустить два или три двигателя (вернее можно, но по очереди). Если продолжает выполнение команд МК, то как мне узнать, что двигатель закончил свои шаги, чтобы послать ему следующие?? Есть ли какой-нибудь оператор типа Stepper.available или т.п.??? Или же единственный выход - это использовать АЦП для измерения напряжения блока питания двигателей на наличие просадок (есть просадка - двигатели крутятся, нет просадки - стоят)?? Или делить мои перемещения на одинаковые отрезки и задавать фиксированную задержку (вычисленную эксперементальным путем) перед каждой отправкой новой порции шагов в МК??? Или есть еще какой-нибудь более адекватный способ??
Ниже на всякий случай отрывок кода из моего (найденного и интернете) ОЧЕНЬ примерного скетча:
#include <Stepper.h> #define STEPS 600 Stepper stepper(STEPS, 2, 3, 4, 5); int steps = 0; ........... void setup() { stepper.setSpeed(30); Serial.begin(9600); } void loop() { ............. if (Serial.available()) { char ch=Serial.read(); if(isDigit(ch)) { steps = steps*10+ch-'0'; } else if(ch == '+') { stepper.step(steps); steps = 0; } else if(ch == '-') { stepper.step(steps*-1); steps = 0; } } }
Заранее благодарен.
AccelStepper