Питание8 мин чтения27 сентября 2026 г.

Почему робот перезагружается: батарейки, ток и просадки питания

Когда моторы трогаются или стопорятся, напряжение батареи проседает, и Arduino может перезагрузиться. Что такое просадка питания, как её узнать и как питать маленького робота, чтобы этого не было.

Фото: © Nevit Dilmen · CC BY-SA 3.0

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

Источник даёт напряжение, нагрузка берёт ток

Батарея предоставляет напряжение. Ток в детали она не проталкивает. Каждая деталь сама берёт столько тока, сколько ей нужно: Uno — немного, мотор в движении — больше, а застопоренный мотор — больше всех.

Идеальных батарей не бывает. У каждой есть небольшое внутреннее сопротивление, и на нём ток теряет часть напряжения. Чем больший ток берёт робот, тем ниже напряжение на клеммах батареи. У старых батареек внутреннее сопротивление больше, поэтому напряжение у них падает сильнее.

Цифры для робот-машины CoreEngine

Где Напряжение Почему
Четыре свежие алкалиновые батарейки AA около 6 В 4 × 1,5 В
Четыре почти разряженные батарейки около 4,8 В 4 × 1,2 В
Моторы, через L298N около 4,2 В из 6 В около 1,8 В остаётся внутри L298N
Пин 5V платы Uno, от +5V на L298N около 4,4 В из 6 В стабилизатору L298N нужно около 7 В, чтобы выдать полные 5 В
Порог просадки питания у Uno около 2,7 В ниже него чип сам себя сбрасывает

Слабое место — четвёртая строка. Стабилизатор L298N и так получает меньше, чем ему нужно, поэтому напряжение на его выходе следует за батареей. Когда батарея проседает на вольт, на пине 5V платы Uno напряжение тоже падает примерно на вольт.

Ток при пуске и при блокировке

Один мотор TT Ток
Вращается свободно, без нагрузки около 0,1–0,15 А
Везёт робота около 0,3 А
Застопорен: вал заблокирован, мощность полная примерно до 1 А

Вращающийся мотор сам вырабатывает напряжение, которое действует против батареи и сдерживает ток. Мотор, который стоит на месте, такого напряжения не вырабатывает, поэтому берёт наибольший ток. Так бывает, когда колёса заблокированы. Так бывает и на короткое мгновение при каждом пуске, пока мотор ещё не начал вращаться. Два мотора, которые трогаются одновременно, могут потребовать примерно до 2 А.

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

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

Как выглядит просадка питания

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

Просадка питания (brown-out) — это короткий провал напряжения. ATmega328P на плате Uno следит за своим напряжением питания. Если оно опускается ниже порога просадки (на Uno это около 2,7 В), чип удерживает себя в состоянии сброса. Когда напряжение возвращается, программа запускается заново, с самого начала. Между нормальным напряжением и этим порогом чип может продолжать работать, а может вести себя странно.

Типичные признаки:

  • setup() выполняется второй раз. Например, робот из проекта Первый заезд снова ждёт свою секунду и начинает новый квадрат.
  • Это случается, когда моторы трогаются, дают задний ход или стопорятся.
  • Со свежими батарейками всё работает, а когда они садятся, начинаются перезагрузки.
  • С подключённым USB-кабелем всё работает, а от одних батареек робот перезагружается. Через USB компьютер держит напряжение на 5V платы Uno стабильным.
  • Робот делает странные вещи, которые вы не можете объяснить, глядя в код.

Чтобы перезагрузки было легко заметить, пусть светодиод L на плате Uno (пин D13) три раза мигнёт в начале setup():

void setup() {
  pinMode(13, OUTPUT);             // the Uno's L LED
  for (int i = 0; i < 3; i++) {    // three quick blinks: "I have just started"
    digitalWrite(13, HIGH);
    delay(100);
    digitalWrite(13, LOW);
    delay(100);
  }
  // ...then the rest of your setup()
}

Если эти три вспышки появляются во время езды, значит, робот только что перезагрузился.

У USB тоже есть пределы

На столе Uno обычно работает от USB-кабеля. USB даёт около 5 В и не больше 500 мА. Для Uno, светодиода и HC-SR04 этого с запасом хватает, а для моторов — нет. Даже один сервопривод SG90, начиная движение, может на мгновение потребовать примерно до 0,7–1 А. В цепи питания от USB у Uno стоит самовосстанавливающийся предохранитель: если течёт слишком большой ток, он отключает питание, пока перегрузка не пройдёт.

Как это исправить

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

Аккумуляторы NiMH, но с одним условием. Аккумуляторы NiMH гораздо лучше держат напряжение при большом токе, поэтому просадки меньше. Но каждый даёт 1,2 В, а четыре — около 4,8 В. Тогда через стабилизатор L298N плата Uno и HC-SR04 получат заметно меньше 4,4 В. Используйте их вместе с отдельным питанием для Uno.

Два литий-ионных аккумулятора (2S), но осторожно. Два литий-ионных аккумулятора, соединённые последовательно, дают около 7,4 В: 8,4 В, когда полностью заряжены, и около 6 В, когда разряжены. Большую часть времени работы стабилизатор L298N получает нужные ему 7 В, так что Uno получает полноценные 5 В. Моторам после потерь в L298N достаётся около 5,6 В — в пределах их диапазона.

Конденсатор. Электролитический конденсатор на 100–470 мкФ между +12V и GND на L298N — это небольшой запас заряда прямо там, где нужен ток. Он покрывает первое мгновение броска тока, и просадка получается меньше. Соблюдайте полярность: полоска на корпусе отмечает минусовой вывод. Выберите конденсатор с рабочим напряжением выше, чем у вашей батареи, например на 16 В. При долгой блокировке вала он не поможет.

Раздельное питание. Пусть батарейки AA питают только +12V на L298N, а Uno дайте собственные 5 В, например от USB-пауэрбанка, подключённого к USB-разъёму платы. Тогда уберите провод от +5V на L298N к 5V на Uno, а HC-SR04 питайте от 5V платы Uno. Некоторые пауэрбанки отключаются, когда ток очень маленький, так что проверьте свой.

Общая земля. Что бы вы ни меняли, минус батареи, GND на L298N и GND на Uno должны оставаться соединёнными. Сигналы Uno измеряются относительно GND платы. Без общей земли L298N не сможет их прочитать.

Короткие провода питания. У длинного тонкого провода тоже есть сопротивление, и он добавляет свою просадку. Провода от батареи к L298N делайте короткими и не слишком тонкими.

Плавный код. Повышайте скорость ступенями, как это делает скетч MotorTest, а не скачком от 0 до 255. Перед задним ходом ненадолго остановитесь.

Что показывает симулятор

Симулятор CoreEngine проверяет подключение ещё до того, как робот поедет. Он предупреждает, если батарея подключена к пину 5V платы Uno: от этого плата сгорает. Предупреждает, если +5V от L298N идёт на VIN платы Uno: на VIN нужно подавать 7–12 В, потому что через него питается собственный стабилизатор Uno. Ещё он сообщает, если нет общей земли, нет батареи или у L298N нет питания моторов. А ещё отмечает, что стабилизатор L298N даёт от четырёх батареек AA чуть меньше 5 В, и это рабочий вариант, как и в настоящем наборе. На арене, пока вы ездите, показания батареи видны в реальном времени.

Сначала добейтесь правильного подключения в симуляторе. На настоящем роботе следите за признаками, описанными выше. Подробнее о моторах и их драйвере читайте в статьях Мотор-редукторы TT: что означают цифры и L298N, L9110S или TB6612: какой драйвер моторов выбрать?.