PCA9603 – Jak to jest z translatorem poziomów logicznych magistrali I²C

Postanowiłem kiedyś zapoznać się z sensorem oświetlania APDS-9300 (Digital Ambient Light Photo Sensor) komunikującym się z µC za pośrednictwem magistrali I²C. Sęk w tym, iż element ten powinien być zasilany napięciem 2,5V natomiast mikrokontroler, którego użyłem do zarządzania, z tytułu podłączonego wyświetlacza wymagał napięcia zasilania 5V.

W związku z tym trzeba było zastosować translator napięcia dla tej magistrali. Z początku podłączyłem translator na tranzystorach MOSFET i ze stabilizatorem 3,3V. Jednak bez powodzenia. Dlatego zdecydowałem się na zakup niedrogiego translatora PCA9603 w maciupkiej obudowie DCT (chyba ku mojej zgubie).

Układ ten stanowi bardzo uniwersalne rozwiązanie dla tego typu podobnych przypadków. Zorganizowany jest w następujący sposób: posiada wejście załączające, dwa wejścia napięcia odniesienia, pin GND, oraz parę pinów do komunikacji magistrali (SDA1, SCL1) po stronie „niskonapięciowej”, oraz drugą parę (SDA2, SCL2) do komunikacji magistrali po stronie „wysokonapięciowej”. Po stronie niskonapięciowej jest wsparcie dla napięć magistrali od 1,2V do 3,3V. Natomiast po stronie wysokonapięciowej zakres pracy wynosi od 1,8V do 5V. Translator został tak zaprojektowany, że nie potrzebuje pinu do ustawiania kierunku transmisji danych na magistrali. Z tym, że między jedną, a drugą stroną musi być różnica napięć co najmniej 0,6V. Przy dobrych warunkach układ może pracować z częstotliwością magistrali 400MHz.

Do prawidłowej pracy w trybie ciągłym (bez sterowania pinem EN) potrzebuje odpowiednich rezystorów podciągających dla obu stron magistrali, oraz opornika do ustalenia napięcia Vref1 (Pull UP), który łączymy do pinu Vref2 i EN, i kondensatora uziemiającego na pinie Vref2. O ile zalecane wartości kondensatora i oporników magistrali odczytamy z tabeli w nocie katalogowej. O tyle opisu na sposób dobrania rezystora Vref nie wypatrzyłem, w związku z tym zastosowałem wartość 200kΩ przedstawioną na schemacie typowej aplikacji z noty katalogowej. Niemniej zastanowiłem się czy ta wartość będzie odpowiednia dla translatora pracującego w moich warunkach 2,5V<->5,0V gdyż na schemacie są napięcia 1,8V<->3,3V. Ku mojemu zdziwieniu układ nie działał w sposób oczekiwany. To znaczy komunikacja nie działała lub działała w sposób taki sam jak przy zastosowaniu poprzedniego translatora – bez efektownie. Nie posiadam oscyloskopu, w tamtym też czasie nie posiadałem analizatora stanów logicznych, więc mogłem się tylko opierać na instynkcie i domysłach. Zasięgnąłem też opinii u dwóch znajomych (internautów) browara i rithien-a których sobie bardzo cenię. Pomimo tego, że Panowie są profesjonalistami w tej dziedzinie, konsultacje nie przyczyniły się do rozwiązania problemu (co mi pochlebia) bo nie wniosły nic nowego. Wtedy zorientowałem się, że coś nie gra z napięciem po stronie zasilania sensora po mimo tego, że zastosowałem układ TC1185 (150 mA CMOS LDO), który to dostarczał prawidłowe napięcie zasilania 2,5V.  Aby rozpoznać problem przygotowałem dodatkową płytkę PCB z tymi maleństwami, aby ich nie męczyć ciągłym lutowaniem, gdyż lutowanie powierzchniowe praktykuję stosunkowo niedługo. Wiadomo aby nie upiec elektroniki.

Podczas montowania elementów bardzo, bardzo dokładnie po kilka razy sprawdzałem jakość montażu i działanie układu. tym razem rozpocząłem od uruchomienia małego zasilacza, pracował bezbłędnie. Na drugi ogień poszedł translator. I tu ku mojemu zdziwieniu, po prawidłowym montażu elementów biernych napięcie zasilające za stabilizatorem wynosiło około 4,5V !!!! Zacząłem szukać przyczyny. Niestety zmuszony byłem odlutować układ PCA9603. Po tej czynności wszystko grało więc „przyczepiłem” go z powrotem. Napięcie zasilające sensor znowu było nieprawidłowe. Dość długo szukałem jakichkolwiek informacji w internecie na ten temat – niestety mało skutecznie. Jedynie znalazłem wzmiankę o tym, że na schemacie jest błąd właśnie przy określeniu wartości opornika oznaczonego wartością 200kΩ. Błąd raportował konsument na forum producenta i z tego co pamiętam bez odzewu. Opis dotyczył zdaje się napięć takich jak były w przykładzie. To naprowadziło mnie na pomysł poeksperymentowania z wartością tego rezystora. Trafiony zatopiony (-;

Typical Application Circuit

Typical Application Circuit PCA9603

Dla translacji napięć na poziomach 2,5V<->5,0V wartość tego rezystora powinna wynosić 2,2MΩ. Po zastosowaniu takiego opornika napięcie zasilania sensora było na prawidłowym poziomie, a transmisja ruszyła z kopyta. Mogłem zacząć programować odbiór danych i stosowne obliczenia. (-;


nota katalogowa IC pca9306_translator_I2C.pdf (292 pobrania)

Share Button
Tagi , , .Dodaj do zakładek Link.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

13 − 12 =

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.