Драйвер L298N используется радиолюбителями для многофункционального управления двигателями постоянного тока. Схема модуля, состоящая из двух H-мостов, позволяет подключать к нему один биполярный шаговый двигатель или одновременно два щёточных двигателя постоянного тока. При этом есть возможность изменять скорость и направление вращения моторов. Управление осуществляется путём подачи соответствующих сигналов на командные входы, выполненные в виде штыревых контактов. На рисунке №1 показан внешний вид модуля с кратким описанием всех его составляющих. Рисунок №1 – внешний вид модуля L298N OUT1 и OUT2 – разъёмы для подключения первого щёточного двигателя или первой обмотки шагового двигателя; OUT3 и OUT4 – разъёмы для подключения второго щёточного двигателя или второй обмотки шагового двигателя; VSS – вход для питания двигателей (максимальный уровень +35V); GND – общий провод (не забываем соединить с аналогичным входом Arduino!!!); Vs – вход для питания логики +5V. Через него непосредственно запитывается сама микросхема L298N. Есть ещё второй способ питания, при котором 5V для L298N берётся от встроенного в модуль стабилизатора напряжения. В таком случае на разъём подаётся только питание для двигателей (Vss), контакт Vs остаётся не подключенным, а на плате устанавливается перемычка питания от стабилизатора, который ограничит питающее моторы напряжение до приемлемых 5V. IN1, IN2 – контакты управления первым щёточным двигателем или первой обмоткой шагового двигателя. IN3, IN4 – контакты управления вторым щёточным двигателем или второй обмоткой шагового двигателя. ENA, ENB – контакты для активации/деактивации первого и второго двигателей или соответствующих обмоток ШД. Подача логической единицы на эти контакты разрешает вращение двигателей, а логический ноль – запрещает. Для изменения скорости вращения щёточных моторов на эти контакты подаётся ШИМ-сигнал. Для работы с шаговым двигателям, как правило, на эти контакты ставят перемычки, обеспечивающие постоянную подтяжку к +5V. На рисунке №2 показана электрическая схема модуля L298N. Рисунок №2 – электрическая схема модуля L298NКак видно из вышеприведенной схемы, основным элементом модуля является микросхема L298N, в состав которой входят два полноценных H-моста. Каждый H-мост выполнен в виде сборки из четырёх транзисторных ключей с включённой в центре нагрузкой в виде обмотки двигателя. Такой подход позволяет менять полярность в обмотке и как следствие направление вращения двигателя путём чередования пар открытых и закрытых ключей. Более наглядно этот процесс демонстрирует рисунок №3. Рисунок №3 – транзисторные мосты Н-типаНа рисунке изображены два транзисторных моста Н-типа. В первом случае на вход IN1 подаётся логическая единица, а на вход IN2 – логический ноль. Так как транзисторы в схеме моста имеют разный тип проводимости, то при таком входном сигнале транзисторы Т1 и Т4 останутся в закрытом состоянии, в то время, как через транзисторы Т2 и Т3 потечёт ток. Ввиду того, что единственный путь протекания тока лежит через обмотку двигателя, то последний окажется подключен правой клеммой к плюсу питания, а левой к минусу. Всё это приведёт к вращению мотора в определённом направлении. Абсолютно противоположная картина показана на нижнем рисунке. Здесь IN3 установлен в логический ноль, а IN4 в логическую единицу. Теперь ток течёт в обратном направлении (левая клемма – плюс, правая – минус), заставляя второй двигатель крутиться в противоположную сторону. Технические характеристики Напряжение питания логики: 5V; Потребляемый логикой ток: 36mA; Напряжение питания моторов: от 5V до 35V; Рабочий ток драйвера: 2А; Пиковый ток драйвера 3А; Максимальная мощность: 20Вт (при температуре 75оС); Диапазон рабочих температур: -25оС…+135оС; Размеры модуля: 43.5 мм х 43.2мм х 29.4мм; Подключение L298N к плате Arduino Работать с модулем L298N довольно просто и комфортно. Здесь не придётся изучать тонны литературы с описанием замороченных протоколов. Все сводится к простому переключению логических уровней на выводах Arduino плюс к генерации ШИМ, если требуется управлять скоростью вращения. Так как драйвер способен управлять двумя типами моторов (щёточным или шаговым), то и работа с ним строится по-разному. Рассмотрим для начала подключение обычных щёточных моторов постоянного тока и управление ими с помощью платы Arduino Nano. На рисунке №4 показана соответствующая схема подключения. Рисунок №4 – схема подключения двух щёточных двигателей постоянного токаСледует обратить внимание, что в схеме предусмотрена возможность управления скоростью вращения, поэтому выводы 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; } В самом верху программы задаются макроопределения всех выводов, используемых в проекте. В функции Setup() все выводы Arduino Nano, участвующие в управлении, задаются в качестве выхода. На выводах IN1-IN4 выставляются логические нули, чтобы двигатели гарантированно не вращались в момент старта программы. В главном цикле, программа обеспечивает вращение двигателей в одном направлении, увеличивая их скорость каждые 3 секунды. Когда разгон вырастает до максимального, моторы начинают вращаться в обратном направлении, постепенно замедляя скорость. На пике сбавления скорости, алгоритм повторяется заново. Как видим, сложного здесь ничего нет. Теперь разберёмся с шаговым двигателем. На рисунке №5 показана схема его подключения к плате Arduino Nano. Рисунок №5 - схема подключения шагового двигателя к Arduino NanoВ качестве демонстрационной модели использован популярный шаговый двигатель NEMA17. Он способен вращаться с частотой до 60 оборотов в минуту и имеет разрешающую способность 200 шагов на один оборот. Следует обратить внимание, что выводы ENA и ENB должны быть подтянуты к +5V путём установки перемычек на самом модуле. Таким образом управляющему сигналу будет разрешено проходить на обмотки шагового двигателя. Также, в случае использования двигателя NEMA17, напряжение его питания не должно превышать 12V. Ниже приведён пример кода с комментариями, который заставит двигатель вращаться в разные стороны, меняя своё направление после каждого полного оборота. В программе использована стандартная библиотека Stepper.h, которая значительно упрощает процесс разработки ПО для проектов с шаговыми двигателями. #include // Подключение библиотеки для работы с ШД#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); // Ждём одну секунду} Как можно заметить, библиотека сокращает код до минимума, так что разобраться в нём не составит никакого труда даже начинающему программисту.