Inteligentne sposoby wykrywania przycisku (mniejsze zużycie energii)

28

Podczas spotkania dotyczącego konkretnego projektu poproszono mnie o przemyślenie sposobu wykrycia naciśnięcia przycisku za pomocą MCU. Wykrywanie powinno zużywać jak najmniej energii. Na pierwszy rzut oka pomyślałem o typowym obwodzie z podciąganiem lub podciąganiem:

schematyczny

symulacja tego obwodu - Schemat utworzony za pomocą CircuitLab

Nie uwzględniam tutaj niektórych funkcji antyodbicia, ponieważ jest to poza zakresem tego pytania. W obu przypadkach po naciśnięciu przycisku całkowita przepływająca wartość prądu zależy od wartości rezystora. Aby to zminimalizować (prąd), mógłbym zwiększyć wartość rezystora, ale nie aż tak bardzo, ponieważ, jeśli mam rację, zależy to również od wartości upływu pinów wejściowych. Dodatkowo duży rezystor powróciłby powoli.

Moje pytanie jest następujące: jakie są inteligentne sposoby wykrycia naciśnięcia przycisku, który nie zużywa energii (zwykle w przypadku aplikacji zużywających dużo energii)? Czy są jakieś metody, które ledwo zużywają energię po naciśnięciu przycisku?

vionyst
źródło
5
Rozkład 10k nie zużywa prawie żadnej mocy. 3,3 V daje 330uA. W większości nowoczesnych MCU masz możliwość ustawienia jednego wewnętrznego, który będzie miał jeszcze wyższą rezystancję. To powiedziawszy, możesz aktywować zasilanie przycisków z pinu MCU poprzez BJT lub MOSFET. Aktywuj go tylko podczas odczytu i czytaj z odpytywaniem.
Lundin,
27
@Lundin W „nowoczesnych” warunkach 330 A może być wysokoprądowym ...μ
awjlogan 12.12.17
6
w rzeczywistości wiele mikrokontrolerów może uzyskać prądy uśpienia tak niskie, jak 2-10 μA. Marnowanie 30 razy, że przy jednym pociągnięciu jest trochę smutne, szczególnie w przypadku zasilania bateryjnego.
whatsisname
1
To, jak duży rezystor można zastosować podczas opuszczania, zależy od impedancji kołka i od tego, jakie napięcie przełączają. Załóżmy, że masz styk 3,3 V w stanie wysokiej impedancji, który przełącza się na 2,4 V, tak naprawdę potrzebujesz tylko nieco niższej impedancji niż wejście. Poleciłbym dołączyć potencjometr i zmierzyć, jak wysoką wartość rezystora można użyć, aby pin działał niezawodnie, a następnie obniżyć wartość o 20%, aby zachować margines.
Drunken Code Monkey

Odpowiedzi:

29

Stosowaną niegdyś metodą niskoprądową było podłączenie przełącznika między dwoma pinami we / wy mikrokontrolera.

Jedno we / wy skonfigurowano jako wyjście (SWO). Drugi skonfigurowano jako wejście (SWI) z włączonym programowalnym wewnętrznym podciąganiem.

Stan przełączenia był próbkowany rzadko (co 10 ms) za pomocą procedury przerwania oprogramowania. Sekwencja odczytu była następująca: dysk SWO niski, odczyt SWI, dysk SWO wysoki.

Oznaczało to, że wciśnięty przełącznik pobierał tylko prąd zwalniający SWI przez siebie i SWO przez mniej niż 1 nas podczas skanowania, podczas gdy wyłącznik niewciśnięty nie pobierał prądu. Pobór prądu przez <1 us co 10 ms spowodował niewielki średni średni pobór prądu.

TonyM
źródło
Wątpliwe jest, dlaczego potrzebujesz podciągania za pomocą tej techniki. Sekwencja SWO niska, odczyt SWI, SWO wysoka, odczyt SWI może wystarczyć, aby stwierdzić, czy styki są ze sobą połączone. Możesz także udostępnić SWO między licznymi przełącznikami.
Trevor_G,
8
@ Trevor Pozostawienie wejścia zmiennego, gdy przełącznik jest otwarty, nie jest szczególnie dobrym pomysłem. W zależności od technologii może powodować zużycie energii przez bufor wejściowy, jeśli jego wejście jest w stanie pośrednim.
RoyC,
1
@ Trevor Skuteczne pomnożenie rezystora podciągającego przez cykl pracy sw1 sw2. Ciągle podciągający nas powrót do schematu PO 1. Może działać w środowisku o niskim poziomie hałasu.
RoyC,
2
Czy fakt, że MCU nie musi zasnąć, aby wykonać odpytywanie zamiast polegać na przerwie, całkowicie nie znosi oszczędności wynikających z krótszych cykli pracy przełącznika?
AndreKR
5
Cześć @AndreKR, mieliśmy zasilaną baterią aplikację mikrokontrolera i potrzebowaliśmy kilku przełączników, więc zastosowaliśmy tę technikę, ponieważ była dość łatwa. Nie umieściliśmy MCU tylko do wykrywania przełączników. MCU narysowało coś w rodzaju 900nA w trybie uśpienia między przerwami 10ms, więc oszczędności na podniesieniu były warte zachodu.
TonyM,
23

SPDT ( S Ingle P ole D ouble T jest rzucać) Przycisk byłby to ultra wydajny przycisk.

wprowadź opis zdjęcia tutaj

Źródło: http://www.ni.com/white-paper/3960/en/

W twoim przypadku 1P przejdzie do MCU, 1T do VCC, 2T do GND.

Harry Svensson
źródło
+1 .. zawsze mnie denerwowało, że subminiaturowe SPDT są albo bardzo trudne do znalezienia, albo kosztują o wiele za dużo ...
Trevor_G 12.12.17
1
@ Trevor Tak ... niektóre rzeczy są niestety bardzo drogie. Podczas gdy inne elementy są niedoszacowane (MCU na przykład). Nie możesz mieć tego wszystkiego.
Harry Svensson,
To świetny pomysł. Niestety nie udało mi się znaleźć przycisku SPDT CMS, który pasowałby do moich potrzeb. Będę jednak pamiętać o tym obwodzie
vionyst z
10

Jak długo przycisk będzie wciśnięty? Jeśli nie jest to przełącznik dwustabilny (który utrzymuje swój stan), ale przełącznik chwilowy, wówczas prąd płynący po naciśnięciu przycisku jest w dużej mierze nieistotny ze względu na krótki czas, w którym przycisk jest faktycznie zamknięty.

Każdy z dwóch pokazanych obwodów jest OK, nie ma znaczenia.

Możesz założyć, że upływ prądu wejściowego i / lub prąd do wejścia MCU jest znikomy . Wszystkie MCU są obecnie w technologii CMOS i mają praktycznie zerowy prąd wejściowy. Więc przestańcie to rozważać, nie ma go tam.

Zamiast zewnętrznego rezystora można również użyć wewnętrznego rezystora podciągającego wbudowanego w wiele wejść MCU. Rezystor ten może mieć stosunkowo niską wartość (być może 50 kohm), więc po naciśnięciu przycisku płynie niewielki prąd.

Możesz bezpiecznie użyć nawet 1 rezystora Mohma do podciągania / opuszczania. Tylko w bardzo „brudnym” (elektrycznie) otoczeniu może być potrzebna niższa wartość. Możesz również umieścić kondensator 100 nF równolegle z przełącznikiem, aby stłumić interferencje z innych pobliskich obwodów.

Wskazówka: zarezerwuj miejsce na taki kondensator na płytce drukowanej, ale nie zakładaj zaślepki. jeszcze. W przypadku problemów: umieść go i sprawdź, czy to pomoże.

Aby wykryć stan przełącznika, użyj odpytywania (jak w odpowiedzi TonyM za) lub użyć przerwania . Zależy to od aplikacji, która jest lepsza pod względem zużycia energii (MCU).

Bimpelrekkie
źródło
W rzeczywistości przycisk będzie chwilowy, ale czas jego naciśnięcia może być wystarczająco długi (minuty)
vionyst
Jeśli urządzenie działa 24 godziny na dobę, 7 minut, to kilka minut może jeszcze nie być dużo. Ważny jest cykl pracy, 5 minut na godzinę to 5 x 60/3600 = 8,3%. Więc nawet przy prądzie 100 uA przełącznik zużywałby średnio 8,3 uA w moim scenariuszu. Moja wiadomość brzmi: nie skupiaj się zbytnio na prądzie używanym przez przełącznik po naciśnięciu, bez porównywania go z zużyciem prądu przez cały system. Tylko wtedy, gdy składki są takie same, sensowne jest zwiększenie zużycia prądu przez przełącznik. Nie ma sensu robić przełącznika 0,1 uA, gdy MCU stale używa 1uA.
Bimpelrekkie,
„Nie ma sensu robić przełącznika 0,1 uA, gdy MCU stale używa 1uA”. to brzmi nieźle. Myślę, że masz na myśli szczyt 1uA. 10% za
samą
@ Trevor Not peak, mam na myśli średni prąd 1uA dla MCU, ale 0,1uA po naciśnięciu przełącznika. W połączeniu z przełącznikiem 0,1 A, który będzie naciskany tylko przez (stosunkowo) krótkie okresy, przełącznik nie przyczynia się prawie do całkowitego średniego zużycia energii, ponieważ średni prąd wyniesie: 100% x 1 uA + 8,3% * 0,1 uA = 1,0083 uA (8,3% ponownie wykorzystane z powyższego komentarza).
Bimpelrekkie,
2
Tak, po prostu czytałem, jakbyś miał na myśli średnią 0,1 uA na przełączniku. Co nie byłoby nierozsądne jak na przełącznik DIP.
Trevor_G,
10

Jedna metoda, którą zastosowałem, wykorzystuje pojemnościowy charakter wejść CMOS.

schematyczny

symulacja tego obwodu - Schemat utworzony za pomocą CircuitLab

W obwodzie nad przełącznikiem, gdy jest zamknięty, umożliwia opornikowi obniżającemu ładowanie / rozładowywanie pojemności wejściowych GPIO do poziomu gruntu.

Sztuką tego obwodu jest wykorzystanie dwukierunkowego charakteru GPIO, aby utrzymać ładunek wejściowy na wysokim poziomie logicznym, gdy przełącznik jest otwarty.

Procedura kontrolna okresowo wyłącza sworzeń jako wysoki poziom lub na krótko umożliwia podciąganie, na tyle długo, aby utrzymać ładunek w czapkach. Pin wejściowy działa wtedy jak dynamiczny bit pamięci i, w przypadku większości urządzeń, utrzymuje ten ładunek przez znaczny i użyteczny okres czasu.

Po prawidłowym skonfigurowaniu, jeśli przycisk zostanie naciśnięty, ładunek na pinie rozładuje się szybciej niż częstotliwość odświeżania. Ten warunek można następnie wykryć jako część algorytmu odświeżania jako odczyt przed operacją odświeżania lub użyć do sterowania przerwaniem.

Moc jest krótko wykorzystywana podczas impulsu odświeżania, zarówno do ładowania kondensatorów, jak i przez rezystor i przełącznik, jeśli jest zamknięty. Jednak długość impulsu odświeżania jest krótka, a częstotliwość odpytywania powoduje, że prąd odświeżania jest stosunkowo niewielki.

Oczywiście ta metoda jest aktywna. Jeśli mikro zostanie uśpione, stan przełącznika będzie nieokreślony po przebudzeniu. Pierwszy cykl odświeżania po wybudzeniu musi zignorować odczyt PIN. Ponadto tej metody nie należy używać do budzenia mikro. Przed pójściem spać dobrze jest włączyć pin jako niską moc wyjściową, aby zaparkować go w stanie zerowego prądu.

Do odczytu większej liczby przełączników statycznych, takich jak konfiguracyjne przełączniki DIP, można użyć dedykowanej procedury zamiast ciągłego cyklu odświeżania. Po odczycie piny GPIO powinny być następnie „zaparkowane” w aktywnym niskim stanie wyjściowym (zerowy prąd), aby uniknąć problemu ze zmiennymi wejściami.

UWAGA: Ta technika nieco cierpi z powodu wrażliwości na hałas, jeśli długości ścieżek są długie i przechodzą przez hałaśliwy obszar. Jako taki R1 powinien znajdować się blisko styku wejściowego. Jednak nie polecałbym go do podłączenia przełącznika w pewnej odległości na panelu przednim, chyba że dodasz dodatkową pojemność w pobliżu styku.

Trevor_G
źródło
1
Wygląda to bardzo wrażliwie na EMI. Jeśli jakakolwiek forma energii radiowej dostanie się do tego obwodu i myślę, że wszystkie zakłady są wyłączone. Dobrze, że rzeczy bezprzewodowe nie są obecnie tak powszechne :)
Lundin,
@Lundin nie jest tak źle, jak mogłoby się wydawać. 30pF i megabajt to raczej dobry filtr.
Trevor_G,
8

Jeśli przycisk jest przełącznikiem piezoelektrycznym, jedyną wymaganą mocą jest energia wytwarzana przez naciśnięcie przycisku.

Na przykład: R2 / C1 zbierają energię wytwarzaną przez naciśnięcie piezo. D1 zapobiega wzrostowi napięcia C1. R1 spuszcza C1, gdy przycisk jest zwolniony. MCU GPIO musi być w trybie wejściowym, bez trybu ściągania. Voilà, wykrywaj przyciski przy zerowym poborze prądu z zasilacza.

schematyczny

symulacja tego obwodu - Schemat utworzony za pomocą CircuitLab

Heath Raftery
źródło
3
Hmm, czy możesz zrobić / zaprojektować działający prototyp tego i pokazać korzyści z rozwiązań z normalnym przełącznikiem, z którego korzystamy przez ostatnie 30 lat?
Bimpelrekkie,
Pewnie. Dodałem przykładowy schemat. Po prostu to zbuduj. Korzyścią jest to, że zerowy pobór prądu z zasilacza jest w stanie zamkniętym lub otwartym. Wady obejmują słabą kontrolę wysiłku wymaganego do aktywacji przełącznika (obwód aktywny byłby lepszy, ale to udaremnia bardzo marginalną korzyść obwodu) i jest to nowatorska konstrukcja w porównaniu z 30 (300?) Letnią normalną konstrukcją przełącznika.
Heath Raftery
Mimo to mój kalkulator ma wiele przycisków i działa co najmniej 5 lat na komórce. Wciąż nie widzę, w jaki sposób Twoje rozwiązanie przyniosłoby jakąkolwiek korzyść. Nadal uważam, że jest to „rozwiązanie” nieistniejącego problemu. A także droższe.
Bimpelrekkie,
1
Och, zgadzam się! Spełnia pierwotne kryteria „zużywa tak mało energii, jak to możliwe”, ale trudno wyobrazić sobie, dlaczego oszczędzanie mniej niż milijoula jest przydatne.
Heath Raftery
Czy impedancja wejściowa MCU nie robi nieprzyjemnych rzeczy z powodu wysokiej impedancji wyjściowej piezo?
Scott Seidman
5

Jeśli urządzenie musi być w stanie pozostać w którymkolwiek z tych stanów przez czas nieokreślony, użycie przełącznika SPDT będzie podejściem o najniższej mocy, ponieważ można wykonać obwód statyczny, który nie pobiera prądu poza swój własny upływ prądu i prąd przełącznika. Dodatkową zaletą przełączników SPDT jest to, że można je niemal całkowicie usunąć, niezależnie od tego, jak szybko są obsługiwane lub jak kiepskie mogą być kontakty, pod warunkiem, że jeden kontakt przestanie się podskakiwać, zanim drugi z nich po raz pierwszy odczyta jako zamknięty.

Istnieją dwa dobre podejścia do podłączenia takich przełączników:

schematyczny

symulacja tego obwodu - Schemat utworzony za pomocą CircuitLab

Pierwsze podejście wymaga o jeden mniej rezystora niż drugie, ale drugie będzie bardziej tolerancyjne dla nakładania się między dwoma biegunami (będzie pobierać większy niż zwykle prąd, ale nie spowoduje zwarcia między zasilaniem). Należy pamiętać, że jeśli przełącznik może wejść w stan umiarkowanie oporny przez dłuższy czas, może spalić znacznie więcej prądu niż zwykle, ale podczas normalnego użytkowania żaden z oporników nie będzie przewodził żadnego znaczącego prądu, z wyjątkiem krótkiego momentu pomiędzy czas, w którym przełącznik zmienia stan, a wyjście reaguje.

supercat
źródło
2

Użyj wewnętrznego podciągnięcia mikrokontrolera, a po wykryciu prasy wyłącz podciąganie. Następnie od czasu do czasu włącz go ponownie, aby sprawdzić stan przycisku.

τεκ
źródło