Он работает в диапазоне напряжений от 2.7 В до 10.8 В и может непрерывно обеспечивать ток до 1,2 А на канал. Кроме того, он выдерживает пиковые токи до 2 А на канал в течение нескольких секунд. DRV8833 также содержит ряд защитных функций, таких как блокировка при пониженном напряжении, защита от сверхтока и перегрева, обеспечивая высокий уровень надёжности. Он также включает режим пониженного энергопотребления (сна), который позволяет экономить энергию, особенно когда двигатели не используются.
Схема платы драйвера

Распиновка

- VCC – Вывод подачи питания моторов и драйвера от 2.7 до 10.8 В
- GND – Общий вывод питания
- IN1, IN2 – Входы управления первым мотором
- IN3, IN4 – Входы управления вторым мотором
- OUT1, OUT2 – Выходы подключения первого мотора
- OUT3, OUT4 – Выходы подключения второго мотора
- EEP – Вход установки спящего режима, задаётся низким логическим уровнем
- ULT – Выход аварийного сигнала. Низкий уровень сигнализирует о перегрузки по току, перегреву чипа, или низкому напряжению. В рабочем режиме вывод отключён (плавающий сигнал).
Пины питания:
VCC и GND – это места подключения источника питания, который приводит в действие двигатели, и который может находиться в диапазоне от 2.7 В до 10.8 В. Обратите внимание, что DRV8833 может работать с напряжением всего от 2.7 В. Это означает, что он идеально подходит для низковольтных проектов, например, работающих от 1S LiPo-аккумуляторов и низковольтных двигателей.
Выходные контакты:
Выходные контакты драйвера DRV8825, а именно OUT1, OUT2, OUT3 и OUT4, удобно расположены на одной стороне модуля для лёгкого подключения.
Контакты управления:
Каждый двигатель имеет два управляющих входа; IN1 и IN2 – управляющие входы для двигателя A, а IN3 и IN4 – для двигателя B. Эти управляющие входы позволяют контролировать как скорость, так и направление вращения двигателя.
Управление направлением:
Направление вращения двигателя можно контролировать, подавая логическую единицу или логический ноль на эти входы. Таблица истинности ниже показывает, как входы влияют на выходы драйвера.
| Таблица истинности | ||
|---|---|---|
| IN1/IN3 | IN2/IN4 | Направление вращения |
| Низкий (0) | Низкий (0) | Двигатель ВЫКЛ |
| Высокий (1) | Низкий (0) | Вперёд |
| Низкий (0) | Высокий (1) | Назад |
| Высокий (1) | Высокий (1) | Двигатель ВЫКЛ |
Управление скоростью:
Если вы хотите управлять скоростью, вы можете использовать ШИМ на контакте, который обычно находится в высоком состоянии. Если управление скоростью не требуется, просто установите их в ВЫСОКОЕ или НИЗКОЕ состояние. Обратите внимание, что управляющие входы внутренне подтянуты к низкому уровню, что по умолчанию отключает выходы драйвера двигателя.
Контакт режима сна:
Контакт SLEEP (обозначенный как EEP) управляет режимом сна. Подача низкого уровня на этот контакт переводит DRV8833 в режим сна с пониженным энергопотреблением, а подача высокого уровня снова активирует его. В этом режиме H-мосты отключаются, зарядный насос затвора останавливается, вся внутренняя логика сбрасывается, все внутренние тактовые генераторы останавливаются, и все входы игнорируются. Важно отметить, что при выходе из режима сна драйверу двигателя требуется немного времени, до 1 мс, чтобы снова полностью заработать.
По умолчанию контакт SLEEP подтянут к высокому уровню на плате, поэтому, если вы не планируете использовать режим сна с пониженным энергопотреблением, вы можете просто оставить его неподключённым.
На обратной стороне модуля DRV8833 имеется перемычка J1. По умолчанию J1 замкнута, что подключает встроенный подтягивающий резистор к контакту SLEEP, тем самым поддерживая DRV8833 включённым. Однако, если вы разомкнёте J1, встроенный подтягивающий резистор отключается от контакта SLEEP. Это действие активирует встроенный подтягивающий резистор к низкому уровню, что означает, что DRV8833 по умолчанию будет оставаться отключённым. Поэтому, если вы решите разомкнуть J1, помните, что вам нужно будет вручную включать DRV8833 при необходимости.
Контакт обнаружения неисправностей:
Контакт FAULT (обозначенный как ULT) является выходом с открытым стоком, который притягивается к низкому уровню микросхемой всякий раз, когда возникает условие сверхтока, перегрева или пониженного напряжения. По умолчанию этот контакт остаётся в плавающем состоянии. Поэтому, если вы хотите отслеживать условия неисправности на драйвере, вам нужно подключить внешний подтягивающий резистор (или использовать вход микроконтроллера с включённым встроенным подтягивающим резистором).
Пример
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
// Определяем управляющие входы #define MOT_A1_PIN 10 #define MOT_A2_PIN 9 #define MOT_B1_PIN 6 #define MOT_B2_PIN 5 void setup(void) { // Устанавливаем все управляющие входы двигателей как ВЫХОДЫ pinMode(MOT_A1_PIN, OUTPUT); pinMode(MOT_A2_PIN, OUTPUT); pinMode(MOT_B1_PIN, OUTPUT); pinMode(MOT_B2_PIN, OUTPUT); // Выключаем двигатели - начальное состояние digitalWrite(MOT_A1_PIN, LOW); digitalWrite(MOT_A2_PIN, LOW); digitalWrite(MOT_B1_PIN, LOW); digitalWrite(MOT_B2_PIN, LOW); // Инициализируем последовательный порт UART на скорости 9600 бод Serial.begin(9600); } void loop(void) { // Генерируем фиксированную последовательность движений для демонстрации режимов работы двигателей. // Плавное увеличение скорости. for (int i = 0; i < 11; i++) { spin_and_wait(25 * i, 25 * i, 500); } // Полная скорость вперёд. spin_and_wait(255, 255, 2000); // Плавное увеличение скорости до полного реверса. for (int i = 0; i < 21 ; i++) { spin_and_wait(255 - 25 * i, 255 - 25 * i, 500); } // Полная скорость назад. spin_and_wait(-255, -255, 2000); // Стоп. spin_and_wait(0, 0, 2000); // Полная скорость, вперёд, поворот, назад и поворот для двухколёсной базы. spin_and_wait(255, 255, 2000); spin_and_wait(0, 0, 1000); spin_and_wait(-255, 255, 2000); spin_and_wait(0, 0, 1000); spin_and_wait(-255, -255, 2000); spin_and_wait(0, 0, 1000); spin_and_wait(255, -255, 2000); spin_and_wait(0, 0, 1000); } /// Устанавливает ток на канале двигателя с помощью ШИМ и логики направления. /// /// \param pwm Коэффициент заполнения ШИМ от -255 (полный реверс) до 255 (полный вперёд) /// \param IN1_PIN номер контакта xIN1 для данного канала /// \param IN2_PIN номер контакта xIN2 для данного канала void set_motor_pwm(int pwm, int IN1_PIN, int IN2_PIN) { if (pwm < 0) { // отрицательные скорости (реверс) analogWrite(IN1_PIN, -pwm); digitalWrite(IN2_PIN, LOW); } else { // стоп или движение вперёд digitalWrite(IN1_PIN, LOW); analogWrite(IN2_PIN, pwm); } } /// Устанавливает ток на обоих двигателях. /// /// \param pwm_A ШИМ двигателя A, от -255 до 255 /// \param pwm_B ШИМ двигателя B, от -255 до 255 void set_motor_currents(int pwm_A, int pwm_B) { set_motor_pwm(pwm_A, MOT_A1_PIN, MOT_A2_PIN); set_motor_pwm(pwm_B, MOT_B1_PIN, MOT_B2_PIN); // Выводим сообщение о состоянии в консоль. Serial.print("Set motor A PWM = "); Serial.print(pwm_A); Serial.print(" motor B PWM = "); Serial.println(pwm_B); } /// Простая функция для последовательности движений: устанавливает скорость и ждёт заданный интервал. /// /// \param pwm_A ШИМ двигателя A, от -255 до 255 /// \param pwm_B ШИМ двигателя B, от -255 до 255 /// \param duration задержка в миллисекундах void spin_and_wait(int pwm_A, int pwm_B, int duration) { set_motor_currents(pwm_A, pwm_B); delay(duration); } |









