Схема для безопасного отключения питания Raspberry Pi

8

Я хочу использовать Raspberry Pi в качестве сервера XBMC в автомобиле. Документы XBMC говорят, что вы всегда должны использовать команду выключения перед отключением питания. Я не хочу (скажу моей жене) войти в систему Pi и выключить ее перед тем, как выключить машину - я хочу иметь возможность

Я думал, что можно создать простую схему с конденсатором и, возможно, диодом, чтобы определять, когда источник питания отключен (и вызывать прерывание на одном из выводов GPIO), но конденсатор будет обеспечивать ток достаточно долго. для правильного выключения системы.

Это выглядит правильным и достаточным?

второй проект

Схема будет питаться от автомобильного аккумулятора - от 12,6 до 11,7 В. Raspberry Pi потребляет 5 В (от 5,25 до 4,75 В) и потребляет 700-1200 мА. Я еще не рассчитал время, но я предполагаю, что процесс выключения, вероятно, займет около 5 секунд.

Итак, я полагаю, что мне нужно знать:

  • Какой тип конденсатора мне понадобится, чтобы хранить достаточно заряда, чтобы Pi работал достаточно долго, чтобы XBMC правильно выключился?

  • Учитывая, что порт GPIO Rasperry Pi потребляет 3,3 В, что является лучшим компаратором / операционным усилителем для использования (полагаю, я мог бы использовать пару резисторов, чтобы снизить выходной сигнал с 5 до 3,3)

  • Будет ли какая-то выгода в том, чтобы линия GPIO была нормально высокой или нормально низкой?

Николас Альбион
источник
Этот IC: linear.com/product/LTC2935 может быть интересен для вас.
Bitrex
3
В соответствии с ответом ниже в концепции, ваша идея в порядке, но потребует очень больших заглавных букв. Вы также можете посмотреть на питание Pi от чего-то постоянно, а затем просто использовать зажигание, чтобы начать отключение, и, возможно, таймер, чтобы полностью отключить питание через минуту или около того.
PeterJ
Это хорошая идея @PeterJ - вероятно, будет намного дешевле. Не могли бы вы уточнить это в форме ответа?
Николас Альбион
Вместо того, чтобы питать RPi от конденсатора в течение нескольких секунд после выключения зажигания, я думаю, что имеет больше смысла использовать реле, управляемое и питаемое от 555, для переключения на батарею. Я создал еще один вопрос: electronics.stackexchange.com/questions/61877/…
Николас Альбион

Ответы:

4

Альтернативной стратегией было бы непрерывное питание Raspberry Pi и использование линии зажигания для запуска последовательности выключения. Я делал это в прошлом, но с системами, где точное решение не применимо к Pi, но в целом:

Для достижения максимальной эффективности используйте преобразователь постоянного тока. Существует множество примеров, но ниже приведен один пример того, что было бы удобно использовать, и он может подавать 1A при 5 В от входа 6,5 В до 32 В:

http://www.digikey.com/product-detail/en/V7805-1000/102-1715-ND/1828608

Автомобильное питание может быть довольно резким, поэтому вы можете использовать 30-вольтовый диод TVS на входе для защиты от пиков с коротким диодом Шоттки с анодом на земле и катодом на входе 12 В для защиты от отрицательных напряжений, а также обычный предохранитель или самовосстанавливающийся предохранитель PTC, подключенный последовательно к источнику питания автомобиля и вашей системе. В противном случае вы сможете «взломать» автомобиль на USB-зарядное устройство, в котором уже должно быть все это.

Я не уверен, что рисует Raspberry Pi в обычном режиме ожидания, но, предположительно, под 500 мА, что является максимальным USB-питанием, и, скорее всего, 100 мА. Скажем, он использует 100 мА при 5 В, который будет ниже 50 мА при 12 В, если использовать эту схему, автомобильный аккумулятор обычно составляет порядка 50 Ач, так что для разряда батареи до 50% потребуется около 20 дней. Если автомобиль находится в регулярном использовании, вероятно, нет необходимости идти дальше, и вы можете просто оставить его включенным и просто отключить все периферийные устройства, которые вы не используете.

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

PeterJ
источник
Спасибо, ваш ответ привел меня к Googling за "контроллер выключения Raspberry Pi". Я искал этот за 42 доллара, но потом нашел этот, специально разработанный для Raspberry Pi, и он стоит всего 15 долларов, и у него есть один, предназначенный для использования в автомобиле.
Николас Альбион
Raspberry Pi Model A требует 300 мА (максимум 100 мА на каждый USB-порт), а модель B - 700 мА.
прохожий
То, что вы также можете сделать, это просто подключить кнопку и запускать приложение python каждый раз, когда ваш Raspberry Pi включен. Затем в приложении python используйте функцию кнопки os («остановка»), чтобы просто выключить Raspberry Pi. Это то, что я сделал, и это работает нормально. Я не знаю, как это будет работать с XBMC, хотя.
mozcelikors
3

Я не очень хорошо знаком с поведением Raspberry Pi при выключении и энергопотреблении, поэтому я буду в основном полагаться на цифры, которые вы дали, и оставить формулы.

Кривая экспоненциального разряда, которую вы показываете, предназначена для цепи резистор-конденсатор, но линейный регулятор заставляет вещи действовать немного по-другому. Предположим, что RPi всегда потребляет максимальный ток, который вы указали: 1200 мА. В этом случае этот ток всегда протекает через регулятор, и эффективное сопротивление цепи постоянно меняется (уменьшается) по мере разрядки конденсатора. Это верно, пока мы находимся в рабочем диапазоне линейного регулятора, что нормально, потому что нам нужно отключить RPi, прежде чем мы достигнем этой области.

Дифференциальное уравнение для конденсатора:

I=CdVdt
которые можно переставить, чтобы решить для C:
C=IdtdV
  • Я просто средний ток для RPi. В этом случае мы будем считать, что это 1200 мА или 1,2 А.
  • dt - время, необходимое для выключения RPi. По вашему примеру это 5 с.
  • dV - изменение напряжения на конденсаторе. Предположим, что начальное напряжение является самым низким заданным напряжением в 11,7 В, а конечное напряжение составляет 7,0 В. Я устанавливаю конечное напряжение на 7,0 В, поскольку линейный регулятор 7805 требует запаса напряжения в два Вольт для правильной работы (5,0 V + 2,0 V = 7,0 В). Это делает dV = 11,7 В - 7,0 В = 4,7 В.

Это дает следующий результат:

C=1.2A5s4.7V=1.28F

Да, это 1,28 Фарада (здесь нет ни микро, ни милли). Это, вероятно, потребует покупки нескольких низковольтных колпачков и их последовательного размещения

Тогда другой проблемой является ваша схема - она ​​не будет работать так, как вы хотите, потому что единственный способ, которым положительный вход компаратора приближается к отрицательному входному напряжению (так что выход может измениться), это когда ваше входное напряжение уже мертв. Как и задумано, компаратор никогда не переключается.

То, что вы хотите сделать, это измерить ваше входное напряжение перед конденсаторами и диодом и сравнить это напряжение с «эталоном», который вы можете установить с помощью триммера. Смотрите пример схемы ниже:

схематический

смоделировать эту схему - схема, созданная с использованием CircuitLab

W5VO
источник
Вы правы - я имел в виду подать положительный вход компаратора с другой стороны диода D1. Мне нужен вывод GPIO для запуска прерывания в тот момент, когда отключено питание 12 В (радио и аксессуары выключены). ... Значит, эталонное напряжение равно 0, не так ли? Какова цель диода TVS?
Николас Альбион
У меня есть несколько из них здесь, они будут идеальными для этой работы? i.ebayimg.com/images/g/lF8AAOSwBP9UYdRb/s-l300.jpg
feedc0de
@danbru Не знаю, это картинка, а не таблица. Если вы думаете, что ваши конденсаторы eBay действительно 1,5F при 5,5 В, вам все равно нужно будет поставить несколько последовательно и параллельно, чтобы получить необходимую емкость.
W5VO
@ W5VO, есть ли какой-нибудь простой способ проверить емкость?
feedc0de
2

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


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

Но это то, что можно исправить на стороне программного обеспечения, с помощью некоторой комбинации:

  • Создайте больше разделов на SD-карте и никогда не монтируйте загрузочный раздел или раздел операционной системы в режиме записи. Если вы хотите пойти дальше, никогда не записывайте что-либо на SD-карту, сохраняя все изменяемые данные на USB-накопителе.

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

  • Просто держите резервную карту под рукой, при желании это может быть какая-то схема автоматического резервного копирования и восстановления с подключенной карты с правилом, когда только одна из карт может быть подключена для записи в любой момент времени (в сочетании с первым правилом загрузки / операционной системы). разделы никогда не будут записываться)

В конечном итоге все сводится к вопросу философии дизайна - выбора между:

А) Деликатная система, которая должна быть защищена от потери мощности, чтобы она не страдала от коррупции.

или

Б) Система, спроектированная таким образом, что неожиданная потеря питания не может привести к неисправимому повреждению.

Большинство встроенных систем более похожи на (B).

Крис Страттон
источник
Отдельные разделы на SD-карте с некоторыми только для чтения не решат проблему полностью. Выравнивание износа на SD-картах может разрушить ЛЮБОЙ блок на карте (когда происходит обмен блоков). Это выравнивание износа полностью скрыто в SD, и его невозможно контролировать. На самом деле, с разделом файловой системы, доступным только для чтения, он будет иметь наименьшее количество записей и будет главной целью для обмена при выравнивании износа.
Даррон
Кстати, я пришел к выводу, что SD-карты невозможно разработать надежные встроенные решения, если вы не можете гарантировать чистое отключение. Спецификация действительно отстойная для встроенных сценариев использования ... которые учитывая, сколько встроенных ARE, это довольно печальное положение дел.
Даррон
@darron: это печально, учитывая, что существует множество способов избежать проблем. Например, в спецификации могла быть указана команда «shutdown» и требовалось, чтобы любое устройство могло быть в состоянии перевести себя в безопасное состояние, например, в течение 250 мс после его получения. Я думаю, что большинство практических реализаций SD-карт не имели бы проблем с такой спецификацией, даже если бы команда выключения была выполнена в середине операции «фоновой дефрагментации», выполнение которой заняло бы минуты.
суперкат
@darron - именно из-за таких проблем с разделением я упомянул возможность вообще никогда не записывать на SD-карту.
Крис Страттон
При правильном выключении XBMC сохраняет текущую точку в воспроизводимой песне / фильме на диск, чтобы он мог возобновить воспроизведение с той же точки при перезапуске. Мне бы очень хотелось избегать "Папа, мы уже видели этот бит, можете ли вы остановиться и перенестись туда, где этот человек делает это?"
Николас Альбион
0

Как уже отмечали другие, есть несколько проблем с предложенными схемами, и вы можете получить конденсатор, достаточно большой, чтобы поддерживать источник питания либо. Если вы хотите построить небольшую цепь, вы можете рассмотреть возможность включения / выключения контроллера с защелкивающимся питанием, работающего от кнопки. Чтобы выключить сервер XBMC, вы можете нажать кнопку, сигнализирующую о выключении Pi, затем он может сделать то, что нужно для чистого упорядоченного выключения, а затем подать сигнал GPIO в цепь, которая отключает питание для себя. Это дает RPi столько времени, сколько необходимо для безопасного отключения SD-карты. Схема не должна быть такой сложной, как реле и таймер.

Вот простая схема для этого , которая использует только двойной mosfet в качестве контроллера. Схема описана на веб-странице.

user22047
источник