[RAQ] Prosty sposób pomiaru temperatury z wykorzystaniem jednego cyfrowego pinu GPIO
Artykuł prezentuje metodę podłączenia do mikroprocesora / układu FPGA czujnika temperatury za pomocą przetwornika napięcia na częstotliwość.
Pytanie:
Jak dokonać pomiaru analogowego, jeśli został mi już tylko jeden wolny pin GPIO układu FPGA lub mikroprocesora?
Odpowiedź:
Można zamiast konwersji analogowo-cyfrowej wykorzystać w tym celu konwerter napięcie-częstotliwość.
Wstęp
W nowoczesnych aplikacjach koncentrujących się na stanie urządzenia i innych rozwiązaniach Internetu Rzeczy (IoT) rośnie zapotrzebowanie na funkcje pomiarowe. Wzrasta też potrzeba prostych interfejsów z mniejszą liczbą połączeń i zajmujących mniej miejsca na płytce. Gęstość zewnętrznych układów podłączonych do jednego mikroprocesora lub układu FPGA stale rośnie, podczas gdy przestrzeń na płytce – a w rezultacie liczba dostępnych pinów I/O – jest coraz bardziej ograniczana. Idealnie byłoby, gdyby dla każdej możliwej aplikacji istniał zintegrowany układ ASIC zapewniający kompletne rozwiązanie. Opracowanie dedykowanego układu ASIC jest jednak czasochłonne, kosztowne i wyklucza elastyczność, pozwalającą na zastosowanie w innej aplikacji. W rezultacie w coraz większej liczbie zastosowań wykorzystuje się mikroprocesory lub układy FPGA, co pozwala szybko i tanio opracować produkt. W tym artykule zajmiemy się konwerterem temperatury na częstotliwość, który może zapewnić dokładne pomiary temperatury przy użyciu jednego pinu GPIO. Pokażemy także, w jaki sposób można zastosować konwerter napięcia na częstotliwość w aplikacjach pomiarowych.
Cel układu
Pomiary niektórych wielkości, takich jak temperatura, wilgotność i ciśnienie, są z natury wolnozmienne i nie wymagają dużej rozdzielczości pomiaru. W takiej sytuacji wykorzystanie przetwornika analogowo-cyfrowego i związane z tym konsekwencje dla projektu nie jest uzasadnione. Większość przetworników ADC wymaga szybkiego i dokładnego generowania zegara taktującego, stabilnego napięcia odniesienia, bufora odniesienia o bardzo niskiej impedancji wyjściowej, a także analogowego front-endu, aby poprawnie dopasować sygnał przed próbkowaniem i dalszym wykorzystaniem przez system. W przypadku pomiarów temperatury otoczenia można zastosować na przykład termistor w mostku Wheatstone’a, którego wyjście jest wzmacniane przez wzmacniacz różnicowy, a następnie podawane do przetwornika ADC. Taki układ jest jednak zbyt skomplikowany i wymaga o wiele za dużo przestrzeni, mocy i cykli obliczeniowych, jak na zastosowanie, w którym pomiar może być potrzebny tylko raz na 15 sekund.
Czy istnieje rozwiązanie pomiarowe, pozwalające na redukcję liczby komponentów i skomplikowania toru sygnałowego, ale wciąż umożliwiające pomiar napięcia analogowego? Rozwiązaniem takim jest konwerter napięcia na częstotliwość taki, jak LTC6990, skonfigurowany do pracy jako generator sterowany napięciem (VCO), który pozwala na pomiar napięcia bez konieczności konwersji analogowo-cyfrowej. W naszym przykładzie precyzyjny wzmacniacz termopary AD8494 jest skonfigurowany jako czujnik temperatury otoczenia, którego napięcie wyjściowe służy jako wejście LTC6990. Układ ten konwertuje temperaturę na częstotliwość.
Rysunek 1. Prosty konwerter temperatury na częstotliwość
Jak skonwertować wejście temperatury na wyjście częstotliwości?
Obecnie wiele nowoczesnych urządzeń elektronicznych wymaga wbudowanego systemu monitorowania temperatury. Metoda konwersji sygnałów analogowych na sygnały o zmiennej szerokości impulsu (PWM) lub sygnały cyfrowe jest znana i dobrze udokumentowana. Jeśli jednak rozwiązanie pomiarowe wymaga przetwornika ADC, warto rozważyć związane z tym koszty, jego dokładność i szybkość. Zazwyczaj im dokładniejszy pomiar, tym droższy staje się układ. Przedstawiony obwód zapewnia tanie, wszechstronne i łatwe do wykorzystania rozwiązanie. Jego dokładność może się zmieniać w zależności od potrzeb systemu pomiaru temperatury.
Układ AD8494 jest precyzyjnym wzmacniaczem termopary, ale może być również zastosowany jako czujnik temperatury otoczenia po zwarciu wejść do masy. Sygnał wyjściowy jest wówczas określony wzorem:
W tym układzie, wykorzystującym zasilanie niesymetryczne, napięcie –VS jest równe uziemieniu (0 V), a na wyprowadzenie REF układu AD8494 należy podać składową stałą w celu utrzymania sygnału wyjściowego powyżej poziomu masy, co pozwoli na wiarygodny odczyt nawet w przypadku temperatur ujemnych.
Napięcie wyjściowe VOUT czujnika temperatury zdefiniowano w następujący sposób:
W trybie VCO częstotliwość wyjściowa układu LTC6990 wynosi:
Napięcie wyjściowe układu AD8494 jest dla układu LTC6990 napięciem VCTRL. W związku z tym równanie 1 można wstawić w równanie 3 w miejsce VCTRL oraz założyć równość RSET = RVCO otrzymując:
Teraz można już wyprowadzić wzór na Tambient. Jednostki napięcia się skracają. Otrzymujemy więc równanie 5:
OK, mam częstotliwość na wyjściu. W jaki sposób mogę z tego skorzystać?
Uzyskanie częstotliwości na wyjściu ma tę zaletę, że aby odczytać pomiar można użyć pojedynczego pinu GPIO. Jeśli mamy do czynienia z obwodem licznika synchronicznego z rysunku 2, wówczas zbocze narastające zegara będzie odczytywane na wejściu CLK_IN. Gdy sygnał FOUT układu LTC6990 jest używany jako zegar wejściowy, licznik będzie zwiększał się za każdym razem, gdy zostanie wykryte zbocze narastające na FOUT, pozwalając na pomiar okresu. 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ą kalkulacji zmiennoprzecinkowej, albo danych stablicowanych. Dzieląc czas akwizycji TAcquisitions przez liczbę zliczonych okresów, otrzymujemy okres FOUT. Odwrotność tej zależności, czyli częstotliwość sygnału, można zaobserwować w równaniu 6.
Rysunek 2. 4-bitowy licznik synchroniczny, taktowany wyjściem układu LTC6990
Przykładowy kod w języku Verilog pokazuje funkcję, której można użyć do zliczenia okresów za pomocą pojedynczego wejścia GPIO na FPGA. Im dłuższy okres akwizycji, tym dokładniejszy będzie pomiar. W przypadku poniższego kodu, 16-bitowy licznik zapewnia bardzo dobrą rozdzielczość pomiaru. Przyjęto tutaj założenie, że logika, która kontroluje czas akwizycji pomiaru, znajduje się na wyższym poziomie architektury oprogramowania.
Listing 3. Przykładowy kod w języku Verilog
module tempToFreqCounter (Clk_master, Clk_In, rst, PeriodCount) input Clk_master, Clk_In,rst; output PeriodCount; reg[15:0] PeriodCount; always @(posedge Clj_master) begin always @(posedge Clk_In) begin PeriodCount = PeriodCount +1; end always @ (posedge rst) begin PeriodCount = 16'b0; end end endmodule
Rysunek. 3. Transmitancja konwertera temperatury na częstotliwość
Wnioski
W omawianej aplikacji opisaliśmy nowy typ przetwornika temperatury na częstotliwość. Zapewnia on dokładną, niedrogą metodę pomiaru temperatur. Jeśli temperatury przekraczają zakres przemysłowy (od –40°C do +125°C), na wejściach czujnika można zastosować termoparę. Poniższy wykres pokazuje błąd układu pomiarowego. Widać na nim liniową zależność między temperaturą otoczenia i częstotliwością wyjściową, a także dokładnością systemu. Chociaż to rozwiązanie nie zapewnia bardzo wysokiej rozdzielczości pomiaru, to w aplikacjach, w których dopuszczalny jest błąd w przybliżeniu ±2°C, zapewnia ono tani i prosty interfejs do pomiaru temperatury. Ponadto koncepcję zastosowania przetwornika napięcie-częstotliwość można dostosować do pomiaru innych wielkości bez konieczności stosowania przetwornika analogowo-cyfrowego.