Wiele „kapryśnych” projektów z ESP32 wcale nie ma problemu z kodem. Płytka resetuje się przy łączeniu z Wi-Fi, przekaźnik klika i dziennik się urywa, a czujnik na baterii pada po dwóch tygodniach zamiast po dwóch miesiącach. Zwykle winne jest zasilanie: zasilacz nie daje rady przy szczytach poboru, stabilizator nie pasuje do napięcia wejściowego albo ktoś podał napięcie na pin, który nie był do tego przeznaczony.
Poniżej omawiam kolejne sposoby zasilania w takiej kolejności, w jakiej zwykle się na nie trafia: od przewodu USB na biurku po akumulator i moduł sieciowy w gotowym urządzeniu. Liczby pochodzą z noty katalogowej ESP32 (wersja 5.3), wytycznych sprzętowych Espressifa i not katalogowych wymienionych elementów.
Czego właściwie potrzebuje układ
ESP32 to układ zasilany napięciem 3,3 V. Nota katalogowa podaje zalecany zakres 3,0-3,6 V (typowo 3,3 V), a jako wartość graniczną dla pinów zasilania 3,6 V. Ten sam dokument wymaga zasilacza, który da co najmniej 0,5 A.
Przy średnim poborze prądu 0,5 A wygląda na przesadę, ale problemem nie jest średnia. Według noty typowy pobór przy nadawaniu wynosi około 240 mA dla 802.11b przy mocy +19,5 dBm i około 180-190 mA dla 802.11g i 802.11n. Odbiór to mniej więcej 95-100 mA, a głęboki sen około 10 µA. Układ przechodzi między tymi stanami w ciągu milisekund i to właśnie impulsy przy nadawaniu ściągają napięcie w dół.
Lista kontrolna schematu od Espressifa mówi wprost, że skoki prądu przy nadawaniu mogą załamać napięcie zasilania. Producent zdecydowanie zaleca kondensator 10 µF na linii 3,3 V i kondensatory 0,1 µF tuż przy cyfrowych pinach zasilania. Jeśli budujesz urządzenie na samym module, a nie na płytce prototypowej, te kondensatory musisz dodać sam.
Piny wejścia i wyjścia też pracują przy 3,3 V. Maksymalne napięcie stanu wysokiego na wejściu to według noty VDD + 0,3 V, czyli przy zasilaniu 3,3 V wychodzi 3,6 V. Sygnał 5 V z czujnika albo z Arduino Uno przekracza ten limit, więc potrzebny jest konwerter poziomów logicznych albo dzielnik napięcia.
Sposób 1: USB
Na płytce prototypowej USB to najprostsza i najbezpieczniejsza opcja. Stabilizator na płytce zamienia 5 V na 3,3 V, a przez to samo złącze wgrywasz oprogramowanie i czytasz dziennik.
Słabe punkty leżą poza płytką:
- Przewód. Długie, cienkie i tanie przewody tracą napięcie pod obciążeniem. Kiedy ESP32 zaczyna nadawać, na złączu może być wyraźnie mniej niż 5 V, a stabilizator ma wtedy mniejszy zapas.
- Port lub ładowarka. Port USB 2.0 w komputerze musi dawać tylko 500 mA. Na samo ESP32 to wystarczy, ale już nie na ESP32 razem z modułem przekaźników, serwem, taśmą LED albo modemem 4G zasilanymi z tej samej płytki.
- Wszystko, co podłączysz do płytki. Każdy element zasilany z pinu 5V albo 3V3 płytki korzysta z tego samego przewodu i tego samego stabilizatora.
Jeśli projekt działa na laptopie, a resetuje się na ładowarce do telefonu (albo odwrotnie), zacznij od wymiany przewodu. To najtańszy test, jaki możesz zrobić.
Sposób 2: pin 5V
Pin 5V (czasem opisany jako VIN) służy do zasilania płytki z zewnętrznego źródła 5 V, na przykład z zasilacza USB podłączonego bezpośrednio albo z linii 5 V, która zasila już inne elementy. Na 3,3 V nadal zamienia je stabilizator na płytce.
Instrukcja płytki ESP32-DevKitC V4 wymienia trzy sposoby zasilania: złącze Micro USB, piny 5V i GND oraz piny 3V3 i GND. Wykluczają się wzajemnie. Według Espressifa wolno używać jednego i tylko jednego z nich, bo inaczej można uszkodzić płytkę, zasilacz albo oba naraz. W praktyce oznacza to, że nie podajesz napięcia na pin 5V z zewnętrznego zasilacza, gdy przewód USB jest podłączony do komputera. Wyjątek: schemat konkretnej płytki pokazuje, że oba źródła oddziela dioda lub przełącznik. Wiele klonów w ogóle tego nie opisuje.
Jeśli potrzebujesz dziennika z USB, gdy płytka działa na zewnętrznym zasilaniu, zwykle wystarczy przewód albo przejściówka USB z przeciętą linią zasilania albo konwerter USB-UART podłączony tylko przez TX, RX i GND.
Sposób 3: pin 3V3
Podanie 3,3 V prosto na pin 3V3 omija stabilizator płytki. Przydaje się, gdy masz już dobre źródło 3,3 V albo gdy to stabilizator jest najsłabszym ogniwem (o tym niżej). To jednak najbardziej ryzykowna opcja:
- Nie ma stabilizatora, który wybaczy pomyłkę. Wszystko powyżej 3,6 V przekracza wartości graniczne.
- Źródło 3,3 V samo musi poradzić sobie ze szczytami przy nadawaniu, więc potrzebuje wydajności co najmniej 500 mA, jak wymaga Espressif.
- Obowiązuje ta sama zasada jednego źródła: nie podłączaj USB, gdy pin 3V3 jest zasilany z zewnątrz.
Stabilizatory: minimalny spadek napięcia i prąd spoczynkowy
Większość płytek z ESP32 robi 3,3 V z 5 V za pomocą stabilizatora liniowego LDO. O tym, czy pasuje on do projektu, decydują dwa parametry.
Minimalny spadek napięcia to najmniejsza różnica między wejściem a wyjściem, przy której stabilizator jeszcze utrzymuje zadane napięcie. AMS1117, spotykany na wielu tanich płytkach, ma typowo 1,1 V i maksymalnie 1,3 V przy pełnym prądzie 800 mA, a przy mniejszym prądzie ta wartość maleje. Żeby dać czyste 3,3 V przy dużym obciążeniu, potrzebuje na wejściu około 4,4-4,6 V. Z zasilacza USB 5 V to żaden problem. Z pojedynczego ogniwa litowo-jonowego już tak.
AP2112, popularna alternatywa o niskim spadku napięcia, w wersji 3,3 V ma typowo 250 mV przy 600 mA. Utrzyma więc 3,3 V przy dużo niższym napięciu wejściowym.
Prąd spoczynkowy to prąd, który pobiera sam stabilizator. Nota AMS1117 podaje typowo 5 mA i maksymalnie 10 mA. AP2112 ma typowo 55 µA. ESP32 w głębokim śnie pobiera około 10 µA.
Policz to dla czujnika na baterii: 5 mA pobierane bez przerwy przez sam stabilizator wyczerpie akumulator 2000 mAh w 400 godzin, czyli w niecałe 17 dni, niezależnie od tego, jak mało bierze samo ESP32. Z AP2112 udział stabilizatora spada mniej więcej stukrotnie i wtedy warto zmierzyć resztę płytki: konwerter USB-UART, diodę zasilania i dzielniki napięcia.
Akumulatory
Najczęściej wybiera się pojedyncze ogniwo litowo-jonowe albo litowo-polimerowe. Według Battery University typowe napięcie pełnego naładowania dla popularnych ogniw litowo-jonowych z kobaltem to 4,20 V, a napięcie nominalne 3,60 V. Naładowane ogniwo przekracza więc dopuszczalne dla ESP32 3,6 V i nie może iść prosto na pin 3V3. Potrzebny jest stabilizator o niskim spadku napięcia, a ostatnia część pojemności i tak zostanie poniżej napięcia, przy którym stabilizator utrzyma jeszcze 3,3 V.
Ogniwa LiFePO4 kuszą napięciem nominalnym 3,2 V. Battery University podaje jednak dla nich napięcie ładowania 3,65 V, czyli odrobinę powyżej wartości granicznej 3,6 V. Podłączenie takiego ogniwa prosto do pinu 3V3 w trakcie ładowania nie zostawia żadnego zapasu.
Kilka praktycznych zasad:
- Używaj ogniwa z układem zabezpieczającym albo modułu ładowarki z zabezpieczeniem i ładowarki przeznaczonej dla danej chemii ogniwa.
- Zmierz multimetrem pobór całej płytki w uśpieniu, a nie tylko samego układu. Płytki prototypowe projektuje się z myślą o biurku, a nie o bateriach.
- Lista kontrolna Espressifa zaleca układ nadzoru zasilania na pinie włączającym układ, gdy napięcie narasta powoli (na przykład przy ładowaniu akumulatora), gdy zasilanie jest często włączane i wyłączane albo gdy źródło jest niestabilne, jak panel fotowoltaiczny. Bez niego układ może wystartować w nieokreślonym stanie, zanim napięcie osiągnie właściwy poziom.
Moduły zasilane z sieci
W urządzeniu, które ma siedzieć za łącznikiem ściennym albo w puszce, zwykle stosuje się mały moduł AC-DC. Hi-Link HLK-PM01 przyjmuje na przykład 100-240 V AC i daje 5 V przy 600 mA (3 W). Nota katalogowa zaleca na wejściu zewnętrzny bezpiecznik zwłoczny 1 A/250 V AC albo rezystor drutowy 10 Ω.
Są jeszcze dwie praktyczne uwagi, których w nocie nie ma. Po pierwsze, 600 mA przy 5 V wystarczy na ESP32 i mały moduł przekaźnika, ale nie na taśmy LED czy silniki. Po drugie, wszystko, co ma kontakt z siecią 230 V, wymaga porządnej obudowy, odpowiednich odstępów między częścią sieciową a niskonapięciową płytki i montażu przez elektryka z uprawnieniami. Jeśli masz wątpliwości, użyj certyfikowanego zasilacza USB 5 V wpiętego do gniazdka. Wygląda to mniej elegancko, ale dużo trudniej coś zepsuć.
Spadki napięcia: co mówi reset
ESP32 ma wbudowany detektor spadku napięcia, domyślnie włączony. Gdy napięcie zasilania spadnie poniżej bezpiecznego poziomu, detektor resetuje układ i wypisuje w porcie szeregowym:
Brownout detector was triggered
Dokumentacja ESP-IDF zaznacza, że przy szybkim spadku napięcia może się pojawić tylko część komunikatu. Detektor można skonfigurować albo wyłączyć opcjami CONFIG_ESP_BROWNOUT_DET i CONFIG_ESP_BROWNOUT_DET_LVL_SEL.
Wyłączanie go, żeby „naprawić” resety, to zły pomysł. Detektor nie wywołał problemu, tylko go zgłosił. Bez niego układ pracuje dalej przy napięciu, na które nie był projektowany, a to może zepsuć zapis do pamięci flash albo zostawić peryferia w dziwnym stanie. Traktuj komunikat jak objaw i szukaj przyczyny:
- Wymień przewód USB i zasilacz na sprawdzone.
- Sprawdź, czy reset następuje dokładnie przy łączeniu z Wi-Fi albo przy przełączaniu przekaźnika lub silnika. To wskazuje na szczyty poboru prądu.
- Odłączaj kolejno elementy zewnętrzne. Cewka przekaźnika, serwo albo taśma LED zasilane z pinów płytki to częsty winowajca. Daj im osobny zasilacz i połącz tylko masy.
- Na własnej płytce sprawdź kondensatory: 10 µF na linii 3,3 V i 0,1 µF przy pinach zasilania, tak jak zaleca Espressif. Większy kondensator elektrolityczny przy module może pomóc przy szczytach poboru, ale nie uratuje zasilacza, który jest po prostu za słaby.
- Mierz napięcie na pinie 3V3 pod obciążeniem, a nie na wyjściu zasilacza.
Typowe błędy
- USB i zewnętrzny zasilacz jednocześnie. Instrukcja DevKitC wprost ostrzega, że może to uszkodzić płytkę lub zasilacz.
- Wyjście czujnika 5 V podłączone do GPIO. Limit na wejściu to 3,6 V przy zasilaniu 3,3 V. Użyj dzielnika albo konwertera poziomów.
- Ogniwo litowo-jonowe prosto na pin 3V3. 4,2 V przekracza wartość graniczną.
- Płytka z AMS1117 w czujniku na baterii. Sam stabilizator bierze miliampery i przy dużym prądzie potrzebuje na wejściu ponad 4 V.
- Przekaźniki, serwa i taśmy LED zasilane z płytki. Potrzebują własnego zasilacza. Połącz tylko masy.
- Wyłączony detektor spadku napięcia. Ukrywa problem, zamiast go rozwiązać.