Руководство · Начальный · 18 min read

Управление двигателями постоянного тока с помощью PWM и H-моста

Научитесь управлять коллекторным двигателем постоянного тока с помощью PWM и H-моста: направление, торможение, пределы тока, подключение и выбор драйвера.

Вывод микроконтроллера может задать команду двигателю, но не может безопасно питать его. Коллекторный двигатель постоянного тока (DC) при запуске или срыве может потреблять в несколько раз больше обычного тока. Драйвер двигателя на H-мосте находится между контроллером и двигателем, переключает этот ток от отдельного источника питания и позволяет контроллеру выбирать скорость и направление.

В этом руководстве создаётся моторный узел, используемый роботами, следующими по линии, роботами для прохождения лабиринта и небольшими платформами обхода препятствий. Точные названия выводов зависят от драйвера, но электрические решения остаются одинаковыми.

Поймите, что меняет H-мост

Двигатель постоянного тока меняет направление, когда меняется направление тока через него. H-мост использует четыре электронных ключа вокруг двигателя. Одна диагональная пара направляет ток вперёд, другая — назад. Платы драйверов предоставляют это переключение через логические выводы IN1 и IN2:

IN1 IN2 Состояние двигателя
Low Low Холостой ход или торможение, в зависимости от драйвера
High Low Вперёд
Low High Назад
High High Торможение или холостой ход, в зависимости от драйвера

Никогда не предполагайте, что означают оба низких или оба высоких уровня. Прочитайте таблицу истинности конкретного драйвера. У некоторых микросхем также есть вывод ENABLE, STANDBY или SLEEP, который нужно активировать до работы выходов.

Широтно-импульсная модуляция (PWM) управляет средним напряжением, быстро включая и выключая привод. Рабочий цикл 25% означает включение на одну четверть каждого периода; это не гарантирует четверть скорости вала, поскольку результат также зависит от нагрузки, напряжения питания, трения и противоэлектродвижущей силы двигателя.

Три прямоугольные волны, расположенные одна над другой, переключаются между нулём и двенадцатью вольтами с одинаковой частотой, но с разным временем включения. Верхняя волна включена семьдесят процентов каждого периода, пунктирная линия отмечает её среднее девять вольт; средняя включена сорок процентов времени и в среднем даёт четыре целых восемь десятых вольта; нижняя включена на пятнадцать процентов и в среднем даёт одну целую восемь десятых вольта.
Напряжение питания никогда не меняется. Меняется только доля времени, в течение которой оно подключено, а индуктивность двигателя превращает эту долю в среднее значение. Скачать SVG

Выбирайте драйвер по току, а не по размеру двигателя

Найдите номинальное напряжение двигателя, ток без нагрузки и ток срыва. Ток срыва — важное значение для выбора драйвера, потому что именно его двигатель потребляет, когда вал не может вращаться. Если технического описания нет, измерьте сопротивление обмотки при отключённом двигателе и оцените stall current = supply voltage / winding resistance. Сопротивление щупов мультиметра делает эту оценку приблизительной.

Выберите драйвер, диапазон напряжения двигателя которого включает напряжение питания и который выдерживает пусковой ток. Затем проверьте непрерывный ток и тепловые условия. Плата с большим заявленным пиковым значением может выдерживать его только кратковременно или при существенном охлаждении.

Также учитывайте падение напряжения. Старые драйверы на биполярных транзисторах могут терять значительное напряжение внутри моста; современные драйверы на MOSFET обычно рассеивают меньше мощности. Для робота на аккумуляторе эта разница влияет на момент и время работы.

Безопасно подключите один двигатель

Используйте этот порядок до подачи питания:

  1. Подключите питание двигателя к силовому входу драйвера и к земле.
  2. Подключите двигатель к двум выходам драйвера, а не к выводу микроконтроллера.
  3. Подключите землю контроллера к земле драйвера, чтобы логические сигналы имели общий потенциал.
  4. Подключите IN1, IN2 и любой вывод разрешения к подходящим цифровым выводам.
  5. Сделайте проводку двигателя короткой и проложите её подальше от проводов аналоговых датчиков.
  6. Проверьте требования драйвера к логическому напряжению до подключения 3.3 V ESP32 или Raspberry Pi.

При первом включении используйте предохранитель или ограниченный по току лабораторный источник питания. Добавьте локальную развязку питания, как рекомендует техническое описание драйвера. Никогда не питайте нагруженный двигатель через стабилизатор 5 V или разъём USB Arduino — это просадка питания, которая выглядит как программный сбой.

Напишите одну небольшую функцию двигателя

Самый понятный интерфейс принимает знаковую команду: положительное значение означает вперёд, отрицательное — назад, ноль — остановку. На плате типа Arduino минимальная реализация выглядит так:

const int IN1 = 7;
const int IN2 = 8;
const int PWM_PIN = 5;

void setMotor(int command) {
  command = constrain(command, -255, 255);
  digitalWrite(IN1, command >= 0 ? HIGH : LOW);
  digitalWrite(IN2, command >= 0 ? LOW : HIGH);
  analogWrite(PWM_PIN, abs(command));
}

Этот пример предполагает драйвер с отдельным входом PWM/enable. Драйвер с двумя входами может ожидать PWM на одном входе, пока другой удерживает состояние направления. Следуйте его таблице истинности, а не копируйте логику выводов вслепую.

При смене направления сначала ненадолго задайте нулевую команду. Мгновенное реверсирование на полной скорости создаёт большой токовый выброс и механический удар. Простой разгон также улучшает сцепление:

for (int command = 0; command <= 180; command += 5) {
  setMotor(command);
  delay(15);
}

В настоящем контуре управления сделайте этот разгон привязанным ко времени, а не используйте блокирующие вызовы delay().

Проверьте направление, скорость, холостой ход и торможение

При первом тесте поднимите колёса так, чтобы они не касались стола. Начните с малого рабочего цикла PWM, подтвердите заданное направление, затем постепенно увеличивайте его. Запишите минимальную команду, надёжно запускающую двигатель. Статическое трение создаёт мёртвую зону, поэтому команды ниже этого порога могут гудеть без движения.

Затем сравните режимы остановки. При холостом ходе мост переводится в неактивное состояние, и инерция замедляет двигатель. При динамическом торможении выводы двигателя замыкаются через мост, вращающийся двигатель рассеивает энергию и останавливается быстрее. Торможение создаёт больше электрической и механической нагрузки, поэтому применяйте его осознанно.

Наконец, поставьте робота на пол и повторите испытание. Двигатель, испытанный без нагрузки, может вызвать просадку питания контроллера при реальной нагрузке. Следите за напряжением питания при запуске и убедитесь, что драйвер не перегревается.

Диагностируйте типичные сбои

  • Контроллер перезагружается при запуске двигателя: питание проседает или шум двигателя достигает логической шины. Используйте достаточный ток аккумулятора, локальную развязку, чистое заземление и при необходимости отдельное питание логики.
  • Двигатель работает только в одну сторону: проверьте оба логических входа драйвера и убедитесь, что режим ожидания или сигнал разрешения активирован.
  • Скорость почти не меняется от PWM: проверьте, что выбранный вывод действительно поддерживает PWM и что драйвер принимает PWM на этом входе.
  • Драйвер становится горячим: сравните рабочий ток и ток срыва с номинальным непрерывным значением, проверьте падение напряжения и убедитесь, что привод не заклинил.
  • Показания датчиков становятся шумными: разделите проводку двигателя и датчиков, добавьте подавление, рекомендованное производителем двигателя и драйвера, и фильтруйте измерения только после исправления электрической части.

Когда один двигатель предсказуемо работает, продублируйте канал для робота с дифференциальным приводом. Симулятор робота, следующего по линии показывает, как две знаковые команды колёс превращаются в руление, а симулятор ПИД-регулятора (PID) — как обратная связь может регулировать скорость вместо использования исходного рабочего цикла PWM.

Сохраняйте аппаратные ручки калибровки

Два номинально одинаковых двигателя редко дают одинаковую скорость. Сохраняйте в программном обеспечении масштабный коэффициент для каждого колеса и минимальную команду запуска. Измеряйте, а не скрывайте несоответствие необъяснимым фиксированным смещением. Позже квадратурные энкодеры смогут замкнуть контур и корректировать скорость по мере изменения напряжения аккумулятора и нагрузки.

Исследуйте граф

Входит в эти сборки

Проекты и учебные пути, в которые входит это руководство.

Дополнительные материалы

Источники