logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Atmega8 i termopara - jak to obsłużyć?

Shel 12 Sie 2009 13:37 22147 33
  • #1 6884485
    Shel
    Poziom 27  
    Witam, od razu się przyznam, że dopiero raczkuje tworząc własne programy dla mikrokontrolerów, dlatego pytam:
    jak obsłużyć termoparę (J) przez Amtega8 (wiem, że ma wbudowany przetwornik ADC), chodzi mi o jakiś prosty przykład, na którym mógłbym się wzorować-uczyć, może być w C jak i w Bascomie.

    Chcę by program po prostu odczytywał temp. z termopary i wykonywał instrukcję x do ustalonej temperatury oraz instrukcję y po przekroczeniu tej temperatury.
  • #2 6884600
    flapo213
    Poziom 21  
    Witaj.

    Czego dokładnie potrzebujesz schematu kawałka programu, algortymu,... W przypadku elektroniki to będziesz potrzebował wzmacniacza operacyjnego z odpowiednim wzmocnieniem zależnym od twojej termopary. Nie wiem czy Twoja termopara jest liniową zależnością między temperaturą a napięciem. Jeśli jest nieliniowa to albo odczytasz i zaaplikujesz ch-kę do procka albo czeka Cię seria pomiarów z jakimś wzorcem i komorą termiczną bądź jeśli Ci nie zależy zbytnio na dokładności to bez komory. Jeśli chodzi o procesor to ok atmega8 jest dobrym wyborem. W programie proponuję uśrednić pomiar zanim weźmie sie go do jakichś dalszych obliczeń czy działań. Warto zastosować również histerezę żeby nie skakał jak sądzę jakiś Twój obwód wykonawczy. Podaj więcej szczegółów. Pozdrawiam
  • #3 6884645
    Shel
    Poziom 27  
    Tak potrzebuję kawałek programu, jeżeli chodzi o wzmacniacz operacyjny to zastanawiam się nad OP07, bo widziałem go użytego w kilku innych projektach.
    Przyjmuję także, że moja termopara jest liniowa i nie zależy mi na dokładności pomiarów, po prostu chciałbym wykonać taki sterownik, a jeżeli temperatura będzie wahać o kilka, kilkanaście stopni w zakresie o 0 do 200 stopni - to nie ma dla mnie problemu.
    Histereza - potem na początek chciałbym zrobić to, co opisałem wyżej.
  • #4 6885186
    flapo213
    Poziom 21  
    Który kawałek programu potrzebujesz, konifugrację ADC jak to jest z pinami jak przeliczać ADC, bo ja termopary nigdy nie przerabiałem i raczej bez schematu to nic nie poradzę, wogóle to podaj symbol tej termopary, jeśli masz jakiś kawałek schematu już z OP07 to zamieść. Ale jest tak o ile pamiętam to OP07 to precyzyjne wzmacki, ja zastosowałbym najpopularniejszy uniwersalny i tani LM358, jeśli chcesz mieć dość dobre pomiary to wzmacniacz powinien być R2R (Rail to Rail). Jak będziesz miał jakiś kawałek schematu to pomyślimy o kodzie do tego. Pozdrawiam
  • #5 6887679
    Shel
    Poziom 27  
    Ok, jak dla mnie może być również użyty LM358 nie ma to na razie znaczenia i chodzi mi właśnie jak pobrać napięcie z termopary i za pomocą AC przekształcić ją w liczbę, którą progam porówna i wykona odpowiedni krok?

    aha używam termopary typu K, poniżej link do info
    https://www.elektroda.pl/rtvforum/topic74813.html#696199
  • #6 6887902
    PiotrPitucha
    Poziom 34  
    Witam
    Do termopary to lepiej użyj dobrego wzmacniacza, LM358 nie jest dobrym pomysłem, zobacz w katalogu na jego parametry, jak dmuchniesz na wzmacniacz to Ci temperatura popłynie a to ma reagować na zmiany temperatury na termoparze a nie na wzmacniaczu, MCP607 to minimum.
    Piotr
  • #7 6887967
    flapo213
    Poziom 21  
    Kolego "PiotrPitucha" jasna sprawa że jeśli chodzi o dokładnośc to OP07 jest dużo dużo dokładniejsze od LM358 ale z porzednich pytań wnioskuję iż autorowi wątku nie zależy zbytnio na dokładności. Ok popatrzę w domu co się da z tym zrobić i jak Ci pomóc najprościej. Do potem pozdrawiam
  • #8 6888042
    Shel
    Poziom 27  
    Kolega "PiotrPitucha" ma trochę racji bo doczytałem, że LM358 ma trudności z pomiarem napięć bliskich 0 dlatego poszukałem i znalazłem taki schemat, trochę go przerobiłem, ale i tak pozostaje problem zasilania ponieważ OP07, którego można użyć jak i większość wzamacniaczy zasilanych jest napięciem symetrycznym, a ja mam do dyspozycji stary zasilacz impulsowy od laptopa +16V/4,5A
    Atmega8 i termopara - jak to obsłużyć?
  • #10 6888658
    flapo213
    Poziom 21  
    Jest tak sprawdziem u mnie na stole konstrukcję LM358 2 rezystorki i źródło napięcia od 0 do 50mV i jakość pomiaru wg. jest wystarczająca. Jeśli nie potrzebujesz ujemnych temperatur to wg. mnie ten układ się sprawdzi. Jeśli chodzi o rail to rail to układ schodzi do 40mV przy podaniu na wejście nieodwracające 0V natomiast z plusem jest gorzej max przy 5V zasilaniu to 3,75V. Ale da się to zeskalować. Poniżej zamieszczam schemat.

    PS. Czy ktoś wie jak zrobić w tym układzie offset napięcia aby mierzyć można było ujemne wartości.

    Atmega8 i termopara - jak to obsłużyć?



    Obliczenia:

    Przy R1=470k i R2 równym 1k masz wzmocnienie 470 razy (powinno być 460 ale cięzko będzie z takim rezystorem w szeregu, pokombinuj). Przy takim wzmocnieniu przy 1C atmega odczyta 0.114V a przy 200C odczyta 3.84 (to jest dla 470k). Teraz tak w atmedze można ustawić chyba jedynie wewnętrzne 2,56 lub 5V referencyjne, stosuje się wtedy prosty przelicznik (5/1023 = 4.88mV - minimum co możesz uzyskać przy ref 5V). I tak przy 5V ref masz dla 1C odczyt z ADC w przybliżeniu 23, a przy 200C w przybliżeniu 768, czyli dokładność co 0.25C ;).

    Sprawdźcie mnie kto może czy gdzieś błędu w myśleniu nie ma.

    Pozdrawiam
  • #11 6892428
    loocasm
    Poziom 15  
    A może "podpolaryzować" cały tor do jakiejś wartości, np. połowy napięcia zasilania, wtedy ma się w obie strony (+/-) zapas? Termopara nie musi przecież być na masie.
  • #12 6893774
    flapo213
    Poziom 21  
    Kolego loocasm zaproponuj rozwiązanie tzn. pobierz obrazek zmodyfikuj ja przeliczę to i zobaczy, koncepcaj jakby dobra.
  • #13 6894945
    Shel
    Poziom 27  
    Dalej mam problem z napisaniem wstępu programu który będzie przekształcał odpowiednie wartości pobrane z wzmacniacza (termopary) na liczby i będzie możliwa dalsza obróbka, może ktoś coś zaproponuje?
  • #14 6900513
    flapo213
    Poziom 21  
    Ok

    zrobiłeś układ zgodnie z moimi wskazówkami. Jeśli tak to teraz powiedz jak widzisz resztę, czy ty przewidujesz jakąś wizualizację pomiarów czy tylko regulacja. Jaki stopień oprogramowania Cię interesuje, co dokładnie potrzebujesz z oprogramowania.
  • #15 6901846
    loocasm
    Poziom 15  
    Kolego flapo213, na weekend tu nie zaglądałem, ale dziś popołudniu postaram się wkleić cały tor wejściowy o którym pisałem.

    Shel, na tej stronie http://srdata.nist.gov/its90/download/type_k.tab podane są współczynniki odwrotne i wzór termopary K (na dole strony). Z ich pomocą można obliczyć wartość temperatury mając napięcie termopary ale podane w mV. Czyli jeśli przed przetwornikiem ADC procesora będzie wzmacniacz, trzeba by zmierzoną wartość podzielić przez współczynnik wzmocnienia wzmacniacza.

    Pozdrawiam
  • #16 6903300
    Shel
    Poziom 27  
    flapo213 napisał:
    Ok
    powiedz jak widzisz resztę, czy ty przewidujesz jakąś wizualizację pomiarów czy tylko regulacja.


    Na razie brak wizualizacji - sama regulacja, potem dorbię coś na 7-ledowym segmęcie.

    flapo213 napisał:
    Jaki stopień oprogramowania Cię interesuje, co dokładnie potrzebujesz z oprogramowania.


    Jak się pobiera dane wejściowe, a potem przetwarza z użyciem wewnętrznego przetwornika ADC?
    Chodzi mi o przykładowy kod programu...
  • #17 6903645
    loocasm
    Poziom 15  
    Ee nie dam rady tego narysować, ale chodziło mi o coś takiego, żeby rezystor 1K z Twojego schematu flapo213 i 470K przenieść na kanał nieodwracający, a wejście odwracające było połączone z minusem termopary a także ze środkiem dzielnika napięciowego z dwóch R nadającym pożądany wejściowy offset (taka sztuczna masa - jeden R do masy, drugi do Vcc).
    Jeśli to nie ma sensu to przepraszam, możliwe, że się zamotałem...

    Ale teraz tak sobie myślę, że mało który wzmacniacz operacyjny działa przy napięciu zasilającym 5V...
    Poza tym chyba nie to jest teraz dla autora wątku najważniejsze...
  • #18 6903922
    flapo213
    Poziom 21  
    Kolego shel preparuję dla Ciebie przykładzik, bądź cierpliwy (zamieszczę Ci krótki programik tzn. pliki main.c, adc.h, adc.c . Zobaczysz co i jak. Postaram się na jutro wieczór wrzucić coś przetestowanego.

    Ps. Kolego loocasm wiem wiem o co chodzi dzisiaj wymyśliłem schemacik z TL431 który będzie również temperaturowo robił korekcję tej sztucznej masy ale muszę to jakoś przetestować.

    Pozdrawiam
  • #19 6907166
    flapo213
    Poziom 21  
    Witam.

    Zamieszczam obsługę przetwornika ADC w Atmegach - osobiście przetestowałem to z atmegą 16 i 32 śmiga.

    W mainie zamieszczona konfiguracja oraz przykład jak odczytać wartość.

    Nap. ref. 5V.

    Pozdrawiam
  • #20 6908436
    Shel
    Poziom 27  
    Dzięki kolego flapo213, ale chyba muszę jeszcze posiedzieć, ponieważ wydawało mi się to prostsze, a po twoim kodzie widzę, że to jest bardziej wymagające, chociaż dalej myślę, że można napisać to dużo prościej.
    Jak tylko osiągnę jakieś postępy od razu się pochwalę, a w między czasie czekam jeszcze może ktoś poda inne przykłady?
  • #21 6908867
    loocasm
    Poziom 15  
    Kolego Shel, kolega flapo213 zrobił to może "skomplikowanie", ale za to bardzo dokładnie, wręcz wzorowo. Tak przygotowane funkcje mogą służyć już zawsze, kiedy tylko będzie potrzeba korzystać z ADC w Atmedze.
    Jeśli nie chce Ci się analizować wszystkich funkcji, możesz ustawić tryb pracy przetwornika AD samemu w kilku linijkach.
    Generalnie chodzi o to, by najpierw ustawić odpowiednio rejestr ADMUX, następnie rejestr ADCSRA, na końcu ustawiając w nim bit odpowiedzialny za start przetwornika. To co trzeba w tych dwóch rejestrach ustawić zależy od tego, czego potrzebujesz. Wszystko jest moim zdaniem bardzo przystępnie opisane w datasheecie.

    Przykład:
    ADMUX |= _BV(REFS1);
    ADMUX |= _BV(REFS0);	// Vref wewn. 2,56V
    ADMUX |= _BV(ADLAR); 	// wyrownanie wynikow do lewej (dla pracy 8-bitowej)
    
    ADCSRA |= _BV(ADFR); // free running
    ADCSRA |= _BV(ADPS0);	// preskaler 2 (najszybsze przetwarzanie AD)
    
    ADCSRA |= _BV(ADEN);	// Zezwolenie na konwersje
    
    ADCSRA |= _BV(ADSC); // start przetwarzania
    
    // to co ponizej - juz w petli glownej programu
    if (bit_is_set(ADCSRA, ADIF))
    {wynik = ADCH;} // odczyt wartosci z przetwornika

    W taki sposób ustawiłem to co opisałem w komentarzach, bo w tamtym akurat przypadku zależało mi na szybkim przetwarzaniu próbek.
  • #22 6909066
    flapo213
    Poziom 21  
    Nie no jasne że można to prościej zrobić, ja poprostu pomyślałem że chcesz gotowca bo to co masz w mainie poza konwersją do stringa śmiga jak najpoprawniej może generuję nieco kodu więcej ale robię to raz i za pół roku nie muszę sięgać po raz kolejny do pdf-a. Swoją drogą to co tam jest jest tak jak podaje pdf. Jakby co pytajcie. Jak możecie przetestujcie to co tam nawypociłem się sprawdźcie może jakieś sugestie itd. pozdrawiam

    Ps. Ja bym raczej preferował zamiast ADMUX |= _BV(REFS1); używać ADMUX |= (1<<REFS1); dlatego że to w innym kompilatorze przy innym procu będzie nie zrozumiałe.
  • #23 6909234
    loocasm
    Poziom 15  
    Nie no jasne, ja się wcale nie upieram, że to najlepsza i jedyna słuszna metoda, podałem tylko przykład "z życia wzięty", który działa.
    Co do innego procka i innego kompilatora to pewnie i nazwy zdefiniowanych stałych będą inne więc... :)

    A utworzenie funkcji, które pozwolą nie sięgać do datasheetu w przyszłości jest przecież jak najbardziej porządnym podejściem do sprawy, byleby tylko obsługa tychże funkcji była na tyle intuicyjna, by nie musieć po miesiącu zaglądać do ich deklaracji... Bo wyjdzie na to samo co z datasheetem..;)

    Pozdrawiam
  • #24 6910093
    flapo213
    Poziom 21  
    Kolego loocasm czekamy na odpowiedź Shel-a co i jak, czy zmontował schemat.
  • #25 6911542
    Shel
    Poziom 27  
    flapo213 napisał:
    Shel-a co i jak, czy zmontował schemat.


    Na razie widzę to tak, po konwersji potencjału z termopary (po przejściu uprzednio przez wzmacniacz) zapali się albo jedna albo druga dioda zależnie od zadeklarowanego progu temperaturowego:
    Atmega8 i termopara - jak to obsłużyć?
  • #26 6912460
    flapo213
    Poziom 21  
    Prawie dobrze, ale obwód ADC przy nap. ref. zmień dodaj dławik tak jak jest w nocie ATMEGI. Ja jak potestuję to co obiecałem to będzie tym można również badać ujemne temperatury, narazie zmontuj to tak jak jest na schemacie i spróbuj odpalić. Pozdrawiam
  • #28 6913090
    Dr_DEAD
    Poziom 28  
    A myślałeś już coś nad pomiarem temperatury zimnego końca termopary?
  • #29 6913149
    nojmi
    Poziom 20  
    Kolega Shel myślał może o kompensacji wpływu zimnego końca termopary? Od temperatury pomierzonej należy odjąć temperaturę zimnego końca termopary inaczej wprowadzasz dodatkowy błąd pomiarowy zależny od temperatury otoczenia - chyba, że zimne końce masz umieszczone w ściśle zadanej temperaturze (termostacie).
    Na marginesie ze Swojej strony polecam układ MAX6675 tylko,że jest on przeznaczony (z Twojej strony niestety) do termopary typu K:
    -temp do 1024*C,
    -rozdzielczość 0,25*C,
    -kompensacja zimnego końca,
    -interfejs SPI.

    *heh Dr_DEAD mnie wyprzedził - nie odświeżysz strony i...
  • #30 6913228
    flapo213
    Poziom 21  
    OK tak chodziło o ten schmat. Połącz dokładnie tak jak tam jest narysowane. W sprawie kompensacji to na później zostawimy sobie. Narazie odpal jak jest
REKLAMA