Найти в Дзене
Cyberstalker

Драйвер двигателя L298N

Драйвер L298N используется радиолюбителями для многофункционального управления двигателями постоянного тока. Схема модуля, состоящая из двух H-мостов, позволяет подключать к нему один биполярный шаговый двигатель или одновременно два щёточных двигателя постоянного тока. При этом есть возможность изменять скорость и направление вращения моторов. Управление осуществляется путём подачи соответствующих сигналов на командные входы, выполненные в виде штыревых контактов. На рисунке №1 показан внешний вид модуля с кратким описанием всех его составляющих. Технические характеристики Подключение Работать с модулем L298N довольно просто и комфортно. Здесь не придётся изучать тонны литературы с описанием замороченных протоколов. Все сводится к простому переключению логических уровней на выводах Arduino плюс к генерации ШИМ, если требуется управлять скоростью вращения.
Так как драйвер способен управлять двумя типами моторов (щёточным или шаговым), то и работа с ним  строится по-разному. Рассмотрим
Оглавление

Драйвер L298N используется радиолюбителями для многофункционального управления двигателями постоянного тока. Схема модуля, состоящая из двух H-мостов, позволяет подключать к нему один биполярный шаговый двигатель или одновременно два щёточных двигателя постоянного тока. При этом есть возможность изменять скорость и направление вращения моторов. Управление осуществляется путём подачи соответствующих сигналов на командные входы, выполненные в виде штыревых контактов. На рисунке №1 показан внешний вид модуля с кратким описанием всех его составляющих.

-2

Технические характеристики

  • Напряжение питания логики: 5V;
  • Потребляемый логикой ток: 36mA;
  • Напряжение питания моторов: от 5V до 35V;
  • Рабочий ток драйвера: 2 А;
  • Пиковый ток драйвера 3 А;
  • Максимальная мощность: 20 Вт (при температуре 75о С);
  • Диапазон рабочих температур: -25оС…+135оС;
  • Размеры модуля: 43.5 х 43.2 х 29.4 мм;

Подключение

Работать с модулем L298N довольно просто и комфортно. Здесь не придётся изучать тонны литературы с описанием замороченных протоколов. Все сводится к простому переключению логических уровней на выводах Arduino плюс к генерации ШИМ, если требуется управлять скоростью вращения.
Так как драйвер способен управлять двумя типами моторов (щёточным или шаговым), то и работа с ним  строится по-разному. Рассмотрим для начала подключение обычных щёточных моторов постоянного тока и управление ими с помощью платы Arduino Nano. На рисунке №4 показана соответствующая схема подключения.

-3

Следует обратить внимание, что в схеме предусмотрена возможность управления скоростью вращения, поэтому выводы ENA и ENB драйвера подключены к пинам Arduino, способным выдавать ШИМ-сигнал. Arduino питается от отдельного источника 7-12 В. Если напряжение питания моторов лежит в этом же диапазоне, то можно объединить питающие цепи в одну общую. Также необходимо следить за тем, чтобы минусовые провода всех элементов схемы были соединены  между собой.
Для демонстрации возможностей модуля, напишем скетч, который будет вращать моторы с различной скоростью и периодически менять направления их вращения. Ниже приведена программа с подробными комментариями, которая реализует задуманный алгоритм.

Скетч

#define PIN_ENA 9 // Вывод управления скоростью вращения мотора №1 #define PIN_ENB 3 // Вывод управления скоростью вращения мотора №2 #define PIN_IN1 7 // Вывод управления направлением вращения мотора №1 #define PIN_IN2 6 // Вывод управления направлением вращения мотора №1 #define PIN_IN3 5 // Вывод управления направлением вращения мотора №2 #define PIN_IN4 4 // Вывод управления направлением вращения мотора №2 uint8_t power = 105; // Значение ШИМ (или скорости вращения) void setup() { // Установка всех управляющих пинов в режим выхода pinMode(PIN_ENA, OUTPUT); pinMode(PIN_ENB, OUTPUT); pinMode(PIN_IN1, OUTPUT); pinMode(PIN_IN2, OUTPUT); pinMode(PIN_IN3, OUTPUT); pinMode(PIN_IN4, OUTPUT); // Команда остановки двум моторам digitalWrite(PIN_IN1, LOW); digitalWrite(PIN_IN2, LOW); digitalWrite(PIN_IN3, LOW); digitalWrite(PIN_IN4, LOW); } void loop() { // Вращаем моторы в одну сторону с разной скоростью while(power < 255) { analogWrite(PIN_ENA, power); // Устанавливаем скорость 1-го мотора analogWrite(PIN_ENB, power); // Устанавливаем скорость 2-го мотора // Задаём направление для 1-го мотора digitalWrite(PIN_IN1, HIGH); digitalWrite(PIN_IN2, LOW); // Задаём направление для 2-го мотора digitalWrite(PIN_IN3, HIGH); digitalWrite(PIN_IN4, LOW); delay(3000); // Пауза 3 секунды power += 30; // Увеличиваем скорость } power = 225; // Вращаем моторы в другую сторону с разной скоростью while(power > 105) { analogWrite(PIN_ENA, power); // Устанавливаем скорость 1-го мотора analogWrite(PIN_ENB, power); // Устанавливаем скорость 2-го мотора // Задаём направление для 1-го мотора digitalWrite(PIN_IN1, LOW); digitalWrite(PIN_IN2, HIGH); // Задаём направление для 2-го мотора digitalWrite(PIN_IN3, LOW); digitalWrite(PIN_IN4, HIGH); delay(3000); // Пауза 3 секунды power -= 30; // Уменьшаем скорость } power = 105; }

Схема подключения шагового двигателя к Arduino Nano

-4

В качестве демонстрационной модели использован популярный шаговый двигатель NEMA17. Он способен вращаться с частотой до 60 оборотов в минуту и имеет разрешающую способность 200 шагов на один оборот. Следует обратить внимание, что выводы ENA и ENB должны быть подтянуты к +5V путём установки перемычек на самом модуле. Таким образом управляющему сигналу будет разрешено проходить на обмотки шагового двигателя. Также, в случае использования двигателя NEMA17, напряжение его питания не должно превышать 12V. Ниже приведён пример кода с комментариями, который заставит двигатель вращаться в разные стороны, меняя своё направление после каждого полного оборота. В программе использована стандартная библиотека Stepper.h, которая значительно упрощает процесс разработки ПО для проектов с шаговыми двигателями.

Скетч для шагового двигателя.

#include <Stepper.h> // Подключение библиотеки для работы с ШД #define steps 200 // Количество шагов на один оборот
// Создание экземпляра класса для работы с ШД. казываем кол-во шагов на один оборот // и пины Arduino, к которым подключены обмотки двигатедя Stepper myStepper(steps, 7, 6, 5, 4);
void setup() { myStepper.setSpeed(60); // Устанавливаем скорость вращения об./мин. }
void loop() { myStepper.step(steps); // Вращаем двигатель в одну сторону на 200 шагов delay(1000); // Ждём одну секунду myStepper.step(-steps); // Вращаем двигатель в обратную сторону на 200 шагов delay(1000); // Ждём одну секунду }

Вывод

Данный драйвер отлично подойдет для создания роботов или машинок. Единственным минусом может стать высокая температура транзистора.