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:
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?
źródło
Odpowiedzi:
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.
źródło
SPDT ( S Ingle P ole D ouble T jest rzucać) Przycisk byłby to ultra wydajny przycisk.
Źródło: http://www.ni.com/white-paper/3960/en/
W twoim przypadku 1P przejdzie do MCU, 1T do VCC, 2T do GND.
źródło
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).
źródło
Jedna metoda, którą zastosowałem, wykorzystuje pojemnościowy charakter wejść CMOS.
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.
źródło
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.
symulacja tego obwodu - Schemat utworzony za pomocą CircuitLab
źródło
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:
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.
źródło
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