Содержание
Автор: Сергей · Опубликовано 20.12.2018 · Обновлено 14.10.2019
Одним из самых простых и недорогх способов управления двигателями постоянного тока является модуль L298N Motor Driver с Arduino. Он может контролировать скорость и направление вращения двух двигателей постоянного тока, а так же управлять биполярным шаговым двигателем (типа NEMA 17).
Технические параметры
► Напряжение питания логики модуля: 5 В
► Потребляемый ток встроенной логики: 36 мА
► Напряжение питания драйвера: 5 В – 35 В
► Рабочий ток драйвера: 2 А (пиковый ток 3 А)
► Габариты: 43.5 мм х 43.2мм х 29.4мм
Общие сведения
Основной чип модуля это микросхема L298N, состоящая из двух H-мост (H-Bridge), один для выхода A, второй для выхода B. H-мост широко используется в электронике и служит для изменения вращения двигателем, схема H-моста содержит четыре транзистора (ключа) с двигателем в центре, образуя H-подобную компоновку. Принцип работы прост, при одновременном закрытие двух отдельных транзистора изменяется полярность напряжения, приложенного к двигателю. Это позволяет изменять направление вращения двигателя. На рисунке ниже, показана работа H-мостовой схемы.
Для управления скоростью двигателя постоянного тока используется метод PWM (Широко-импульсной модуляции).
Модуль L298N содержит разъем для подключения питания, ряд перемычек для настройки модуля, два выхода A и B и разъем управления, которые регулируют скорость и направление вращения, назначение каждого можно ознакомится ниже:
► Вывод Vss — питание двигателей, от 5 до 35 В;
► Вывод GND — общий вывод заземления;
► Вывод Vs — питание для логической схемы;
► Перемычка ENA — используются для управления скоростью двигателя A;
► Вывода IN1 и IN2 — используются для управления направлением вращения двигателя A;
► Вывода IN3 и IN4 — используются для управления направлением вращения двигателя B;
► Перемычка ENB — используются для управления скоростью двигателя B;
► Выходы OUT1 и OUT2 — разъем для двигателя A;
► Выходы OUT3 и OUT4 — разъем для двигателя B;
Принципиальная схема модуля L298N
Питание модуля.
Питание модуля L298N осуществляется через трех контактный разъем, шагом 3,5 мм:
► Vs — источник питания двигателей, 3B — 35B
► GND — земля
► Vss — источник питания модуля, 4,5В — 5,5В
Фактически у модуля L298N, есть два контакта питания, а именно. «Vss» и «Vs». От «Vs» питаются двигатели с допустимым напряжением от 5 В до 35 В, а от «Vss» питается логическая схема модуля 4,5В до 5,5В. На плате установлен встроенный стабилизатор напряжения на 5 Вольт (78M05), его можно включить или отключить с помощью перемычки. Когда перемычка установлена, стабилизатор включен и питает логику модуля (Vss) от источника питания двигателя (Vs). При включенном стабилизаторе, вход «Vss» работает как выход и обеспечивает 5В с током 0,5 А. Когда перемычка убрана, стабилизатор отключен и необходимо отдельно подключить питание 5 Вольт на вход Vss.
Внимание! Нельзя установить перемычку, если напряжение двигателя ниже 12 Вольт.
Падение напряжения L298N
Падение напряжения драйвера L298N составляет около 2 В, это связано с внутренним падением напряжения в транзисторах в цепи H-мосте. Таким образом, если мы подключим 12 В к источнику питания двигателя, то двигатели получат напряжение около 10 В. Это означает, что двигатель на 12 В не будет работать с максимальной скоростью, для получения максимальной скорости, напряжение поданное на двигателя должен быть выше напряжения (2 В), чем потребность в фактическом напряжении двигателя. Учитывая падение напряжения на 2 В, если вы используете двигатели 5 В, вам необходимо обеспечить питание 7 В. Если у вас 12-ваттные двигатели, то напряжение питания вашего двигателя должно составлять 14 В.
Управления скоростью
Разъемы управления скоростью ENA и ENB используются для включения и выключения управления скоростью двигателей. Когда перемычка установлена, двигатель вращается с максимальной скоростью. Если необходимо управлять скоростью двигателей, необходимо убрать перемычку и подключить выводы к контактам с поддержкой PWM на Arduino.
Подключение L298N к Arduino (коллекторный двигатель)
Необходимые детали:
► Arduino UNO R3 x 1 шт.
► Драйвер мотора на L298N (5-35V, 2A) x 1 шт.
► Коллекторный двигатель x 2 шт.
► Комплект проводов DuPont 2.54 мм, 20 см x 1 шт.
Подключение:
Первым делом необходимо подключить источник питания 12B к двигателям, в примере используется распространенные двигатель постоянного тока, рассчитанные на 3B . . . 12B (применяемые в робототехнике). Учитывая внутреннее падение напряжения на микросхеме L298N, двигатели получат 10 В и будут вращаться не в полную силу.
Далее, нужно подключить 5 вольт на логическую схему L298N, для этого воспользуемся встроенным стабилизатором напряжения, который работает от источника питания двигателя, поэтому, перемычка EN должна быть установлена.
Теперь осталось подключить управляющие провода ENA, IN1, IN2, IN3, IN4 и ENB к шести цифровым выводам Arduino 9, 8, 7, 5, 4 и 3. Обратите внимание, что выводы Arduino 9 и 3 поддерживают ШИМ. Теперь, подключаем двигатели, один к клемме A (OUT1 & OUT2), а другой к клемме B (OUT3 & OUT4). Принципиальная схема подключения приведена ниже.
Осталось подключить Arduino к источнику питания и загрузить скетч.
Товары
- Обзор
- Технические характеристики
- Подключению к плате Arduino
- Пример использования
- FAQ
Обзор драйвера L298N
Драйвер 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
Рисунок №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; // Значение ШИМ (или скорости вращения)
// Установка всех управляющих пинов в режим выхода
// Команда остановки двум моторам
// Вращаем моторы в одну сторону с разной скоростью
analogWrite(PIN_ENA, power); // Устанавливаем скорость 1-го мотора
analogWrite(PIN_ENB, power); // Устанавливаем скорость 2-го мотора
// Задаём направление для 1-го мотора
// Задаём направление для 2-го мотора
delay(3000); // Пауза 3 секунды
power += 30; // Увеличиваем скорость
// Вращаем моторы в другую сторону с разной скоростью
analogWrite(PIN_ENA, power); // Устанавливаем скорость 1-го мотора
analogWrite(PIN_ENB, power); // Устанавливаем скорость 2-го мотора
// Задаём направление для 1-го мотора
// Задаём направление для 2-го мотора
delay(3000); // Пауза 3 секунды
power -= 30; // Уменьшаем скорость
В самом верху программы задаются макроопределения всех выводов, используемых в проекте. В функции 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); // Ждём одну секунду > |
Как можно заметить, библиотека сокращает код до минимума, так что разобраться в нём не составит никакого труда даже начинающему программисту.
Пример использования
Рисунок №6 – электрическая схема робота-машинки
Для приёма управляющих сигналов с ИК-пульта, в проекте будет использоваться популярная микросхема TSOP-1738. Удобство её заключается в том, что она напрямую подключается к плате Arduino и поддерживает большое разнообразие пультов управления. Цифра 38 в конце маркировки означает несущую частоту (кГц), с которой ваш пульт передаёт сигнал. Существует несколько модификаций данной микросхемы на разные несущие частоты. Ниже приведён список возможных вариантов.
- TSOP-1730 (30 кГц);
- TSOP-1733 (33 кГц);
- TSOP-1736 (36 кГц);
- TSOP-1737 (37.6 кГц);
- TSOP-1738 (38 кГц);
- TSOP-1740 (40 кГц);
- TSOP-1756 (56 кГц);
Следует помнить, что помимо несущей частоты, каждая кнопка пульта дистанционного управления имеет свой уникальный код, который предварительно необходимо считать и вставить в текст основного скетча. В данном проекте будет использоваться всего 4 кнопки: “вперёд”, “назад”, “вправо” и “влево”. Определить коды поможет библиотека IRremote .
Итак, собираем всё по вышеприведенной схеме, устанавливаем библиотеку IRremote, и для начала заливаем в Arduino этот скетч:
#include #define RECV_PIN 13; IRrecv irrecv(RECV_PIN); decode_results results; void setup() < Serial.begin(9600); irrecv.enableIRIn(); > void loop() < if (irrecv.decode(&results)) < Serial.println(results.value, HEX); irrecv.resume(); > delay(100); > |
После запуска, в мониторе будут отображаться коды клавиш, нажатые на пульте ДУ. Нам необходимо выбрать 4 кнопки для управления движением робота и выписать их коды для дальнейшего использования в основной программе. У меня получилось следующее:
- Кнопка “Вперёд” – 0xB4B4E21D
- Кнопка “Назад” – 0xB4B412ED
- Кнопка “Вправо” – 0xB4B45AA5
- Кнопка “Влево” – 0xB4B49A65
На этом подготовка к реализации проекта завершена, можно приступать к сборке шасси. Здесь можно дать волю своей фантазии. В моём случае получилось следующее (рисунок №7).
Рисунок №7 – пример реализации шасси для робота
В пластиковом корпусе удалось разместить все необходимые элементы схемы, а именно: источник питания, Arduino Nano и модуль L298N. ИК-приемник TSOP-1738 был вынесен на верх корпуса, чтобы обеспечить надёжную связь с пультом ДУ. Ведущие колёса с моторами закреплены снизу при помощи двухстороннего скотча. В качестве переднего колеса используется поворотный ролик от кресла. На рисунке №8 показан итоговый результат сборки.
Рисунок №8 – робот готов к программированию
L298 – сдвоенный Н-мостовой драйвер для управления двунаправленными нагрузками с токами до 2А и напряжениями от 4,5 до 46 вольт. Микросхема разработана для управления реле, соленоидами, двигателями постоянного тока и шаговыми двигателями.
Микросхема L298N
В L298 существует разделение электропитания для логической схемы и для нагрузки, что позволяет подключить нагрузку с меньшим или большим напряжением питания, чем у микросхемы, а также уменьшает помехи.
Микросхемы L298N имеют встроенную защиту от перегрева. Выходы микросхемы отключаются при нагреве до температуры около +70°С.
Распиновка микросхемы L298
IN1 | IN2 | Двигатель |
---|---|---|
0 | 0 | остановлен |
1 | 0 | вращение влево |
0 | 1 | вращение вправо |
1 | 1 | остановлен |
Схемы включения микросхемы L298
Использование внешних диодов для индуктивных нагрузок (моторов, реле, электромагнитов) обязательно!