Pytanie:
How can I read a tristate output with microcontroller?
RHaguiuda
2014-07-15 00:26:30 UTC
view on stackexchange narkive permalink

Chciałbym podłączyć linię STAT układu scalonego MCP73831 do zarządzania ładowaniem litowo-jonowym do mikrokontrolera, aby odczytać jego aktualny stan ładowania.

Arkusz danych wyjaśnia: w sekcji 5.2.1, że linia STAT jest trójstanowym wyjściem i ma następujący status:

  • Wysoka
  • Niska
  • Wysoka impedancja

oraz tabela wyjaśniająca, w jaki sposób każdy poziom przedstawia poszczególne stany ładowania baterii.

Jak mogę podłączyć ten pin do wejścia / wyjścia mikrokontrolera i czytać te trzy różne stany?

Odczyt High i Low jest dość prosty, ale wykrycie wejścia ma wysoką impedancję, której wcześniej nie robiłem.

Pięć odpowiedzi:
Wouter van Ooijen
2014-07-15 00:34:33 UTC
view on stackexchange narkive permalink

Możesz połączyć go z uziemieniem i Vcc za pomocą dwóch rezystorów 10k i użyć wejścia A / D do odczytu poziomu.

Jeśli nie masz A / D do zapasowego, podłącz go do kolejny pin twojego uC z rezystorem 10k. Jeśli pin jest wysoki lub niski, będzie to oczywiście odczytywane jako wysokie lub wysokie. niski (zakładając, że może napędzać obciążenie 10k). Jeśli ma wysoką impedancję, odczyt będzie równy temu, co wyprowadzasz na drugim pinie.

+ Podoba mi się drugi pomysł.Czytaj z wyjściem wysokim i wyjściem niskim, cztery możliwości, z których tylko trzy są rozsądne.
Niezły pomysł z drugim pinem.Jednak w tym przypadku wejście może / przekroczy Vcc procesorów.Dodano post zamiast rozszerzonego komentarza.
Turbo J
2014-07-15 01:04:50 UTC
view on stackexchange narkive permalink

Wiele mikrokontrolerów pozwala na wybór pomiędzy słabym rezystorem pullup i słabym rezystorem pulldown na wejściu GPIO - w kolejności około 50k-100k Ohm. Jeśli wejście ma wartość high-z, odczyt z włączoną słabą pulldown odczyta niski, a następny odczyt ze słabym pullup będzie wysoki.

Pamiętaj, aby odczekać kilka µs między przełączeniem rezystora a odczytem GPIO, aby umożliwić ustabilizowanie się napięcia na pinie.

Pamiętaj, że starsze AVR i 8051 mogą mieć tylko słabe podciąganie, ale brak słabych rezystorów pulldown.

+1 ... W przypadku MPU, które nie mają słabej zdolności do podciągania i słabego rozwijania, można dodać pojedynczy zewnętrzny rezystor do innego pinu GPIO i użyć go do sterowania rezystorem wysokim lub niskim.
placeholder
2014-07-15 01:34:05 UTC
view on stackexchange narkive permalink

Jeśli przeczytasz dokument - sekcja 3.3, zobaczysz, że jest on przeznaczony do użytku z rezystorem podciągającym.

W rzeczywistości z każdym otwartym drenem lub potrójnym sygnał stanu, którego nie powinieneś czytać, gdy jest w trybie trójstanowym, jest zaprojektowany w ten sposób, aby sygnał mógł być współdzielony przez wiele urządzeń. Zagmatwane jest to, że jeśli odczytujesz sygnał i jest on w trybie trójstanowym (i nie wiesz o tym), możesz uzyskać fałszywe odczyty. najlepiej wtedy zastosować słabe podciągnięcie, tak aby w przypadku niejednoznacznego sygnału sygnał był odpowiednio odczytywany. Ponieważ ten sygnał ma sterować diodą LED wskazującą stan naładowania (tj. Niski poziom ładowania), to z podciąganiem i odczytuje wysoki, co oznacza, że ​​nie ładuje się.

enter image description here

Tabela w sekcji 5.2.1 wskazuje, że (dla MCP73831) wyjście „WYSOKI Z” wskazuje „Wyłączenie” lub „Brak baterii”, podczas gdy wyjście „H” (wysokie) oznacza „Pełne ładowanie - Gotowość”.Sam rezystor podwyższający nie pozwoli MCU stwierdzić różnicy.
Po podciągnięciu wszystkie tryby „zamknięcie”, „brak baterii” i „ładowanie zakończone - stan gotowości” odwzorowują ten sam odczyt stanu wysoki.To wszystko odnosi się do akcji „nic nie rób”, wygląda na to, że arkusz danych jest spójny.
@placeholder, że mapowanie może nie być pożądane - ładowanie konkuruje i brak baterii to skrajnie różne przypadki.
Doug Inman
2020-06-30 12:19:29 UTC
view on stackexchange narkive permalink

Używam również MCP73831 i chciałem podłączyć STAT do MCU, który akceptuje tylko 3,3 V na swoich pinach wejściowych.Martwiłem się też o umieszczenie 5v na pinie GPIO.

Zamiast używać dzielnika napięcia, użyłem drugiego pinu GPIO MCU, aby przełączyć rezystor pull-up / pulldown za pomocą MOSFET z kanałem P i kanałem N (patrz obwód poniżej - myślę, że nazywa się to totemembiegun ;-)).Następnie wziąłem STAT i przepuściłem go przez prosty falownik, aby MCU mógł go bezpiecznie odczytać (tj. ~ STAT między 0 a 3,3 V).

Aby to zadziałało, wykonałem 2 odczyty wyjścia (~ STAT), pierwszy z niskim CTL, a drugi z wysokim CTL.Jeśli odczyty się zmienią, STAT musi się zmieniać. Jeśli potrzebujesz diody LED do wyświetlania stanu ładowania, możesz sterować tym z poziomu samego MCU, jeśli masz wystarczająco dużo zapasowych GPIO :-)

Mam nadzieję, że to pomoże. enter image description here

carveone
2014-07-25 20:42:52 UTC
view on stackexchange narkive permalink

Jeśli mogę dodać ostrzeżenie do tego posta. MCP73831 to układ ładowarki baterii, a zatem jego Vdd jest wyższy niż jego Vbat.

enter image description here

Zakładając, że twój mikrokontroler jest podłączony do Vbat, a Vdd jest zasilany z USB, wtedy Vdd może być co najmniej o 1,5 V wyższe niż V ucontroller .

Problem polega na tym, że w 73831, który ma wyjścia totemu, STAT jest określany jako Vdd . Więc nie podłączaj STAT bezpośrednio do wejścia uC. Pomiędzy nimi użyj czegoś w rodzaju rezystora 10k. W przypadku mikro PIC zaciski diody wejściowej zacisną się do jego Vcc (sprawdź arkusz danych pod kątem maksymalnego prądu przed zatrzaskiem)

Jako dodatek - w zeszłym roku natknąłem się na hack, aby odczytać wejścia hi / low / z to było dla pilota dowódcy, ale może (lub nie) działać dla Ciebie. Coś w rodzaju (pseudokod):

  STAT ---- [10k] ------ PICPIN zaczyna się jako kod wejściowy PIN ustawiania niskiego kodu PIN do wysyłania PIN ustawiania do kodu wejściowego PIN highvalue = odczyt PIN (zakładając 1 dla wysokiego, 0 dla niskiego) wartość = wartość << 1 ustaw kod PIN na wyjście ustaw PIN na wartość wejściową | = odczyt PIN  

Następnie otrzymujesz 0 dla niskiego, 1 dla Hi-Z i 3 dla wysokiego . YMMV.

Mam ten sam problem.Nie rozumiem, dlaczego miałoby działać z 10k i nie niszczyć AVR?Jest to prąd ograniczający, ale napięcie nadal wynosi 5 V, co przekracza specyfikację VCC + 0,5 V maksymalne napięcie we / wy.
Napięcie po jednej stronie rezystora jest poza specyfikacją, ale na pinie mikro diody zabezpieczające wejście ograniczają maksymalne napięcie do VCC + spadek diody, który jest zgodny ze specyfikacją.Jeśli prąd jest zbyt wysoki, nadal będziesz niszczyć diody.Więc gdybyś miał rezystor 200V -> 10Mohm -> Pin, prąd wyniósłby 20uA.Nie zrobiłbym tego teraz bez zewnętrznych diod Schottky'ego, ale masz pomysł.


To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...