Использование моторедуктора от ВАЗа

Тема в разделе "Моторы, сервоприводы, робототехника", создана пользователем ostrov, 17 мар 2016.

  1. ostrov

    ostrov Гуру

    В любом автомагазине имеется в продаже довольно интересный, недорогой и неприхотливый моторедуктор распределения воздушного потока 2170-8127100 с неплохими характеристиками, который представляет из себя биполярный двухфазный шаговый двигатель с осевым толкателем. Пытливый ум обязательно найдет множество применений этому устройству в своем хозяйстве! Я вот уже нашел несколько. )

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

    Подключается банально через любой подходящий драйвер, даже не буду на этом останавливаться. Главное не перепутать пины на Ардуино и ШД.

    Теперь сама программа. Способа движения такого рода шаговика всего три. Однофазный в этом случае использовать не нужно вообще. Двухфазный - самое оно (к тому же рекомендовано производителем), полушаговый - на любителя (можно управлять вдвое точнее и, по слухам, крутящий момент побольше). В примере представлены оба (второй на всякий уж случай).

    Так как мне требовалась точность 1мм (что соответствует 1 обороту оси), программа написана именно для такой разрешающей способности. При желании в этом же примере можно легко поднять ее до 1/24 мм (для двухфазного режима) или 1/48 мм (для полушагового).

    Код (C++):
    // Управление Моторедуктором распределения воздушного потока 2170-8127100
    // (или другим двухфазным биполярным шаговым двигателем)
    // обязателен драйвер ШД!

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

    // задержка между шагами, для моторедуктора 2170 максимум это примерно 4мс (скорость штока 10 мм/сек)
    // для замедления - увеличить, ускорять не рекомендуется
    int delStep = 4;

    void setup()
    {
      pinMode(A, OUTPUT);
      pinMode(B, OUTPUT);
      pinMode(C, OUTPUT);
      pinMode(D, OUTPUT);
    }

    void loop()
    {
      for (int i = 0; i < 20; i++) rotateR();  // вниз на 20мм (полный диагональный шаг)
      for (int i = 0; i < 20; i++) rotateL();  // вверх на 20мм
      for (int i = 0; i < 20; i++) rotateRH(); // вниз на 20мм (полушаг)
      for (int i = 0; i < 20; i++) rotateLH(); // вверх на 20мм
      stopStep(); // вырубаем обмотки чтоб не грелись
      while (1);  // закончили упражнение
    }


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

    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);
    }
    Вот как пример выглядит в живую:

     
    Tomasina, ImrDuke и Megakoteyka нравится это.
  2. ImrDuke

    ImrDuke Гик

    По виду классная штука.
    Интересно можно ли приспособить для автоматического подсоса на карбюраторе?
     
  3. vvr

    vvr Инженерище

    распределение воздушного потока и есть подсос, только на инжекторном двигателе
     
  4. Tomasina

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

    знакомая архитектура кода ;)
    Жаль что они слабенькие, тяга всего 0,8 кг.
     
  5. ostrov

    ostrov Гуру

    За основу взял код у Амперки, но он не подошел по части команд на пины. Странно, но там вообще непонятно как работать должно, особенно полушаговый вариант, например строка (1, 1, 1, 1) - это вообще как? Пришлось разобраться как расположена обмотка и как это физически работает.

    0,8 кг, конечно не много, но достаточно для кучи задач. Да хоть засов на двери двигать. )
     
  6. ostrov

    ostrov Гуру

    Так оно для этого и сделано.
     
  7. Onkel

    Onkel Гуру

    и что, действительно такая строка и как она работает, интересно? Вы разобрались?
     
  8. ostrov

    ostrov Гуру

    Не разобрался, по идее не должна никак работать. И подобных непонятных строк там несколько в том числе с непонятным порядком. В итоге ШД хаотично дергается.
     
  9. Вы меня извините я тут влез : такой шаговик уже используется для автоматического подсоса на карбюраторе, кому интересно вот адрес http://sauvz.com/
     
  10. ostrov

    ostrov Гуру

    Только раз в 10 дороже почему то. )
     
  11. ImrDuke

    ImrDuke Гик

    Любопытно, будущей зимой надо будет развлечься.
     
  12. ostrov

    ostrov Гуру

    Вот по просьбе трудящихся добавил кнопок и двухразрядный индикатор.

     
    Securbond и Рамиль19 нравится это.
  13. А можно полное описание, хотелось бы повторить
     
  14. ostrov

    ostrov Гуру

    В первом сообщении код управлением шаговика и схема подключения. Остальное уже каждый делает как хочет, кто на кнопках, кто на потенциометре или полном автомате.
     
  15. Securbond

    Securbond Гуру

    Как то пока не приходилось с моторами возиться. Для данного моторедуктора подойдёт такой драйвер ? Не нашёл в описании к редуктору сколько он потребляет... http://smartelements.ru/product/drayver-motorov-dvuhkanalnyy-l298n2a
     
  16. ostrov

    ostrov Гуру

    Все там написано. Такой, кстати, я использую в примере.
     
    Securbond нравится это.
  17. Securbond

    Securbond Гуру

    Отлично, может и рабочую длинну штифта подскажете? Хочу использовать для открытия форточки в теплице. ))
     
  18. ostrov

    ostrov Гуру

    Максимум 41мм. Для форточки маловато, мне кажется. В первом сообщении есть ссылка, там основные характеристики есть.
     
  19. Securbond

    Securbond Гуру

    У меня форточка хитро открывается, может и хватит.
    image.jpeg
     
  20. ostrov

    ostrov Гуру

    Может и хватит. Как вариант система рычагов возможна.