Elektroda.pl
Elektroda.pl
X
IGE-XAOIGE-XAO
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Rzadko zadawane pytania: jak jedną linią GPIO zmierzyć temperaturę?

ghost666 05 Gru 2019 21:51 1842 10
  • Rzadko zadawane pytania: jak jedną linią GPIO zmierzyć temperaturę?
    Pytanie: Jak mogę dokonać pomiaru wartości analogowej, jeśli w moim systemie pozostało tylko jedno GPIO na FPGA/mikrokontrolerze?

    Odpowiedź: Zamiast przetwornika analogowo-cyfrowego można zastosować przetwornik napięcia na częstotliwość.

    Ponieważ zapotrzebowanie na funkcje pomiarowe staje się coraz bardziej powszechne w nowoczesnych aplikacjach medycznych, fitness i innych rozwiązaniach Internetu Rzeczy (IoT), konieczne jest opracowywanie prostszych interfejsów z mniejszą liczbą linii wejścia i wyjścia i mniejszymi rozmiarami urządzeń. Gęstość urządzeń podłączonych do jednego mikroprocesora lub układu FPGA stale rośnie, podczas gdy przestrzeń aplikacji - a w rezultacie liczba styków I/O - może być ograniczona. W idealnym świecie wszystkie aplikacje miałyby swój własny układ ASIC, zapewniający małe zintegrowane rozwiązanie. Opracowanie ASIC jest jednak czasochłonne i bardzo kosztowne, a dodatkowo nie zapewnia elastyczności, która pozwalałaby na wprowadzanie zmian w systemie lub wykorzystywanie go do innych celów. W rezultacie coraz więcej aplikacji korzysta z mikrokontrolerów lub układów FPGA w małych obudowach, aby opracowywanie produktów odbywało się w terminowy i opłacalny sposób.

    W tym artykule zajmiemy się konwerterem temperatury na częstotliwość, który może zapewnić dokładne wyniki pomiaru temperatury przy użyciu tylko jednego pinu GPIO. Pokażemy także, w jaki sposób można dostosować przetwornik napięcia do częstotliwości do różnych zastosowań w czujnikach.

    Czemu warto stosować takie rozwiązanie?

    Niektóre wartości zmiennych środowiskowych, takich jak temperatura, wilgotność i ciśnienie barometryczne, są z natury bardzo wolno zmienne - i nie zmieniają się wystarczająco szybko, ani ich pomiary nie wymagają wystarczająco dokładnych rozdzielczości - aby uzasadnić stosowanie przetworników analogowo-cyfrowych (ADC) i związane z tym względy projektowe.

    Większość przetworników ADC wymaga szybkiego, dokładnego generowania oraz synchronizacji zegara, stabilnego napięcia odniesienia, bufora tego napięcia o bardzo niskiej impedancji wyjściowej oraz analogowego zespołu obwodów wejściowych, mogących poprawnie wysterować wejście tego układu, zanim będzie mógł on zostać skwantyzowany i wykorzystany przez system cyfrowy. W przypadku pomiaru temperatury otoczenia dyskretne rozwiązanie może wykorzystywać termistor w mostku Wheatstona, którego napięcie wyjściowe byłoby następnie wzmacniane przez wzmacniacz pomiarowy, a następnie podawane do ADC.

    Ta konstrukcja jest bardzo skomplikowana i wymaga więcej przestrzeni na płytce drukowanej, mocy i cykli obliczeniowych niezbędnych do implementacji w systemie, w którym pomiar może być wymagany tylko raz na np. 15 sekund.

    Jakie alternatywne rozwiązanie pomiarowe można zastosować mierząc napięcie analogowe?

    Rozwiązaniem jest przetwornik napięcia na częstotliwość, taki jak układ LTC6990 firmy Analog Devices. Musi on być skonfigurowana w trybie oscylatora sterowanego napięciem (VCO), który może być wykorzystywany do pomiaru napięcia analogowego bez wykorzystania ADC. W tym przykładzie AD8494 – precyzyjny wzmacniacz termopary – jest skonfigurowany jako czujnik temperatury otoczenia, którego napięcie wyjściowe służy jako wejście do przetwornika LTC6990, w wyniku czego powstaje łańcuch sygnału pozwalający na konwersję temperatury na częstotliwość sygnału. Układ taki zaprezentowano na rysunku 1.

    Rzadko zadawane pytania: jak jedną linią GPIO zmierzyć temperaturę?
    Rys.1. Prosty konwerter temperatury na częstotliwość.


    Jak przekonwertować wejście temperaturowe na wyjście częstotliwościowe?

    Obecnie wiele nowoczesnych urządzeń elektronicznych wymaga pokładowego systemu monitorowania temperatury. Metoda konwersji sygnałów analogowych na sygnały modulowane szerokością impulsu lub sygnały cyfrowe jest dobrze udokumentowana. Jeśli jednak rozwiązanie pomiarowe wymaga ADC, istnieją wady związane z kosztem, dokładnością i szybkością działania takiego systemu. Zazwyczaj im dokładniejszy jest pomiar, tym droższe rozwiązanie.

    Obwód ten zaprezentowany na rysunku 1 zapewnia tanie, wszechstronne i łatwe w implementacji rozwiązanie, którego dokładność może się różnić w zależności od potrzeb danego systemu pomiaru temperatury.

    AD8494 jest precyzyjnym wzmacniaczem termoparowym, ale może być również stosowany jako czujnik temperatury otoczenia. Wzmacniacz termoparowy konwertuje napięcie z termopary (generowane na skutek efektu Seebecka) na napięcie proporcjonalne liniowo do temperatury. W tym celu musi dokonywać tzw. kompensacji zimnego złącza. W tym celu układ ten mierzy swoją temperaturę. W momencie, gdy wejścia są zwarte ze sobą i do masy, napięcie Seebecka mierzone przez układ jest zerowe, a co za tym idzie - układ kompensacji zimnego złącza na wyjściu wzmacniacza podawać będzie napięcie proporcjonalne do temperatury tego złącza, czyli samego układu.

    Napięcie wyjściowe ze wzmacniacza jest definiowane jako:

    $$V_{OUT} = T_{otoczenia} \times \frac {5 mV} {^\circ C}$$ (1)

    W tym obwodzie stosuje się zasilanie jednobiegunowe, (–VS = masa - 0 V), a więc na styk REF układu AD8494 należy przyłożyć napięcie przesunięte względem masy, aby podnieść napięcie wyjściowe nad ziemią, nawet jeśli temperatura otoczenia jest ujemna.

    Napięcie wyjściowe czujnika temperatury VOUT wyniesie zatem:

    $$V_{OUT} = T_{otoczenia} \times \frac {5 mV} {^\circ C} + T_{offset}$$ (2)

    W trybie VCO układu LTC6990 częstotliwość sygnału wyjściowego opisana jest zależnością:

    $$F_{OUT} = \frac {1 MHz - (\frac {R_{SET}} {R_{VCO} + R_{SET}} \times V_{CTRL}) \times \frac {MHz} {V}} {N_{div}}$$ (3)

    Jako że napięcie wyjściowe z AD8494 jest napięciem VCTRL dla LTC6990, równanie 2 można podstawić pod VCTRL w równaniu 3, a dobierając RSET = RVCO otrzymamy następującą równość opisującą częstotliwość wyjściową z układu:

    $$F_{OUT} = \frac {1 MHz - (\frac {1} {2} ( T_{otoczenia} \times \frac {5 mV} {^\circ C} + T_{offset} )) \times \frac {MHz} {V}} {N_{div}}$$ (4)


    Teraz można przekształcić równanie 4 tak, aby uzyskać równość na temperaturę otoczenia. W ten sposób uzyskujemy równanie 5:

    $$T_{otoczenia} = \frac {-2 \times (( F_{OUT} \times N_{div}) - 1 MHz) - (V_{offset} \times 1 MHz)} {0,005 MHz}$$ (5)

    Okej, mam wyjście częstotliwościowe. Jak to jest przydatne?

    Piękno wyjścia częstotliwościowego polega na tym, że można użyć pojedynczego pinu GPIO, aby uzyskać pomiar z czujnika. Jeżeli zastosowany jest obwód licznika synchronicznego z rysunku 2, wówczas zbocze narastające zegara będzie zawsze obecne na jego wejściu CLK_IN. Jeśli sygnał FOUT z LTC6990 zostanie użyty jako zegar wejściowy, licznik będzie zwiększał się za każdym razem, gdy zostanie wykryte zbocze narastające w linii FOUT, tworząc licznik okresów sygnału.

    Rzadko zadawane pytania: jak jedną linią GPIO zmierzyć temperaturę?
    Rys.2. 4-bitowy synchroniczny licznik z układem LTC6990 podłączonym do wejścia zegarowego.


    Jeśli odstęp czasowy między każdym pomiarem jest stały, wówczas można policzyć liczbę okresów w danym przedziale czasowym, a częstotliwość można określić albo za pomocą matematyki zmiennoprzecinkowej, albo tabeli przeglądowej zaimplementowanej w układzie. Dzieląc czas akwizycji TA przez liczbę zliczonych okresów, otrzymujemy okres FOUT. Odwrotność tej zależności daje równanie 6:

    $$F_{OUT} = \frac {Ilość okresów} {T_{akwizycji}}, F_{OUT} \geq \frac {2} {T_{akwizycji}}$$ (6)

    Przykładowy kod Verilog (poniżej) pokazuje funkcję, której można użyć do zliczenia okresów za pomocą pojedynczego wejścia GPIO na module FPGA. Im dłuższy okres akwizycji, tym dokładniejszy będzie pomiar. W przypadku poniższego kodu, 16-bitowy licznik służy do zapewnienia dodatkowej rozdzielczości. Zakłada się również, że logika, która kontroluje czas akwizycji pomiaru, jest wykonywana na wyższym poziomie w architekturze układu FPGA.

    Kod: verilog
    Zaloguj się, aby zobaczyć kod


    Rzadko zadawane pytania: jak jedną linią GPIO zmierzyć temperaturę?
    Rys.3. Funkcja przejścia konwertera temperatura-częstotliwość.


    System wykazuje liniową zależność między temperaturą otoczenia i częstotliwością wyjściową, jak pokazano na rysunku 3. Widać tam także jak wysoką dokładnością charakteryzuje się ten system. Wykres zaprezentowany na rysunku 4 pokazuje z kolei błąd systemu pomiarowego.

    Rzadko zadawane pytania: jak jedną linią GPIO zmierzyć temperaturę?
    Rys.4. Błąd pomiaru temperatury w funkcji temperatury.


    Podsumowanie

    W tej aplikacji omówiono nowy typ przetwornika temperatury na częstotliwość. Zapewnia on dokładną i niedrogą metodę pomiaru temperatur. Jeśli temperatura przekracza zakres przemysłowy (od 40°C do 125°C), na wejściach wzmacniacza można zainstalować termoparę.

    Chociaż to rozwiązanie może nie zapewniać bardzo wysokiej rozdzielczości pomiaru temperatury, to w aplikacjach, w których dopuszczalny jest błąd w przybliżeniu ± 2°C, zapewnia on tani i prosty interfejs do pomiaru tej wartości.

    Samą koncepcję zastosowania przetwornika napięcie-częstotliwość można dostosować do pomiaru innych typów wyjść przetwornika analogowych, bez potrzeby stosowania układu ADC.

    Źródło: https://www.analog.com/en/analog-dialogue/raqs/raq-issue-169.html

    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
    O autorze
    ghost666
    Tłumacz Redaktor
    Offline 
    Fizyk z wykształcenia. Po zrobieniu doktoratu i dwóch latach pracy na uczelni, przeszedł do sektora prywatnego, gdzie zajmuje się projektowaniem urządzeń elektronicznych i programowaniem. Od 2003 roku na forum Elektroda.pl, od 2008 roku członek zespołu redakcyjnego.
    ghost666 napisał 9500 postów o ocenie 7537, pomógł 157 razy. Mieszka w mieście Warszawa. Jest z nami od 2003 roku.
  • IGE-XAOIGE-XAO
  • #2
    Janusz_kk
    Poziom 26  
    A wystarczy dać na 1Wire termometr dallasa i mozna i podpiąć...choo choo :)
  • #3
    bobycob
    Poziom 17  
    Też tak pomyślałem. Jednak co z pomiarami wyższych temperatur za pomocą termistorów czy termopar. Tu już moce Dallasa mogą okazać się niewystarczające.
  • IGE-XAOIGE-XAO
  • #4
    ghost666
    Tłumacz Redaktor
    Ale zauważcie, że ten układ pozwala nie tylko mierzyć temperaturę. W zasadzie to wejście ADC, więc można zmierzyć i inne sygnały analogowe - na przykład z mostka tensometrycznego za wzmacniaczem - tego już Dallasowe układy nie potrafią (tak, wiem, są ADC na 1-Wire).
  • #5
    Janusz_kk
    Poziom 26  
    ghost666 napisał:
    Ale zauważcie, że ten układ pozwala nie tylko mierzyć temperaturę.

    Prochu nie odkryli tym przetwornikiem bo od dawna jest U/F i F/U LM331. Może ten nowszy jest łatwiejszy w użyciu.

    PS Na rys 2 są błędy, za dużo kropek :)
  • #6
    ghost666
    Tłumacz Redaktor
    Janusz_kk napisał:
    PS Na rys 2 są błędy, za dużo kropek :)


    Z ciekawości - w którym miejscu?
  • #7
    Janusz_kk
    Poziom 26  
    Dobra, precyzyjnie to dwa połączenia, wyjścia z przerzutnika i wyjścia bramki bo wątpię żeby to były open kolektory.
  • #8
    krisRaba
    Poziom 29  
    Ogólnie fajnie, że pokazane jest nieco inne spojrzenie na problem, natomiast ukradkiem przemycają fakt, że to rozwiązanie jest dość rozbudowane, bo tu jakieś napięcie odniesienia żeby podnieść sygnał, tam dodatkowy przetwornik, dzielnik częstotliwości... AD8494ARMZ na pojedyncze sztuki kosztuje $5 w Mouserze ;) Nie mówiąc, że sam LTC to $4... Także szału nie ma i proponowane rozwiązanie może rozbić bank jeśli chodzi o urządzenia low-costowe ;) Myślę, że znajdzie się co najmniej kilka tańszych alternatyw.
    Swoją drogą nie wiem, czy ten tytułowy GPIO (General Purpose Input/Output) nie jest trochę naciągany, bo jednak przydałoby się, aby było to jakieś wejście licznikowe, bo inaczej czeka nas paskudny polling wejścia, żeby nie przeoczyć zmiany...

    Bardzo ciekawy jest natomiast pomysł z wyciągnięciem sygnału kompensacji jako faktycznego pomiaru temperatury :)
  • #9
    ptero
    Poziom 16  
    Witajcie :)
    Kiedyś dawno temu, w czasach PRL, trafiłem pewnym numerze Radioelektronika w którym był schemat fajnego miernika na TTL-ach. Który mierzył U,I,R,F,L,C, a "ustrojem pomiarowym" był miernik częstotliwości. Przełączało się przetworniki /F.
  • #11
    fotomh-s
    Poziom 21  
    1 wire ma tą zaletę że na 1 GPIO można podpiąć multum sensorów (nie tylko temperatury). Nie wymaga dodatkowych scalaków, nie trzeba martwić się napięciem referencyjnym...
    A jak trzeba jakiś analogowy sygnał zmierzyć to zawsze pozostają zewnętrzne ADC (pod 1 wire chyba też są, pewnie i wielokanałowe).