Skip to main content

DRV8833: Компактный двухканальный драйвер

DRV8833 — это современный компактный драйвер двух DC-моторов от Texas Instruments. Он построен на MOSFET-транзисторах, что обеспечивает минимальные потери и высокую эффективность — критически важные качества для роботов на батарейном питании. В 2026 году это один из лучших выборов для мини-роботов, колёсных платформ и образовательных проектов.

Характеристики

ПараметрЗначение
Напряжение питания (VM)2.7V – 10.8V
Ток на канал (постоянный)1.5A
Ток на канал (пиковый)2.0A
Падение напряжения~0.2V (при 1A)
Режимы работыH-мост, полумост
ЗащитаПерегрев, перегрузка, недонапряжение
Форм-факторBreakout-плата ~15×20 мм

Преимущества перед L298N

ПараметрL298NDRV8833
ТехнологияBJTMOSFET
Падение напряжения~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Управление мотором APWM + направление
IN3, IN4Управление мотором BPWM + направление
OUT1, OUT2Выход на мотор A
OUT3, OUT4Выход на мотор B
nSLEEPРежим снаHIGH=работа, LOW=сон
nFAULTИндикатор ошибкиLOW при перегреве
EEPРежим EEPОбычно не используется

Режимы управления

DRV8833 использует прямую ШИМ-модуляцию на входах IN, без отдельного пина Enable (как у L298N).

Таблица истинности (один канал)

IN1IN2РежимМотор
PWMLOWВперёдСкорость = PWM
LOWPWMНазадСкорость = PWM
LOWLOWСвободный ходCoast
HIGHHIGHТорможение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/AAA3V✅ Минимум
4× AA/AAA6V✅ Оптимум
1S Li-Ion/LiPo3.7V (nom)✅ Хорошо
2S Li-Ion/LiPo7.4V (nom)✅ Отлично
3S Li-Ion/LiPo11.1V⚠️ На пределе!
12V адаптер12V❌ Превышено

Важно: Максимум 10.8V! При превышении драйвер сгорит.

Управление режимом сна

const int nSLEEP = 4;

void enableDriver() {
  digitalWrite(nSLEEP, HIGH);
}

void disableDriver() {
  digitalWrite(nSLEEP, LOW);  // Ток потребления < 1 мкА
}

Режим сна полезен для экономии батареи, когда робот стоит.

Типичные проблемы

Мотор не крутится

  1. Проверьте nSLEEP (должен быть HIGH)
  2. Проверьте питание VM (2.7-10.8V)
  3. Проверьте, что IN подключены к PWM-пинам

Мотор дёргается

  1. Добавьте керамический конденсатор 100 нФ на клеммы мотора
  2. Добавьте электролит 100 мкФ на VM

Драйвер перегревается

  1. Превышен ток (>1.5A постоянно)
  2. Напряжение близко к пределу
  3. Плохая вентиляция

nFAULT срабатывает

  1. Короткое замыкание в моторе
  2. Заклинивание механики
  3. Перегрев — дайте остыть

Сравнение с TB6612FNG

ПараметрDRV8833TB6612FNG
Напряжение2.7-10.8VДо 15V
Ток1.5A1.2A (3A пик)
Режим сна✅ (STBY)
Fault output
Размер~15×20 мм~20×25 мм
Цена$$$

Вывод: DRV8833 — чуть дешевле и компактнее, TB6612 — чуть мощнее. Оба отличные выборы для батарейных роботов.

Применение

  1. Мини-роботы — Sumo, Line Follower, Maze Solver
  2. Колёсные платформы — 2WD и 4WD шасси
  3. Образовательные проекты — Arduino-роботы
  4. RC-модели — машинки, танки
  5. Домашняя автоматика — моторизованные шторы, кормушки