Правильные способы отсоединения микросхем во время состояний низкого энергопотребления, чтобы избежать паразитного / обратного питания


10

Я работаю над проектом на базе AVR с низким энергопотреблением, который объединяет несколько различных устройств, включая полосу неопикселя и пикант Adafruit . Когда устройство в целом не работает, я бы хотел, чтобы оно потребляло менее 0,1 мА, чтобы продлить срок службы батареи LiPo.

У меня все это работает (измерено 0,035 мА), но я не уверен, что я обязательно сделал это «правильным» способом, и я планирую создать продукт, основанный на этом, поэтому хотел бы сделать это правильно.

введите описание изображения здесь (Не показано: обратный диод для реле)

Основная проблема, с которой я столкнулся, - это «паразитное» питание устройств, когда VCC отключен через ток, протекающий от выводов данных. Например, Pixie (который общается через последовательный порт), не имеет режима отключения питания, и даже когда «выключен» истощает около миллиампер. Поэтому я установил маленькое реле для отключения его VCC и обнаружил, что последовательный контакт все еще питает пикси. Подсказки в другом месте предполагают, что многие микросхемы имеют диод, шунтирующий свои выводы цифрового входа к VCC в качестве защиты питания. Чтобы решить эту проблему, мне пришлось приостановить последовательную библиотеку и фактически digitalWrite (PIN, LOW) во время сна.

То же самое с полосой WS2812b - отключение VCC все еще позволяет устройству получать питание от контакта данных. И в других конструкциях, когда я отключил GND с N-канальным MOSFET, я видел обратное - обратный поток тока через линию передачи данных на землю! (Это должно было быть решено с помощью диода в каждом посте на PJRC.) WS2812b на самом деле занимает около миллиампера каждый, даже когда не горит,

Итак, вопрос: существует ли общий, «чистый» способ отключить VCC и GND от частей проекта во время сна системы, когда в миксе есть выводы данных. Какова лучшая практика?

Некоторые идеи:

  1. Заставить VCC к GND (не уверен, как? Hbridge?). (Если я это сделаю, что случится с выводами данных, которые высоки?)
  2. Поместите буфер с тремя состояниями между всеми выводами данных и этими устройствами, и во время сна переведите буфер с тремя состояниями в состояние высокого импеданса, отсоедините VCC или GND только с помощью P или N mosfet
  3. Отсоединяйте GND только от N mosfet и устанавливайте диоды на все выводы данных
  4. Существует ли какая-то защелка питания, которая отключает как VCC, так и GND и переводит их в состояние «высокого импеданса» (например, трехфазный буфер для питания?). Таким образом, ток не может вытекать «из» линий данных.

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


Да, это очень раздражает, я действительно видел случаи, когда питание, достигающее вывода GPIO, может включить AVR (выполнение кода) даже при отсутствии питания, достигающего выводов VCC ...
vicatcu

2
Забавное наблюдение: я выполнил еще несколько поисков в Google с тех пор, как разместил этот вопрос, и этот вопрос на SE занял первое место. Google проиндексировал эту страницу менее чем за 10 минут.
Джереми Гилберт

Только комментарий: правильные изолирующие выключатели, как другие предложили, являются лучшим решением, когда удаленное напряжение не может быть устранено. МОЖЕТ быть, что использование диодов Шоттки для ввода выводов с общими катодами и обычно на Vcc и прикрепленными к земле, когда требуется изоляция, обеспечит адекватное устранение высокого напряжения импеданса. Очевидно, что Шоттки, зажимающий линию электропитания с низким сопротивлением, может испортить ваш день.
Рассел МакМахон

Вероятно, Hi-Z-соединение всех ваших соединений каким-либо образом (выводы с тремя состояниями µC, буферы с тремя состояниями, аналоговые переключатели и т. Д.), Как предположили Питер Смит и CL, является наилучшим выбором. Какой из методов лучше, я не уверен. В любом случае: почему вы используете реле для переключения, а не P-MOSFET (или N-MOSFET нижней стороны в этом отношении, хотя переключение нижней стороны, вероятно, будет немного сложнее)?
FlashCactus

Ответы:


5

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

Нечто подобное ADG812 имеет 4 канала SPST-переключателей, которые легко подходят для довольно быстрой логики и обеспечивают действительно высокий импеданс между узлами коммутатора в выключенном состоянии.

ADG812 от утечки

Приятно то, что этот метод работает как для однонаправленных, так и для двунаправленных линий данных.

Эти части также бегут на яркой улыбке:

Требования к питанию ADG812

Обычная последовательность выключения:

  1. Отключить переключатели пути передачи данных

  2. Выключите домен.

Включение питания, наоборот, конечно.

[Обновить]

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

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


Простите за незнание вопроса, но заметно ли он отличается от буфера с тремя состояниями? (И спасибо за ответ!)
Джереми Гилберт

Они также известны как «проходные ворота»
викатку

3

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

В противном случае вы можете использовать аналоговые переключатели (логические микросхемы 74x66) для их отключения. Для однонаправленных сигналов также будет работать 74x125.


На самом деле вам не нужно делать их с высоким Z, вы можете просто снизить уровень GPIO линий микро.
DoxyLover

1
Это было бы более опасно, если бы другой чип мог когда-либо повышать уровень сигнала.
кл.

Просто я полностью понимаю, всегда ли переключение выводов на входы аналогично переводу их в состояние высокого импеданса? Это обобщено для большинства MCU или только для AVR? Это то же самое состояние, которое вы получили бы от 74x125, когда OE отключен?
Джереми Гилберт

@JeremyGilbert Все входы CMOS имеют высокий импеданс (это затворы MOSFET, которые ведут себя как очень маленькие конденсаторы). Отключенный выход 125 не имеет затвора, но разница незначительна.
кл.

1
@JeremyGilbert Входы обычно имеют высокий Z в большинстве приложений; в конце концов, когда ты ведешь линию, трудно что-то почувствовать. Тем не менее, по крайней мере, с AVR (и, возможно, с другими, но я не знаю специфики), вы должны следить за внутренними подтягиваниями: если вывод находится в режиме ввода (настроен через DDRx), и вы пишете LOW для это (через PORTx), это в обычном режиме Hi-Z. Однако, если вы пишете HIGH в режиме ввода, включается внутренняя подтяжка, и снаружи вывод выглядит как резистор ~ 50K для VCC вместо плавающей линии.
FlashCactus

1

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


1

Противная проблема, которая может заставить микроконтроллеры делать очень странные вещи.
Хорошее решение - использовать выпадающий последовательный ввод-вывод, такой как . Для этого требуются подтягивающие резисторы на линиях SCK, SDA. Подтягивающие резисторы связаны с коммутируемой линией Vcc. Убедитесь, что коммутируемая линия Vcc падает до нуля вольт, когда она выключена (не позволяйте ей плавать). I2C

У вас нет этой опции - вы вынуждены использовать асинхронный последовательный ввод-вывод. Некоторые микроконтроллеры позволяют использовать такой же подход, как и I2C, для решения проблемы. Если вы можете запрограммировать вывод последовательного выхода только для понижающего напряжения, а не для более распространенного понижающего напряжения для 1, понижающего напряжения для 0 , тогда вы можете добавить подтягивающий резистор к коммутируемому Vcc для установить высокую логику.
Это решение не так устойчиво к шуму, как ваш нынешний подход, но оно должно решить проблему с обратным питанием ваших модулей ввода / вывода от AVR. Это не совсем «чистое» решение, но гораздо безопаснее для микроконтроллеров в ваших модулях ввода-вывода.

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.