Проект 4: Модуль драйвера двигателя L298N

Модуль L298N использует чип управления от компании ST, обладая высокой мощностью, низким тепловыделением и высокой устойчивостью к помехам. Он поддерживает напряжение питания от 5V до 35V и может управлять двумя моторами с максимальным током 2A на каждый мост. Для корректной работы при напряжении свыше 12V рекомендуется использовать внешний источник логического питания 5V. Модуль оснащен высокоемкостным фильтрующим конденсатором, что повышает его надежность.

Модуль L298N

Используя микросхему L298N от компании ST в качестве управляющего чипа, модуль обладает сильной способностью к управлению, низким тепловыделением и высокой устойчивостью к помехам. Этот модуль может использовать встроенный 78M05 для работы с электропитанием через часть питания драйвера. Однако, чтобы избежать повреждения стабилизирующего чипа, при использовании напряжения выше 12В рекомендуется использовать внешний источник питания с логическим напряжением 5В. Модуль оснащен высокоемкостным фильтрующим конденсатором, что позволяет следовать за током для защиты диодов и улучшает надежность.

Спецификации

  • Режим работы: H мост (двойные линии)

  • Управляющий чип: L298N (ST)

  • Логическое напряжение: 5V

  • Напряжение питания: 5V-35V

  • Логический ток: 0mA-36mA

  • Ток привода: 2A (макс. на один мост)

  • Температура хранения: -20 °C - +135 °C

  • Максимальная мощность: 25W

  • Вес: 30g

  • Габаритные размеры: 43 x 43 x 27 мм (Д x Ш x В)

Подключение

Подключение модуля L298N

Пример кода

int ENA = 10;
int IN1 = 9;
int IN2 = 8;
int IN3 = 7;
int IN4 = 6;
int ENB = 5;

void setup() {
    for (int i = 5; i < 11; i++) {
        pinMode(i, OUTPUT);
    }
}

void loop() {
    // Вращение по часовой стрелке (CW)
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, HIGH);
    analogWrite(ENA, 200);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, HIGH);
    analogWrite(ENB, 200);
    delay(1000);

    // Пауза 1 секунда
    analogWrite(ENA, 0);
    analogWrite(ENB, 0);
    delay(1000);

    // Вращение против часовой стрелки (CCW)
    digitalWrite(IN1, HIGH);
    digitalWrite(IN2, LOW);
    analogWrite(ENA, 100);
    digitalWrite(IN3, HIGH);
    digitalWrite(IN4, LOW);
    analogWrite(ENB, 100);
    delay(1000);

    // Пауза 1 секунда
    analogWrite(ENA, 0);
    analogWrite(ENB, 0);
    delay(1000);
}

Второй вариант с использованием библиотеки

Для более простого управления моторами с использованием модуля L298N можно воспользоваться библиотекой AlashMotorControlLite.

ВНИМАНИЕ: Чтобы подключить библиотеку для Arduino, выполните следующие шаги:

  1. Скачайте обе библиотеки с официального сайта или из репозитория GitHub:

  2. Откройте программу Arduino IDE и перейдите в меню «Скетч» → «Подключить библиотеку» → «Добавить .ZIP библиотеку…».

  3. В открывшемся окне выберите скачанный .zip файл и нажмите «Открыть».

  4. Снизу Arduino IDE появится сообщение “Библиотека добавлена. Проверьте меню “Подключить библиотеку” ”

  5. Теперь библиотека будет доступна для использования в ваших проектах.

Пример кода с библиотекой

#include <AlashMotorControlLite.h>
// Создаем объект motorLeft с режимом DIR_DIR_PWM и пинами inA = 9, inB = 8, PWM = 10
AlashMotorControlLite motorLeft(DIR_DIR_PWM, 9, 8, 10);
// Создаем объект motorRight с режимом DIR_DIR_PWM и пинами inA = 7, inB = 6, PWM = 5
AlashMotorControlLite motorRight(DIR_DIR_PWM, 7, 6, 5);

void setup() {
    // В данной функции нет инициализации, оставлено пустым
}

void loop() {
    motorLeft.setSpeed(100); // Установка скорости вращения вперед для левого мотора
    motorRight.setSpeed(100); // Установка скорости вращения вперед для правого мотора
    delay(1000); // Задержка 1 секунды

    motorLeft.setSpeed(0); // Остановка левого мотора
    motorRight.setSpeed(0); // Остановка правого мотора
    delay(1000); // Задержка 1 секунды

    motorLeft.setSpeed(-100); // Установка скорости вращения назад для левого мотора
    motorRight.setSpeed(-100); // Установка скорости вращения назад для правого мотора
    delay(1000); // Задержка 1 секунды

    motorLeft.setSpeed(0); // Остановка левого мотора
    motorRight.setSpeed(0); // Остановка правого мотора
    delay(1000); // Задержка 1 секунды
}

Результат

После подключения и включения питания два мотора вращаются по часовой стрелке в течение 1 секунды на скорости 200 (значение PWM 200), затем останавливаются на 1 секунду; два мотора вращаются против часовой стрелки в течение 1 секунды на скорости 100 (значение PWM 100), затем останавливаются на 1 секунду.