Właściwe sposoby odłączania układów scalonych podczas stanów niskiej mocy, aby uniknąć pasożytniczego / wstecznego zasilania

10

Pracuję nad projektem opartym na baterii AVR o niskiej mocy, który integruje kilka różnych urządzeń, w tym pasek neopikselowy i pixie Adafruit . Gdy całe urządzenie jest w stanie spoczynku, chciałbym, aby pobierało mniej niż 0,1 mA, aby zmaksymalizować żywotność baterii LiPo.

Mam to wszystko działające (mierzone 0,035 mA), ale nie jestem pewien, czy koniecznie zrobiłem to w „właściwy” sposób i planuję zbudować na tej podstawie produkt, więc chciałbym to zrobić dobrze.

wprowadź opis zdjęcia tutaj (Nie pokazano: dioda flyback dla przekaźnika)

Zasadniczą troską, którą mam, jest „pasożytnicze” zasilanie urządzeń, gdy VCC jest odłączony przez prąd płynący z pinów danych. Na przykład Pixie (który komunikuje się przez port szeregowy) nie ma trybu wyłączania zasilania, a nawet gdy „off” wyczerpuje się około miliampera. Więc umieściłem mały przekaźnik, aby odłączyć jego VCC, i odkryłem, że pin szeregowy nadal zasilał pixie. Wskazówki gdzie indziej sugerują, że wiele układów ma diodę blokującą ich cyfrowe wejścia do VCC jako zabezpieczenie zasilania. Aby rozwiązać ten problem, musiałem zawiesić bibliotekę szeregową i faktycznie digitalWrite (PIN, LOW) podczas snu.

To samo z listwą WS2812b - odłączenie VCC nadal umożliwia zasilanie urządzenia z pinu danych. A w innych projektach, kiedy odłączyłem GND z M-kanałowym MOSFETEM, widziałem odwrotną stronę - przepływ prądu wstecznego przez linię danych do ziemi! (To musiało zostać rozwiązane za pomocą diody na słupek na PJRC.) WS2812b faktycznie zajmuje około miliampera każdego, nawet gdy nie świeci,

Zatem pytanie: czy istnieje ogólny, „czysty” sposób na odłączenie VCC i GND od części projektu podczas uśpienia systemu, gdy w miksie są piny danych. Jaka jest najlepsza praktyka?

Jakieś pomysły:

  1. Wymuś VCC na GND (nie wiesz jak? Hbridge?). (Jeśli to zrobię, co stanie się z pinami danych, które są wysokie?)
  2. Umieść bufor trójstanowy między wszystkimi pinami danych a tymi urządzeniami, a podczas uśpienia ustaw bufor trójstanowy w stanie wysokiej impedancji, odłącz VCC lub GND tylko za pomocą P lub N mosfet
  3. Odłącz GND tylko za pomocą mosfetu N i umieść diody na wszystkich pinach danych
  4. Czy istnieje jakiś rodzaj zatrzasku zasilania, który odłącza zarówno VCC, jak i GND i wprowadza je w stan „wysokiej impedancji” (jak bufor trójstanowy dla zasilania?) W ten sposób prąd nie ma możliwości wypłynięcia „z linii” danych.

Czy ktoś może oświecić mnie do najczystszego, najbardziej powtarzalnego sposobu radzenia sobie z tego rodzaju problemem „odłączania obciążenia”? (Nie muszę dodawać, że spędziłem godziny na wyszukiwaniu tego problemu przy niewielkim szczęściu, chociaż znalazłem tę notatkę techniczną dotyczącą przełączania obciążenia, ale nie dotyczy ona sprzężenia zwrotnego i pasożytniczej mocy)

Jeremy Gilbert
źródło
Tak, to bardzo denerwujące, faktycznie widziałem przypadki, w których moc dochodząca do pinu GPIO może włączyć AVR (wykonywanie kodu) nawet bez zasilania docierającego do pinów VCC ...
vicatcu
2
Zabawna obserwacja: od czasu opublikowania tego pytania przeprowadziłem jeszcze kilka wyszukiwań w Google, a pytanie to znalazło się na najwyższym miejscu. Google zaindeksował tę stronę w mniej niż 10 minut.
Jeremy Gilbert
Tylko komentarz: Właściwe przełączniki izolacyjne, jak sugerują inni, są najlepszym rozwiązaniem, gdy nie można wyeliminować napięcia zdalnego. Może być tak, że użycie diod Schottky'ego do wprowadzenia pinów z katodami pospolitymi i zwykle w Vcc i zaciśniętymi na ziemi, gdy potrzebna jest izolacja, zapewni odpowiednią eliminację wysokich napięć impedancji. Oczywiście, Schottky zaciskając linię zasilającą o niskiej impedancji może zepsuć Twój dzień.
Russell McMahon
Prawdopodobnie Hi-Z-ing wszystkie połączenia w jakiś sposób (tri-styki µC, bufory trójstanowe, przełączniki analogowe, cokolwiek), jak sugerowali Peter Smith i CL, jest najlepszym wyborem. Która z metod jest lepsza, nie jestem pewien. W każdym razie: dlaczego używasz przekaźnika do przełączania, a nie P-MOSFET (lub tak zwany N-MOSFET na dole, chociaż przełączanie na dole będzie prawdopodobnie nieco trudniejsze)?
FlashCactus

Odpowiedzi:

5

Kiedy to robię, zwykle używam przełączników analogowych CMOS na uszkodzonych liniach danych.

Coś takiego jak ADG812 ma 4 kanały przełączników SPST, które łatwo nadają się do dość szybkiej logiki i zapewniają naprawdę wysoką impedancję między węzłami przełącznika w stanie wyłączonym.

ADG812 z wycieku

Zaletą tego jest to, że technika ta działa zarówno dla jednokierunkowych, jak i dwukierunkowych linii danych.

Te części działają również z jasnym uśmiechem:

Wymagania dotyczące zasilania ADG812

Zwykła sekwencja wyłączania:

  1. Wyłącz przełączniki ścieżki danych

  2. Wyłącz domenę.

Oczywiście wzmocnienie jest odwrotne.

[Aktualizacja]

Są one rzeczywiście znane pod innymi nazwami, takimi jak bramki przejściowe i bramki transmisyjne .

Różnią się one znacznie od prawdziwego bufora trójstanowego (jak widać na schemacie w powyższym linku), ale dla zwykłej logiki efekt jest lepszy (z natury jest to urządzenie dwukierunkowe), ale ma mniejszą moc.

Peter Smith
źródło
Wybacz ignorancję pytania, ale czy to wyraźnie różni się od bufora trójstanowego? (I dzięki za odpowiedź!)
Jeremy Gilbert
Są one również znane jako „bramy przejściowe”
vicatcu
3

Jeśli sygnały danych są podłączone do mikrokontrolera, możesz po prostu uzyskać wysoką impedancję, konfigurując te piny jako wejścia. (Jeśli drugi układ zużywa bardzo mało energii, możesz traktować jego Vcc jak sygnał danych.)

W przeciwnym razie możesz użyć przełączników analogowych (układy logiczne 74x66), aby je odłączyć. W przypadku sygnałów jednokierunkowych działałby również 74x125.

CL.
źródło
W rzeczywistości nie musisz ustawiać ich na wysokie Z, możesz po prostu obniżyć linie GPIO mikro.
DoxyLover,
1
Byłoby to bardziej niebezpieczne, gdyby drugi układ mógł kiedykolwiek doprowadzić wysoki sygnał.
CL.
W pełni rozumiem, czy przełączanie pinów na wejścia jest zawsze tym samym, co stawianie ich w stanie wysokiej impedancji? Czy dotyczy to większości MCU, czy tylko AVR? Czy ten stan jest taki sam, jak w przypadku 74x125, gdy OE jest wyłączony?
Jeremy Gilbert
@JeremyGilbert Wszystkie wejścia CMOS mają wysoką impedancję (są bramkami MOSFET, które zachowują się jak bardzo małe kondensatory). Wyłączone wyjście 125 nie ma bramki, ale różnica jest znikoma.
CL.
1
@JeremyGilbert Wejścia mają zazwyczaj wysoki Z w większości aplikacji; w końcu ciężko coś wyczuć, kiedy jedziesz linią. To powiedziawszy, z przynajmniej AVR (i prawdopodobnie także innymi, ale nie znam specyfiki), musisz uważać na wewnętrzne podciągnięcia: jeśli pin jest w trybie wejściowym (konfigurowanym przez DDRx) i piszesz LOW na it (przez PORTx), jest w zwykłym trybie Hi-Z. Jednak jeśli napiszesz WYSOKI w trybie wprowadzania, wewnętrzne pullup jest włączone, a z zewnątrz pin wygląda jak ~ 50K rezystor VCC zamiast linii pływającej.
FlashCactus
1

Niestety nie sądzę, że istnieje jedna uniwersalna strategia. Przełącz zasilanie na podsystemy, jak już to zrobiłeś. W oprogramowaniu styki napędu są niskie dla stanów niskiej mocy, chyba że spowodowałoby to stan ustalony dla dużej mocy. W takim przypadku podnieś pin wysoko. Nigdy nie pozwól, aby dane wejściowe były zmienne. Moc sekwencji niezbędna do ustalenia bezpiecznych warunków początkowych.

vicatcu
źródło
1


I2C

Nie masz tej opcji - musisz użyć asynchronicznego szeregowego we / wy. Niektóre mikrokontrolery pozwalają na rozwiązanie podobne do I2C. Jeśli możesz zaprogramować pin wyjścia szeregowego tak, aby był tylko rozwijany zamiast bardziej popularnego pull-up-for-1, pull-down-for-0 , to możesz dodać rezystor pull-up do przełączanego Vcc na ustanowić wysoki poziom logiki.
To rozwiązanie nie jest tak odporne na zakłócenia, jak obecne podejście, ale powinno rozwiązać problem ponownego zasilania modułów we / wy z AVR. To nie jest tak naprawdę „czyste” rozwiązanie, ale jest znacznie bezpieczniejsze dla mikrokontrolerów w modułach IO.

schematyczny

symulacja tego obwodu - Schemat utworzony przy użyciu CircuitLab

glen_geek
źródło