Помощь Accel Stepper, степпер не движется назад

Итак, мой вопрос заключается в том, что я пытаюсь использовать библиотеку Arduino под названием Accel Stepper для управления шаговым двигателем. Я написал код, который заставляет шаговый двигатель двигаться на один оборот по часовой стрелке, а затем на один оборот против часовой стрелки

однако, когда я запускаю код, у двигателя нет проблем с вращением по часовой стрелке, однако, когда дело доходит до реверса, вал двигателя остается неподвижным и не двигается, в то время как весь двигатель вибрирует, в чем может быть моя проблема?

вот мой код:

    // MultiStepper.pde
    // -*- режим: C++ -*-
    //
    // Показывает, как использовать несколько одновременных степперов
    // Запускает один степпер вперед и назад, ускоряясь и замедляясь
    // на пределе. Одновременно запускает другие степперы
    //
    // Copyright (C) 2009 Майк Макколи
    // $Id: MultiStepper.pde,v 1.1 05.01.2011 01:51:01 mikem Exp mikem $

    #include <AccelStepper.h>
    int user = 800;
    // Определяем несколько степперов и выводы, которые будут использоваться

    AccelStepper stepper2(AccelStepper::DRIVER, 9,8 );
    AccelStepper stepper3(AccelStepper::DRIVER, 4, 7);

    void setup()
    {  

        stepper2.setMaxSpeed(1000);  
        stepper2.setSpeed(300);  


    }

    void loop()
    {
        // Изменяем направление на границах
      stepper2.moveTo(user);
      stepper2.setSpeed(300);  
      stepper2.runSpeedToPosition();   
      if (stepper2.distanceToGo() == 0){ 
        stepper2.moveTo(-stepper2.currentPosition());  
        stepper2.setSpeed(300);  
        stepper2.runSpeedToPosition(); 
      } 


    }

, 👍1


2 ответа


Лучший ответ:

0

Проработайте свой код. Когда он достигает целевой позиции, ваш цикл выглядит так:

void loop()
{
    // Изменяем направление на границах
  stepper2.moveTo(user);
  stepper2.setSpeed(300);  
  stepper2.runSpeedToPosition();   
    stepper2.moveTo(-stepper2.currentPosition());  
    stepper2.setSpeed(300);  
    stepper2.runSpeedToPosition(); 


}

Итак, вы говорите, переместитесь в позицию «пользователь», затем перейдите в позицию «-stepper2.currentPosition». Затем, когда цикл повторяется, вы снова говорите «переместиться на позицию «пользователь» и т. д.

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

Если бы вы просто ради аргумента переместили первые три строки кода из функции loop() в функцию setup(), как вы думаете, какое поведение вы заметите?

,

Хорошо, я вижу, однако одна вещь, которую я не понимаю, это то, что у меня есть условие, это не то, что я прямо говорю шаговому двигателю изменить тысячу раз, я пытался создать состояние, в котором шаговый двигатель достигнет позиция, то, как только он достигнет этой позиции, у него будет новая цель, к которой нужно перейти, затем он перейдет к этой позиции, однако, как вы сказали, я попытаюсь поместить первые 3 строки кода в мою функцию установки, и я буду наблюдать за результатами, @user3145648

Также меня беспокоит другое: если мне нужно ввести код в настройку, чтобы код в цикле работал, что, если я хочу, чтобы степпер выполнял серию движений, таких как перемещение из одного положения в другое, а затем обратно в исходное положение? и снова двигаться вперед, @user3145648

Вы должны думать о том, как ваша программа работает вместе. Какие входы у вас есть? Когда вы начинаете последовательность движений? Вам нужно делать что-то через определенные промежутки времени. Составление блок-схем очень полезно, когда дело доходит до изучения того, как программа будет работать вместе., @Tom Carpenter

ну да, мне нужно, чтобы все происходило через определенные промежутки времени, так как я пытаюсь создать графический интерфейс с ЧПУ, в котором пользователь может вводить направления или измерения для шагового двигателя, поэтому мне нужно, чтобы вещи происходили сразу после друг друга через определенные промежутки времени, входные данные для теперь будут простые указания, потому что «графический интерфейс» с ЧПУ, который я планирую построить, будет очень простым, не сложным, только последовательный монитор Arduino, который я собираюсь использовать., @user3145648


0

чтобы изменить направление, попробуйте передать отрицательное значение скорости в speed

нравится

stepper2.setSpeed(-300);

,