Питание Raspberrypi

Если поискать в интернете словосочетание “питание для raspberrypi”, то можно найти массу статей о том, что нужно использовать официальный блок питания на 5В и 2.5А. Но что, если RPi питается от солнечных панелей и в логах постоянно проскальзывает “Under-voltage detected!”? Для решения этой проблемы мне немного пришлось повозиться с теорией и корзиной для покупок.

Предыстория

Прежде, чем пытаться найти решение, нужно понять начальные условия. Для одной из своих станций слежения за спутниками я решил использовать солнечную панель. Для этого я купил солнечную панель на 30Вт, контроллер Epever Tracer и аккумулятор на 12В.

Несмотря на нелепый вид и кучу проводов, схема довольно продвинутая:

  • контроллер получает энергию от солнечной панели и питает нагрузку.
  • излишки идут на заряд аккумулятора. Он внизу.
  • ночью, когда панель не работает, аккумулятор питает нагрузку и немного разряжается.
  • температурный датчик (ещё один провод идущий вниз). Служит для температурной компенсации напряжения аккумулятора. Это позволяет заряжать аккумулятор оптимальным напряжением, которое зависит от температуры.
  • RPi (нагрузка) подключена через преобразователь напряжения DC-DC. Так как контроллер может выдавать только 12В, а USB работает на 5В, то нужен специальный преобразователь.
  • RPi по проводу USB-RJ45 считывает показатели контроллера и отправляет в influxdb. Для этого я написал отдельный проект epever-tracer-influxdb. О нём я постараюсь написать как-нибудь в другой раз.
  • К RPi подключен rtl-sdr, который и получает сигналы со спутников по антенне.

И всё это на удивление работает. За одним исключением: когда начинается запись пролёта спутника, логах появляются ошибки:

Aug 13 11:54:04 raspberrypi kernel: Under-voltage detected! (0x00050005)

Причём это случалось каждый раз, когда начиналась запись. Ясное дело, это было как-то связано с тем, что rtl-sdr включался на полную, начинал потреблять больше энергии и напряжение на RPi проседало. Но как это исправить без осциллографа и такой-то матери?

Немного теории

Дело явно не в контроллере, так как никакого проседания напряжения там не было:

Проседания тока тоже не было. Явно видно, что в момент пролёта спутника потребление возрастало до ~300мА.

Что-то явно было в DC-DC преобразователе и для этого мне пришлось погрузиться в теорию. Итак, что же происходит, когда включается rtl-sdr? Схематично процесс изображён ниже.

Напряжение
Напряжение
Under-voltage
Under-voltage
Ток
Ток
200мА
200мА
Text is not SVG - cannot display

В момент, когда включается rtl-sdr, мгновенно увеличивается потребление тока всей RasperryPi. При этом, напряжение в какой-то момент проседает, чтобы компенсировать выдачу необходимого тока. После совсем небольшого времени напряжение стабилизируется и всё продолжает работать. Именно этого падения напряжение и достаточно, чтобы RPi начал писать в логи ошибки.

Решение проблемы

Я ничего путного не придумал, кроме как купить другой преобразователь. У меня до этого был вот такой:

dcdc

Я нашёл подороже и с хорошими отзывами:

dcdc2

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

Выводы

Несмотря на то, что мне удалось разобраться с проблемой питания, во рту осталось горькое послевкусие. Я просто заменил один преобразователь на другой. Этот другой тоже мог быть недостаточно быстрым и я мог бы ещё долго чесать голову, пытаясь понять в чём же проблема. Но и на будущее у меня нет однозначного рецепта по выбору DC-DC преобразователя. На сайте в обоих случаях написано 5В 2.5А, тем не менее результаты разные. Тут либо надо смотреть на отзывы, либо покупать осциллограф и тестировать.