Компонент · Питание

Батарейный блок питания робота

Батарейный блок 9V для робота на колёсах: почему он проседает под двигателями, как выбрать блок AA или 18650 и защитить плату от перезагрузки.

Что это такое

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

Главная идея состоит в том, что у робота два совершенно разных аппетита на ток: двигатели поглощают его всплесками, а логика пьёт понемногу. Одна батарея может питать оба узла, но их необходимо подключить так, чтобы ненасытные двигатели не лишали питания чувствительного мозга.

Схема распределения питания: двухэлементный батарейный блок подаёт питание через красный провод Vin на плату драйвера двигателей L298N с рёбристым радиатором; драйвер питает два корпуса двигателей; стабилизированная линия 5 вольт питает плату Arduino, которая отправляет драйверу четыре провода сигналов PWM и направления; общая шина земли соединяет батарею, драйвер и Arduino снизу.
Один блок, две шины: двигатели потребляют большой ток через драйвер, Arduino работает от стабилизированных 5 V, а все части имеют общую землю. Скачать SVG

Как это работает

Проследите путь тока от батарейного блока:

  1. Батарея подаёт необработанное напряжение — 6 V от четырёх элементов AA или 7.4 V от двух 18650.
  2. Шина двигателей идёт непосредственно от блока на вход Vin драйвера L298N. Здесь возникает большой пульсирующий ток двигателей, полностью изолированный от Arduino.
  3. Шина логики обеспечивает стабилизированные 5 V (от встроенного регулятора драйвера или через USB) и питает Arduino и датчики чистым постоянным напряжением.
  4. Общая земля объединяет всю схему. Все шины должны иметь одну и ту же линию земли, иначе логические сигналы не получат общего опорного уровня, а показания станут бессмысленными.

При таком разделении двигатель, внезапно потребляющий целый ампер, может просадить только свою шину, не снижая 5 V на Arduino.

Почему батарея 9 V не подходит

Самая распространённая ошибка при создании первого робота — питание двигателей от прямоугольной батареи 9 V PP3. Она выглядит удобной, но имеет очень малую энергоёмкость и высокое внутреннее сопротивление. Как только двигатели начинают потреблять ток, напряжение падает — Arduino опускается ниже минимального уровня и перезагружается, поэтому робот дёргается и перезагружается по кругу. Батарея 9 V подходит для макетной платы, потребляющей ток в миллиамперах, но не для схем, приводящих в движение колёса.

Выбор и подключение

  • Согласуйте напряжение с двигателями. Двигатели 3–6 V нормально работают от блока 6 V или 7.4 V; ограничивайте скорость с помощью PWM, а не понижая напряжение блока.
  • Ёмкость определяет время работы. Большее значение mAh означает больше времени между зарядками; элементы 18650 работают намного дольше элементов AA, но требуют защищённого держателя.
  • Один выключатель, правильная полярность. Установите на блок главный выключатель и тщательно проверьте полярность перед первым включением — обратное питание может мгновенно вывести плату из строя.
  • Не допускайте обратного питания. Не питайте Arduino одновременно от USB и батареи, если плата не рассчитана на это.
  • Добавьте электролитический конденсатор параллельно питанию двигателей, чтобы поглотить бросок тока при запуске и стабилизировать шину.

Внутреннее сопротивление: число, определяющее всё

Любая батарея ведёт себя как идеальный источник напряжения с последовательным резистором. Именно этот резистор объясняет, почему один батарейный блок работает, а другой перезагружает плату.

V_under_load = V_open_circuit - (I x R_internal)

Если робот создаёт бросок 2 A через блок с внутренним сопротивлением 0.5 Ω, просадка достигает одного вольта ещё до того, как его увидит последующая схема. Вот что это означает для распространённых вариантов:

Блок Номинальное напряжение Типичное внутреннее сопротивление Просадка при 2 A Вердикт
Щелочная 9 V PP3 9 V 1.5–3 Ω 3–6 V Непригодна для двигателей
4×AA щелочные 6 V 0.6–1.2 Ω 1.2–2.4 V На пределе; быстро теряет мощность
4×AA NiMH 4.8 V 0.1–0.2 Ω 0.2–0.4 V Хорошо, но напряжение низкое
6×AA NiMH 7.2 V 0.15–0.3 Ω 0.3–0.6 V Надёжный вариант
2×18650 Li-ion 7.4 V 0.05–0.15 Ω 0.1–0.3 V Отлично
2S LiPo 7.4 V 0.02–0.05 Ω Менее 0.1 V Лучший вариант с оговорками по обращению

Эта таблица полностью объясняет поведение батареи 9 V. Дело не в неверном напряжении — в списке у неё самое высокое напряжение. При броске 2 A она отдаёт 3 V, и робот перезагружается. Напряжение без нагрузки ничего не сообщает; просадка под нагрузкой сообщает всё.

Измерьте свой блок за две минуты

1. Measure the pack's voltage with nothing connected.       -> V_open
2. Stall the motors and measure again while stalled.        -> V_load
3. Measure the stall current with the meter in series.      -> I
4. R_internal = (V_open - V_load) / I

Напишите маркером это число на батарейном блоке. Оно растёт по мере старения элементов, а блок, сопротивление которого удвоилось, уже начинает вызывать «случайные» перезагрузки.

Бюджет тока

Подсчитайте всё на бумаге до покупки. Используйте ток останова, а не типичный.

Устройство Типичный ток Пиковый ток / ток останова
Arduino Uno 45 mA 50 mA
ESP32 (активный Wi-Fi) 80 mA 500 mA всплесками
Редукторный двигатель TT ×2 300 mA 2 A
Редукторный двигатель N20 с металлической передачей ×2 200 mA 1.6 A
Сервопривод SG90 200 mA 650 mA
HC-SR04 15 mA 15 mA
MPU-6050 4 mA 4 mA
8-канальный IR-массив 100 mA 200 mA
NEO-6M GPS 45 mA 60 mA

Типичный робот, обходящий препятствия, — Uno, два двигателя TT и ультразвуковой датчик на сервоприводе — имеет бюджет примерно 360 mA в типичном режиме и 2.7 A в пиковом. Выбирайте блок по пиковому току, а время работы рассчитывайте по типичному:

runtime (hours) = capacity (mAh) / average draw (mA)

Ёмкость 2000 mAh у NiMH AA при токе 360 mA обеспечивает около 5.5 часов движения, что почти всегда значительно больше фактического времени работы батареи в большинстве роботов. Ёмкость редко становится ограничением — ограничивает именно способность выдерживать пиковый ток.

Правильное подключение

Battery + ──── master switch ──┬──── motor driver VM  (the heavy path)
                               │
                               └──── 5 V regulator ──── Arduino, sensors
Battery − ─────────────────────┴──── COMMON GROUND ──── everything

Четыре правила в порядке частоты их нарушения:

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

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

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

Защита от переполюсовки. Один последовательный диод Шоттки стоит ~0.3 V, а P-канальный MOSFET почти ничего не стоит. Любой вариант дешевле платы, которую уничтожит переполюсовка, — а невнимательность при подключении блока длится секунду.

Конденсаторы: что они устраняют, а что нет

Добавьте электролитический конденсатор 470–1000 µF параллельно питанию двигателей как можно ближе к драйверу. Это стоит сделать. Но от него часто ожидают больше, чем он может обеспечить.

Что он устраняет: резкие переходные процессы от PWM и коммутации двигателей; они возникают за микросекунды и попадают в шину логики в виде шума.

Чего он не может устранить: длительный бросок тока. Арифметика неумолима:

dV = I x t / C
1000 uF supplying 2 A for 10 ms -> dV = 2 x 0.01 / 0.001 = 20 V

Конденсатор, который должен обеспечить бросок 2 A от двигателя в течение 10 ms, должен был бы снизить напряжение на 20 V, а это больше, чем есть в батарейном блоке. Только более жёсткая батарея выдерживает бросок тока. Если плата перезагружается при запуске двигателей, увеличение ёмкости конденсатора не поможет — нужен блок с меньшим внутренним сопротивлением.

Также добавьте керамический конденсатор 100 nF рядом с выводом питания каждой микросхемы (IC). Это другая задача: он удовлетворяет высокочастотные требования к переключению самой микросхемы, с которыми электролитический конденсатор справляется слишком медленно.

Выбор химического состава

NiMH AA Li-ion 18650 LiPo
Напряжение элемента 1.2 V 3.7 V 3.7 V
Внутреннее сопротивление Низкое Очень низкое Наименьшее
Саморазряд Низкий (используйте элементы «готовые к работе») Очень низкий Очень низкий
Глубокий разряд Устойчив к глубокому разряду Повреждает ниже 3.0 V на элемент Повреждает ниже 3.0 V на элемент
Зарядка Простая, прощает ошибки Нужно полноценное зарядное устройство или BMS Нужно балансировочное зарядное устройство
Риск возгорания Пренебрежимо мал Реален при неправильном обращении Реален при неправильном обращении
Лучший выбор для Первого робота Большинства роботов Скоростных конструкций

NiMH — правильный первый выбор. Шесть элементов дают 7.2 V при низком внутреннем сопротивлении, прощают ошибки, а вышедший из строя блок становится лишь неудобством, а не происшествием.

Li-ion 18650 — разумное усовершенствование: при той же массе значительно больше энергии, очень низкое внутреннее сопротивление и низкая цена. Используйте защищённый держатель или плату BMS — литиевые элементы при напряжении ниже примерно 3.0 V на элемент получают необратимые повреждения, и робот, работающий до полной остановки, обязательно это сделает.

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

Диагностика

Симптом Вероятная причина Исправление
Плата перезагружается при запуске двигателей Просадка блока — слишком большое внутреннее сопротивление Измерьте его; единственное решение — блок с меньшим сопротивлением
Увеличение конденсатора не помогло Оно и не могло помочь См. расчёт выше; замените батарею
Ничего не работает и ничего не нагревается Нет общей земли Соедините все земли с одной точкой
Показания датчиков изменяются при работе двигателей Земля подключена цепочкой Подключите земли звездой к одной точке
Скорость робота падает во время работы Напряжение снижается по мере разряда блока Так и должно быть; замкните контур скорости или контролируйте блок
Двигатели изначально слабые Падение напряжения на драйвере плюс просадка блока На L298N теряется ~2 V до поступления напряжения на двигатель
Регулятор очень горячий Слишком большое напряжение на линейном регуляторе Используйте импульсный регулятор или снизьте входное напряжение
Блок нагревается во время зарядки Зарядное устройство не соответствует химическому составу Прекратите зарядку. Подберите зарядное устройство под элементы
Блок Li-ion вышел из строя и не заряжается Напряжение опустилось ниже 3.0 V на элемент Необратимо повреждён — в следующий раз используйте защищённый держатель

Контроль батарейного блока

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

// 100k / 33k divider: 8.4 V max in -> ~2.09 V at the pin. Safe for a 3.3 V ADC.
const float DIVIDER = (100.0 + 33.0) / 33.0;

float packVolts() {
  return analogRead(A0) * (5.0 / 1023.0) * DIVIDER;
}

Одна предосторожность, из-за которой это следует сделать внимательно: на Arduino функция analogRead ратиометрична относительно шины 5 V, а она сама проседает при работе двигателей. Измерение падающего напряжения батареи по падающему опорному уровню приводит к росту показания. Переключитесь на внутренний опорный уровень 1.1 V с помощью analogReference(INTERNAL), рассчитайте делитель для него, и показание станет достоверным — именно на эту ловушку подробно указано в руководстве по аналоговым входам.

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

Используется в этих сборках

Проекты, учебные пути и симуляторы, в которых используется Батарейный блок питания робота.

Вопросы

Батарейный блок питания робота: частые вопросы

Какую батарею использовать для робота на Arduino?

Стандартный выбор — блок 4×AA (6 V) или 2×18650 (7.4 V), питающий драйвер двигателей. Оба обеспечивают необходимый двигателям ток без опасной просадки под нагрузкой. На этапе разработки питайте Arduino от стабилизированного выхода 5 V драйвера или через USB.

Можно ли питать двигатели робота батареей 9 V?

Не слишком хорошо. У батареи 9 V PP3 очень малая ёмкость и высокое внутреннее сопротивление, поэтому как только двигатели начинают потреблять ток, напряжение проседает, Arduino переходит в режим просадки питания и перезагружается. Для схем с двигателями используйте блок AA или 18650, а батарею 9 V оставьте для макетной платы.

Используют ли Arduino и двигатели одну батарею?

Обычно используется один блок, но отдельные шины питания. Двигатели получают ток от блока через клемму Vin драйвера, а логика питается стабилизированным напряжением 5 V. Крайне важно, чтобы у всех источников была общая земля, иначе сигналы не получат общего опорного уровня и данные станут неверными.

Почему мой робот перезагружается при запуске двигателей?

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

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

Источники