Niezawodność czujników temperatury DS18x20


11

Korzystam z DS18x20 Maxima (właściwie mam więcej niż jeden wariant) 1-przewodowych czujników temperatury do rejestrowania temperatur w różnych pokojach w domu raz na minutę. Około jednego czytania na tysiąc otrzymuję z powrotem coś całkowicie fałszywego. W środku sekwencji, która stopniowo rośnie z 65F do 70F, otrzymuję coś w rodzaju -32.1F lub 15.64F.

Czy ktoś jeszcze miał taki problem, czy jest to coś złego w mojej konfiguracji? Jeśli jest to po prostu znany problem z tymi rzeczami, będę musiał zrobić coś takiego, jak trzy czytania i wyrzucenie wartości odstającej.

Kilka stwierdzeń o mojej konfiguracji:

  • Pracuję na 3,3 V.
  • Sprawdzam sumę kontrolną odczytu, gdy wraca do arduino, i pasuje (lub myślę, że tak - zawsze może być błąd w tym kodzie).
  • Uciekają one z normalnej mocy, a nie mocy pasożyta.
  • Mam na miejscu rezystor pullup 4,7K.
  • Używam tylko jednego czujnika na każdej platformie czujnikowej.
  • Czujnik znajduje się na płytce drukowanej przymocowanej do czytnika arduino.
  • Widzę ten sam problem z czytaniem z wielu różnych arduinos (diecimilla, pro-mini, domowe zamówienie)

Odpowiedzi:


5

Widzę to od czasu do czasu z DS18B20. Dla mojej aplikacji było wystarczająco proste, aby odfiltrować fałszywe wyniki za pomocą kodu.


Dobrze jest słyszeć, że ktoś inny wyglądał na coś podobnego. Jaki był twój algorytm filtrowania?
— edebill,

Sugerowałbym, abyś zrobił to, co powiedziałeś, weź 3 czytanie, 5 byłoby lepiej, 7 lepiej niż to, ale jeśli wystąpi błąd około 1/1000, potrzebujesz tylko 3. Weź medianę. Problem zostanie rozwiązany. jeśli weźmiesz 5, wystąpi dziwaczny problem.
— Kortuk,

Teraz robię 5. Próbowałem wziąć wyższą z 2, ale wczoraj wieczorem wciąż pojawiał się błąd (mam 3 czujniki czytające co minutę, więc dostaję tysiące punktów danych dziennie).
— edebill,

3

Jeśli nie możesz znaleźć źródła błędnych odczytów, powinno być łatwo je odfiltrować i ekstrapolować z poprzednich odczytów lub interpolować między odczytami, jeśli ważna jest perspektywa. Ponieważ próbkujesz raz na minutę, możesz nawet skopiować ostatni odczyt; temperatura w pomieszczeniu prawie się nie zmieni w ciągu jednej minuty.


3

Może to być spowodowane błędnym odczytem przez sterownik jednego lub więcej bitów odpowiedzi temperaturowej w pewnych warunkach dużego obciążenia lub interferencją elektryczną powodującą uszkodzenie jednego lub więcej bitów.

Dokładnie zapoznaj się z arkuszem danych tutaj http://www.rentron.com/Files/ds18b20.pdf

Na stronie 5 pokazuje, że dokładna sekwencja binarna dla 85C to:

+85°C 0000 0101 0101 0000

Podobnie dla 25C jest to:

+25.0625°C 0000 0001 1001 0001

W niektórych przypadkach, jeśli sterownik trochę nie trafi, otrzymasz wartość, która jest rzeczywistą temperaturą, wyrażoną w postaci binarnej i przesuniętej w bitach. Często jest to 1 / 2x wartość docelowa w C.

Czasami można uzyskać zakłócenia elektryczne na linii, a kontroler odczytuje cały ciąg 1s. W takim przypadku otrzymasz liczbę taką jak 15,64, która wyrażona binarnie jest w rzeczywistości bardzo zbliżona do liczb między 65 a 70F, z wyjątkiem kilka pierwszych na początku.


2

Za to, co jest warte, kilka miesięcy temu wykonałem trochę pracy z DS18B20. Nakręciłem krótki film i napisałem na moim blogu, który zawiera linki do przykładów i przykładowego kodu. Mam nadzieję, że to może trochę pomóc! http://dailyduino.com/archives/552


2

Mam ich 13 w moim domu od około czterech lat. Baza danych jest trudna do obsługi (śledziłem wszystkie próbki). Ale nie widziałem tego rodzaju zachowania. Zamiast tego co jakiś czas jeden czujnik zamarza i blokuje wszystkie pozostałe, jedynym wyjściem z tego (które znalazłem) było wyłączenie napięcia zasilającego na kilka sekund. Dodałem więc mały przekaźnik do mojej płyty i ilekroć mikro wyczuje to zachowanie, resetuje cały łańcuch czujników. To się zdarza kilka razy w tygodniu.


Hmm Może powinienem je wzmocnić tylko wtedy, gdy mam zamiar przeczytać.
— edebill,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.