Цепь задержки RC для включения питания Pi

У меня немного проблемы с электроникой, и мне нужно удерживать входной контакт высоким в течение примерно 8-10 секунд. Я реализую это решение: https://github.com/NeonHorizon/lipopi/blob/master/README.power_up_power_down.md , которое отлично работает, но мне нужно удерживать выключатель питания в течение 10 секунд, прежде чем Pi установит UART. шпилька высоко (и держит ее высоко). Я просмотрел какое-то объяснение RC-цепей, и, похоже, все они имеют одинаковую задержку заряда, что и задержка разряда. Может где-то нужен диод? По сути, я бы хотел, чтобы конденсатор заряжался быстро и медленно разряжался через резистор.

введите описание изображения здесь

Следуя предложению Флавио, может ли кто-нибудь сказать мне, будет ли работать использование транзистора для изоляции, что-то вроде этого? Ожидаемый результат:

  • Нажмите переключатель
  • Зарядка конденсатора
  • Когда переключатель отпущен, конденсатор поддерживает высокий уровень базы транзистора до тех пор, пока GPIO 14 не станет высоким в результате включения питания Raspberry Pi.
  • К тому времени, как конденсатор разрядится, GPIO 14 берет на себя поддержание проводимости транзистора, а EN остается высоким.
  • Чтобы выключить питание, когда переключатель нажимается снова, Raspberry Pi считывает GPIO 18, и сценарий дает указание Pi отключить питание.
  • После выключения GPIO становится низким, конденсатор разряжается, и повышение мощности отключает питание Pi.

введите описание изображения здесь

(фиксированная ориентация транзистора)

Ответы (4)

Добавив конденсатор C1, вы можете добиться этого. Обратите внимание, что время, необходимое для разрядки конденсатора, составляет примерно R*C, в моем примере ниже около 10 с.

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

Примечание к вашей исходной схеме: два последовательных диода - очень грязный способ падения напряжения (если он вообще падает напряжение), вам лучше использовать резистивный делитель (R2 и R3), показанный на моей схеме, с правильные значения в зависимости от вашей батареи.

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

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

Редактировать: лично я бы использовал вывод UART для включения цепи, а другой - для выключения цепи. Вы можете использовать GPIO18, чтобы фактически отключить схему. Установив его как вход по умолчанию и используя его как выход только тогда, когда вы хотите отключить цепь. Затем ваша схема уменьшится до приведенной ниже, с быстрым временем выключения (R2 * C1 = 2 с).

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

смоделируйте эту схему

Будет ли достаточно 100K через UART, чтобы понизить EN, когда Pi выключен? В противном случае модуль powerboost всегда будет включен.
Этого будет много, но это займет больше времени. Когда uart становится низким, требуется около 10 секунд, прежде чем EN также станет низким, из-за того, что C1 должен быть разряжен ...
Это нормально, это просто означает, что Pi будет иметь питание (но все равно будет отключен) в течение примерно 8 секунд. Мне нравится простота этого дизайна. Единственная проблема сейчас заключается в том, что конденсатор C1 — это физически большой конденсатор, который вряд ли поместится в маленьком корпусе. Но уменьшение емкости конденсатора и достаточное увеличение R1 приводит к тому, что R1 больше не работает в качестве преобразователя для EN.
Вы можете использовать танталовый конденсатор или электролитический низковольтный (например, 6,3 В). они совсем не большие...
Если вы не против немного изменить код PI, вы можете сделать это еще проще, см. мою правку!
Я собираюсь попробовать вашу первую схему сегодня, у меня есть 100 мкФ, это нормально для тестирования. Второй контур имеет 2 проблемы. Он не удерживает EN на высоком уровне в течение 8 секунд (исходное требование), а быстрое отключение позволяет обойти плавное отключение Pi, то есть вы отключите питание Pi до того, как он сам отключится. Теперь, может быть, если бы R2 и R3 были увеличены для более длительного разряда через R3, это исправило бы оба этих случая. Если разрядка при понижении мощности превышала 3 секунды, то Pi уже отключился бы к моменту падения EN. Мысли?
Ах, но это тоже не сработает, так как теперь R3 не может выступать в качестве выпадающего списка для EN — я пробовал это раньше со значением 2M, и он не вытягивал EN.
Вторая схема по-прежнему удерживает питание в течение того же времени. Разница в том, что с R3 вы можете выбрать задержку выключения независимо от времени включения.

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

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

Вы можете использовать эту схему для быстрого заряда и вычислить R, чтобы сделать его настолько медленным, насколько вы хотите, включив Q2 от вывода микроконтроллера или любого цифрового сигнала.

РЕДАКТИРОВАТЬ: Vout - это напряжение на C1.

Спасибо, Флавио. Проблема здесь в том, что входной сигнал, который должен поддерживаться на высоком уровне (EN), имеет требуемое понижение 100K, что приведет к почти немедленной разрядке конденсатора. Каким-то образом мне нужно изолировать RC-цепь от EN, чтобы конденсатор был вынужден использовать R2 для разряда. Я добавил оригинальную схему в свой пост.

Хм, твой транзистор перевернут. Остальную работу вашей схемы я не проверял.

Можете ли вы установить низкий уровень GPIO прямо перед выключением? Почему бы вам не попробовать это:

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

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

R3 отключает M1.

Когда кто-то нажимает SW, он включает M1, который оставляет M2 включенным (который оставляет M1 включенным после отпускания SW).

D1 не позволяет M2 перевести кнопку чтения в низкий уровень, поэтому R1 вытягивает кнопку чтения в высокий уровень. Когда кто-то снова нажимает SW, вы читаете «Низкий».

Затем вы можете установить низкий уровень «Turn-off». M2 выключается, R3 выключает M1. Enable затем становится низким.

PS: я не проверял, как работает ваш прорыв Adafruit, поэтому я предполагаю, что это что-то близкое к тому, что вам нужно.

Забавно, я почему-то думал, что нужно перевернуть, но у меня получилось с первого раза.
Adafruit должен иметь низкий уровень EN, чтобы он не включался, поэтому его низкий уровень не поможет — для поддержания низкого уровня требуется 100K.
Основой оригинальной конструкции является то, что Pi будет устанавливать высокий уровень UART при запуске и понижать уровень, когда Pi выключается, даже если на Pi все еще подается питание (от усилителя мощности Adafruit). Поэтому, когда он выключается, EN становится низким, что отключает питание от Pi. Повторная подача питания с помощью переключателя устанавливает EN на высокий уровень, что снова дает питание Pi, что заставляет его загружаться и переводить UART на высокий уровень, который затем поддерживает EN на высоком уровне. Но изначально он не поддерживает высокий уровень UART, он немного переключается, прежде чем оставаться устойчивым, поэтому необходима сеть RC.
@svenyonson - тогда, может быть, поместите UART с RC-фильтром на контакт «выключения»? это сработает? Также вы все еще можете добавить понижающий резистор в сеть Enable, я просто предположил, что у powerboost есть внутренний понижающий резистор.

Спасибо всем за ваши предложения. Я нашел простое решение, как показано ниже. Раньше у меня было похожее решение, но значения RC были такими, что сопротивление резистора (2 МОм) было слишком большим, чтобы работать в качестве подтягивающего, и поэтому EN всегда был высоким, что поддерживало питание Pi. Спасибо Douwe66 за то, что он дал мне идею использовать конденсатор с большей емкостью (100 мкФ), что позволило мне использовать существующий 100K pulldown для завершения RC-цепи. А использование делителя напряжения вместо двух последовательных диодов для понижения напряжения для GPIO 18 фактически уменьшило количество компонентов. Возможно, решение Уэсли сработало, но количество компонентов было слишком велико.

Я бы принял первое решение Dowwe66, за исключением того, что он все время оставлял GPIO 18 высоким (что привело бы к выключению Pi сразу после того, как демон монитора выключения стал активным), а также то, что UART TX не может использоваться в качестве пути к заземление для EN pulldown (внутреннее сопротивление в выключенном состоянии составляет около 27 МОм).

В общем, я многому научился, и теперь у меня есть рабочее решение. Спасибо!

введите описание изображения здесь