Skocz do zawartości

Podłaczenie czujników TMP36GT9Z


SOYER

Pomocna odpowiedź

7 minut temu, SOYER napisał:

Jednak co za róznica czy odczyt=0 jest przed pętlą czy po zakończeniu obliczeń

A jaka jest różnica, czy najpierw posmarujesz bułkę masłem a potem ją zjesz - czy najpierw zjesz bułkę a potem zakąsisz masłem?

Być może Twoja konstrukcja będzie działać - to zależy od reszty programu. I może się tak zdarzyć, że resztę za rok sobie zmienisz i wtedy być może działać przestania.

A w informatyce nie ma miejsca na być może...

Spójrz: ja przygotowuję sobie zmienną poprzez jej wyzerowanie, potem coś do niej dodaję i na końcu odczytuję wynik. Ty dodajesz cząstkowe wyniki (do czego?) nie dbając o to, jaki jest stan początkowy. Pół biedy jeśli zmienna jest globalna lub statyczna - wtedy inicjalizowana jest zerem. Ale jeśli jest dynamiczna (co ma sens, bo nie powinna istnieć poza chwilą pomiaru) - w zmiennej może się znaleźć cokolwiek, i masz szansę 1:65536 że będzie to zero... a zerowanie zmiennej po dokonaniu obliczeń to właśnie zakąszanie bułki masłem 🙂

Przyzwyczaj się do pewnych zasad w programowaniu - pisząc tak jak Ci pokazałem nie narazisz się na różne przykre niespodzianki, a ktoś czytając Twój kod będzie od razu wiedział o co chodzi a nie zastanawiał się, do czego właściwie te wyniki pomiarów dodajesz.

 

  • Lubię! 1
Link do komentarza
Share on other sites

Dokładnie jak piszesz. 

Wczoraj jak kominowałem z tym kodem to też pierwsze odczyty były z d... Maryny, dopiero później się zorientowałem, że zadeklarowałem zmienną globalną, a na dzień dobry nie ustawiłem jej na zero. 

Oczywiście w tym przypadku lepiej zrobić ją lokalną przed pętlą, od razu ustawiając ją na "0". 

Link do komentarza
Share on other sites

(edytowany)

Ok, @marek1707na lini danych czujnika temperatury grzejniki, wpiąłem szeregowo rezystor 220 Om, oraz połączyłem tą linię z masą poprzez kondensator 470nF. Różnicy w skokach nie widzę, jedynie wyniki przeniosły się o kilka stopni w górę, co widać na drugim wykresie. Oczywiście nadal działa filtrowanie programowe na wszystkich trzech termometrach.

Czy takie przeniesienie odczytów w trochę inny zakres jest ok? Nadmienię, że teraz odczyty są zbliżone do tych z czujnika sterownika pieca, zamontowane go w prawie tym samym miejscu. 

Ten pik to czas wpięcia opornika i kondensatora. Oba wpięte 10 cm od wejścia Arduino. 

Screenshot_20190520-115949.jpg

Screenshot_20190520-120000.jpg

Edytowano przez SOYER
Link do komentarza
Share on other sites

Może gdy patrzysz na te rysunki to dla Ciebie jest oczywiste co i kiedy. Ja nie rozumiem wykresów. Może przydałyby się jakieś strzałki oznaczone A, B, C z jakąś legendą?

No ale skupmy się tylko na tym co napisałeś o wzroście wyników. W czystych warunkach, gdy wejście ADC nie pobiera prądu to ani rezystor szeregowy ani kondensator równoległy nie powinny spowodować zmian wartości DC. Jeżeli tak się dzieje, to znaczy, że przez rezystor płynie jakiś prąd dając spadek napięcia. Jeżeli wyniki wzrosły to napięcie także wzrosło a to oznacza, że prąd wypływa z wejścia ADC w kierunku czujnika. Jeżeli pominiemy możliwy wpływ jakiegoś dziwnego kondensatora to wygląda mi to na włączony pullup na wejściu ADC. Zobaczmy: podciąganie ok. 50k do Vcc wraz z opornikiem 220R robią dzielnik dający ok. 20mV a to są 2 stopnie temperatury. Jakoś dziwnie pasuje... W każdym razie 20mV zmiany na 220R to prąd ok. 100uA - nawet da się zmierzyć. Poszukaj go.

A jeśli chcesz badać działanie układu RC to wyłącz wszelkie filtrowania cyfrowe i wtedy obserwuj zmiany. Nie musisz bawić się w porównywanie obrazków - to nie przedszkole. Wystarczy,, że Twój program będzie liczył jakąś statystykę z np. kilkuset ostatnich pomiarów i w sposób ilościowy pokazywał wyniki (odchylenie standardowe, wariancja?). Masz wtedy liczby pozwalające konkretnie ocenić jakość rozwiązań. Próbuj z różnymi wartościami: 220R, 1k, 5k1 i tak samo: 470nF, 2u2, 10uF itd. Dla usuwania 50Hz potrzebujesz filtra conajmniej 1k/10u, ale 1k da już zmianę o 10 stopni więc kluczowe jest znalezienie źródła tych dziwnych 100uA.

 

  • Lubię! 2
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Dnia 21.05.2019 o 12:26, marek1707 napisał:

 

Tak się zastanawiałem nad jeszcze jednym. Czujniki mam zasilane z przetwornicy, Arduino z osobnego zasilacza. Czy ten kondensator ma być między linią danych, a masą czujnika(z przetwornicy), czy do masy arduino? W sumie masy są i tak połączone... 

Link do komentarza
Share on other sites

Ma filtrować sygnał, który widzi ADC - a ten jest wbudowany w krzem procesora i mierzy między wejściem Ax a masą procesora/Arduino. Kondensator filtra musi być zatem bezpośrednio między pinem analogowym a GND płytki komputerka. Tak samo do tej masy muszą być podłączone kable GND czujników.Zasilanie jest mniej krytyczne (bo czujniki mają dobry PSRR, pamiętasz?), ale dobrym zwyczajem byłoby zapodanie im najlepszego zasilania jakie możesz, a takie na pewno powstaje w liniowym stabilizatorze Arduino. Możesz dać nawet między Vcc Arduino a punktem rozejścia kabli Vcc na trzy czujniki rezystor 100R i wtedy już obowiązkowo kondensator przy każdym czujniku albo chociaż jeden w punkcie wspólnym (za opornikiem, po stronie czujników oczywiście) do masy.

Znalazłeś skąd płynie prąd?

Link do komentarza
Share on other sites

(edytowany)

@marek1707Niestety dalej nie mam czasu się pobawić z tym filtrowaniem sprzętowym, ale zaobserwowałem ciekawą rzecz. Najperw dwa słowa wyjaśnienia, zielony i niebieski wykres na zdjęciu to czujniki TMP36, a żółty to LM35DZ. Wszystkie trzy mają filtrowanie programowe, wszystkie podpięte do tego samego źródla zasilania(przetwornica step-down, z masą połączoną z arduino), wszystkie podpięte w ten sam sposób.

Jednak jak widać na wykresie, dwa czujniki TMP mają co jakiś czas identyczne okresy niestabilności. Nie dotyczy to jednak czujnika LM35....

Screenshot_20190531-232849.jpg

Screenshot_20190531-233610.jpg

Screenshot_20190531-233632.jpg

Edytowano przez SOYER
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.