Проблема с работой шагового двигателя

vvadim
Offline
Зарегистрирован: 23.05.2012

Запускаю скетч - пример 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. 

Почему дальнейшая часть кода влазит в скорость между шагами и как от этого можно избавится?

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

При переходе с 1/8 на 1/16 нужно вдвое увеличить все скорости

Почему влазит и как избавиться, никто не скажет, потому что никто не знает, чего Вы там написали.

vvadim
Offline
Зарегистрирован: 23.05.2012

Дальше в коде идут кнопки

 

bouncer1.update ( );
value1 = bouncer1.read();
if(value1 == HIGH) {

........ делаем ......}

Кнопок 6 штук.  У всех  value == LOW и скорость вращения падает в 5-6 раз. 

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

Далее это как? За пределами loop? - так оно вообще не должно выполняться.

Код что? секретный, или лень просто его выложить?

vvadim
Offline
Зарегистрирован: 23.05.2012

Нет, кнопки все в loop .  Просто если состояние всех кнопок LOW , то что выполняется при HIGH уже не читается и на время осуществления одного шага не влияет. Есть мысль, что время чтения состояния кнопок ( 190 мкс х 6 кнопок ) как раз и попадает во время выполнения шага. Может я не прав...

vvadim
Offline
Зарегистрирован: 23.05.2012

Я где-то читал, что buttonState = digitalRead(buttonPin); занимает 190 мкс 

vvadim
Offline
Зарегистрирован: 23.05.2012

Разобрался