Skocz do zawartości
Gieneq

Jak wygląda układ CP2102 w ESP32 devkit

Pomocna odpowiedź

Napisano (edytowany)

Przyjrzałem się ostatnio płytkom rozwojowym ESP32. Mam zamiar zaprojektować urządzenie i próbuje dojść do tego jaki jest najlepszy sposób połączenia ESP32-WROOM z konwerterem UART-USB CP2102. Nie spodziewałem się, że każdy napotkany pdf/ilustracja zawiera nieco inny schemat połączeń, a do tego płytki kupione nie wiadomo skąd nieco odbiegają od tego co jest w dokumentacji. Pomyślałem, że napiszę coś o tym, może komuś się przyda.

Wyszedłem od tego schematu devkita V4 ze strony espressif i dokumentacji układu CP2102 i nieco starszej dla porównania. Schemat jest od producenta więc powinien być poprawny. Co mi się rzuciło w oczy to piny:

  • VBUS - sygnał 5V podłączenia USB, rozpoznaje już od 1V, max 5,2V,
  • REGIN - wejście wewnętrznego regulatora 3,3V. Jeżeli na te wejście poda się 3,3V to regulator jest dezaktywowany,
  • VDD - wyjście ww. regulatora,
  • ~RST - wyjście open drain z zalecanym rezystorem 4,7k podciągniętym do VDD (3,3V).

Dopóki nie trafiłem na ostatnią stronę dokumentacji, to nie doszedłbym dlaczego wyjście regulatora 1117 połączone jest z wyjściem wbudowanego regulatora. Jeżeli do układu dostarczane jest zasilanie z zewnętrznego stabilizatora, to podając to napięcie (3,3V) na REGIN i VDD można wyłączyć wewnętrzny regulator. Pytanie tylko dlaczego na schematach pozostał tantal 4,7uF? 

image.thumb.png.60015dbfc87c996ce32ab51b0c9db136.png

Pod gwiazdką wspomniano tylko rekomendację w wypadku stosowania konfiguracji wewnętrznego regulatora.

To wyjaśnia się w 8 rewizji dokumentacji (jeżeli ktoś tak jak ja trafił najpierw na starszego pdfa od sparkfuna to ma pecha), gdzie kondensator został zarekomendowany także w sytuacji, gdy dostarczane jest napięcie 3,3V z osobnego źródła. Czyli  tak dla ścisłości należy podłączać zawsze.

image.thumb.png.0048ec3aa4c7887a157c57f5fc9bb47d.png

Idąc dalej można przyjrzeć się podłączeniu linii USB, tu rozrzut tego co można znaleźć w sieci jest dość spory, ale wychodzę od schematu devkita V4. Na liniach sygnałowych i zasilaniu są diody ESC (tego akurat na płytce, którą mam nie dali), ale sens jest zrozumiały. 

Dalej pojawia się pin VBUS i tu warto jednak pobrać 8 rewizję dokumentacji, gdzie wartości graniczne progu przełączenia są nieco inne:

image.thumb.png.12ab6bab320caef97798db736db19805.png

Stąd sensowne jest, że pojawia się tu dzielnik napięcia 1:3, gdzie na wyjściu będzie powiedzmy 1,7V. Jest to zalecane szczególnie, gdy zdarzy się sytuacja, gdzie VBUS i wejście napięcia dla regulatora będą różne - niebezpieczna może być sytuacja gdzie napięcie na wejściu regulatora pojawi się dużo później od VBUS. W przypadku ze schematu sytuacja jest bezpieczna, ale bezpieczeństwo nie zaszkodzi.

Ciekawe jak sprawuje się projekt tego autora:

image.thumb.png.bdaa849b61cc5c3e151a3bb98680f53c.png

Należy się mu jednak plusik, dał 2 rezystory na liniach RX i TX. Tylko pytanie po co?

image.thumb.png.6ffd17517912dceba715e9f3d5109253.png

Często spotykana odpowiedź to dla ochrony. Ale przed czym? Rezystory te mogą służyć separacji układów UART w sytuacji, gdy na jednej linii jest więcej nic 2 urządzenia. Wtedy te po stronie rezystorów mają niższy priorytet. Zatem na powyższym schemacie priorytet będzie miało urządzenie podłączone do wyprowadzeń dev kitu. Taki układ spotkamy na wszystkich płytkach ESP (dlaczego na tej z wyjściowego schematu nie ma, nie wiem, na tych które mam akurat są). Spotkamy też w Arduino UNO:

image.thumb.png.9fe7c1e82e242636f0e9c9fc17bfb4ce.png

Pozostały jeszcze 2 linie służące też do automatycznego programowania: DTR i RTS:

image.thumb.png.eab1d0f377690ca8e4fe2dc651570e17.png

Aby wgrać kod do ESP32 przy aktywowaniu resetu, GPIO0 musi być w stanie niskim (domyślnie jest podciągnięte do 1). Wykorzystuje się do tego sygnał DTR, który przyjmuje stan niski podczas transmisji. Aby jednak odciąć go, na płytkach rozwojowych spotkamy taki oto układ logiczny, w którym po podaniu sygnału z RTS, który przy 1 na DTR zresetuje IO0, nastąpi też odcięcie resetu (czy też pinu EN). Sygnały te są przesunięte względem siebie, stąd sekwencja będzie prawidłowa.

W ESP32 proces ten jest już dobrze zautomatyzowany, lecz w poprzedniku nie było to tak dobrze znane, zwłaszcza że czasem stosowano układy, które nie miały sygnału RTS albo nie był połączony. Można sprawdzić dostępne metody resetu np. wybierając Generic ESP8266 z Arduino IDE.

Też tak odchodząc od tematu, podobny zabieg można spotkać na płytce Arduino UNO, gdzie wykorzystany jest impuls przy zboczu sygnału DTR:

image.thumb.png.cdebb6e562c661199758c603d6dc3b19.png

Także taka ciekawostka i mam nadzieję, że komuś się to przyda przy projektowaniu własnego układu, lub dociekaniu jak działają płytki rozwojowe ESP. Wpis początkowo był pytaniem dotyczącym podłączenia zasilania do układu konwertera, ostatecznie posłużył za sposób ułożenia informacji i sam wyjaśnił pytania.

Edytowano przez Gieneq
  • Lubię! 2

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...