Драйвер моторов
Микроконтроллер умеет формировать команды, но его вывод не рассчитан на питание тягового мотора. Между Arduino и двигателем ставят драйвер: он принимает слабые логические сигналы, переключает ток отдельного источника и защищает управляющую часть от силовой нагрузки.

Arduino сообщает драйверу направление и требуемую мощность. Энергию мотор получает не из сигнального вывода, а от отдельной силовой линии. Земли контроллера и драйвера соединяют, чтобы у логических уровней была общая точка отсчёта.
Зачем это нужно
Коллекторный мотор при запуске может потреблять во много раз больше тока, чем в свободном вращении. При резкой остановке и переключении обмотка также создаёт электрические помехи. Если подключить двигатель прямо к выводу Arduino, напряжение на пине просядет, плата может перезапуститься, а выход микроконтроллера — повредиться.
Драйвер решает сразу несколько задач:
- усиливает управляющий сигнал до тока, нужного мотору;
- меняет направление тока через обмотку и тем самым направление вращения;
- регулирует среднюю мощность с помощью PWM;
- позволяет выбрать свободный выбег или электрическое торможение, если микросхема это поддерживает;
- отделяет логику программы от силовой цепи робота.
Без этого узла невозможно надёжно управлять колёсами мобильного робота, конвейером, насосом или редукторным приводом.
Главная идея
У системы есть два потока, которые встречаются в драйвере:
Arduino -> логическая команда -> драйвер
аккумулятор -> силовая энергия -> драйвер -> мотор
Команда почти не несёт мощности. Она только сообщает, какие силовые ключи открыть. Общий GND связывает уровни Arduino и входов драйвера. Положительный провод источника моторов не следует соединять с выходным пином контроллера.

Какие контакты встречаются у драйвера
Названия выводов различаются у разных плат, поэтому первым документом при подключении служит datasheet конкретной микросхемы или руководство модуля. Типовая организация выглядит так:
| Группа | Частые обозначения | Что подключают |
|---|---|---|
| Логическое питание | VCC, VLOGIC | питание логической части, если оно требуется отдельно |
| Силовое питание | VM, VS, VIN | источник, подходящий мотору и драйверу |
| Общий провод | GND | землю Arduino, драйвера и силового источника |
| Направление | IN1, IN2, DIR, PHASE | цифровые выходы Arduino |
| Разрешение или PWM | EN, ENABLE, PWM | PWM-совместимый выход либо постоянный логический уровень |
| Выход к мотору | OUT1, OUT2, M+, M- | два вывода одного коллекторного мотора |
| Диагностика | FAULT, ISEN, CURRENT | сообщение об ошибке или измерение тока, если предусмотрено |
Один драйвер использует два входа направления и отдельный PWM, другой — DIR и PWM, третий принимает PWM на каждом из двух входов. Таблица режимов из документации важнее привычной схемы из чужого проекта.
Выбираем драйвер и источник
Смотреть только на рабочее напряжение недостаточно. Нужны как минимум четыре проверки:
- Диапазон силового напряжения драйвера включает напряжение аккумулятора.
- Допустимый непрерывный ток канала не меньше тока мотора под реальной нагрузкой.
- Кратковременный ток и защита учитывают пуск и заклинивание.
- Логические уровни входов совместимы с выбранной платой Arduino.
Ток холостого хода из описания мотора показывает лишь лёгкий режим. Для силовой части гораздо важнее ток блокировки ротора: он возникает, когда вал не может вращаться. Нельзя специально держать мотор в таком состоянии дольше безопасного времени. Измерения и защита должны учитывать провода, разъёмы, охлаждение драйвера и возможности источника.
Конденсаторы возле силового входа уменьшают локальные провалы и выбросы, но их тип и номинал выбирают по документации драйвера и конструкции питания. Они не заменяют подходящий источник и правильную разводку земли.
Логика направления и остановки
Ниже приведена распространённая логика H-моста с двумя входами. Это учебная модель, а не универсальная таблица для любой микросхемы.
IN1 | IN2 | Состояние мотора |
|---|---|---|
LOW | HIGH | вращение в одну сторону |
HIGH | LOW | вращение в другую сторону |
LOW | LOW | обычно выбег или отключение |
HIGH | HIGH | часто торможение, но режим зависит от драйвера |
При смене направления сначала уменьшают PWM до нуля, дают механике замедлиться, затем меняют направление и снова повышают мощность. Мгновенная команда «полный вперёд — полный назад» создаёт большой ток и ударную нагрузку на редуктор.
Схема подключения одного мотора
Порядок соединения помогает не перепутать силовую и логическую части:
- При отключённом питании соедините мотор только с парой выходов драйвера.
- Подайте силовое питание на
VMи силовойGNDдрайвера. - Соедините
GNDArduino с тем же общим проводом. - Подключите входы направления к цифровым пинам.
- Подключите
PWMилиENк пину, который поддерживаетanalogWrite()на вашей плате. - Проверьте отсутствие короткого замыкания и только затем включите источник с ограничением тока, если оно доступно.
На некоторых шилдах соединение земли и логическое питание уже выполнены дорожками платы. Это нужно подтвердить по схеме именно этого шилда, а не дублировать соединения наугад.
Программа управления скоростью и направлением
Пример ниже рассчитан на распространённый интерфейс IN1 + IN2 + PWM. Диапазон 0…255 соответствует обычному 8-битному вызову analogWrite() на классических платах AVR; на других Arduino разрешение и поддерживаемые пины могут отличаться.
const uint8_t in1Pin = 7;
const uint8_t in2Pin = 8;
const uint8_t pwmPin = 5;
void setMotor(int command) {
command = constrain(command, -255, 255);
if (command == 0) {
analogWrite(pwmPin, 0);
digitalWrite(in1Pin, LOW);
digitalWrite(in2Pin, LOW);
return;
}
const bool forward = command > 0;
digitalWrite(in1Pin, forward ? HIGH : LOW);
digitalWrite(in2Pin, forward ? LOW : HIGH);
analogWrite(pwmPin, abs(command));
}
void setup() {
pinMode(in1Pin, OUTPUT);
pinMode(in2Pin, OUTPUT);
pinMode(pwmPin, OUTPUT);
setMotor(0);
}
void loop() {
setMotor(150);
delay(1500);
setMotor(0);
delay(500);
setMotor(-150);
delay(1500);
setMotor(0);
delay(1000);
}
Знак command выбирает направление, а модуль числа задаёт заполнение PWM. Функция начинает с безопасного состояния в setup(). Для движущегося робота задержки обычно заменяют таймером на millis(), чтобы одновременно читать датчики и принимать команды.
PWM меняет не напряжение источника
PWM быстро включает и выключает силовые ключи. При заполнении 40% мотор часть периода получает питание, а часть — нет. Инерция ротора и электрические свойства обмотки сглаживают импульсы, поэтому меняется средняя передаваемая мощность.
| Команда PWM | Наблюдаемое поведение | Возможное ограничение |
|---|---|---|
| малая | мотор может гудеть и не тронуться | момента не хватает для старта |
| средняя | устойчивое вращение под умеренной нагрузкой | скорость зависит от питания и механики |
| большая | близко к максимальной доступной мощности | растут ток, нагрев и расход энергии |
| ноль | выбег либо торможение по логике входов | точный режим задаёт драйвер |
У двух одинаковых на вид моторов стартовые значения могут различаться из-за трения и нагрузки. Поэтому скоростью колёс нельзя точно управлять только одинаковыми числами PWM: для ровного движения применяют энкодеры и обратную связь.
Пример: движение робота с двумя колёсами
Для дифференциального робота нужен отдельный канал драйвера на каждый мотор. Движение складывается из двух команд:
| Левое колесо | Правое колесо | Действие робота |
|---|---|---|
| вперёд | вперёд | едет прямо |
| стоп | вперёд | поворачивает влево по дуге |
| назад | вперёд | разворачивается на месте |
| одинаковый PWM, разная фактическая скорость | одинаковая команда, разная механика | уходит в сторону |
Функцию setMotor() удобно обобщить для двух каналов, но сначала проверяют каждый мотор отдельно. Если команда «вперёд» вращает одно колесо назад, можно поменять местами два моторных провода при выключенном питании либо скорректировать логическое направление в программе. Не меняйте проводку во включённой силовой цепи.
Безопасный первый запуск и диагностика
Перед установкой колёс поднимите робота над поверхностью. Задайте небольшой PWM и краткое время работы. Если мотор не вращается, не увеличивайте команду сразу до максимума.
Проверяйте цепь от причины к следствию:
| Симптом | Что проверить первым |
|---|---|
| мотор неподвижен | ENABLE, силовое питание, общий GND, таблицу входов |
| Arduino перезапускается | просадку питания, общий путь тока, развязку силовой части |
| драйвер быстро нагревается | заклинивание, ток мотора, короткое замыкание, охлаждение |
| направление не меняется | уровни IN1/IN2, распиновку и режим входов |
| мотор вращается рывками | контакт разъёмов, слишком малый PWM, ограничение тока источника |
Если у лабораторного источника есть ограничение тока, начните с разумного безопасного значения для стенда. Окончательный предел выбирают по документации мотора, драйвера, проводов и источника.
Что запомнить про управление мотором
- Arduino формирует команды, а силовой ток коммутирует драйвер.
- Мотор подключают к выходам драйвера и отдельному источнику, а не к GPIO.
- Общий
GNDнужен для корректного распознавания логических уровней. - Направление задают логическими входами, скорость — PWM, но точные режимы зависят от микросхемы.
- Пуск, заклинивание и резкий реверс дают самые тяжёлые режимы.
- Первый тест проводят с вывешенными колёсами и контролем тока и нагрева.
Практика
Задание 1. Карта соединений
Для имеющегося драйвера найдите datasheet и составьте таблицу: контакт модуля, его назначение, контакт Arduino или источника. Отдельно отметьте логическое питание, силовое питание и общий провод. Не подключайте питание до проверки наставником.
Задание 2. Три режима
Дополните скетч так, чтобы мотор последовательно выполнял мягкий разгон, свободный выбег и вращение назад. Время и PWM выберите сами, не превышая ограничения стенда.
Задание 3. Два колеса
Спроектируйте функции drive(left, right) и stopMotors() для двухканального драйвера. Запишите ожидаемое действие робота для четырёх пар команд, но не запускайте колёса на столе.
Задание 4. Поиск причины
Составьте план проверки для случая, когда логические сигналы меняются, а мотор не вращается. Расположите измерения в порядке, который не требует сразу разбирать весь робот.
Проверьте себя
- Почему мотор нельзя питать непосредственно от цифрового выхода Arduino?
- Чем логическая команда отличается от силового тока?
- Зачем соединять земли контроллера и драйвера?
- Какие параметры мотора нужны при выборе драйвера?
- Что делает PWM и почему он не равен снижению напряжения источника?
- Почему таблицу режимов H-моста нужно сверять с datasheet?
- Чем опасен мгновенный реверс на большом PWM?
- С чего начать диагностику, если Arduino перезапускается при старте мотора?
Сначала ответьте без подсказки. Ответ можно считать полным, если вы:
- формулируете основную мысль своими словами;
- называете важные условия, ограничения или меры безопасности;
- для схемы, кода или расчёта показываете ход решения и ожидаемый результат.
Если один из пунктов объяснить не получается, найдите соответствующую главу статьи, перечитайте её и повторите ответ.
Словарь статьи
- Драйвер мотора — силовой электронный узел, который переключает ток двигателя по логическим командам.
- H-мост — схема ключей, способная менять направление тока через нагрузку.
- PWM (ШИМ) — управление средней мощностью изменением доли времени включённого состояния.
- Коэффициент заполнения — отношение времени включения импульса к полному периоду.
- Силовое питание — источник энергии для мотора и силовых ключей.
- Логический вход — контакт драйвера, принимающий командный уровень от контроллера.
- Ток блокировки — ток мотора при неподвижном роторе и приложенном напряжении.
- Выбег — остановка без активного электрического торможения.
- Общий провод — общая точка отсчёта напряжений, обычно обозначаемая
GND.
Связанные темы
- analogWrite: плавное мигание светодиодом — как формируется PWM-команда.
- Функции — как вынести управление приводом в понятный интерфейс.
- Конструкция ветвления — как выбирать направление по состоянию датчиков.
- Сервопривод — привод со встроенной системой управления положением.