Драйвер шагового двигателя L298n к плате Arduino

Сдвоенный мостовой модуль драйвера L298N можно применять для подключения двигателей постоянного тока и шаговых, напряжение питания которых лежит в интервале от 5 до 35 вольт. Кроме того, на многих модулях имеется встроенный 5В регулятор, который позволяет запитывать ваши устройства. В рамках данной теми рассмотрим также подключение драйвера L298N к плате Arduino.
Все для  Arduino

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

Одна из разновидностей модуля драйвера шагового двигателя на микросхеме L298N выглядит следующим образом:



  • Для двигателя постоянного тока 1 “+” или для шагового A+
  • Для DC 1 “-” или для шагового A -
  • Перемычка на 12 вольт. Снимите ее, если напряжение питания больше 12В. Питания вашего электродвигателя обеспечивается с этого выхода. Максимальное напряжение питания постоянным током 35 вольт.
  • GND - земля.
  • 5 вольт, если перемычка на 12 вольт замкнута. Идеально подходит для подключения платы Arduino и т.п.
  • Коннектор для электродвигателя постоянного тока (ЭПТ) 1. Можно подключить к ШИМ-выходу для управления скоростью.
  • IN1
  • IN2
  • IN3
  • IN4
  • Коннектор для ЭПТ 2. В случае использования шагового двигателя, подключать сюда ничего не требуется.
  • ЭПТ 2 “+” или шаговый двигатель B+.
  • ЭПТ 2 “-” или шаговый B-.

  • Подключение одного двигателя через драйвер L298N к Arduino
    Без регулировки скорости вращения

    Для этого замыкаем перемычку как показано на рисунке, тем самым подключая вывод EN к +5V. При таком методе подключения драйвера мы способны регулировать скорость вращения, но в этом случае для управления одним каналом L298N будет задействованно два цифровых вывода вместо трех.

    Теперь, заставим ЭД вращаться "вправо" 4 секунды, остановиться на одну секунду, вращаться "влево" 4 секунды, остановка 5 секунд и опять цикл стартует с начала.

    // Подключение одного двигателя с помощью драйвера
    int IN3 = 5; // Input3 подсоединен к выводу 5
    int IN4 = 4;

    void setup() {
    pinMode (IN4, OUTPUT);
    pinMode (IN3, OUTPUT);
    }
    void loop()
    {
    // На пины "IN" поданы разноименные сигналы, ЭД вращается вправо (001)
    digitalWrite (IN4, HIGH);
    digitalWrite (IN3, LOW);
    delay(4000);
    // На оба вывода "IN" поступают сигналы одинаковой полярности, ЭД останавливается
    digitalWrite (IN4, LOW);
    delay(1000);
    // На пару выводов "IN" поданы разноименные сигналы (но уже противоположные относительно условия 001), ЭД вращается влево
    digitalWrite (IN3, HIGH);
    delay(4000);
    // Опять на обоих выводах "IN" одна полярность, ЭД не крутится
    digitalWrite (IN3, LOW);
    delay(5000);
    }

    С регулировкой скорости вращения

    В данном примере мы подключим управляющий вывод драйвера L298N ENB к выводу ШИМ (D3) Ардуино. После этого можно управлять скоростью двигателя, изменяя уровень скважности посылаемого ШИМ сигнала. Значения скважности в програмном коде задаются с помощью функцией analogWrite(pin, число), где число изменяется в диапазоне от 0 до 255, прямо пропорционально скважности. Для наглядности в рассматриваемом примере, подобраны четыре произвольных значения при которых ЭД стартует с низких оборотов, затем набирает средние, а только потом разгоняется на максимальные, а после этого останавливается.

    А теперь немного программы:

    // Подключение одного двигателя с регулировкой скорости через L298N
    int IN3 = 5; // Input3 подсоединен к выводу 5
    int IN4 = 4;
    int ENB = 3;
    void setup()
    {
    pinMode (ENB, OUTPUT);
    pinMode (IN3, OUTPUT);
    pinMode (IN4, OUTPUT);
    }
    void loop()
    {
    digitalWrite (IN3, HIGH);
    digitalWrite (IN4, LOW);
    // подаем на управляющий контакт ENB ШИМ сигнал
    analogWrite(ENB,55);
    delay(2000);
    analogWrite(ENB,105);
    delay(2000);
    analogWrite(ENB,255);
    delay(2000);
    // Останавливаем ЭД на ENB - низкий уровень.
    // Состояние на "IN" не имеет значения
    analogWrite(ENB,0);
    delay(5000);
    }
    Подключение двух двигателей к Arduino с модулем L298N

    Схема соединения, модуля, ардуино и ЭД

    В приведенном ниже программном коде два электродвигателя будут крутится в обе стороны с плавным нарастанием скорости вращения.

    int IN1 = 5;
    int IN2 = 4;
    int IN3 = 3;
    int IN4 = 2;
    int ENA = 9;
    int ENB = 3;
    int i;
    void setup()
    {
    pinMode (EN1, OUTPUT);
    pinMode (IN1, OUTPUT);
    pinMode (IN2, OUTPUT);
    pinMode (EN2, OUTPUT);
    pinMode (IN4, OUTPUT);
    pinMode (IN3, OUTPUT);
    }
    void loop()
    {
    digitalWrite (IN2, HIGH);
    digitalWrite (IN1, LOW);
    digitalWrite (IN4, HIGH);
    digitalWrite (IN3, LOW);
    for (i = 50; i <= 180; ++i)
    {
    analogWrite(EN1, i);
    analogWrite(EN2, i);
    delay(30);
    } analogWrite (EN1, 0);
    analogWrite (EN2, 0);
    delay(500);
    digitalWrite (IN1, HIGH);
    digitalWrite (IN2, LOW);
    digitalWrite (IN3, HIGH);
    digitalWrite (IN4, LOW);
    for (i = 50; i <= 180; ++i)
    {
    analogWrite(EN1, i);
    analogWrite(EN2, i);
    delay(30);
    }
    analogWrite (EN1, 0);
    analogWrite (EN2, 0);
    delay(8000);
    Управляем шаговым двигателем с помощью Arduino + L298N

    Ниже показана типовая схема подключения биполярного шагового двигателя на 12 В к драйверу L298N и этого драйвера к плате Arduino UNO. В первую очередь соединяем пары проводов A и B шагового двигателя с выводами MA+, MA-, MB+ и MB- модуля L298N. Внимательно ознакомьтесь с документацией к шаговому двигателю, чтобы правильно вычислить пары A+, A-, B+ и B-. Пины IN1, IN2, IN3 и IN4 подключите к цифровым портам Arduino D8, D9, D10 и D11. Далее соедините GND Arduino и модуля друг с другом, а вывод питания Vin Ардуино с +5V OUT. Иподключите внешний блок питания 12В/1А к линиям +5V OUT и GND драйвера.

    Для проверки работоспособности схемы загрузите код stepper_oneRevolution, из библиотеки в Arduino IDE, он находится в меню: File > Examples > Stepper.

    Небольшие пояснения к коду для управления шаговым двигателем в Ардуино:

    const int stepsPerRevolution = 200; // измените это значение на ваше количество шагов за один поворот шагового двигателя вала
    myStepper.setSpeed(60); // скорость вращения
    myStepper.step(stepsPerRevolution); // вращение по часовой стрелке
    myStepper.step(-stepsPerRevolution); // вращение против часовой стрелки

    Работу схемы подключения шагового двигателя можете посмотреть в видео ниже: