УПРАВЛЕНИЕ ШАГОВЫМ ДВИГАТЕЛЕМ

Тема в разделе "Моторы, сервоприводы, робототехника", создана пользователем mosvet, 20 фев 2017.

  1. mosvet

    mosvet Нуб

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

    Вложения:

    • _3.ino
      Размер файла:
      3,7 КБ
      Просмотров:
      398
    Последнее редактирование: 20 фев 2017
  2. Tomasina

    Tomasina Сушитель лампочек Модератор

    скетча не видно.
     
  3. mosvet

    mosvet Нуб

    Последнее редактирование модератором: 20 фев 2017
  4. Tomasina

    Tomasina Сушитель лампочек Модератор

    дублирование постов категорически не приветствуется.
     
  5. mosvet

    mosvet Нуб

    скетч перезалил
     
  6. vvr

    vvr Инженерище

    чего орать))))
    от кнопки шаговик стартует?
     
  7. Tomasina

    Tomasina Сушитель лампочек Модератор

    А то как же:
    2017-02-20_21-19-57.png


    P.S. ТЗ изначально неполное и допускает разночтения, вот никто и не рвется помогать, ибо окажется, что автор не это имел в виду, и все равно переделывать. ;)
    Начните с малого и постепенно расширяйте функционал.
    Вот русское описание команд AccelStepper, может поможет
     
  8. ostrov

    ostrov Гуру

    Могу своим кодом поделиться который шаговиками рулит напрямую. Если так проще будет.
     
    Azret и mosvet нравится это.
  9. mosvet

    mosvet Нуб

    от кнопки шаговик стартует если магнит убрать от датчика, с магнитом при нажатии кнопки старт слышен писк ШД не стартует.
     
  10. mosvet

    mosvet Нуб

    Большое спасибо за код и вашу щедрость попробовать можна.
    Если можете посмотрите мой скетч, в засада я понял когда срабатывает датчик 2 на драйвер ШД приходит команда на остановку ЩД.При повторном нажатии кнопки старт на на драйвер ШД приходит команда на запуск ШД. Выходит СТОП и СТАРТ одновременно как исправить не знаю в программировании не силен.
     
  11. ostrov

    ostrov Гуру

    Это как?
    Код (C++):
    {
        if (Xaxis.distanceToGo() == 0)
          Xaxis.moveTo(-Xaxis.currentPosition());
        Xaxis.run();
        Xaxis.runSpeed();
    }
     
    mosvet нравится это.
  12. mosvet

    mosvet Нуб

    С библиотекой AccelStepper я разобрался с етим проблем нет.
    На первый взгляд задание не сложное нажимаем кнопку СТАРТ запускается Шаговый Двигатель движет каретку
    до конца платформы до датчика 2, меняем направление движения каретка движется обратно до датчика 3 Стоп.
    При следующем нажатии кнопки СТАРТ алгоритм повторяется.
     
  13. ostrov

    ostrov Гуру

    И когда случается затык?

    Я пока не вижу ответа на мой вопрос выше и вот еще не понятно зачем это делать в лупе?
    Код (C++):
      Xaxis.setMaxSpeed(100000);
      // Задаём ускорение двигателя
      Xaxis.setAcceleration(100000);
      // Установим скорость в шагах за секунду
     
    mosvet нравится это.
  14. ostrov

    ostrov Гуру

    Кнопки 2 и 3 будут конфликтовать. Надо установить приоритеты.
     
    mosvet нравится это.
  15. mosvet

    mosvet Нуб

    Ето взято из примера библиотека ШД с етим кодом ШД работает нормально.
    Проблема СТОП и СТАРТ одновременно.
    }

    button1State = digitalRead (button1Pin);// чтение состояния кнопки:

    if (button1State == LOW) // если кнопка нажата.
    {
    digitalWrite (ledPin, HIGH);// включить светодиод
    digitalWrite (DIRPin, HIGH);// направление движения ШД
    digitalWrite (RESPin, HIGH);// разрешить работу ШД
    }


    button3State = digitalRead (button3Pin);// чтение состояния датчика:

    if (button3State == LOW) // если сработал 2 датчик ((конец работі)
    {
    digitalWrite (ledPin, LOW);// віключить светодиод
    digitalWrite (DIRPin, HIGH);// направление движения ШД
    digitalWrite (RESPin, LOW);// запретить работу ШД

    }
     
  16. ostrov

    ostrov Гуру

    По первому вопросу. У вас съехала скобка.
    Код (C++):
    {
        if (Xaxis.distanceToGo() == 0)
          Xaxis.moveTo(-Xaxis.currentPosition()); //  это выполняется при соблюдении условия
        Xaxis.run(); // это всегда
        Xaxis.runSpeed(); // и это всегда
    }
    От этого тоже может быть бардак.
     
    mosvet нравится это.
  17. mosvet

    mosvet Нуб

    Конфликт на даный момент между кнопками 1 и 3 в предыдущем посте я выложил код который конфликтует. В коде button1Pin это кнопка. button2Pin и button3 Pin датчики Хола.
     
  18. ostrov

    ostrov Гуру

    По второму вопросу. Добавьте триггер, при старте 0, концевик 2 не опрашивается, нажали кнопку, каретка поехала, при сработке концевика 1 триггер переключился на 1 и начинает опрашиваться коневик 2. При сработке концевика 2 триггер в 0, концевик больше не опрашивается и ждем кнопку,
     
    mosvet нравится это.
  19. ostrov

    ostrov Гуру

    Пробуйте.
    Код (C++):
    #include <AccelStepper.h>
    #include <MultiStepper.h>
    AccelStepper Xaxis(1, 5, 9); // pin 3 = step, pin 6 = direction


    const int button1Pin = 2; // подключение кнопки
    const int button2Pin = 3; // подключение кнопки
    const int button3Pin = 4; // подключение кнопки

    const int ledPin = 13; // подключение светодиода
    const int STEPPin = 5; // подключение импульсы ШД
    const int DIRPin = 6; // подключение направление ШД
    const int RESPin = 7; // подключение включить ШД


    int STEPState = 0; // чтение состояния кнопки
    int DIRState = 0; // чтение состояния датчика
    int RESState = 0; // чтение состояния датчика


    int button1State = 0; // чтение состояния кнопки
    int button2State = 0; // чтение состояния датчика
    int button3State = 0; // чтение состояния датчика

    bool trigger = false;

    void setup() {
      Xaxis.setMaxSpeed(1000000);
      // Задаём ускорение двигателя
      Xaxis.setAcceleration(9000000);
      // Установим скорость в шагах за секунду
      Xaxis.setSpeed(4000000);
      // Перемещаем в абсолютно указанное положение
      Xaxis.moveTo(4000000);

      pinMode (ledPin, OUTPUT);// инициализация порта на вывод сигнала на свеодиод:
      pinMode (button1Pin, INPUT_PULLUP);// инициализация порта на ввод информации с кнопки:
      pinMode (button2Pin, INPUT_PULLUP);// инициализация порта на ввод информации с кнопки:
      pinMode (button3Pin, INPUT_PULLUP);// инициализация порта на ввод информации с кнопки:

      pinMode (STEPPin, OUTPUT);// инициализация порта на вывод сигнала на свеодиод:
      pinMode (DIRPin, OUTPUT);// инициализация порта на вывод сигнала на свеодиод:
      pinMode (RESPin, OUTPUT);// инициализация порта на вывод сигнала на свеодиод:

      Xaxis.setMaxSpeed(100000);  // Задаём ускорение двигателя
      Xaxis.setAcceleration(100000);  // Установим скорость в шагах за секунду

    }

    void loop() {

      if (Xaxis.distanceToGo() == 0) {
        Xaxis.moveTo(-Xaxis.currentPosition());
        Xaxis.run();
        Xaxis.runSpeed();
      }

      button1State = digitalRead (button1Pin);// чтение состояния кнопки:

      if (button1State == LOW) // если кнопка нажата.
      {
        digitalWrite (ledPin, HIGH);// включить светодиод
        digitalWrite (DIRPin, HIGH);// направление движения ШД
        digitalWrite (RESPin, HIGH);// разрешить работу ШД
      }


      button2State = digitalRead (button2Pin);// чтение состояния кнопки:

      if (button2State == LOW) // если сработал 1 датчик
      {
        digitalWrite (ledPin, HIGH);// включить светодиод
        digitalWrite (DIRPin, LOW);// меняем направление движения ШД
        digitalWrite (RESPin, HIGH);// разрешить работу ШД
        trigger = true;
      }


      button3State = digitalRead (button3Pin);// чтение состояния кнопки:

      if (!button3State && trigger) // если сработал 2 датчик ((конец работі)
      {
        digitalWrite (ledPin, LOW);// віключить светодиод
        digitalWrite (DIRPin, HIGH);// направление движения ШД
        digitalWrite (RESPin, LOW);// запретить работу ШД
        trigger = false;
      }
    }
     
     
    mosvet нравится это.
  20. mosvet

    mosvet Нуб