DRV8833: Компактный двухканальный драйвер
DRV8833 — это современный компактный драйвер двух DC-моторов от Texas Instruments. Он построен на MOSFET-транзисторах, что обеспечивает минимальные потери и высокую эффективность — критически важные качества для роботов на батарейном питании. В 2026 году это один из лучших выборов для мини-роботов, колёсных платформ и образовательных проектов.
Характеристики
| Параметр | Значение |
|---|---|
| Напряжение питания (VM) | 2.7V – 10.8V |
| Ток на канал (постоянный) | 1.5A |
| Ток на канал (пиковый) | 2.0A |
| Падение напряжения | ~0.2V (при 1A) |
| Режимы работы | H-мост, полумост |
| Защита | Перегрев, перегрузка, недонапряжение |
| Форм-фактор | Breakout-плата ~15×20 мм |
Преимущества перед L298N
| Параметр | L298N | DRV8833 |
|---|---|---|
| Технология | BJT | MOSFET |
| Падение напряжения | ~2V | ~0.2V |
| КПД | 70-80% | >95% |
| Нагрев | Сильный | Минимальный |
| Размер | 43×43 мм | 15×20 мм |
| Идеально для | Питание от сети | Батарейки |
Пример: Если у вас 4 батарейки AA (6V), то с L298N мотор получит ~4V, а с DRV8833 — почти все 6V!
Распиновка модуля
┌───────────────┐
EEP ┤ 1 10├ GND
VM ┤ 2 9├ OUT1
GND ┤ 3 8├ OUT2
IN1 ┤ 4 7├ OUT3
IN2 ┤ 5 6├ OUT4
└───────────────┘
Также есть:
- nSLEEP (включение, подтянут к HIGH)
- nFAULT (выход ошибки)
Назначение выводов
| Пин | Назначение | Описание |
|---|---|---|
| VM | Питание моторов | 2.7-10.8V |
| GND | Земля | Общая |
| IN1, IN2 | Управление мотором A | PWM + направление |
| IN3, IN4 | Управление мотором B | PWM + направление |
| OUT1, OUT2 | Выход на мотор A | |
| OUT3, OUT4 | Выход на мотор B | |
| nSLEEP | Режим сна | HIGH=работа, LOW=сон |
| nFAULT | Индикатор ошибки | LOW при перегреве |
| EEP | Режим EEP | Обычно не используется |
Режимы управления
DRV8833 использует прямую ШИМ-модуляцию на входах IN, без отдельного пина Enable (как у L298N).
Таблица истинности (один канал)
| IN1 | IN2 | Режим | Мотор |
|---|---|---|---|
| PWM | LOW | Вперёд | Скорость = PWM |
| LOW | PWM | Назад | Скорость = PWM |
| LOW | LOW | Свободный ход | Coast |
| HIGH | HIGH | Торможение | Brake |
Slow Decay vs Fast Decay
DRV8833 поддерживает оба режима рекуперации тока:
- Fast Decay (быстрый спад): Ток через мотор быстро падает → резкое торможение, но больше шума
- Slow Decay (медленный спад): Ток спадает медленно → плавное торможение, меньше пульсаций
По умолчанию используется Fast Decay, но можно комбинировать режимы через управление IN.
Схема подключения
Базовая схема (2 мотора)
Arduino Uno DRV8833 Моторы
5V ──────────────────── nSLEEP (подтяжка или VCC)
GND ──────────────────── GND ─────────────────── GND (питание)
D5 (PWM) ────────────── IN1
D6 (PWM) ────────────── IN2 OUT1 ───────────── Мотор A (+)
OUT2 ───────────── Мотор A (-)
D9 (PWM) ────────────── IN3
D10 (PWM) ────────────── IN4 OUT3 ───────────── Мотор B (+)
OUT4 ───────────── Мотор B (-)
VM ─────────────────────── +5V...10V (батарея)
GND ─────────────────────── GND (батарея)
С обратной связью по ошибке
const int nFAULT = 7; // Подключить к nFAULT драйвера
void setup() {
pinMode(nFAULT, INPUT_PULLUP);
}
void loop() {
if (digitalRead(nFAULT) == LOW) {
// Ошибка! Перегрев или перегрузка
stopAllMotors();
Serial.println("FAULT detected!");
}
}
Программная реализация
Базовый класс для мотора
class Motor {
private:
int pin1, pin2;
public:
Motor(int in1, int in2) : pin1(in1), pin2(in2) {
pinMode(pin1, OUTPUT);
pinMode(pin2, OUTPUT);
}
// Скорость: -255 до +255
void setSpeed(int speed) {
speed = constrain(speed, -255, 255);
if (speed > 0) {
analogWrite(pin1, speed);
digitalWrite(pin2, LOW);
} else if (speed < 0) {
digitalWrite(pin1, LOW);
analogWrite(pin2, -speed);
} else {
// Торможение
digitalWrite(pin1, HIGH);
digitalWrite(pin2, HIGH);
}
}
void coast() {
digitalWrite(pin1, LOW);
digitalWrite(pin2, LOW);
}
void brake() {
digitalWrite(pin1, HIGH);
digitalWrite(pin2, HIGH);
}
};
// Использование:
Motor motorA(5, 6);
Motor motorB(9, 10);
void loop() {
motorA.setSpeed(200); // Вперёд 78%
motorB.setSpeed(-150); // Назад 59%
delay(2000);
motorA.brake();
motorB.brake();
delay(500);
}
Управление робо-платформой
class DifferentialDrive {
private:
Motor& leftMotor;
Motor& rightMotor;
public:
DifferentialDrive(Motor& left, Motor& right)
: leftMotor(left), rightMotor(right) {}
void forward(int speed) {
leftMotor.setSpeed(speed);
rightMotor.setSpeed(speed);
}
void backward(int speed) {
leftMotor.setSpeed(-speed);
rightMotor.setSpeed(-speed);
}
void turnLeft(int speed) {
leftMotor.setSpeed(-speed);
rightMotor.setSpeed(speed);
}
void turnRight(int speed) {
leftMotor.setSpeed(speed);
rightMotor.setSpeed(-speed);
}
// Arcade drive (как джойстик)
void arcadeDrive(int throttle, int steering) {
int left = constrain(throttle + steering, -255, 255);
int right = constrain(throttle - steering, -255, 255);
leftMotor.setSpeed(left);
rightMotor.setSpeed(right);
}
void stop() {
leftMotor.brake();
rightMotor.brake();
}
};
// Использование:
Motor leftMotor(5, 6);
Motor rightMotor(9, 10);
DifferentialDrive robot(leftMotor, rightMotor);
void loop() {
robot.forward(200);
delay(1000);
robot.turnLeft(150);
delay(500);
robot.stop();
delay(500);
}
Особенности питания
Диапазон напряжений
| Источник питания | Напряжение | Совместимость |
|---|---|---|
| 2× AA/AAA | 3V | ✅ Минимум |
| 4× AA/AAA | 6V | ✅ Оптимум |
| 1S Li-Ion/LiPo | 3.7V (nom) | ✅ Хорошо |
| 2S Li-Ion/LiPo | 7.4V (nom) | ✅ Отлично |
| 3S Li-Ion/LiPo | 11.1V | ⚠️ На пределе! |
| 12V адаптер | 12V | ❌ Превышено |
Важно: Максимум 10.8V! При превышении драйвер сгорит.
Управление режимом сна
const int nSLEEP = 4;
void enableDriver() {
digitalWrite(nSLEEP, HIGH);
}
void disableDriver() {
digitalWrite(nSLEEP, LOW); // Ток потребления < 1 мкА
}
Режим сна полезен для экономии батареи, когда робот стоит.
Типичные проблемы
Мотор не крутится
- Проверьте nSLEEP (должен быть HIGH)
- Проверьте питание VM (2.7-10.8V)
- Проверьте, что IN подключены к PWM-пинам
Мотор дёргается
- Добавьте керамический конденсатор 100 нФ на клеммы мотора
- Добавьте электролит 100 мкФ на VM
Драйвер перегревается
- Превышен ток (>1.5A постоянно)
- Напряжение близко к пределу
- Плохая вентиляция
nFAULT срабатывает
- Короткое замыкание в моторе
- Заклинивание механики
- Перегрев — дайте остыть
Сравнение с TB6612FNG
| Параметр | DRV8833 | TB6612FNG |
|---|---|---|
| Напряжение | 2.7-10.8V | До 15V |
| Ток | 1.5A | 1.2A (3A пик) |
| Режим сна | ✅ | ✅ (STBY) |
| Fault output | ✅ | ❌ |
| Размер | ~15×20 мм | ~20×25 мм |
| Цена | $ | $$ |
Вывод: DRV8833 — чуть дешевле и компактнее, TB6612 — чуть мощнее. Оба отличные выборы для батарейных роботов.
Применение
- Мини-роботы — Sumo, Line Follower, Maze Solver
- Колёсные платформы — 2WD и 4WD шасси
- Образовательные проекты — Arduino-роботы
- RC-модели — машинки, танки
- Домашняя автоматика — моторизованные шторы, кормушки
