плавное замедление ШД и возврат в исходное положение

Тема в разделе "Arduino & Shields", создана пользователем Ridikxx, 18 июл 2016.

  1. Ridikxx

    Ridikxx Нуб

    Ребята, я полный ноль в этом деле. Прошу вашей помощи. Необходимо реализовать следующее:
    Нужно задать необходимое количество шагов двигателю. Двигатель начинает двигаться с определенной скоростью. Когда он доходит до нужной отметки(возможно понадобится концевик, чтобы двигатель не переехал заданной отметки), после чего, необходимо, чтоб ШД двигался с медленной скоростью. Дошел с этой скоростью нужной отметки. После чего, вернулся в исходное положение и сделал тоже самое, но в другую сторону. И так постоянно. Пока его не отключить. Вот такая задача. Если есть добрые люди....очень буду признателен.

    Использую следующие комплектующие:
    1. Шаговый двигатель - Nema 17hs8401 1/8A
    2. Mega 2560 rev3 + Ramps 1.4+жк 12864 + драйвер drv8825
    3. Блок питания 24v/15A 360ват при необходимости можно понизить напряжение до нужного значения
     
  2. DIYMan

    DIYMan Guest

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

    ostrov Гуру

    С шаговым двигателем это вообще не проблема, он для того и нужен чтобы двигаться на четко заданное кол-во шагов. Начал двигаться, считает шаги до упора в концевик, запомнил это значение, дальше работает с ним. Это вот с обычными движками сложности, приходится огород городить чтобы точно выставить, да и то промахивается постоянно.
     
  4. Ridikxx

    Ridikxx Нуб

    Мне хоть с чего начать? Буду искать, копаться в интернете.....просто я вообще в этом ноль.
     
  5. ostrov

    ostrov Гуру

    Умеете ШД управлять?
     
  6. Ridikxx

    Ridikxx Нуб

    Еще ни разу не получилось его прокрутить. Я пробовал заливать готовые примеры с библиотек....., двигатель так ни разу не шелохнулся. Может из-за платы RAMPS? ведь в примерах указаны выводы на прямую к ардуино, куда нужно подключать сам двигатель. Я в этом пока "ноль" Плата Ramps, она ведь больше подходит для 3д принтеров. Может надо без нее, а только использовать драйвер (у меня dvr8825) Есть макетная плата, посадить драйвер туда и так попробовать заливать скетчи. Ну я просто часами сижу в интернете по этому поводу, но безрезультатно
     
  7. DIYMan

    DIYMan Guest

    Начните с простого: с чтения документации на плату. Потом - с чтения статей про шаговые двигатели. Как всё немного утрясётся - придёт понимание, как оно работает и как подключать. А то мы так тут долго будем гадать, почему у вас ничего не шевелится: может, подключён неправильно, может, питания не хватает, может - скетч неправильный. Вы же ровным счётом ничего нам не даёте, кроме общей справочной информации :(
     
  8. Ridikxx

    Ridikxx Нуб

    Как работают шаговые двигатели я понимаю. проблема в программировании. На изучение программирования уйдет очень много времени. Я думал взять за основу какой-нибудь скетч и подправив его, решить свои задачи. Ну готовые примеры я брал с библиотеки AccelStepper. примера 3 взял от туда, Видно было, что программа залилась., но двигатель так и не заработал. Питание поступает 12 вольт на плату рампс. Обмотки двигателя были указаны цветами в инструкции. На всякий случай прозвонил. Все правльно.
     
  9. ostrov

    ostrov Гуру

    Работают примерно так:
    Код (C++):
    #define A    8    //пины для управления обмотками (А-крайний левый контакт)
    #define B    9
    #define C    10
    #define D    11

      pinMode(A, OUTPUT);
      pinMode(B, OUTPUT);
      pinMode(C, OUTPUT);
      pinMode(D, OUTPUT);

    // +++++ ОСНОВНЫЕ ФУНКЦИИ +++++

    void stopStep() { // выключение двигателя
      Step(0, 0, 0, 0);
    }

    void rotateR() // 24 шага по часовой стрелке = 1 оборот оси = 1 мм движения штока вниз
    {
      for (byte i = 0; i < 6; i++) { // один такой блок сдвигает шток на 1/6 мм
        Step(1, 0, 1, 0);            // один такой шаг сдвигает шток на 1/24 мм
        Step(0, 1, 1, 0);
        Step(0, 1, 0, 1);
        Step(1, 0, 0, 1);
      }
    }

    void rotateL() // 24 шага по часовой стрелке = 1 оборота оси = 1 мм движения штока вверх
    {
      for (byte i = 0; i < 6; i++) { // один такой блок сдвигает шток на 1/6 мм
        Step(1, 0, 0, 1);            // один такой шаг сдвигает шток на 1/24 мм
        Step(0, 1, 0, 1);
        Step(0, 1, 1, 0);
        Step(1, 0, 1, 0);
      }
    }

    void Step(boolean a, boolean b, boolean c, boolean d) // один шаг
    {
      digitalWrite(A, a);
      digitalWrite(B, b);
      digitalWrite(C, c);
      digitalWrite(D, d);
      delay(delStep);
    }


    // +++++++ ЗКЗОТИКА ++++++

    void rotateRH() // 48 шагов с полушагами по часовой стрелке = 1 оборота оси = 1 мм движения штока вверх
    {
      for (byte i = 0; i < 6; i++) { // один такой блок сдвигает шток на 1/6 мм
        StepH(1, 0, 1, 0);           // один такой шаг сдвигает шток на 1/48 мм
        StepH(0, 0, 1, 0);
        StepH(0, 1, 1, 0);
        StepH(0, 1, 0, 0);
        StepH(0, 1, 0, 1);
        StepH(0, 0, 0, 1);
        StepH(1, 0, 0, 1);
        StepH(1, 0, 0, 0);
      }
    }

    void rotateLH() // 48 шагов с полушагами по часовой стрелке = 1 оборота оси = 1 мм движения штока вверх
    {
      for (byte i = 0; i < 6; i++) { // один такой блок сдвигает шток на 1/6 мм
        StepH(1, 0, 0, 1);           // один такой шаг сдвигает шток на 1/48 мм
        StepH(0, 0, 0, 1);
        StepH(0, 1, 0, 1);
        StepH(0, 1, 0, 0);
        StepH(0, 1, 1, 0);
        StepH(0, 0, 1, 0);
        StepH(1, 0, 1, 0);
        StepH(1, 0, 0, 0);
      }
    }

    void StepH(boolean a, boolean b, boolean c, boolean d) // один шаг
    {
      digitalWrite(A, a);
      digitalWrite(B, b);
      digitalWrite(C, c);
      digitalWrite(D, d);
      delay(delStep / 2);
    }
     
  10. Ridikxx

    Ridikxx Нуб

    Попробовал залить ваш пример. А перед этим проверил и выдало следущее:




    Недопустимое имя скетча. Имя может содержать
    символы ASCII и цифры (и не должно начинаться с цифры).
    Длина имени не должна превышать 64 символов.



    _1:6: error: expected constructor, destructor, or type conversion before '(' token

    _1:7: error: expected constructor, destructor, or type conversion before '(' token

    _1:8: error: expected constructor, destructor, or type conversion before '(' token

    _1:9: error: expected constructor, destructor, or type conversion before '(' token

    E:\arduino-1.6.9-windows\Примеры\_1\_1.ino: In function 'void Step(boolean, boolean, boolean, boolean)':

    _1:43: error: 'delStep' was not declared in this scope

    E:\arduino-1.6.9-windows\Примеры\_1\_1.ino: In function 'void StepH(boolean, boolean, boolean, boolean)':

    _1:83: error: 'delStep' was not declared in this scope

    exit status 1
    expected constructor, destructor, or type conversion before '(' token
     
  11. ostrov

    ostrov Гуру

    Папку с IDE обзовите литинсеими буквами, русских она не понимает.
     
  12. Ridikxx

    Ridikxx Нуб

    Отсоединил все от рампс. Подключил все по вот этой схеме.
    conexion.jpg
     
  13. Ridikxx

    Ridikxx Нуб

    Загрузил библиотеку AcceStepper/ Поигрался с примерами. А дальше тупик.
     
  14. Ridikxx

    Ridikxx Нуб

    скорее всего я не в этой ветке ищу ответ