ШД и accelstepper. не работает код

zodiak2064
Offline
Зарегистрирован: 13.06.2018


#include<AccelStepper.h>
 
#define HALFSTEP 8  
 
#define motorPin1  3 // IN1 на 1-м драйвере ULN2003
#define motorPin2  4 // IN2 на 1-м драйвере ULN2003
#define motorPin3  5 // IN3 на 1-м драйвере ULN2003
#define motorPin4  6 // IN4 на 1-м драйвере ULN2003
 
AccelStepper stepper1(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);
 
void setup(){
  stepper1.setMaxSpeed(1000.0);
  stepper1.setAcceleration(1000.0);
  stepper1.setSpeed(1000);
  stepper1.moveTo(20000);
}
 
void loop(){
  // Изменяем направление, если шаговик достигает заданного положения
  if(stepper1.distanceToGo()==0)
    stepper1.moveTo(-stepper1.currentPosition());
  stepper1.run();
}

Шаговик 28BYJ-48 двигатель uln2003. Пример выше работает (двигатель перемещает каретку вперед и назад постоянно) пока не поставлю значение moveTo 35000 и более. После этого каретка перемещается в одну сторону на нужное количество шагов, останавливается и в обратную сторону едет пока не упрется в шкиф.

Помогите объяснить arduino, что нужно вращать двигатель вперед и назад на 80000 шагов.
Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

скорее всего в библиотеке надо поправить тип переменой, там скорее всего int, а вам надо long

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

zodiak2064 пишет:
...пока не поставлю значение moveTo 35000 и более.

Вы обсчитались. Должно быть 32768 шагов.

zodiak2064
Offline
Зарегистрирован: 13.06.2018

andriano пишет:

 

Должно быть 32768 шагов.

 

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

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

zodiak2064, обойти это ограничение, естественноЮ можно. Другой вопрос - нужно ли? Разработчик библиотеки, например, посчитал, что имеющегося диапазона хватит для любого разумного применения, и с ним трудно не согласиться: для каких целей может понадобиться задавать в одном элементарном движении более нескольких тысяч шагов?

Вероятнее всего, у Вас ошибка проектировангия, раз при реализации Вы сталкиваетесь с таким неразумно большим количеством шагов. Подумайте в первую очередь в этом направлении. Ну и, в конце концов, можно сделать внешний цикл, а внутри цикла хоть по одному шагу.