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

Atmega8 i KTY 81/210 - Pomiar temperatury KTY 81/210

Damian7546 06 Kwi 2015 14:10 3039 29
  • #1 06 Kwi 2015 14:10
    Damian7546
    Poziom 21  

    Witam.

    Od jakiegoś czasu zacząłem uczyć się programować ATmega8. Chciałbym teraz zrobić pomiar ADC - pomiar temperatury na czujniku KTY 81/210.

    Z dokumentacji czujnika wyczytałem takie informacje jak na rysunku niżej:

    Atmega8 i KTY 81/210 - Pomiar temperatury KTY 81/210

    Czy wystarczy bezpośrednio wpiąć KTY do atmegi?

    0 29
  • Elmark
  • #2 06 Kwi 2015 14:30
    dondu
    Moderator Mikrokontrolery Projektowanie

    To czujnik wymagający, by przez niego płynął stały prąd. Dlatego musisz dla niego stworzyć źródło prądowe - możesz to zrobić za pomocą innego pinu z PWM i dodać filtr RC, albo zastosować zewnętrzne źródło mp: http://mikrokontrolery.blogspot.com/2011/03/Regulator-napiecia-jako-zrodlo-pradowe.html

    Jeżeli natomiast potrzebujesz bardzo dokładnych pomiarów, to niezbędne będzie źródło prądowe 1mA na wzmacniaczu operacyjnym.

    Samo podłączenie do ADC będzie zależne od tego, jaki układ zastosujesz.

    0
  • #3 06 Kwi 2015 14:59
    Damian7546
    Poziom 21  

    To w takim razie pewnie zrezygnuje z tego czujnika i poszukam czegoś prostszego.
    Nie potrzebuje dokładnych pomiarów, mogą być co 2 stopnie C.

    Dodano po 17 [minuty]:

    Czyli używając LM317 układ wyglądał by następująco :

    Atmega8 i KTY 81/210 - Pomiar temperatury KTY 81/210
    ?
    Bo nie za bardzo to czuję ...

    0
  • #4 06 Kwi 2015 20:01
    dondu
    Moderator Mikrokontrolery Projektowanie

    Dobrze czujesz, tylko prąd za duży - zobacz jaki jest sugerowany w tym czujniku (chyba 1mA - sprawdź w dokumentacji), ale weź pod uwagę, że LM317 ma chyba sugerowany nie mniej niż 3mA - sprawdź to. Im mniejszy tym lepiej, bo nie wpływa na właściwości czujnika przez co na wynik pomiaru.

    0
  • #5 07 Kwi 2015 18:48
    Damian7546
    Poziom 21  

    Czyli rezystor 5k szeregowo z czujnikiem KTY wystarczy?

    0
  • #6 07 Kwi 2015 19:04
    dondu
    Moderator Mikrokontrolery Projektowanie

    Masz na myśli jakiś dodatkowy rezystor?
    Jeśli tak, to nie trzeba żadnego dodatkowego rezystora, wręcz nie powinno go tam być.

    Chodziło mi o to, abyś dobrał prąd LM317 zgodnie z tym co napisałem powyżej.

    0
  • #7 07 Kwi 2015 21:14
    Damian7546
    Poziom 21  

    Hmm to ciężko mi będzie wymyślić jak ograniczyć prąd nie używając rezystora , myślałem nad czymś takim :

    Atmega8 i KTY 81/210 - Pomiar temperatury KTY 81/210

    0
  • #8 07 Kwi 2015 21:19
    dondu
    Moderator Mikrokontrolery Projektowanie

    Gdy napisałem, że dobrze czujesz, to miałem na myśli to, że schemat z postu #3 jest prawidłowy.
    Masz po prostu dobrać tak rezystor R1, by spełniał to o czym napisałem w poście #4.
    Czy teraz wszystko jest już jasne?

    0
  • #9 07 Kwi 2015 21:27
    Damian7546
    Poziom 21  

    No właśnie, przekombinowałem:/ czyli 1.25V / 1mA = 1.25kohm. W takim razie rezystor R1 o wartości rezystancji 1k25 powinien być w porządku ?

    0
  • Elmark
  • #10 07 Kwi 2015 21:29
    dondu
    Moderator Mikrokontrolery Projektowanie

    Oj, przeczytaj jeszcze raz mój post #4 i weź pod uwagę to, co napisałem o minimalnym prądzie LM317.

    0
  • #11 07 Kwi 2015 21:52
    Damian7546
    Poziom 21  

    Skoro na rezystorze R1 jest utrzymywane napięcie referencyjne 1.25V to aby prąd na LM317 byl 3mA to 1.25/0.003= 416 ohm, w takim razie rezystor około 400 ohm ? A co teraz z tym czujnikiem temperatury ?

    0
  • Pomocny post
    #12 08 Kwi 2015 01:47
    dondu
    Moderator Mikrokontrolery Projektowanie

    Nic - masz już gotowy układ pomiarowy :)
    Reszta w jego dokumentacji.

    0
  • #13 08 Kwi 2015 21:08
    Damian7546
    Poziom 21  

    Ok, stworzyłem coś takiego:

    Schemat:
    Atmega8 i KTY 81/210 - Pomiar temperatury KTY 81/210


    Kod w C:

    Kod: c
    Zaloguj się, aby zobaczyć kod



    Póki co nie działa :) , pytanie czy to dobry tok myślenia ?, jeśli nie to może jakaś podpowiedź ?

    0
  • Pomocny post
    #14 08 Kwi 2015 21:12
    dondu
    Moderator Mikrokontrolery Projektowanie

    Oj, AREF do masy?
    Czytaj: http://mikrokontrolery.blogspot.com/2011/03/avr-adc-podlaczenie.html

    Pierwsze uwagi do programu (tak na szybko):

    Zastanów się co znajduje się w rejestrze ADMUX po wykonaniu tych dwóch instrukcji w tej kolejności:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Podobnie tutaj:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    co będzie w ADSCRA?

    Jesteś pewien, że ustawiłeś kanał ADC0 na pinie PC0?

    Gdzie pętla główna?

    0
  • #15 08 Kwi 2015 21:30
    Damian7546
    Poziom 21  

    dondu napisał:


    No tak AREF do masy przez kondensator ma być (100nF),

    dondu napisał:
    Jesteś pewien, że ustawiłeś kanał ADC0 na pinie PC0?

    No racja, ustawiłem PC1, już zmieniam komentarz

    dondu napisał:
    Gdzie pętla główna?


    A pętla główna while(1) jest w głównej funkcji main().



    Jeśli chodzi o pozostałą część kodu to jeszcze go przemyśle

    0
  • #16 08 Kwi 2015 21:37
    dondu
    Moderator Mikrokontrolery Projektowanie

    Pętla główna - źle popatrzyłem :)

    0
  • #17 08 Kwi 2015 21:42
    Damian7546
    Poziom 21  

    dondu napisał:
    Zastanów się co znajduje się w rejestrze ADMUX po wykonaniu tych dwóch instrukcji w tej kolejności:
    Kod C - [rozwiń]zaznacz wszystko
    ADMUX = (1 << REFS0) | (1 << REFS1) ; // Napięcie odniesienia ADC, Vref 2.56V
    ADMUX = (1<<MUX0); // kanał ADC PC0


    Chodzi o to żeby zamiast "=" wrzucić "|=" to wtedy po przejsciu tych dwóch instrukcji będzie ADMUX = 0xC1 ... i podobnie dla rejestru ADCSRA?

    0
  • #18 08 Kwi 2015 21:43
    dondu
    Moderator Mikrokontrolery Projektowanie

    To dobry kierunek, tylko zmieniaj "z głową nie na pałę" :)

    0
  • #19 12 Kwi 2015 13:53
    Damian7546
    Poziom 21  

    Kod: c
    Zaloguj się, aby zobaczyć kod



    Teraz powinno być oK ?

    Jeszcze mam pytanie odnośnie taktowania procesora? Wystarczy wewnętrzny oscylator 8MHz ? Czy mogą być z nim problemy przy odczycie ADC ?- bo coś nie działa...

    0
  • #20 12 Kwi 2015 14:21
    dondu
    Moderator Mikrokontrolery Projektowanie

    Generalnie program wygląda na OK, choć oczywiście można go uporządkować nieco, ale to nieistotne na razie.

    Czasy konwersji (pojedynczy pomiar) są określone:

    Cytat:
    Conversion Time(4) (Free Running Conversion) min 13 - max 260 μs

    Note:
    ...
    4. Maximum conversion time is 1/50kHz × 25 = 0.5ms


    Dodatkowo określa to tabela: ADC Conversion Time
    gdzie znajdziesz informacje ile cykli taktujących ADC składa się na pojedynczy pomiar.

    W zależności od ustawionego taktowania musisz tak dostosować preskaler ADC, by znając ilość cykli potrzebnych na pomiar (tab. ADC Conversion Time), mieścić się w przedziałach czasowych, które podałem na początku niniejszego postu.

    Co znaczy, że nie działa? Czego się spodziewałeś, a co jest?
    Czy zmierzyłeś napięcie na wejściu ADC dla temperatury pokojowej - jakie jest?
    Zmierz także napięcie na pinie AREF - tak na wszelki wypadek.

    Zamiast rezystora możesz wstawić potencjometr, by testować program.

    0
  • #21 12 Kwi 2015 14:58
    Damian7546
    Poziom 21  

    Na wejściu ADC1(PC1) mam 3.24V, natomiast na AREF 2.57V .

    0
  • #22 12 Kwi 2015 15:10
    dondu
    Moderator Mikrokontrolery Projektowanie

    I jaki z tego wniosek wyciągnąłeś?

    Odpowiadaj proszę na wszystkie zadawane pytnia

    0
  • #23 12 Kwi 2015 18:22
    Damian7546
    Poziom 21  

    Wniosek taki ze na wejściu Adc powinienem mieć napięcie z zakresu 0-2.56, czy nie?

    0
  • #24 12 Kwi 2015 18:42
    dondu
    Moderator Mikrokontrolery Projektowanie

    Wniosek właściwy, ale musisz zaglądnąć do tabelek rezystancji czujnika vs temperatura i sprawdzić, jaka maksymalnie rezystancja wystąpi w Twoim przypadku (ty wiesz do jakich temperatur będziesz mierzył i na tej podstawie i prądu 3mA (który ustawiłeś) obliczyć maksymalne napięcie jakie będziesz miał na wejściu ADC. Sprawdź i napisz jak to zrobiłeś i co ustaliłeś.

    Dopiero na tej podstawie dobierasz napięcie odniesienia.

    0
  • #25 13 Kwi 2015 19:24
    Damian7546
    Poziom 21  

    No to tak:
    Mam zamiar mierzyć temperatury z zakresu 0 - 100 ° C.

    Według noty katalogowyj KTY81-210:

    0° C - 1630Ω
    100° C - 3392Ω

    Więc maksymalne napięcie jakie pojawić mi się może na ADC to U=3mA * 3392Ω = 10.176V - nie przejdzie :)

    W takim razie mam zrobić dzielnik napięcia na max 2.56 V ?

    0
  • #26 14 Kwi 2015 12:21
    Damian7546
    Poziom 21  

    Skoro więc wychodzi mi takie napięcie to zrobiłem taki dzielnik:
    Atmega8 i KTY 81/210 - Pomiar temperatury KTY 81/210

    To ma sens ?

    0
  • #27 14 Kwi 2015 16:43
    dondu
    Moderator Mikrokontrolery Projektowanie

    Dla takich zakresów temperatur tak jak obliczyłeś powinieneś w jakiś sposób obniżyć mierzone napięcie. Możesz to zrobić dzielnikiem rezystorowym lub wzmacniaczami operacyjnymi.

    Wzmacniacze operacyjne to najlepsze rozwiązanie, ale mocno skomplikuje Twój projekt.
    Dzielnik rezystorowy to najprostsze rozwiązanie, ale ma pewne wady:
    - jeśli rezystory w dzielniku, będą zbyt małe będą negatywnie wpływać na wynik pomiaru, ponieważ powodują dodatkowy upływ prądu,
    - jeśli będą zbyt duże, mogą mieć wpływ na wolniejsze ładowanie i rozładowywanie się pinu pomiarowego ADC mikrokontrolera, więc mogą powodować w przypadku szybkich (w czasie) zmian temperatury i zbyt dużej częstotliwości pomiarów zwiększenie błędu pomiaru.

    W zależności od tego powinieneś więc dzielnik odpowiednio dobrać, bo tylko Ty znasz szczegóły swojego projektu.

    0
  • #28 14 Kwi 2015 17:32
    Damian7546
    Poziom 21  

    Czas tu nie ma znaczenia - mogą to być opźnienia nawet 2 min :) Czy dzielnik jaki zrobiłem w poprzednim poście jest w porzadku ?

    0
  • Pomocny post
    #29 14 Kwi 2015 17:41
    dondu
    Moderator Mikrokontrolery Projektowanie

    Dzielnik tak, wartości - raczej nie.
    Zasymuluj sobie ten układ np. w http://www.falstad.com/circuit/
    lub dokonaj obliczeń.

    Zauważ, że źródło prądowe 3mA w przypadku 100°C będzie miało do pokonania dwa połączone równolegle rezystory zwierające do GND:
    - pierwszy to KTY-81 o wartości 3392Ω
    - drugi to rezystor wypadkowy z dzielnika, czyli 5,4kΩ

    Czy to według Ciebie wpłynie na wyniki pomiaru?
    Jakie będzie w tym przypadku napięcie na pinie ADC, a jakie powinno być?


    Edit:
    Należy jeszcze zwrócić uwagę na fakt, że dla temperatury maksymalnej 100°C, którą wybrałeś, będziesz potrzebował źródła zasilania o odpowiednio dużym napięciu, bo LM317 wprowadza spadek napięcia (około 1,5V - patrz wykres Dropout Voltage) + spadek napięcia na rezystorze ograniczającym prąd.

    czyli Uzasialnia ≧ 10.176V + 1,5V + 1,25V ≈ 12,926V

    1
  • #30 03 Lip 2015 13:12
    Damian7546
    Poziom 21  

    Problem rozwiązany :)

    0