- konstrukcja oparta na scalonym przetworniku EMC1046/7,
- interfejs: I²C,
- cztery kanały pomiarowe do podłączenia czujników tranzystorowych,
- rozdzielczość pomiaru: 0,125°C,
- dokładność: ±2%,
- zakres pomiarowy: –40...+127°C,
- częstotliwość odczytów: 4 Hz,
- napięcie zasilania: 3,3 V,
- poziom logiczny na liniach SDA/SCL: 3,3...5 V (wbudowany translator),
- wbudowany dodatkowy, piąty czujnik na PCB.
W module zastosowano gotowe rozwiązanie przetwornika temperatury na magistrali I²C oparte o układ EMC1046/7 firmy Microchip. Strukturę wewnętrzną układu pokazano na rysunku 1 – jest on kompletnym sześciokanałowym przetwornikiem temperatury, który obsługuje pięć czujników zewnętrznych i jeden czujnik wbudowany w strukturę. Każdy z kanałów ma obwód obróbki sygnału z filtracją, dzięki któremu z rejestrów danych można odczytać wartość temperatury niewymagającą już dalszej obróbki matematycznej. Odczyt możliwy jest z rozdzielczością 0,125°C i dokładnością nie gorszą niż ±2% w zakresie temperatur –40...+127°C. Przy konwersji 4×/sekundę pobór prądu nie przekracza 1 mA. Dostępny jest bliźniaczy układ EMC1047, zgodny wyprowadzeniami z EMC1046, ale wyposażony w dodatkowy, szósty kanał pomiaru temperatury zewnętrznej, który w module można stosować zamiennie.
EMC1046 odpowiada za obróbkę sygnału ze złączy diodowych czujników temperatury, umożliwia ich kalibrację i kompensację (zarówno rozrzutów parametrów struktur, jak i rezystancji przewodów pomiarowych) oraz raportuje ich uszkodzenia. Dane temperaturowe mogą być uśredniane, a maksymalna częstotliwość pomiaru to 4 Hz, co wystarcza w wielu zastosowaniach. Układ automatycznie wykrywa najwyższą temperaturę i wskazuje kanał pomiarowy, w którym została ona zarejestrowana. Ułatwia to konstrukcję wszelkiego rodzaju termostatów oraz układów sterowania chłodzeniem. Interfejs komunikacyjny stanowi magistrala I²C/SMBus, adres układu to 0x4c. EMC1046 wymaga zasilania 3,3 V. Dzięki zastosowaniu antyrównoległego połączenia elementów pomiarowych w kanałach 2...4 możliwe było zmniejszenie liczby wyprowadzeń i umieszczenie układu w obudowie MSOP10. Obsługiwane topologie podłączenia czujników do EMC1046 pokazano na rysunku 2.
Pierwszy od lewej rysunek pokazuje przykładowe podłączenie diody wbudowanej w strukturę układu (np. mikroprocesora), środkowa konfiguracja używa typowego tranzystora PNP (2N3906), natomiast prawy sposób podłączenia korzysta z tranzystora NPN (2N3904). Czujniki tranzystorowe mogą być podłączone antyrównolegle w kanałach 2...5. Każdy kanał wyposażony został w detekcję zwarcia i rozwarcia czujnika oraz kompensację rezystancji przewodów.
Schemat ideowy modułu i sposób podłączenia czujników pokazano na rysunku 3.
Jak przystało na rozwiązanie specjalizowane, schemat jest bardzo prosty: poza U1 typu EMC1046/7, układ zawiera jedynie kondensator odsprzęgający zasilanie C1 oraz konwerter poziomów na tranzystorze Q6, umożliwiający współpracę modułu z systemami 3,3...5 V. Stabilizator LDO U2 dostarcza napięcia zasilania 3,0 V do U1. Sygnały zasilania i magistrali wyprowadzone są na złącze I²C zgodne z Grove. Czujniki temperatury Q2...6 typu 2N3904 podłączone są do złączy TH23, TH45. Dodatkowo na płytce do kanału 1 podłączony został tranzystor Q1, który może być użyty do pomiaru temperatury otoczenia lub uśredniania jej z pomiarami czujnika wbudowanego w U1.
Rozmieszczenie elementów zobrazowano na rysunku 4, zmontowany moduł – na fotografii otwierającej.
Wszystkie konfiguracje i odczyty EMC1428 odbywają się pod adresem 0x4C magistrali I²C. Wymiana danych i konfiguracja przebiega z wykorzystaniem rejestrów, których pełna mapa znajduje się w dokumentacji. Minimalny zestaw niezbędny do pomiaru temperatury opisano w tabeli 1.
Pierwszy odczytywany rejestr to FDh, w którym przechowywana jest wartość 0x1A identyfikująca EMC1046 – lub 0x1C wskazująca EMC1047. Prawidłowy odczyt rejestru może być uznany za detekcję układu na I²C. W rejestrach FEh=5Dh, FFh=01h przechowywane są odpowiednio: ID producenta i wersja układu. Każdy odczyt temperatury (10 bitów + znak) zajmuje dwa rejestry, przy czym należy zwrócić uwagę, że nie wszystkie są umieszczone pod kolejnymi adresami. Znaczenie bitów w parze rejestrów temperatury zaprezentowano w tabeli 2.
Szybkiego sprawdzenia działania układu można dokonać po podłączeniu go do Raspberry Pi. Poleceniem i2cdetect –y 1, sprawdzamy obecność układu na magistrali (rysunek 5).
Poleceniem i2cset –y 1 0x4c 0x3b 0x06 aktywujemy obsługę czujników w połączeniu antyrównoległym.
Poleceniem i2cdump 1 0x4c możemy odczytać zawartość rejestrów dostępnych pod adresem 0x4c i sprawdzić poprawność konwersji (rysunek 6).
Pod adresami 0x00/29, 0x01/10, 0x23/24, 0x2A/2B, 0x41/42, 0x43/44 dostępne są odczyty temperatur. Jeżeli testowanie przebiegło pomyślnie, można moduł zastosować we własnej aplikacji, aby uzyskać więcej niż podstawowy pomiar temperatury.
Adam Tatuś, EP
- RP: drabinka 4×10 kΩ (CRA06S08)
- C1: 100 nF
- C2, C3: 2,2 μF
- Q1: 2N3904 (SOT-23)
- Q2...Q5: 2N3904 (TO-92B)
- Q6: BSS138PS115 (SC88)
- U1: EMC1047-1 (MSOP10)
- U2: AP2120N-3.0TRG1 (SOT-23)
- I²C: złącze Grove kątowe (110990037)
- TH23, TH45: złącze MPT 2,54 mm 4-pinowe (MPT0.5/4-2.54)