Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

ESP8266 - Zmniejszenie zużycia prądu

maniac83 06 Lut 2015 09:14 4569 2
  • #1 06 Lut 2015 09:14
    maniac83
    Poziom 9  

    Cześć,

    Ostatnio zacząłem się bawić tym układzikiem (konkretnie chodzi o ten modulik:
    http://wiki.iteadstudio.com/File:IM140905002_1.jpg ).

    Soft: nodemcu 0.9.5.

    Wszystko fajnie, tylko pozostaje problem zużycia prądu.
    Zgodnie z opisem w API, podłączyłem PIN8 z PIN32, dzięki czemu mogłem wyprowadzać układ z deep sleepa.

    Po wejściu do dsleepa, układ pobierał około 30mA.
    Dużo ze względu na diodę sygnalizującą włączone zasilania.
    Po odlutowaniu diody, pobór prądu w dSleepie spadł poniżej 1mA (około 600 - 800uA).

    To w dalszym ciągu dość dużo, z tego co rozumiem z wiki, w dsleep powien pobierać około 10uA.

    Wniosek dość łatwy do przewidzenia, któryś z pozostałych elementów pobiera cały czas prąd.

    Nie wiem czy można jeszcze coś wyciąć z tej płytki żeby zmniejszyć prąd ?
    A może to sam SoC w dalszym ciągu mimo dSleepa tyle bierze prądu ?

    W zasadzie jedynym dla mnie rozwiązaniem, który jeszcze pozwoli zmniejszyć zużycie prądu, to dołożenie jakiegoś ATTiny, którym po prostu wyłączę zasilanie dla całego modułu wifi, a sam ATTiny wrzucę do sleepa (chyba koło 1uA wtedy bierze) z budzeniem na jakiś timer.

    0 2
  • #2 07 Lut 2015 09:45
    piotr411
    Poziom 22  

    Trochę za fizycznie podchodzisz do sprawy. Do odczytu danych z portów jest polecenie ow_read() możesz sprawdzić co jest włączone lub wyłączyć odrazu diodę led i inne urządzenia, które są ewentualnie zasilane.

    0
  • #3 09 Lut 2015 14:22
    maniac83
    Poziom 9  

    piotr411 napisał:
    Trochę za fizycznie podchodzisz do sprawy. Do odczytu danych z portów jest polecenie ow_read() możesz sprawdzić co jest włączone lub wyłączyć odrazu diodę led i inne urządzenia, które są ewentualnie zasilane.


    Nie bardzo.

    Dioda byłą wpięta pomiędzy zasilanie a masę, więc nie jest kontrolowane przez proca.

    Zresztą nie bardzo jest co wycinać. Jest tylko SoC, pamięć flash (ten mały scalaczek) kilka rezystorów no i jeszcze diodka na Rx ale ona nie jest problem w dsleep.

    Generalnie, problem leżał w SoCu.
    Programik który ogarniałem używał 1-wire do wiadomych celów.

    Przy komunikacji z devicem, do linii danych dopinany jest pullup.
    Jeżeli przed dsleep go nie odepniemy, to będzie ciągnąć prąd nawet gdy proc pójdzie spać (piny sprowadzane w sleepie do stanu niskiego).

    Teoretycznie te pullupy powinny być odpinane przy odpowiednim parametrze funkcji ow.write, albo przez wywołanie ow.depower, ale niestety, żeby odpięcie miało miejsce, trzeba dać trochę czasu (tzn, pewnie interpreter lua jest tak slabo napisany).

    Niestety używanie tmr.delay nie rozwiązuje problemu (brak przełączanie tasków ?!).

    Jedyny sposób jaki znalazłem, to po wywołaniu depower, odpalenie tmr.alarm (asynchroniczny alarm), na 250ms, w callbacku którego odpalam dsleep.

    Dzięki temu, przez te 250ms (100 ms było za mało) pullupy zostają wypięte, a Soc idzie spać z pięknym wynikiem 30 uA !!!! :-)

    Ten fix to fakt, czy to wina pullup czy może mode pina, albo co innego, to już moja teoria.

    Pzdr.

    0