Spisu treści:

Pomiar temperatury z PT100 za pomocą Arduino: 6 kroków (ze zdjęciami)
Pomiar temperatury z PT100 za pomocą Arduino: 6 kroków (ze zdjęciami)

Wideo: Pomiar temperatury z PT100 za pomocą Arduino: 6 kroków (ze zdjęciami)

Wideo: Pomiar temperatury z PT100 za pomocą Arduino: 6 kroków (ze zdjęciami)
Wideo: Kurs Arduino #4: DHT11/DHT22 - Czujnik temperatury i wilgotności + Stacja pogodowa 2024, Listopad
Anonim
Pomiar temperatury z PT100 za pomocą Arduino
Pomiar temperatury z PT100 za pomocą Arduino

PT100 to rezystancyjny czujnik temperatury (RTD), który zmienia swoją rezystancję w zależności od temperatury otoczenia, jest szeroko stosowany w procesach przemysłowych o wolnej dynamice i stosunkowo szerokim zakresie temperatur. Jest używany do powolnych procesów dynamicznych, ponieważ RTD mają powolne czasy reakcji (o czym powiem później), ale są dokładne i mają niski dryft w czasie. To, co zamierzam ci pokazać w tym Instruktażowym, nie będzie zgodne ze standardem przemysłowym, ale wystawi cię na alternatywny sposób pomiaru temperatury niż użycie LM35, który zna wielu hobbystów i pokazana teoria obwodów można zastosować do innych czujników.

Krok 1: Komponenty

1x PT100 (dwa przewody)

1x Arduino (dowolny model)

Wzmacniacze operacyjne 3x 741 (LM741 lub UA741)

1x Rezystor 80ohm

Rezystory 2x 3,9kohm

Rezystory 2x 3.3kohm

Rezystory 2x 8.2kohm

Rezystory 2x 47kohm

Potencjometr 1x5kohm

1x zasilacz z dwoma zaciskami lub 8x 1,5 V baterii AA

Używam dwuprzewodowego PT100, trzy- i czteroprzewodowe PT100 będą miały różne obwody. Wartości rezystorów dla większości z nich nie muszą być dokładnie takie same jak powyżej, ale jeśli jest para rezystorów, tj. 3,9 kiloomów, jeśli zamienisz je na powiedzmy 5k, będziesz musiał zamienić oba na 5k jak wtedy muszą być takie same. Kiedy otrzymamy obwód, powiem efekt wyboru różnych wartości. Do wzmacniaczy operacyjnych (wzmacniaczy operacyjnych) można użyć innych wzmacniaczy operacyjnych, ale to są te, których użyłem.

Krok 2: Most Wheatstone

Most Wheatstone
Most Wheatstone
Most Wheatstone
Most Wheatstone
Most Wheatstone
Most Wheatstone

Najpierw muszę porozmawiać o wzorze na uzyskanie temperatury z rezystancji dla PT100, zanim powiem o pierwszej części obwodu, wzór na rezystancję jest następujący:

Obraz
Obraz

gdzie Rx to rezystancja PT100, R0 to rezystancja PT100 w temperaturze 0 stopni C, α to współczynnik odporności na temperaturę, a T to temperatura.

Obraz
Obraz

R0 to 100 omów, ponieważ jest to PT100, gdyby to był PT1000, R0 byłoby 1000 omów. α wynosi 0,00385 omów/stopnie C pobrane z arkusza danych. Istnieje również dokładniejszy wzór, który można znaleźć tutaj, ale powyższa formuła wystarczy dla tego projektu. Jeśli transponujemy wzór, możemy obliczyć temperaturę dla danego oporu:

Obraz
Obraz

Powiedzmy, że chcemy zmierzyć coś, co miałoby zakres temperatur od -51,85 do 130 stopni C i umieściliśmy PT100 w obwodzie pokazanym na rysunku 1. Korzystając z powyższego równania i równania na napięcie z dzielnika napięcia (pokazanego na pierwszym rysunku) możemy obliczyć zakres napięć. Dół zakresu T = -51,85 (80 omów)

Obraz
Obraz

i przy 130 stopniach (150 omów):

Obraz
Obraz

Dałoby to zakres 0,1187 V i przesunięcie DC 0,142, ponieważ wiemy, że nasza temperatura nigdy nie spadnie poniżej -51,85 stopni C, to zmniejszy czułość w zakresie, na którym nam zależy (od 80 do 130 omów), gdy wzmocnimy to napięcie. Aby pozbyć się tego przesunięcia DC i zwiększyć naszą czułość, możemy użyć mostka Wheatstone'a, który jest pokazany na drugim zdjęciu.

Wyjście drugiego dzielnika napięcia (Vb-) zostanie później odjęte od wyjścia pierwszego dzielnika napięcia (Vb+) przy użyciu wzmacniacza różnicowego. Wzór na wyjście mostka to tylko dwa dzielniki napięcia:

Obraz
Obraz

Napięcie wyjściowe dla PT100 wynosi 80 omów i używa innych wartości na rysunku:

Obraz
Obraz

a dla Pt100 o wartości 150 omów:

Obraz
Obraz

Używając Wheatstone'a pozbywamy się offsetu DC i zwiększamy czułość po wzmocnieniu. Teraz, gdy wiemy, jak działa mostek Wheatstone, możemy porozmawiać o tym, dlaczego używamy 80 omów i 3,3 kiloomów. 80 omów jest trochę wyjaśnione z powyższego wzoru, wybierz tę wartość (nazwiemy ją rezystorem offsetowym Roff), aby być dolnym zakresem twojej temperatury lub nawet lepiej, nieco poniżej dolnego zakresu twojego zakresu, jeśli jest używany do system kontroli do regulacji temperatury lub coś w tym rodzaju, chciałbyś wiedzieć, jak niska temperatura spada poniżej twojego zakresu temperatur. Więc jeśli -51,85C to dół twojego zakresu, użyj 74,975 omów (-65 stopni C) dla twojego Roffa.

Wybrałem 3,3k dla R1 i R3 z dwóch powodów, aby ograniczyć prąd i zwiększyć liniowość wyjścia. Ponieważ PT100 zmienia rezystancję ze względu na temperaturę, przepuszczenie przez niego zbyt dużego prądu spowoduje nieprawidłowe odczyty z powodu samonagrzewania, więc wybrałem maksymalny prąd 5-10mA. Gdy PT100 ma 80 omów, prąd wynosi 1,775 mA, więc bezpiecznie poniżej maksymalnego zakresu. Zmniejszasz opór, aby zwiększyć czułość, ale może to mieć negatywny wpływ na liniowość, ponieważ później będziemy używać równania linii (y=mx+c), gdy wyjście nieliniowe wprowadzi błędy. Trzecie zdjęcie przedstawia wykres wyjścia mostka przy użyciu różnych górnych rezystorów, linia ciągła to rzeczywiste wyjście, a linia przerywana to przybliżenie liniowe. Na ciemnoniebieskim wykresie (R1&R3=200ohms) widać największy zakres napięcia, ale wyjście jest najmniej liniowe. Jasnoniebieski (R1&R3=3,3kohm) daje najmniejszy zakres napięcia, ale linia przerywana i ciągła zachodzą na siebie, co świadczy o bardzo dobrej liniowości.

Zachęcamy do zmiany tych wartości, aby dopasować je do aplikacji, także w przypadku zmiany napięcia, upewnij się, że prąd nie jest zbyt wysoki.

Krok 3: Wzmocnienie

Wzmocnienie
Wzmocnienie
Wzmocnienie
Wzmocnienie

W ostatnim kroku stwierdziliśmy, że zakres wyjściowy dwóch odjętych dzielników napięcia wynosi od 0 do 0,1187, ale nie rozmawialiśmy o tym, jak odjąć te napięcia. Aby to zrobić, potrzebujemy wzmacniacza różnicowego, który odejmie jedno wejście od drugiego i wzmocni je przez wzmocnienie wzmacniacza. Obwód wzmacniacza różnicowego pokazano na pierwszym rysunku. Podajesz Vb+ na wejście odwracające, a Vb- na wejście nieodwracające, a wyjściem będzie Vb+ - Vb- ze wzmocnieniem 1, czyli bez wzmocnienia, ale dodając rezystory pokazane na rysunku dodajemy wzmocnienie 5,731. Zysk wyraża się wzorem:

Obraz
Obraz

Ra to R5 i R7, a Rb to R6 i R8, napięcie wyjściowe jest określone wzorem:

Obraz
Obraz

Są dwa problemy z samym podłączeniem tego wzmacniacza do wyjścia mostka, efekt ładowania i zmiana wzmocnienia. Zmiana wzmocnienia wzmacniacza wymaga zmiany co najmniej dwóch rezystorów, ponieważ dwie pary rezystorów muszą być takie same, więc posiadanie dwóch potencjometrów, które muszą mieć tę samą wartość, byłoby denerwujące, więc użyjemy czegoś, co nazywa się wzmacniaczem pomiarowym o czym mówię poniżej. Efektem obciążenia jest to, że rezystory wejściowe do wzmacniacza wpływają na spadek napięcia na PT100, chcemy, aby napięcie na PT100 było niezmienione i w tym celu możemy wybrać bardzo duże rezystory dla rezystorów wejściowych, aby równoległa rezystancja PT100 a rezystor wejściowy jest bardzo zbliżony do rezystancji PT100, ale może to powodować problemy z szumem i offsetem wyjściowym napięcia, do których nie będę się zagłębiał. Po prostu wybierz średni zakres w zakresie Kohms, ale jak już mówiłem, małe rezystory też są złe, więc trochę zmienimy obwód.

Na drugim rysunku mamy wyjście mostka podłączone do wzmacniacza instrumentacyjnego, który działa jako wzmacniacz buforowy, aby oddzielić dwie połówki obwodów (mostek i wzmocnienie), a także pozwala na wzmocnienie wejścia poprzez zmianę tylko jednego potencjometru (ponownie). Wzmocnienie wzmacniacza pomiarowego wyraża się wzorem:

Obraz
Obraz

gdzie Rc to dwa rezystory 3,9k powyżej i poniżej puli.

Zmniejszając Rgain zwiększa się wzmocnienie. Następnie w punkcie Va i Vb (wzmocnione Vb+ i Vb-) jest to tylko wzmacniacz różnicowy, jak poprzednio, a całkowite wzmocnienie układu to tylko wzmocnienia pomnożone razem.

Obraz
Obraz

Aby wybrać wzmocnienie, które chcesz zrobić, tak jak robiliśmy to wcześniej z Roffem, powinniśmy wybrać opór tuż powyżej Twojej maksymalnej temperatury w Twoim zakresie, na wypadek gdyby przekroczył. Ponieważ używamy Arduino, który ma napięcie 5 V, maksymalna moc wyjściowa obwodu powinna wynosić 5 V przy maksymalnej wybranej przez Ciebie temperaturze. Wybierzmy 150 omów jako maksymalną rezystancję, a napięcie mostka bez wzmocnienia wynosiło 0,1187 V, potrzebne nam wzmocnienie to 42,185 (5/0,1187)

Powiedzmy, że trzymamy Ra, Rb i Rc jako 8,2k, 47k i 3,9k, musimy tylko znaleźć wartość dla puli Rgain:

Obraz
Obraz

Aby więc uzyskać pełne 5 woltów z zakresu temperatur, którego używamy, zmień wartość Rgain na 1.226k. Napięcie wyjściowe wychodzące ze wzmacniacza różnicowego wyraża się wzorem:

Krok 4: Zasilanie obwodu

Zasilanie obwodu
Zasilanie obwodu
Zasilanie obwodu
Zasilanie obwodu
Zasilanie obwodu
Zasilanie obwodu

Jest to ostatni krok obwodu, być może zauważyłeś Vcc + i Vcc- na obwodach wzmacniacza operacyjnego, ponieważ potrzebują one zarówno dodatniego, jak i ujemnego napięcia do prawidłowego działania, możesz uzyskać wzmacniacze operacyjne z pojedynczą szyną, ale zdecydowałem używać tych wzmacniaczy, bo to właśnie leżało. Więc dostarczymy +6V i -6V, możemy to zrobić na trzy sposoby. Pierwszy jest pokazany na pierwszym obrazku, gdzie mamy dwa zasilacze lub dwa zaciski wyjściowe z jednego zasilacza, oba mają napięcie 6V i jedno dodatnie wyjście jest połączone z ujemnym drugiego. 6V górnego zasilania będzie naszym +6V, dodatni dolnego zasilania to GND, a ujemny dolnego zasilania to -6V. PODŁĄCZAJ TYLKO W TYM TEN SPOSÓB, GDY UZIEMIENIA DWÓCH ZASILACZY SĄ ODDZIELONE LUB USZKODZI TO ZASILACZ. Wszystkie komercyjne zasilacze miałyby odseparowane GND, ale jeśli chcesz to sprawdzić, użyj testera ciągłości na swoim multimetrze, jeśli brzęczy, nie używaj tego ustawienia i użyj następnego. Na moim domowym zaopatrzeniu przepaliłem bezpiecznik, robiąc to.

Na drugim zdjęciu jest druga konfiguracja, jaką możemy mieć, wymaga ona, aby jeden zasilacz miał podwójne napięcie drugiego, ale nie uszkodzi go, jeśli podłączone są GND. Mamy dwa zasilacze, jedno na 12V, a drugie na 6V. 12V będzie działać jako nasze +6V, 6V z drugiego zasilacza będzie działać jako GND, a dwa rzeczywiste GND z zasilacza będą działać jako -6V.

Ta ostatnia konfiguracja jest przeznaczona dla zasilaczy z tylko jednym wyjściem, wykorzystuje wzmacniacz buforowy o wzmocnieniu 1, aby stworzyć wirtualną masę, przepuszczając połowę napięcia zasilania przez wzmacniacz buforowy. Wtedy 12V będzie działać jako +6V, a rzeczywisty zacisk GND będzie -6V.

Jeśli chcesz używać baterii, sugerowałbym pierwszą konfigurację, ale problem z bateriami polega na tym, że napięcie spadnie, gdy zaczną umierać, a napięcie z mostka również spadnie, dając błędne odczyty temperatury. Można było oczywiście odczytać napięcie z akumulatorów i uwzględnić je w obliczeniach lub zastosować regulatory i więcej akumulatorów. W końcu to zależy od Ciebie.

Krok 5: Pełny obwód i kod

Pełny obwód i kod
Pełny obwód i kod
Pełny obwód i kod
Pełny obwód i kod
Pełny obwód i kod
Pełny obwód i kod

Pełny obwód jest pokazany powyżej i został wykonany w nowym Circuits.io firmy Autodesk, który umożliwia tworzenie obwodów na płytce prototypowej, edycję schematu obwodu (pokazanego na rysunku 2) i schematów PCB oraz najlepszą część, pozwala symulować obwód z płytki prototypowej i można nawet zaprogramować Arduino i podłączyć go w trybie płytki stykowej, niżej na stronie znajduje się symulacja i można bawić się dwoma garnkami. Jeśli chcesz zduplikować obwód i wprowadzić własne wartości, możesz znaleźć obwód tutaj. Pierwszy potencjometr ma 70 omów i połączony szeregowo z rezystorem 80 omów, który symuluje PT100 z zakresem 80-150 omów, drugi potencjometr to wzmocnienie wzmacniacza pomiarowego. Niestety użyłem biblioteki, którą pobrałem do mojego kodu, więc Arduino nie jest zawarte w poniższym obwodzie, ale są tylko dwa dodatkowe przewody, które musisz podłączyć. Jeśli czujesz się bardziej komfortowo z LTspice, załączyłem plik asc z obwodem.

Podłącz pin A0 do wyjścia wzmacniacza różnicowego

Podłącz GND Arduino do GND obwodu (NIE -6 V)

I to jest gotowy obwód, teraz na kodzie. Wcześniej wspomniałem, że będziemy używać formuły y=mx+c, a teraz obliczymy m(nachylenie) i c(przesunięcie). W Arduino będziemy odczytywać napięcie, ale równanie temperatury wymaga od nas znajomości rezystancji PT100, więc sposobem, w jaki możemy to zrobić, jest zastąpienie Serial.println(temp) Serial.println(V) i zapisanie napięcie i rezystancja w dwóch temperaturach. Podczas wykonywania tego testu pozostaw PT100 sam na chwilę, na przykład minutę lub dwie i trzymaj się z dala od wszelkich źródeł ciepła (światła słonecznego, wentylatora laptopa, ciała itp.).

Pierwszym punktem, jaki możemy wziąć, jest temperatura pokojowa, gdy masz podłączony i działający obwód, zapisz napięcie (Vt1) odczytane przez Arduino na monitorze szeregowym i szybko odłącz PT100 i zapisz jego rezystancję (Rt1), nie wkładaj swojego ręce na sondzie podczas odłączania, ponieważ zmieni to opór. W przypadku drugiej temperatury możemy umieścić sondę w lodowatej lub gorącej wodzie (należy zachować ostrożność, jeśli używasz gorącej wody) i powtórzyć to, co zrobiliśmy przed znalezieniem Vt2 i Rt2. Zaraz po umieszczeniu sondy w cieczy odczekaj minutę lub dwie na ustabilizowanie się oporu. Jeśli interesuje Cię czas reakcji PT100, rejestruj napięcie z monitora szeregowego co około 2 sekundy i możemy na tej podstawie narysować wykres, który wyjaśnię później. Korzystając z dwóch napięć i rezystancji, możemy obliczyć nachylenie w następujący sposób:

Obraz
Obraz

Rt1 i Rt2 to rezystancje w dwóch temperaturach i to samo dotyczy napięć Vt1 i Vt2. Na podstawie nachylenia i jednego z dwóch zapisanych zestawów punktów możemy obliczyć przesunięcie:

Obraz
Obraz

C powinno być zbliżone do twojego prawdziwego Roffa. Z mojej symulacji obliczyłem te wartości:

Obraz
Obraz

Z tego oporu możemy obliczyć naszą temperaturę korzystając ze wzoru, który mieliśmy na początku:

Obraz
Obraz

I to tyle, kod dla Arduino jest poniżej, jeśli masz jakieś problemy, zostaw komentarz, a postaram się pomóc.

Nie ma żadnych zdjęć obwodu, który zrobiłem jakiś czas temu i nie mam już PT100 do przerobienia i przetestowania, ale po prostu musisz mi uwierzyć, że to działa. Niewiele jest o PT100 w Instructables, które znalazłem, więc dlatego uczyniłem to możliwym.

W następnym kroku będę mówił o odpowiedzi czasowej PT100 i jeśli nie jesteś zainteresowany matematyką, kiedy mierzysz zmianę temperatury, pozwól PT100 ustabilizować się na około minutę przed wykonaniem odczytu.

Jeśli jesteś zainteresowany innymi projektami, które wykonałem, odwiedź mój

Blog: Roboroblog

Kanał YouTube: Roboro

Lub spójrz na moje inne instrukcje: tutaj

Jeśli kod HTML miesza się z poniższym kodem, kod jest dołączony

* Ten kod oblicza temperaturę za pomocą PT100

* Napisane przez Roboro * Github: <a href="https://github.com/RonanB96/Read-Temp-From-PT100-… <a href="https://github.com/RonanB96/Read-Temp- Od-PT100-… <a href="https://github.com/RonanB96/Read-Temp-From-PT100-… >>>>>>>>> * Circuit: <a href=" href="https://github.com/RonanB96/Read-Temp-From-PT100-… <a href=" https://github.com/ronanb96/read-temp-from-pt100-…="">>>>>>>>>> * Blog: <a href=" href="https://github.com/RonanB96/Read-Temp-From-PT100-… <a href=" https://github.com/ronanb96/read-temp-from-pt100-…="">>>>>>>>>> * Instrustable Post: <a href=" href="https://github.com/RonanB96/Read-Temp-From-PT100-… <a href=" https://github.com/ronanb96/read-temp-from-pt100-…="">>>>>>>>>> * */ //You'll need to download this timer library from here //https://www.doctormonk.com/search?q=timer #include "Timer.h" // Define Variables float V; float temp; float Rx; // Variables to convert voltage to resistance float C = 79.489; float slope = 14.187; // Variables to convert resistance to temp float R0 = 100.0; float alpha = 0.00385; int Vin = A0; // Vin is Analog Pin A0 Timer t; // Define Timer object

void setup() {

Serial.begin(9600); // Set Baudrate at 9600 pinMode(Vin, INPUT); // Make Vin Input t.every(100, takeReading); // Take Reading Every 100ms } void loop() { t.update(); // Update Timer } void takeReading(){ // Bits to Voltage V = (analogRead(Vin)/1023.0)*5.0; // (bits/2^n-1)*Vmax // Voltage to resistance Rx = V*slope+C; //y=mx+c // Resistance to Temperature temp= (Rx/R0-1.0)/alpha; // from Rx = R0(1+alpha*X) // Uncommect to convet celsius to fehrenheit // temp = temp*1.8+32; Serial.println(temp); }

Step 6: Time Response of PT100

Czas reakcji PT100
Czas reakcji PT100

Wspomniałem więc, że PT100 ma wolną odpowiedź, ale w dowolnym momencie t możemy uzyskać wzór na aktualną temperaturę odczytaną przez PT100. Odpowiedź PT100 jest odpowiedzią pierwszego rzędu, którą można zapisać w terminologii Laplace'a, tj. funkcji transferu, jako:

Obraz
Obraz

gdzie tau(τ) jest stałą czasową, K jest wzmocnieniem układu, a s jest operatorem Laplace'a, który można zapisać jako jω gdzie ω jest częstotliwością.

Stała czasowa mówi, ile czasu zajmuje systemowi pierwszego rzędu ustalenie nowej wartości, a zasada lub kciuk mówi, że 5*tau to czas potrzebny do ustalenia się w nowym stanie ustalonym. Wzmocnienie K mówi, jak bardzo wejście zostanie wzmocnione. W przypadku PT100 zysk jest to, jak bardzo zmiana rezystancji podzielona jest przez zmianę temperatury, po wybraniu dwóch losowych wartości z tego arkusza danych uzyskałem wzmocnienie 0,3856 oma / C.

Wcześniej powiedziałem, że można rejestrować napięcie co 2s po umieszczeniu sondy w cieczy, gorącej lub zimnej, z tego możemy obliczyć stałą czasową systemu. Najpierw musisz określić, gdzie jest punkt początkowy i punkt końcowy, przy czym punktem początkowym jest napięcie przed umieszczeniem sondy w cieczy, a punktem końcowym jest, gdy się ustabilizuje. Następnie odejmij je i to jest zmiana napięcia stopnia, test, który przeprowadziłeś, był skokową zmianą, która jest nagłą zmianą sygnału wejściowego do systemu, krokiem jest temperatura. Teraz na wykresie przejdź do 63,2% zmiany napięcia i tym razem jest to stała czasowa.

Obraz
Obraz

Jeśli wstawisz tę wartość do funkcji przenoszenia, otrzymasz wzór opisujący odpowiedź częstotliwościową systemów, ale nie tego teraz chcemy, chcemy rzeczywistej temperatury w czasie t dla skoku temperatury, więc idziemy aby wykonać odwrotną transformację Laplace'a kroku do systemu. Funkcja przenoszenia systemu pierwszego rzędu z wejściem kroku jest następująca:

Obraz
Obraz

Gdzie Ks to wielkość kroku, czyli różnica temperatur. Powiedzmy, że sonda jest ustawiona na 20 st. C, umieszczona w wodzie o temp. 30 st. C i ma stałą czasową 8 s, transmitancja i wzór w dziedzinie czasu są następujące:

Obraz
Obraz

δ(t) oznacza po prostu impuls, tj. Przesunięcie DC o 20 stopni C w tym przypadku, możesz po prostu zapisać 20 w swoich równaniach podczas obliczania tego. To jest standardowe równanie kroku do systemu pierwszego rzędu:

Obraz
Obraz

Powyższe oblicza temperaturę w czasie t, ale będzie to działać dla napięcia, ponieważ są one do siebie proporcjonalne, potrzebujesz tylko wartości początkowej i końcowej, stałej czasowej i wielkości kroku. Strona internetowa o nazwie Symbolab jest świetna do sprawdzenia, czy twoja matematyka jest poprawna, może zrobić Laplace'a, integrację, różnicowanie i wiele innych rzeczy i daje ci wszystkie kroki po drodze. Odwrotną transformację Laplace'a powyżej można znaleźć tutaj.

Zalecana: