AccelStepper не хочет работать с драйвером ULN2003.

Тема в разделе "Arduino & Shields", создана пользователем Эникей, 27 авг 2019.

  1. Эникей

    Эникей Нуб

    Подключил шаговик к драйверу, драйвер подключил к пинам 8,9,10,11. Взял вот такой пример:

    Код (C++):
    #include <AccelStepper.h>
    AccelStepper stepper(8, 8, 9, 10, 11);  // Указываем пины, к которым подключен драйвер шагового двигателя
    void setup()
    { stepper.setMaxSpeed(500);
      stepper.setSpeed(200);
    }

    void loop()
    {
      // читаем значение с потенциометра
      int val_a = analogRead(A0);
      // получаем скорость(от 50 до 500) относительно значения потенциометра(от 0 до 1023)
      int motorSpeed = map(val_a, 0, 1023, 50, 500);
      // задаем скорость мотору
      stepper.setSpeed(motorSpeed);
      // вращаем мотор
      stepper.runSpeed();
    }
     

    Проблема такая: двигатель вроде как работает, но его дико трясет, и он вращается прерывисто. Да и вообще, мне кажется, что он делает несколько шагов в одну сторону, потом пропускает несколько шагов, потом пару шагов делает в другую сторону и тп. С библиотекой CustomStepper всё работало нормально, а AccelStepper не работает. Подскажите, в чем дело?!

    PS и еще: светодиоды ABCD на драйвере загораются черт знает как. Они вообще должны загораться последовательно, или в порядке 1-3-4-2?
     
  2. b707

    b707 Гуру

    Два вопроса
    - зачем вы сразу взяли пример с регуляцией скорости через АналогРид? - может для начала константу поставить?
    - реально потенциометр к А0 подключен. или просто пин пустой?

    ну и третий... мы же с Вами обсуждали библиотеку Stepper . AccelStepper - 'это Stepper c ускорением, более сложная и временами глючная. Почему не начать со Stepper
     
  3. Эникей

    Эникей Нуб

    1, 2) Да просто у меня потенциометр уже был подключен, поэтому не стал убирать analogRead. С ним проблем нет, проблема только библиотекой.
    3) Дело в том, что мне нужно контролировать, повернулся ли двигатель. То есть, следующее положение ему нужно задавать только тогда, когда он достиг предыдущей точки. В библиотеке CustomStepper был метод isDone, который позволял это контролировать, в accelstepper тоже что-то похожее есть, а в Stepper нет...
    Ох, как я с этими шаговиками намучился...
    Кстати, библиотеку Stepper я тоже попробовал, но ничего не заработало: драйвер пищит, все светодиоды горят, а двигатель не крутится.
     
  4. Эникей

    Эникей Нуб



    1, 2) Да просто у меня потенциометр уже был подключен, поэтому не стал убирать analogRead. С ним проблем нет, проблема только библиотекой.
    3) Дело в том, что мне нужно контролировать, повернулся ли двигатель. То есть, следующее положение ему нужно задавать только тогда, когда он достиг предыдущей точки. В библиотеке CustomStepper был метод isDone, который позволял это контролировать, в accelstepper тоже что-то похожее есть, а в Stepper нет...
    Ох, как я с этими шаговиками намучился...
    Кстати, библиотеку Stepper я тоже попробовал, но ничего не заработало: драйвер пищит, все светодиоды горят, а двигатель не крутится.
     
  5. b707

    b707 Гуру

    Не имея обратной связи от двигателя, например энкодера на валу - вы это никак проконтролировать не сможете. То. что сообщает вам библиотека - это только то, что она закончила выдавать на мотор команды. А повернулся ли он и на какой угол - это неизвестно. Если вы возьмете и заклините вал мотора совсем - библиотека с радостью сообщит вам isDone() = true. хотя мотор не повернется ни на градус.

    то, что у вас ни одна библиотека не работает - скорее всего означает. что вы что-то не так делаете. Например, перепутали выводы шагового мотора В принципе, для такой элементарной задачи, как повернуть шаговик на некий угол - вообще никакие библиотеки не нужны, достаточно замыкать обмотки мотора в нужном порядке
     
    ДеКодер, Эникей и arkadyf нравится это.
  6. parovoZZ

    parovoZZ Гуру

    А чтоб самому не написать функции работы с шаговиком?
     
  7. Эникей

    Эникей Нуб

    Да, действительно перепутал выводы)) В конце концов разобрался, всё стало работать отлично.