Компонент · Драйвер
Драйвер двигателей TB6612FNG
TB6612FNG — два MOSFET H-моста, которые управляют двумя двигателями постоянного тока (DC), с почти нулевыми потерями напряжения. Эффективная замена L298N.
Что это такое
TB6612FNG — двойной H-мост для двигателей, выполняющий ту же задачу, что и L298N: располагается между логическими выводами микроконтроллера и двигателями, которым требуется гораздо больший ток, — но строит выходной каскад на MOSFET, а не на биполярных транзисторах. В этом изменении заключена вся суть: на MOSFET-ключе падает несколько десятых долей вольта, тогда как на каскаде L298N — около двух.
При батарее 6 V и двигателях 6 V эта разница составляет большую часть скорости. Она же определяет и нагрев: L298N требует радиатора при длительном токе, а плата TB6612FNG размером с почтовую марку лишь слегка теплеет.
Как им управлять
Каждый двигатель получает три сигнала, а вся микросхема — ещё один общий вывод:
- Два вывода направления (AIN1/AIN2 для двигателя A, BIN1/BIN2 для двигателя B) задают движение вперёд, назад, торможение или вращение по инерции.
- Один вывод PWM (PWMA или PWMB) задаёт скорость. В отличие от L298N, где PWM подаётся на разрешающий вывод, у TB6612FNG есть отдельный вход PWM для каждого канала с частотой до 100 kHz — достаточно высокой, чтобы переключение происходило выше слышимого диапазона и робот перестал издавать высокий звук.
- Один общий вывод STBY. При низком уровне оба моста отключены независимо от остальных сигналов.
Вывод STBY стоит упомянуть повторно, поскольку из-за него начинающие теряют целый вечер: правильно подключённый TB6612FNG с STBY, оставленным в плавающем состоянии или имеющим низкий уровень, абсолютно ничего не делает, молча и без сообщения об ошибке.
Когда его следует использовать
Выбирайте TB6612FNG, когда двигатели небольшие, а каждый вольт батареи дорог, — именно таковы почти все роботы, следующие по линии, и роботы, проходящие лабиринт по линии. Маленькие роботы питаются от 6–7.4 V, то есть работают именно в диапазоне, где потеря 2 V на L298N особенно болезненна, и не хочят превращать заряд батареи в нагрев.
Оставайтесь с L298N, если питание двигателей выше 13.5 V, что TB6612FNG не принимает, либо требуется более 1.2 A непрерывно на канал.
Подключение и важные нюансы
- Подавайте на STBY высокий уровень. Это должно быть первым действием
setup()послеpinMode. - Два источника питания, одна земля. Батарея двигателей — к VM, 5 V Arduino — к VCC, а все земли соедините между собой: Arduino, драйвер, массив датчиков и минус батареи. Без общей земли сигналы управления не имеют опорного напряжения, а отказ возникает без сообщения.
- Соблюдайте предел 13.5 V. На плате нет встроенного регулятора и запаса выше максимального питания двигателей. Литиевый блок 3S с номиналом 12.6 V превысит предел сразу после зарядки.
- Если двигатель вращается не туда, исправление занимает две секунды. Поменяйте местами два выходных провода этого двигателя или измените логику направления в прошивке. Сделайте это до любой настройки, иначе будете искать ошибку регулирования, вызванную подключением.
Расположение выводов
На распространённой плате в стиле SparkFun расположены два ряда: логика с одной стороны, питание и двигатели с другой.
| Сторона | Вывод | Назначение |
|---|---|---|
| Логика | VCC |
Логическое питание 2.7–5.5 V от микроконтроллера |
| Логика | GND |
Земля. Все земли робота соединяются здесь |
| Логика | STBY |
Ожидание, активный низкий уровень. LOW = оба моста молча отключены |
| Логика | AIN1, AIN2 |
Направление двигателя A |
| Логика | PWMA |
Скорость двигателя A. Допускает до 100 kHz |
| Логика | BIN1, BIN2 |
Направление двигателя B |
| Логика | PWMB |
Скорость двигателя B |
| Питание | VM |
Питание двигателей 2.5–13.5 V. Без регулятора и запаса |
| Питание | GND |
Земля двигателей |
| Двигатели | AO1, AO2 |
Клеммы двигателя A |
| Двигатели | AO1, AO2 |
Клеммы двигателя B (BO1, BO2) |
Таблица истинности
STBY |
IN1 |
IN2 |
PWM |
Результат |
|---|---|---|---|---|
| LOW | × | × | × | Ничего. Оба моста выключены, ошибки и подсказки нет |
| HIGH | HIGH | LOW | PWM | Вперёд с заданной скважностью |
| HIGH | LOW | HIGH | PWM | Назад с заданной скважностью |
| HIGH | HIGH | HIGH | × | Короткое торможение |
| HIGH | LOW | LOW | HIGH | Вращение по инерции |
Первая строка стоит людям целого вечера. Идеально подключённая плата с STBY, оставленным в плавающем состоянии, абсолютно ничего не делает, а именно таким является неуправляемый вывод. Подавайте на него высокий уровень в setup(), первой строкой после pinMode.
Подключение к Arduino
| TB6612FNG | Arduino Uno | Примечание |
|---|---|---|
VCC |
5 V | Только логика, несколько миллиампер |
GND |
GND | Также к минусу батареи и земле каждого датчика |
STBY |
Вывод 12 | Либо соединить с 5 V через 10 kΩ, если отключение не требуется |
PWMA |
Вывод 9 | Должен поддерживать PWM |
AIN1 |
Вывод 8 | |
AIN2 |
Вывод 7 | |
PWMB |
Вывод 3 | Должен поддерживать PWM |
BIN1 |
Вывод 5 | |
BIN2 |
Вывод 4 | |
VM |
Плюс батареи двигателей | 2.5–13.5 V — проверьте реальное напряжение свежего блока |
Минимальный рабочий код
const int STBY = 12;
const int PWMA = 9, AIN1 = 8, AIN2 = 7;
const int PWMB = 3, BIN1 = 5, BIN2 = 4;
void setup() {
for (int p : {STBY, PWMA, AIN1, AIN2, PWMB, BIN1, BIN2}) pinMode(p, OUTPUT);
digitalWrite(STBY, HIGH); // without this, nothing happens at all
}
// speed: -255..255
void driveA(int speed) {
speed = constrain(speed, -255, 255);
digitalWrite(AIN1, speed > 0);
digitalWrite(AIN2, speed < 0);
analogWrite(PWMA, abs(speed));
}
void brakeA() { // short brake: both direction pins high
digitalWrite(AIN1, HIGH);
digitalWrite(AIN2, HIGH);
}
void loop() {
driveA(200); delay(1000);
brakeA(); delay(300);
driveA(-200); delay(1000);
brakeA(); delay(300);
}
Как избавиться от высокого звука
Это тихая сверхспособность TB6612FNG, которой почти никто не пользуется. Драйвер принимает PWM до 100 kHz, но analogWrite Arduino Uno на большинстве выводов работает на 490 Hz, а на выводах 5 и 6 — на 980 Hz. Это прямо в слышимом диапазоне, поэтому во время движения робот «поёт».
Человеческое слуховое восприятие заканчивается около 20 kHz. Поднимите частоту PWM выше этого значения, и шум полностью исчезнет. На Uno выводы 9 и 10 управляются Timer 1, который можно перенастроить:
void setup() {
// Timer1 (pins 9, 10): phase-correct PWM, no prescaler -> ~31.4 kHz
TCCR1B = (TCCR1B & 0b11111000) | 0x01;
}
Одна эта строка переносит частоту переключения примерно на 31 kHz — неслышимую и всё ещё намного ниже допустимой для драйвера. Цена состоит в том, что Timer 1 также использует библиотека Servo, поэтому оба режима нельзя совместить на одном таймере.
L298N не позволяет подняться так высоко: его биполярный каскад переключается слишком медленно, а потери резко растут с частотой. Это реальное практическое преимущество MOSFET-каскада помимо числовой эффективности.
Что дают 0.5 V вместо 2 V
| Источник питания | L298N подаёт двигателю | TB6612FNG подаёт двигателю | Дополнительно доступно |
|---|---|---|---|
| 6 V (4×AA) | ~4.0 V | ~5.5 V | +38% |
| 7.4 V (2S Li-ion) | ~5.4 V | ~6.9 V | +28% |
| 12 V | ~10.0 V | ~11.5 V | +15% |
Чем ниже напряжение питания, тем важнее разница — полностью противоположно ожиданиям людей и именно поэтому замена так сильно меняет впечатление от маленьких роботов.
Есть и тепловое следствие. При 1 A на канал L298N рассеивает примерно 2 W на канал; TB6612FNG рассеивает около 0.5 W суммарно на обоих каналах. Это разница между деталью, которой нужны радиатор и воздушный поток, и деталью, которую можно спрятать под платформой.
Диагностика
| Симптом | Вероятная причина | Исправление |
|---|---|---|
| Совсем ничего не происходит | STBY не задействован или имеет LOW |
Подать HIGH — это первое, что нужно проверить каждый раз |
Ничего не происходит, STBY имеет высокий уровень |
Нет общей земли | Соединить драйвер, плату, датчики и минус батареи |
| Один двигатель вращается назад | Обратные провода или логика | Поменять два выходных провода двигателя или инвертировать логику |
| Скорость только включается и выключается | Вывод PWM не поддерживает PWM | Использовать 3, 5, 6, 9, 10 или 11 на Uno |
| Громкий высокий звук при движении | PWM в слышимом диапазоне | Поднять частоту таймера выше ~20 kHz |
| Драйвер перегрелся и вышел из строя | VM выше 13.5 V |
Свежий блок 3S имеет 12.6 V и растёт; проверить под зарядкой |
| Двигатели прерывисто вращаются под нагрузкой | Просадка питания или более 1.2 A непрерывно | Более ёмкий блок или параллельно соединить два канала для одного двигателя |
| Работает на стенде, но не на ковре | Непрерывный ток выше номинала | Ковёр увеличивает нагрузку; измерить ток мультиметром в реальных условиях |
Два канала можно параллельно подключить к одному двигателю: соединить AIN1 с BIN1, AIN2 с BIN2, PWMA с PWMB и выходы между собой, получив примерно 2.4 A непрерывно. Техническое описание это поддерживает, и это стандартное решение, когда мощности одного двигателя немного не хватает.
Когда TB6612FNG — неверный выбор
Для небольших роботов это правильный вариант по умолчанию, но есть три явных исключения.
Выше 13.5 V. Нет запаса и регулятора. Блок 4S исключён, а блок 3S требует проверки сразу после зарядки.
Выше ~1.2 A непрерывно на канал, причём параллельного соединения каналов недостаточно. L298N обеспечивает 2 A на канал с радиатором, а BTS7960 рассчитан на 43 A для действительно крупных двигателей.
Когда нужны измерение или ограничение тока. DRV8833 во всех остальных отношениях близок к TB6612FNG и добавляет ограничение тока, позволяя драйверу защититься от останова без надежды на то, что программное обеспечение заметит его вовремя.
Исследуйте граф
Используется в этих сборках
Проекты, учебные пути и симуляторы, в которых используется Драйвер двигателей TB6612FNG.
- ПроектРобот на ROS 2 находит маркер и подъезжает к нему
- ПроектРобот, удерживающий равновесие, на MPU6050 и ПИД-регуляторе (PID)
- ПроектСоберите Micromouse для прохождения лабиринта
- ПроектСоберите мини-робота сумо: сцепление, клин и датчики края
- ПроектСоберите робота для лабиринта из ленты с памятью LSRB
- ПроектСоберите робота для покрытия помещения
- ПроектСоберите робота на колёсах Mecanum, который едет боком
- ПроектСоберите робота-ровера для путевых точек GPS
- Учебный путьУправление двигателями роботов: дорожная карта обучения
Сравнение
Альтернативы
Вопросы
Драйвер двигателей TB6612FNG: частые вопросы
Что такое драйвер двигателей TB6612FNG?
TB6612FNG — двойной H-мост на MOSFET вместо более старых биполярных транзисторов. Он принимает маломощные сигналы направления и PWM от микроконтроллера и переключает отдельное питание двигателей, независимо управляя двумя двигателями постоянного тока; обеспечивает 1.2 A непрерывно на канал с пиками 3.2 A.
TB6612FNG лучше L298N?
Для небольших двигателей робота — да. Транзисторный выходной каскад L298N теряет примерно 2 V до того, как двигатель увидит напряжение, поэтому двигатель 6 V от блока 6 V работает вяло, а микросхеме нужен радиатор. MOSFET-каскад TB6612FNG теряет несколько десятых долей вольта, работает без радиатора и значительно меньше. L298N остаётся лучше, когда нужно питание двигателей выше 13.5 V, которое TB6612FNG не принимает.
Как подключить TB6612FNG к Arduino?
Плюс батареи двигателей подключите к VM, 5 V Arduino — к VCC, а все земли соедините между собой: Arduino, драйвер, датчики и минус батареи. Затем подключите STBY к цифровому выводу, а для каждого двигателя — два вывода направления (AIN1/AIN2 или BIN1/BIN2) и один вывод PWM (PWMA или PWMB). Двигатели подключаются к клеммам AO1/AO2 и BO1/BO2.
Для чего на TB6612FNG нужен вывод STBY?
STBY включает режим ожидания всей микросхемы. При низком уровне оба моста отключены, и двигатели вращаются по инерции независимо от состояния остальных выводов. Перед началом движения необходимо подать высокий уровень; забыть об этом — самая частая причина того, что только что подключённый TB6612FNG вообще ничего не делает.
Какой ток выдерживает TB6612FNG?
1.2 A непрерывно на канал и кратковременно до 3.2 A. Это с запасом покрывает небольшие жёлтые редукторные двигатели и двигатели N20, применяемые в роботах, следующих по линии, и проходящих лабиринт. Более крупные двигатели, у которых ток останова превышает 1.2 A, вызовут тепловую защиту, поэтому переходите на DRV8871 или полноценный коллекторный ESC.
Дополнительные материалы