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.
(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:
- Wymuś VCC na GND (nie wiesz jak? Hbridge?). (Jeśli to zrobię, co stanie się z pinami danych, które są wysokie?)
- 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
- Odłącz GND tylko za pomocą mosfetu N i umieść diody na wszystkich pinach danych
- 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)
Odpowiedzi:
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.
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:
Zwykła sekwencja wyłączania:
Wyłącz przełączniki ścieżki danych
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.
źródło
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.
źródło
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.
źródło
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.
symulacja tego obwodu - Schemat utworzony przy użyciu CircuitLab
źródło