Проблема с работой шагового двигателя
- Войдите на сайт для отправки комментариев
Чт, 14/02/2013 - 23:19
Запускаю скетч - пример ProportionalControl из библиотеки AccelStepper.
#include <AccelStepper.h> AccelStepper stepper(1, 9, 10); int potpin = 0; int valPot; #define GISTEREZIS 10 void setup() { stepper.setMaxSpeed(1500); } void loop() { valPot = analogRead(potpin); valPot = map(valPot, 0, 1024, 0, 530); if (abs(valPot-stepper.currentPosition()) > GISTEREZIS) { stepper.moveTo(valPot); stepper.setSpeed(1000); stepper.runSpeedToPosition(); } }
Использую Easydriver в режиме 1/8 шага.
Шаговик вращается с приемлемой для меня скоростью пропорционално повороту потенциометра.
Хотелось использовать 1/16 шага, но скорость получается низкая и все эксперименты не дали результата.
При введении в скетч других элементов (кнопки запоминания положения и перевода в запомненное положение и др) скорость поворота шаговика резко падает. В обработке кнопок использую библиотеку Bounce без delay.
Почему дальнейшая часть кода влазит в скорость между шагами и как от этого можно избавится?
При переходе с 1/8 на 1/16 нужно вдвое увеличить все скорости
Почему влазит и как избавиться, никто не скажет, потому что никто не знает, чего Вы там написали.
Дальше в коде идут кнопки
bouncer1.update ( );
value1 = bouncer1.read();
if(value1 == HIGH) {
........ делаем ......}
Кнопок 6 штук. У всех value == LOW и скорость вращения падает в 5-6 раз.
Далее это как? За пределами loop? - так оно вообще не должно выполняться.
Код что? секретный, или лень просто его выложить?
Нет, кнопки все в loop . Просто если состояние всех кнопок LOW , то что выполняется при HIGH уже не читается и на время осуществления одного шага не влияет. Есть мысль, что время чтения состояния кнопок ( 190 мкс х 6 кнопок ) как раз и попадает во время выполнения шага. Может я не прав...
Я где-то читал, что buttonState = digitalRead(buttonPin); занимает 190 мкс
Разобрался