Потяните штифт включения на Adafruit PowerBoost на низкий уровень (он подключен к VBatt!)

Я работаю над Tonuino (tonuino.voss.earth) и использую модуль PowerBoost от Adafruit (https: //www.adafruit.com/product/1944). Модулю повышения мощности требуется контакт включения, переведенный в состояние LOW (GND), чтобы отключить выходное напряжение 5 В. В настоящее время у меня есть кулисный переключатель, который позволяет мне постоянно подключать EN к GND.

Я хотел бы реализовать функцию автоматического отключения для этой комбинации, т. е. Arduino может управлять контактом включения НИЗКИМ и таким образом отключать свою собственную мощность. Помимо автовыключения, я хочу, чтобы пользователь мог включать устройство нажатием кнопки. Я работаю в сфере программного обеспечения, и мое последнее знакомство с электроникой произошло очень давно, поэтому я борюсь.

Это показывает мои первоначальные мысли:

  1. Пользователь нажимает кнопку, чтобы запустить Tonuino. Переключатель отключает EN от GND, EN переходит в UBATT (HIGH) и 5V на Arduino включен. При включении arduino для GPIO устанавливается высокий уровень, поэтому EN поддерживается высоким.
  2. Чтобы выключить, arduino устанавливает GPIO на НИЗКИЙ уровень, таким образом, устанавливая EN на НИЗКИЙ, 5 В отключены и так далее...

Моя проблема: 5 В от Arduino GPIO всегда будет на уровне 5 В и, следовательно, выше, чем опорное напряжение EN (UBATT 3 В - 3,7 В). Я действительно боюсь, что это повредит мою липосакцию. Для меня это означает, что в идеале я должен переключить UBATT на EN (безопасно), и я не могу найти решение.

Любые подсказки приветствуются

, 👍0

Обсуждение

В даташите указано, что контакт EN может быть до 7В. Но вы также можете вместо того, чтобы установить вывод Arduino в положение OUTPUT HIGH, установить вывод Arduino в положение INPUT. Затем подтягивающий резистор (R13) на PowerBoost подает напряжение Vbat на контакт EN. Так что он никогда не увидит 5V., @Gerben

PS обратите внимание, что как только повышающий преобразователь отключается, питание Arduino отключается, и контакт больше не будет НИЗКИМ, и повышающий преобразователь снова включается. Решение Majenko уже исправляет это., @Gerben


1 ответ


2

Ваша самая большая проблема заключается в том, что модуль по умолчанию включен. Резистор на 340 кОм постоянно подтягивает контакт EN к VBAT, поэтому, чтобы отключить его, вы должны активно переопределить это подтягивание.

В идеале вы должны изменить модуль, удалив этот резистор (R13) и добавив свой собственный резистор между контактами ENABLE и GND. Вы можете обойти это с помощью кнопки и P-канального полевого транзистора параллельно, чтобы включить модуль.

Например:

схема

Теперь обычно R1 тянет ENABLE на землю, отключая модуль. Вы нажимаете SW1, и он подтягивает ENABLE до VBAT и включает его. Затем 5 В подается на Arduino, и в этот момент вам нужно настроить выход GPIO и перевести его в ВЫСОКИЙ уровень.

Это приводит к тому, что напряжение на затворе M2 поднимается выше его порогового напряжения (убедитесь, что пороговое напряжение находится в диапазоне от 0 В до 3 В), и он начинает проводить, опуская напряжение на затворе M1 ниже его порогового напряжения (должно быть между 0 В и - 2В) в обход переключателя SW1, оставляя систему включенной.

Теперь вы можете отпустить SW1, и он останется включенным до тех пор, пока вы не установите GPIO LOW или не установите его на INPUT.

Обратите внимание, что сброс Arduino (например, для программирования) приведет к отключению модуля повышения и потребует повторного включения питания с помощью SW1 (или через GPIO, если у вас есть питание Arduino через USB для программирования, конечно).

Однако, если вы не хотите или не можете изменять модуль, все становится немного неприятнее.

Чтобы сделать его по умолчанию выключенным, R1 на приведенной выше схеме должен иметь достаточно низкое значение, чтобы напряжение, представленное на контакте ENABLE, было ниже 20% напряжения батареи. R1 и существующий подтягивающий резистор на 340 кОм образуют делитель напряжения, поэтому вам необходимо рассчитать размер резистора, который позволит получить напряжение ниже 20% VBAT.

Поскольку делитель напряжения просто дает вам пропорцию входного напряжения, отношение которой является отношением "верхнего" сопротивление в делителе к общему сопротивлению нам все равно какое напряжение, только отношение. И нам не важно точное значение, важно, чтобы результат был ниже 20%. Таким образом, мы можем выбрать хорошее общее значение.

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

Например, если мы выберем обычное значение 47 кОм, мы увидим, что:

    R2           47000
 ------- = --------------- = 0.11 (11%)
 R1 + R2    340000 + 47000

Это меньше 0,2 (20%), что нам нужно, и это хорошо. Рассчитав ток при типичном напряжении батареи 3,7В получаем

     V          3.7
I = --- = -------------- = 0.000010 (10µA)
     R    340000 + 47000

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

,

Это фантастический ответ! Спасибо, что просветили меня и нашли время ответить на мой вопрос. Я посмотрю, какие части я могу быстро получить, чтобы понять это, @JoeD

Привет, Маженко, поэтому после тестовой сборки на макете я должен отменить свое согласие с ответом. Вот почему: Arduino отключает модуль повышения мощности, НО напряжение на затворе остается на уровне 2,25 В. Значит, где-то течет струйка..., @JoeD

Какой вариант схемы вы используете? Вы удалили R13 или пытаетесь обойти это?, @Majenko

Я удалил R13 из цепи, @JoeD

Может быть некоторый обратный поток через Arduino gpio. Изоляция его с помощью n-канального полевого МОП-транзистора вылечила бы это. В ближайшее время обновлю схему., @Majenko

@JoeD Хорошо, я изменил схему, включив в нее N-канальный полевой МОП-транзистор, используемый для изоляции GPIO. Это приводит к изменению логики GPIO, поэтому теперь HIGH включен, а LOW или INPUT выключен., @Majenko