Униполярный шаговый двигатель

Волновой режим

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

Волновой режим униполярного шагового двигателя

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

Полношаговый режим

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

Полношаговый режим униполярного шагового двигателя

Полушаговый режим

Наконец, мы можем комбинировать волновой и полношаговый режим, получив полушаговый режим работы. В таком режиме за один оборот ротора двигатель делает в два раза больше шагов, тем самым увеличивая точность позиционирования. Однако, в таком режиме двигатель каждый второй шаг имеет сниженный крутящий момент, о чём не стоит забывать!

Полушаговый режим униполярного шагового двигателя

Надо заметить, что в реальном шаговом двигателе ротор как правило имеет больше 2-х полюсов, а катушки могут иметь различную конфигурацию. Например, в нашем моторе 28byj-48 электромагниты расположены не перпендикулярно оси ротора, а вдоль него.

Обмотки шагового двигателя 28byj-48

В зависимости от конструктивных особенностей, разные шаговые двигатели могут иметь разное количество шагов. Так, наш мотор 28byj-48 делает 32 шага за один оборот ротора. Кроме того у этого мотора есть встроенный шестеренный редуктор с весьма странным передаточным отношением 63.68395:1. С таким редуктором мотор в полношаговом режиме выдаёт около 2048 шагов!

4+

Изменено:

Ардуино: шаговый двигатель 28BYJ-48 и драйвер ULN2003: 34 комментария

  1. Добрый день! Подскажите:
    1. Программа сохраняется на драйвер?
    2. Программа может отрабатывать без контроллера, а только с драйвером?

    1+
    • Программа для контроллера. Драйвер — это ULN2003 весьма простое устройство, неспособное выполнять сложные действия. Есть более умные драйверы, например A4988. Ему достаточно передавать направление и такты. По сути, можно обойтись без контроллера: поставить 555 таймер на тактовый вход. Также на A4988 можно выставить кратность шага, вплоть до 1/16.

      3+
  2. Спасибо большое за статью. Правда данный мотор + контроллер на стандартной библиотеке работал довольно плохо и «заднего хода не было». Нашёл бесплатную библиотеку, специально написанную под данный моторчик (28BYJ-48): http://www.codeproject.com/Articles/699986/An-Arduino-Library-to-Control-the-BYJ-Stepper

    4+
    • >бесплатную
      LGPL тащемто
      увидишь платную библиотеку для пердуиноИДЕ можешь в суд подавать

      2+
  3. Для правильной работы этого драйвера (который является простой сборкой Дарлингтона) нужно изменить порядок подключения в примере. Там они идут по порядку 8,9,10,11; а нужно 8,10,9,11.

    5+
  4. Спасибо за статью! Помогла разобраться и на основе приведенного кода создать свой.

    1+
  5. Как надежно закрепить что-либо (шестерню, рычаг и т.п.) на валу 28BYJ-48?
    Или просто удлинить вал?
    Есть какие-то муфты, или предполагается, что каждый выкручивается чем Бог послал?

    0
    • Китайцы продают муфты разных диаметров. Ближе к февралю на shop.robotclass.ru появится подобная механика.

      1+
  6. Здравствуйте, я скопировал ваш последний код и залил в ардуинку уно, поставил кол-во оборотов 2048 и всё, больше ничего не поменял. Шаговик должен по логике вращаться в одну сторону, а потом в другую, но он у меня вращается только в одну сторону, почему?

    1+
    • const int IN2 = 3;
      const int IN3 = 4;

      надо поменять на

      const int IN2 = 4;
      const int IN3 = 3;

      Тогда будет крутиться правильно

      4+
  7. Вот так можно отнаследоваться от AccelStepper и получить нормальную поддержку 4096 шагов на один оборот:

    class MyStepper : public AccelStepper {
    public:
    MyStepper(uint8_t interface = AccelStepper::FULL4WIRE, uint8_t pin1 = 2, uint8_t pin2 = 3, uint8_t pin3 = 4, uint8_t pin4 = 5, bool enable = true) : AccelStepper(interface, pin1, pin2, pin3, pin4) {

    }
    void step8(long step) {
    switch (step & 0x7)
    {
    case 0: // 1000
    setOutputPins(0b0001);
    break;

    case 1: // 1100
    setOutputPins(0b0011);
    break;

    case 2: // 0100
    setOutputPins(0b0010);
    break;

    case 3: // 0110
    setOutputPins(0b0110);
    break;

    case 4: // 0010
    setOutputPins(0b0100);
    break;

    case 5: // 0011
    setOutputPins(0b1100);
    break;

    case 6: // 0001
    setOutputPins(0b1000);
    break;

    case 7: // 1001
    setOutputPins(0b1001);
    break;
    }
    };
    };

    MyStepper stepper(AccelStepper::HALF4WIRE, 2, 3, 4, 5);

    stepper.moveTo (4096); //Будет ровно один оборот

    2+
  8. Добрый день!
    А как проверить, что шаговый двигатель исправный? У меня при подключении ардуино через usb и заливки скетча шаговый двигатель вообще не крутится!!! Может сломалось что?

    1+
  9. Уведомление: Рабочие скечи для управления шаговым двигателем в Arduino IDE – На слуху

  10. Я сделал по библиотеке cheap stepper. Крутится! На лсд вывел по i2c витки. В сериал пишешь количество а движок намотает не больше ни меньше. Серводвигателем подаю проволоку. Догадались? Намоточный станок! Но шаговик медленно крутится. Командой setrpm ставится скорость не выше 20. Выше прошивается но отказывается мотор крутится. Может надо 1 2 ампер а не юсб порт ноута?

    1+
    • я думаю намотчик лучше делать на обычном двигателе который будет вращать катушку вместе с инкрементным энкодером. и со степпером заморачиваться не нужно

      1+
  11. Какой вес сможет вращать такой двигатель на горизонтальной платформе?

    1+
    • Зависит от конструкции поворотного стола. Точнее от передаточного отношения между шестерней (или шкивом) на валу двигателя и шестерней на столе. Можно заставить этот мотор вращать человека, но ооочень медленно.

      1+
  12. через вот этот драйвер
    https://ru.aliexpress.com/item/L293D-Mini-4-Channel-CH-Motor-Drive-Shield-Expansion-Board-Module-High-Voltage-Current-Module-For/1859086104.html
    запустил движок флопа, который крутит дискету.
    1. На малых оборотах драйвер греется сильно. Так должно быть ? или с этим можно и нужно бороться?
    2. почему то работает только при запитке цепи двигателя через VIN ардуины, при подключении внешнего питания ардуинка перезагружается в момент запуска двигателя. Это можно победить? Как?

    1+
  13. Ребят, а подскажите, как заставить его вращаться против часовой стрелки?

    1+
    • Надо поменять
      digitalWrite( in1, HIGH );
      digitalWrite( in2, HIGH );
      digitalWrite( in3, LOW );
      digitalWrite( in4, LOW );
      delay(dl);
      на
      digitalWrite( in1, LOW );
      digitalWrite( in2, LOW );
      digitalWrite( in3, HIGH );
      digitalWrite( in4, HIGH );
      delay(dl);
      и так далее.
      То есть, как-бы запустить void loop в обратном порядке.

      0
  14. Для управления двумя такими двигателями нужно две платы?
    Если — да, то второй вопрос: получится ли подключить к одной плате, с реле, которое будет переключать контакты между двигателями?

    1+
    • В последнем коде есть строчка:
      myStepper.step(stepsPerRevolution)
      Это функция, которая вращает мотор на заданное количество шагов. В данном случае stepsPerRevolution = 32, так что мотор повернется ровно на 32 шага.

      1+
  15. Здравствуйте:
    Я хочу управлять сразу 10 шаговыми двигателями. Это вообще можно сделать??.
    если возможно то подскажите как??
    «Заранее спасибо»

    1+
  16. Есть необходимость управлять драйвером шагового мотора по Step Dir С регулировкой скорости программно и запоминанием последних введенных параметров.
    Дал задание пройти 2050 шагов, остановка, и запуск нового цикла по внешнему событию или их комбинации. Но в программировании полный ноль.
    Может кто то посоветовать готовую схемку с прошивкой или устройство по приемлемой цене, или написать прошивку под PIC18F4550 и LCD 1602 дисплей например?

    1+
  17. Добрый день подскажите пожалуйста как при включении выставлять ротор в 0-положение?

    0
    • Существуют разные способы того, как это реализовать. Можно, к примеру, поставить на вал диск с магнитом и каждый раз при запуске программы вращать вал в одну сторону, пока не сработает датчик. Это и будет стартовое положение.
      Вместо магнита может быть отверстие в диске, а вместо датчик Холла — фотопрерыватель.

      0
  18. Добрый день. Не пойму, почему при dk=-1
    он не крутится против часовой. Видно, не так всё просто,
    как на картинке.
    int in1 = 2;
    int in2 = 3;
    int in3 = 4;
    int in4 = 5;
    const int dl = 10;
    int k = 5;
    int dk=1;

    unsigned long hl[8][4]={{1,0,0,0},{1,1,0,0},{0,1,0,0},{0,1,1,0},{0,0,1,0},{0,0,1,1},{0,0,0,1},{1,0,0,1}};

    unsigned long h(int i,int j){
    return( hl[i][j]==1? HIGH:LOW);
    }

    void setup() {
    pinMode(in1, OUTPUT);
    pinMode(in2, OUTPUT);
    pinMode(in3, OUTPUT);
    pinMode(in4, OUTPUT);
    }

    void loop() {
    if(dk>0)k=( k1? k+dk : 8);
    digitalWrite( in1, h(k,1) );
    digitalWrite( in2, h(k,2) );
    digitalWrite( in3, h(k,3) );
    digitalWrite( in4, h(k,4) );
    delay(dl);

    }

    0

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.