Prosty interfejs do podłączenia 1-przewodowego czujnika temperatury do mikrokontrolera

sch_1

Urządzenia wskazujące temperaturę i urządzenia wykorzystujące dane dotyczące temperatury są szeroko rozpowszechnione.
Istnieje wiele zastosowań takich urządzeń z wieloma możliwymi rozwiązaniami, z których każde ma swoje zalety i wady. Prezentowany pomysł omawia interfejs czujnika temperatury, który oferuje wysoką dokładność, zajmując niewielki obszar na płytce drukowanej.
Artykuł omawia również pewne problemy z oprogramowaniem i dostarcza próbki kodu, które użytkownicy mogą zintegrować z systemem i dostosować do swoich potrzeb środowiskowych.
Projektanci mogą również dodać własne rozwiązania do funkcji oferowanych przez układ.
Prosty układ łączy 1-przewodowy czujnik temperatury (DS18S20) z mikrokontrolerem Cypress (CY8C26443). Jednak dzięki tej technologii przy minimalnej modyfikacji kodu obwodu i programu można podłączyć dowolne urządzenie 1-Wire.
Układ MCU (Microcontroller Unit) może być dowolnym procesorem, ale w tym przypadku został wybrany programowalny system na chipie (PSoC – Programmable System-on-a-Chip), ponieważ zapewnia elastyczność w zakresie wyboru i implementacji bloków sprzętowych, technologicznie zbudowany na krzemie.
PSoC udostępnia również interfejs aplikacji (API – Application Program Interface), dzięki czemu początkujący mogą łatwo pracować i rozwiązywać problemy. Produkty 1-Wire oferują takie funkcje, jak pamięć i możliwości mieszanego sygnału, za pośrednictwem pojedynczego przewodu po interfejsie szeregowym, z zasilaniem i komunikacją dostarczaną z wykorzystaniem protokołu szeregowego.
Urządzenia te są łatwe w obsłudze i użyciu, gdy wymagana jest minimalna złożoność połączenia.
W omawianym projekcie jako czujnik temperatury wybrano cyfrowy termometr DS18S20, ponieważ jest to bardzo ekonomiczne urządzenie 1-Wire i ma dokładność 0.5°C, chociaż ogólna konstrukcja zapewnia dokładność 1°C z powodu błędu pomiaru i ograniczeń sprzętowych oraz narzędzi testowych itp.
Czujnik DS18S20 obsługuje także pasywny tryb zasilania, ma programowalną wartość progową temperatury i działa w zakresie temperatur od -55°C do 125°C.

sch_2
Dzięki dodatkowemu sprzętowi i oprogramowaniu może działać w odległości do kilku metrów od mikrokontrolera.
Używając DS18S20 w obudowie TO-92, pin 1 jest podłączony do masy, pin 2 jest wyprowadzeniem typu otwarty dren interfejsu 1-Wire dla wejścia/wyjścia danych i zasilania, a pin 3 jest podłączony do VCC (zasilanie) lub, jeśli jest używany w pasywnym trybie zasilania, do masy.
W przypadku urządzenia w obudowie SO-8 odpowiednie piny to 5, 4 i 3, a pozostałe piny nie są połączone. Na rysunku 1 pokazano podłączenie czujnika do mikrokontrolera CY8C26443. Ponieważ obwód wykorzystuje zasilanie z płyty, urządzenie jest podłączone do VCC.
W tej wersji interfejsu czujnik DS18S20 jest połączony bezpośrednio z MCU, tj. umieszczony na płytce drukowanej (PCB) tak, jakby czujnik był częścią mikrokontrolera.
Rozmiar płytki zakłada, że elementy pasożytnicze są nieistotne i nie mają wpływu na sygnał.
Za pomocą PSoC można albo utworzyć instancję modułu 1-Wire dla interfejsu albo napisać własny protokół.
Tworzenie instancji modułu zmniejsza obciążenie oprogramowania, ale w tym opracowaniu została podjęta decyzja napisania własnego protokołu. Mimo że zostało dodane do tego protokołu oprogramowanie układowe, uniknięto używania dwuportowego pinu, którego moduł PSoC wymaga do wymiany danych pomiędzy MCU a czujnikiem. Schemat obwodu jest bardzo prosty. Dioda CR2 chroni czujnik przed przepięciami.

sch_3
Rezystor R12 nie jest używany w trybie normalnym. W trybie pasożytniczym wstawia się rezystor R12, a rezystor R11 i kondensator C8 są wyłączone z obwodu.
Mikroukład U2 MAX1232 to zewnętrzny zegar watchdog dla mikrokontrolera. Na linii STROBE mikrokontroler regularnie resetuje zegar watchdoga. Kod ten blokuje ten interfejs układu wraz z komentarzami. Zintegrowane środowisko programistyczne PSoC jest dostępne bezpłatnie na stronie www.cypress.com. W przypadku zastosowania czujnika na większych odległościach od mikrokontrolera, działanie układu można dostosować wprowadzając modyfikacje pokazane na rysunku 2.

sch_4
Dodatkowe elementy zapewniają, że są przekazywane wystarczające ilości prądów wpływających i wypływających, aby można było utrzymać parametry czasowe.
Czujnik temperatury konwertuje i przechowuje dane cyfrowe w dwóch rejestrach (rys. 3).
Zasadniczo rozdzielczość odczytu wynosi 9 bitów. Najmniej znaczący bajt przechowuje odczyt temperatury. Najbardziej znaczący bajt dostarcza znak do odczytu. W przypadku, gdy znak jest ujemny (0xFF), dane LSB są uzupełniane do dwóch. Bit 0 w LSB podaje wartość dziesiętną dla temperatury: 0.5° C dla logicznego 1 i 0 dla logicznego 0.
Ten fakt musi zostać uwzględniony w kodzie programu, aby uniknąć błędnych pomiarów.

sch_5
Układ zawiera także pamięć nieulotną (EEPROM), rejestry TH i TL, do przechowywania wysokich i niskich progów.
Po przeprowadzeniu przez DS18S20 konwersji temperatury wartość temperatury jest porównywana z wartościami wyzwalania alarmu uzupełnienia dla dwóch zdefiniowanych przez użytkownika alarmów przechowywanych w 1-bajtowym rejestrze TH i TL (rys. 4).
Rozdzielczość rejestrów TH i TL wynosi 8 bitów, w przeciwieństwie do 9 bitów dla rejestru konwersji temperatury.
Mapa pamięci obwodu zawiera pamięć podręczną SRAM z nieulotną pamięcią EEPROM dla rejestru TH i TL (rys. 5).
Jeśli funkcja wyzwalania alarmu nie jest wymagana, rejestry TH i TL mogą służyć, jako pamięć ogólnego przeznaczenia.
Rozdzielczość większa niż 9 bitów może być obliczona na podstawie danych z rejestrów w podręcznym rejestrze – temperatura, COUNT REMAIN i COUNT PER °C
(wzór 1):

sch_6
gdzie:
Temperature = rozdzielczość większa niż 9 bitów
TempRead = temperatura uzyskana przez obcięcie bitu 0.5°C (bit 0) z danych temperatury
Count Per °C = COUNT PER °C (bajt 7 z pamięci podręcznej) = 16 (0x10)
Count Remain = COUNT REMAIN (bajt 6 z pamięci podręcznej).
Autor: Girish Choudankar

kod źródłowy do pobrania

pełny materiał w pliku pdf

Komentarze z Facebooka

Komentarze obecnie - OFF.