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

Atmega32 - 3 czujniki Pt1000, multupleksacja.

08 Paź 2012 18:18 6831 30
  • Poziom 24  
    Witam, zabrałem się ostatnio za zaprojektowanie sterownika kolektorów solarnych do wody użytkowej i mam parę pytań odnośnie podłączenia czujników do uP. Jako czujników temperatury chcę użyć Pt1000, czytałem trochę postów o sposobach podłączenia, o tym że prąd nie większy niż 1 mA itp. Z tym, że ja chcę takich czujników podłączyć 3 i teraz moje pytanie. Czy muszę do każdego z osobna robić układy na wzm. operacyjnych czy mogę podłączyć czujniki do np. 74HC4051 a za nim np LM324 i sygnał do procka za pomocą którego będę przełączał kanały ? Widziałem kiedyś takie rozwiązanie w oryginalnym sterowniku tylko tam było dziwnie bo sygnał z czujników wpadał na układ zabezpieczający SRDA3.3-4 a później na tego 74HC ale też bezpośrednio przez rezystory do procka - tego nie rozumiałem czy to była zrobiona jakaś kompensacja czy o co chodzi ? Z góry dziękuję za odpowiedzi.
  • Poziom 40  
    jarecki1989 napisał:
    czy mogę podłączyć czujniki do np. 74HC4051 a za nim np LM324 i sygnał do procka za pomocą którego będę przełączał kanały ?

    Możesz.
    jarecki1989 napisał:
    Widziałem kiedyś takie rozwiązanie w oryginalnym sterowniku tylko tam było dziwnie bo sygnał z czujników wpadał na układ zabezpieczający SRDA3.3-4 a później na tego 74HC ale też bezpośrednio przez rezystory do procka - tego nie rozumiałem czy to była zrobiona jakaś kompensacja czy o co chodzi ?

    Schemat?
  • Poziom 24  
    Jakbym miał schemat to byłbym w siódmym niebie. Czy wykorzystanie tego multipleksera nie będzie wprowadzało mi przekłamań w pomiarach ?
  • Poziom 40  
    Zawsze są jakieś przekłamania. Nawet przewód miedziany wprowadza przekłamania. Ważne że są one mało istotne. Pamiętaj że nie należy przez taki przełącznik przepuszczać zbyt dużych prądów gdyż taki przełącznik w stanie załączonym można traktować jako opornik 100om między wybranym wejściem a wyjściem Z.
  • Poziom 24  
    Zmontowałem układ doświadczalny jak na poniższym rysunku:
    Atmega32 - 3 czujniki Pt1000, multupleksacja.
    Wszystko działa jak należy. Ale teraz próbuje zamiast czujnika Pt1000 podłączyć multiplexer z odpowiednio wybranym wejściem gdzie podłączam swój Pt1000 i na wyjściu układu mam cały czas 3,6V. Nigdy prędzej nie bawiłem sie z mux więc nie wiem skąd to się bierze wydawało mi się że jest to swojego rodzaju "włącznik" mający rezystancję rzędu 100 ohmów. Dlaczego tak się dzieje ?
  • Poziom 40  
    Pokaż schemat. Sprawdź czy na pewno dobrze podłączasz i czy wybrałeś odpowiednie wejście.
  • Poziom 24  
    PT1000 podłączam pod wejście Y0 i do masy, z pinu 3 (common Y) bezpośrednio do punktu oznaczonego na schemacie jako Ut. Wejścia sterujące Ai B do masy tak samo jak INH VSS i VEE.

    Atmega32 - 3 czujniki Pt1000, multupleksacja.

    Wyjście układu podłączone zamiast czujnika PT1000 w poprzednim schemacie. Te GND na wyjściu oczywiście bez sensu. Narysowane z pośpiechu.
  • Poziom 40  
    Sposób który wybrałeś jest zły bo przepuszczasz przez przełącznik prąd który powoduje spory spadek napięcia na przełączniku. Poza tym czy Vee układu jest połączone z GND?
    EDIT> Ok. Doczytałem.
  • Poziom 24  
    excray napisał:
    Sposób który wybrałeś jest zły bo przepuszczasz przez przełącznik prąd który powoduje spory spadek napięcia na przełączniku.


    Załóżmy że przełącznik ma rezystancję 150 ohmów prąd jaki płynie to 840uA spadek napięcia to 0,126V a więc jak na ten pomiar faktycznie dużo ale tak czy siak nie działa w ogólę. W jaki inny sposób można to podłączyć ?
  • Moderator Mikrokontrolery Projektowanie
    A nie prościej zrobić to tak jak się to robi w tego typu rozwiązaniach, czyli kupić gotowe czujniki NTC, zarobione, z przewodami do CO? Takie coś podłączasz tworząc dzielnik napięcia i mierzysz przez ADC. A że M32 ma multiplekser do ADC to sobie takich czujników łatwo możesz połączyć kilka. Odpadają te cyrki z opampami i całą resztą.

    Dodano po 2 [minuty]:

    BTW, ten 4052 ma rezystancję załączonego klucza rzędu 125 omów, ciężko go więc wykorzystać do przełączania precyzyjnych sygnałów analogowych.
  • Poziom 24  
    W większości tego typów sterowników są montowane Pt1000 i w moim projekcie również jest takie założenie. Teraz sprawa dzielnika napięciowego, przy zmianie rezystancji czujnika Pt1000 będzie się zmieniał również prąd przez niego płynący tak ? Po drugie nie wykorzystam całego możliwego zakresu przetwornika A/C, pomiar temp. w granicach 0-250 stopni. Być może się mylę ale tak mi się wydaje.
  • Moderator Mikrokontrolery Projektowanie
    Sprawdź - to zazwyczaj są zwykłe termistory NTC o rezystancji 25kom @25 stopni. Ale nieważne. Przy dzielniku ustawia się tak minimalne prądy, że zmiana rezystancji powoduje oczywiście zmianę prądu (taka w końcu jest idea), ale zmiany wydzielanej mocy są tak minimalne, że bez znaczenia. Solary też nie nagrzewają się do 250 stopni - tam jest glikol, który w okolicy 130 stopni wrze, a ze względu na straty i pokrycie solar rzadko przekracza 100 stopni. Weź też pod uwagę, że do sterowania solarem rodzielczość temperatury rzędu 1-2 stopni jest wystarczająca, nawet wykorzystując tylko 1/4 przedziału pomiarowego ADC uzyskasz rozdzielczość lepszą niż 0,5 stopnia, więc ADC nie jest żadnym problemem.
  • Poziom 38  
    Obawiam się, że używając zwykłego dzielnika nie uzyskasz dokładności pomiaru 1 stopień Celsiusza...

    Szumy - zabierają 1-2LSB - w sumie można zastosować uśrednianie software'owe.
    Tolerancja - zarówno PT1000 jak i opornika w dzielniku - trzeba by przeprowadzać kalibrację dla każdej pary czujnik - rezystor.
    Nieliniowość charakterystyki U(T) po dzielniku - dla pewnych zakresów temperatur może okazać się, że nachylenie krzywej jest zbyt małe, tj. jednemu kwantowi napięcia (z punktu widzenia ADC) odpowiada zmiana temperatury większa niż jeden stopień.

    Generalnie proponuję najpierw zrobić worst case calculation uwzględniając powyższe punkty.

    Myślałeś o użyciu scalonego czujnika, np. na 1-wire? Odpada sporo problemów.
  • Moderator Mikrokontrolery Projektowanie
    Ja nie pisałem o dokładności lecz o rozdzielczości. Jeśli w całym zakresie uzyska dokładność 2-3 stopnie to i tak będzie więcej niż potrzebuje. Nieliniowość termistora można ominąć stosując równanie wykładnicze, to żaden problem, nawet dla 8-bitowych mikrokontrolerów. W pewnych zakresach można linearyzować równoległym rezystorem, lub stosować loook up tables i aproksymować liniowo pomiędzy wartościami. Szumy akurat tu są sprzymierzeńcem, dzięki temu można zrobić ładny oversampling w celu zwiększenia rozdzielczości.
  • Poziom 18  
    tmf napisał:
    BTW, ten 4052 ma rezystancję załączonego klucza rzędu 125 omów, ciężko go więc wykorzystać do przełączania precyzyjnych sygnałów analogowych


    Czemu? Jeśli chodzi o podawanie sygnału analogowego do ADC, to wszystko zależy przecież od impedancji wyjściowej źródła i impedancji wejściowej ADC. Klucz po drodze to wtrącenie szeregowej rezystancji 125 omów, ale to nie ma aż takiego znaczenia jeśli tylko Zwe ADC jest wystarczająco duża. Albo jeśli odpowiednio długo ładujemy Csample w układzie sample&hold w ADC (wówczas nawet ładowanie przez 100 omów nie przeszkadza..... wszystko oczywiście zależy od dokładności jaką chcemy uzyskać, ale dla 12 bitów i Rwe_ADC=20k a Csample = 15pf to 100 omów nie ma znaczenia. To wszystko zresztą można sobie przeliczyć).
    tmf, rozwiń proszę myśl, bo może chodziło ci o coś innego.
  • Poziom 24  
    Ostry23 napisał:
    Klucz po drodze to wtrącenie szeregowej rezystancji 125 omów, ale to nie ma aż takiego znaczenia jeśli tylko Zwe ADC jest wystarczająco duża.


    Dokładnie. Sprawdziłem układ z samym PT1000 i później z użyciem mux i wynik pomiaru był idealnie taki sam. Wydaje mi się, że rozdzielczość 0.5 stopnia mi wystarczy bo po co dokładniej ? Czy temperatura wody 43.1 a 43.4 stopnia jest odczuwalna, nie wydaje mi się.
  • Poziom 18  
    jarecki1989 napisał:
    Sprawdziłem układ z samym PT1000 i później z użyciem mux i wynik pomiaru był idealnie taki sam
    .
    No właśnie, przecież układ termistor-rezystor można przedstawić jako źródło napięciowe o napięciu ze środka dzielnika a impedancji wyjściowej równej równoległemu połączeniu R i Rterm, co w tym wypadku da kiloomy. 125 omów nic tu nie zmieni. Ważne, żeby w czasie samplowania (dla ADC typu SAR zależy od zegara jakim taktujemy ADC) naładować jak najdokładniej Csample, co się sprowadza do wymagań:
    - odpowiednio małe Csample i małe Rwe przetwornika,
    - i/lub odpowiednio mała Zwy źródła sygnału,
    - i/lub odpowiednio krótki czas fazy sample w przetworniku.

    Przy odczytach temperatury raczej nie trzeba jej b. często samplować, więc można taktować ADC całkiem wolnym zegarem. Trzeba tylko zwrócić uwagę na to jak długo kondensator Csample trzyma napięcie w fazie hold, bo to ogranicza częstotliwość zegara taktującego ADC (nie mylić z częstotliwością próbkowania sygnału) od dołu.
  • Poziom 24  
    Naskrobałem schemat z gotowego sterownika do kolektorów. Według mnie to 74HC4051 za pomocą uP puszcza na odpowiednie czujniki PT1000 prąd ze źródła prądowego zrobionego na LM324. Nie rozumie tylko po co są te dwa wtórniki i co robią wejścia Y6, Y7 mux`a. No i sygnał mierzony jest bezpośrednio z PT1000 z szeregowo połączonym rezystorem rezystorem 1k ?

    Atmega32 - 3 czujniki Pt1000, multupleksacja.
  • Poziom 18  
    łojezu, kolego. Nie prościej byłoby narysować to wszystko w eagle'u albo jakimś edytorze schematów do SPICEa? To co naskrobałeś jest bardzo nieczytelne. Poza tym rysujesz IC tak jakby to były footprinty. Narysuj porządne symbole, łatwiej będzie myśleć, i nam, i tobie.
  • Poziom 24  
    No wiem wiem ... Ale rysowałem to z miernikiem w ręku mierząc co gdzie idzie na płytce i od razu wystawiłem. Zaraz to rzuce do eagla.
  • Poziom 18  
    tmf napisał:
    BTW, ten 4052 ma rezystancję załączonego klucza rzędu 125 omów, ciężko go więc wykorzystać do przełączania precyzyjnych sygnałów analogowych


    Muszę się poprawic. Dopiero teraz doczytałem, że autor chciał przez MUX puszczać prąd 840uA, myślałem, że chodziło o podawanie sygnału napięciowego przez klucz prosto do wejścia ADC. Tmf, masz oczywiście racje z tym przełączaniem, jeśli się przełącza sygnał prądowy.
  • Poziom 18  
    Gdzie idą MSP1 do MSP10? A MSP430? Domyślam się, że do MCU, ale co to robi konkretnie?
    No i gdzie jest robiony ten pomiar? Tzn. co idzie na wejścia ADC?
    Aha, mały detal - IC1A powinien być poprawnie zaterminowany, żeby nie pobierał za dużo prądu. Najlepiej wejście nie odwracające spolaryzować na VCC/2.
  • Poziom 24  
    Ostry23 napisał:
    Gdzie idą MSP1 do MSP10? A MSP430? Domyślam się, że do MCU, ale co to robi konkretnie?
    No i gdzie jest robiony ten pomiar? Tzn. co idzie na wejścia ADC?


    Idą bezpośrednio do MSP430F149 i jakbym wiedział co robią to by nie było pytania ;) Co jest w MSP430 to nie wiadomo mam przed sobą po prostu gotowy sterownik, na który patrzę i próbuję zrozumieć jak to działa. Wszystkie zaznaczone wyjścia MSP wchodzą na ADC.
  • Pomocny post
    Poziom 18  
    Czy R13 nie powinno być podłączone do VCC a nie do GND?
    To źródło prądowe zadziała w 2 przypadkach:
    - R13 do VCC, za R13 pnp,
    - R13 do GDN, za R13 npn.

    W każdym przypadku musi być oczywiście inaczej dobrany dzielnik na wejściu nie odwracającym.
    Natomiast - w tym drugim przypadku nie ma z kolei sensu podpięcie czujników PT do masy, dlatego przypuszczam, że R13 ma iść do VCC.

    MSP2 do MSP5 idące na wejścia ADC - ma to sens, tylko czemu są tam jeszcze rezystory 1k? Może jako zabezpieczenie przed spaleniem pinów IO i tranzystora źródełka prądowego, gdy się przez pomyłkę źle skonfiguruje piny GPIO? Ale to bez sensu jest, bo przecież źródło ograniczy prąd.

    IC1C i IC1B - nie wiem po co są. Poza tym obciążenie wyjścia IC1B kondensatorem elektrolitycznym (co sugeruje dużą pojemność) to na pewno błąd.

    Coś mi się zdaje, że niepoprawnie przerysowałeś schemat.
    Nie znam kontrolerów MSP430 a w tym wypadku trzeba też wiedzieć, jakie mają funkcje te piny, do których twoje ustrojstwo jest podłączone. Ale bez znajomości programu to może nie wystarczyć.
  • Poziom 24  
    Przepraszam, mój błąd R13 do VCC, reszta pozostaje bez zmian. Z tymi rezystorami 1k połączone są szeregowo co daje w sumie 2k przy temp 0 stopni. Do multiplexera jest podłączony dokładny rezystor 2k (R8) może to jakaś kalibracja ? Mux włącza prąd taki jak na PT1000 na wyjście X7 to trafia do procka jako idealna wartość PT1000 przy 0 stopni. No nie wiem ...
  • Poziom 24  
    Witam, chciałbym lekko odświeżyć temat. Zmontowałem układ jak na załączonym schemacie. Źródło prądowe 1mA (zbudowane na potrzeby testów, w przyszłości zostanie zastąpione przez LM334), multiplexer i czujniki Pt1000. Podłączyłem to wszystko do portów ADC atmegi i teraz kwestia programowa. Jak to mierzyć żeby było dobrze ? W oryginalnym sterowniku pomiar jest płynny i zmienia się co 0,1 stopnia a u mnie to wszystko skacze i ogólnie jest do du**. Z programowania orłem nie jestem no ale coś tam napiszę, przedstawię fragment kodu, który jest odpowiedzialny za odczyt temperatury.

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Wzory przekształcone z datasheeta Pt1000. W programie głównym mam coś takiego:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Nie mam nigdzie żadnych filtrów ale jak zrobiłem pierwszego rzędu dla częstotliwość 2Hz to w sumie nic to nie dało. Może filtrować to atmegą ? Ale nie bardzo wiem jak...
  • Poziom 14  
    Witam kolegę Jareckiego

    nie wiem czy zauważyłeś - pt1000 przy zmianie temperatury o 1 stopień (z 0 do 1 stopnia celcjusza, bo jest nieliniowy) towarzyszy zmiana oporu o 3,9 Ohma
    przy prądzie 1mA daje to całe 3,9mV (0,0039V)
    z tego co się orientuję Atmega ma 10 bitowy przetwornik co przy napięciu referencyjnym 2.5V (nie doczytałem jakim napięciem go zasilasz) daje napięcie 2,4mV na działkę (lub 3,2mV na działkę dla napięcia 3,3V)
    tak więc na wstępie masz już 0,7 stopnia rozdzielczości ograniczonej kwantyzacją przetwornika ADC
    do tego dochodzą wspomniane przez kolegów wyżej szumy rzędu 1-2LSB - czyli około 3 stopni Celcjusza szumów

    Locker w poście #13 (tym pechowym dla Ciebie) doskonale to nakreślił

    pozostaje Ci bardzo ostre filtrowanie programowe (które ze względu na stabilność 0.1 stopnia będzie karkołomne - nie zapomnij o doskonałym filtrowaniu napięcia zasilającego podawanego na ADC - z obniżeniem tego napięcia do jak najmniejszej możliwej działającej wartości)
    albo przeprojektowanie układu analogowego do działania w mostku
    lub zaprojektowanie układu odejmującego spadek napięcia na rezystancji 'nieużytecznej' czujnika z oczywistym wzmocnieniem sygnału wynikowego

    pozdrawiam i powodzenia w dalszej pracy :-)
  • Poziom 24  
    h0nza napisał:
    lub zaprojektowanie układu odejmującego spadek napięcia na rezystancji 'nieużytecznej' czujnika z oczywistym wzmocnieniem sygnału wynikowego


    Czyli: wyjście każdego czujnika wchodzi dodatkowo na wzmacniacz różnicowy, zakładam, że pomiar temperatury będzie odbywał się tylko w zakresie od -35 do +200 stopni C. Będzie to powodowało zmianę napięcia od 901,92mV do 1,758V czyli różnica o 856,08mV. Wzmocnienie wzmacniacza dobrać aby wynosiło 2,5 raza. Daje to zakres pomiarowy od 0V do 2,14V. Zmiana temperatury o 1 stopień odpowiadać będzie zmianie napięcia o 9,75mV. Przetwornik ma ustawione referencyjne napięcie na 2,56V co daje 2,5mV na działkę. Nie licząc błędu przetwornika i tak nie da się osiągnąć dokładności 0.1 stopnia. Jaki zakres pomiaru temperatury byłby optymalny ? Jakie maksymalne i minimalne temperatury występują przy kolektorze słonecznym ?
  • Pomocny post
    Poziom 14  
    Witam

    10 bitów to 1024 kombinacji - chcąc mieć dokładność 0.1 stopnia daje to rozpiętość 102.4 stopnia w idealnym przypadku dopasowania napięć
    a skoro chcesz zakres od -35 stopni celcjusza zobacz jaką wtedy pt1000 będzie miał rezystancję - daj ją w szereg z czujnikiem (niekoniecznie przy nim ale tak żeby przepływał przez nie ten sam prąd co przez czujnik) unikniesz efektów ubocznych dryftu temperaturowego źródła prądowego (to co na LM zmontowałeś) i osiągniesz potrzebne napięcie odniesienia równe -35 stopniom celcjusza które wzmacniacz operacyjny powinien odjąć (lub +200 stopni, zależy od układu i co będzie łatwiej wykorzystać)

    ale od czego są matematyczne operacje uśredniania - z 2 pomiarów możesz mieć rozpiętość 204.8 (11bit) z 4 409.6 (12bit)z 8 819.2 (13bit)- mając oczywiście idealny przetwornik niezakłócony niczym z szumem własnym/wprowadzonym rzędu 1LSB
    w atmedze z racji zakłóceń zmiennych razem z wykonywanym programem i machaniem pinami będzie to wynik raczej przypadkowy - możesz próbować liczyć to z dużym buforem, przynajmniej tak żeby zmiany były niewielkie

    ja bym spróbował tak:
    ustawić 640 pomiarów na sekundę
    zbierać po 64 pomiary do 1 zmiennej (64 bo 1023*64 < 2^16 więc mieści się w 2 bajtach, po co pamięć marnować)
    i po 64 pomiary do 9 następnych zmiennych (niestety tutaj to jest marnowanie pamięci ale innej metodyo takiej skuteczności nie znam)
    potem sumować 10 zmiennych, obliczać z tego temperaturę -> wyrzucać najstarszy i na jego miejsce dać najnowszy pomiar

    będziesz miał odświeżanie temperatury co 0,1s zmiany temperatury złapie Ci do 1 sekundy i pomiar nie będzie skakać, będzie za to pływać (będzie to prosty filtr FIR)

    oczywiście im więcej 2 bajtowych zmiennych tym pomiar będzie mniej pływać, ale zżerać więcej pamięci

    czasy są przykładowe - tak żeby był pomiar raz na sekundę

    miłych przemyśleń nad schematem życzę