Библиотека AccelStepper, не могу получить ускорение, в чем ошибка ?

Андрей К.

★✩✩✩✩✩✩
25 Май 2019
287
23
Москва. Щукино
Пытаюсь заставить шаговые моторы (нема17) работать с ускорением. Просто крутит, а с плавным стартом никак... Задача - управлять 2умя моторами с помощью соответственно 4ех кнопок. Скорость задается переменниками, на каждый мотор своё.
Причем если загружаю демку, где крутит туда-сюда, то все работает нормально и с плавным стартом... Библиотека и старая стояла и новую скачал... не помогает.
В чем у меня ошибка ?

Это демка, где все работает:
#include <AccelStepper.h>

const int dirPin = 4;
const int stepPin = 5;
int i = 0;
#define EN 9                // пин включения моторов



// Определение тип интерфейса двигателя
#define motorInterfaceType 1
// Создаем экземпляр
AccelStepper myStepper(motorInterfaceType, stepPin, dirPin);


void setup() {
  // Устанавливаем максимальную скорость, коэффициент ускорения,
  // начальную скорость и целевую позицию
  myStepper.setMaxSpeed(200000);
  myStepper.setAcceleration(10000);
  myStepper.setSpeed(200000);
  myStepper.moveTo(10000);
 
  pinMode(EN, OUTPUT);
  digitalWrite(EN, HIGH);                // активируем моторы
  pinMode(10, OUTPUT);                   // минус для ключа под EN
  digitalWrite(EN, HIGH);
}
void loop() {
  // Изменение направления вращения, когда двигатель достигнет заданного положения
  if (myStepper.distanceToGo() == 0)
  {
    myStepper.moveTo(-myStepper.currentPosition());
  }
  // Передвинуть на 1 шаг

  myStepper.run();
}
а это то что я написал, где движется, но без разгона... хотя я его указал...
мой код:
#include <AccelStepper.h>

#define dirPinX 4
#define stepPinX 5
#define dirPinY 6
#define stepPinY 7

#define buttonY1 12
#define buttonY2 11
#define buttonX1 3
#define buttonX2 2

#define potentiometerX A2
#define potentiometerY A4

#define EN 9                // пин включения моторов

AccelStepper stepper1(1, stepPinX, dirPinX);
AccelStepper stepper2(1, stepPinY, dirPinY);

int buttonState1 = 0;
int buttonState2 = 0;
int lastButtonState1 = 0;
int lastButtonState2 = 0;
int direction = 0;
int potValue = 0;

void setup() {
  pinMode(buttonX1, INPUT_PULLUP);
  pinMode(buttonX2, INPUT_PULLUP);
  pinMode(buttonY1, INPUT_PULLUP);
  pinMode(buttonY2, INPUT_PULLUP);

  stepper1.setMaxSpeed(15000);
  stepper1.setAcceleration(100); // Установка ускорения двигателя

  pinMode(EN, OUTPUT);
  digitalWrite(EN, HIGH);                // активируем моторы
  pinMode(10, OUTPUT);                   // минус для ключа под EN
  digitalWrite(EN, HIGH);
}

void loop() { // нажали едем, отпустили стоим...

  buttonState1 = digitalRead(buttonX1);
  buttonState2 = digitalRead(buttonX2);

  if ((buttonState1 == HIGH) && (buttonState2 == HIGH)) {   // когда отпустили кнопки считали скорость
    potValue = analogRead(potentiometerX);
    potValue = map(potValue, 0, 1023, 100, 15000);
  }

  if (buttonState1 != lastButtonState1) {
    if (buttonState1 == LOW) {
      direction = 1;
    } else {
      direction = 0;
    }
  }

  if (buttonState2 != lastButtonState2) {
    if (buttonState2 == LOW) {
      direction = -1;
    } else {
      direction = 0;
    }
  }

  lastButtonState1 = buttonState1;
  lastButtonState2 = buttonState2;

  stepper1.setSpeed(potValue * direction);
  stepper1.runSpeed();
}
Второй мотор я даже пока не прописывал... т.к. нет плавности.
Подскажите в чем у меня ошибка. Спасибо.
 

Геннадий П

★★★★★★✩
14 Апр 2021
1,975
634
45