Управление шаговым двигателем
- Войдите на сайт для отправки комментариев
Вс, 28/08/2016 - 20:17
Подскажите, пожалуйста, как заставить шаговый двигатель отработать в обратную сторону на заданное количество шагов.
У меня ШД перемещает дозатор на заданное количество шагов 1 раз в сутки. И таких перемещений происходит 5. После этого он ждет перезапуска кнопкой reset. И все повторяется.
Что нужно дописать в скече, чтобы ШД после пятого перемещения вернул дозатор в исходное состояние, т.е. на 5 перемещений назад
#include <Stepper_28BYJ.h> #define INTERVAL 1000UL*60*60*24 // интервал между включением (сутки) char i = 0; // количество шагов на одно включение const int stepsPerRevolution = 1200; // инициализируем библиотеку Stepper_28BYJ на выходы 8-11 Stepper_28BYJ myStepper_28BYJ(stepsPerRevolution, 8,9,10,11); void setup() { // установим скорость 20 об/мин myStepper_28BYJ.setSpeed(20); // инициализируем последовательный порт Serial.begin(9600); } void loop() { while(i < 5) //условие цикла { // храним время последнего включения static unsigned long previousMillis = 0; //проверяем не прошел ли нужный интервал, если прошел то if(millis() - previousMillis > INTERVAL) { // шагаем 1 включение в одном направлении Serial.println("counterclockwise"); myStepper_28BYJ.step(-stepsPerRevolution); // сохраняем время последнего включения previousMillis = millis(); i++; } } }
Куда нужно прописать:
Serial.println("clockwise"); myStepper_28BYJ.step(stepsPerRevolution); delay(500);}
Помогите новичку!
Код на железе не проверял
Спасибо за помощь. Но двигатель не хочет работать как задумано: он или делает возвратно-поступательные движения, или все время крутиться в одном направлении. Зависит это от того, что поставить в 25 и 31 строчках: 0 и 1 или 1 и 0. Количество перемещений не подсчитывается.
Если Ваш код рабочий и за сутки делается перемещений в одном напрвлении 5*1200, значит назад Вам надо вернуть 6000. Если я првильно понял то попробуйте вот так. Если же нужно перемещение назад на 1200 то строчки (stepsPerRevolution = 6000; и stepsPerRevolution = 1200; ) закоментируйте в блоке if (i == 5)
Спасибо! Все заработало как Вы написали.
А не подскажете почему в моем скече не начинается цикл loop повторно? Тоже дозатор возвращатеся, но на этом цикл заканчивается.
В Вашем коде i++; рано или позно становится 5 и нигде не обнуляетсе чтобы начать сначала, тоже самое и с h