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

pomiar temperatury za pomocą termistora

figa_miga 07 Sie 2010 17:19 3574 15
  • #1 07 Sie 2010 17:19
    figa_miga
    Poziom 19  

    Próbuje "tanim" kosztem uzyskać sensowny pomiar temperatury, w dodatku nie znam się dobrze na C

    1. Powiedzmy że błąd +/-3° w oknie 0-100° było by wartością do przyjęcia.

    2. Potrzebował bym możliwie dużą rozdzielczość, idealnie było by mieć 0,1° rozumiem że w przypadku megi32 i zwykłego dzielnika napięcia R=10k/NTC10k 0,2° jest realną sprawą.

    3. Całość ma być odporna na wymianę czujników- chodzi mi o ich łatwą kalibrację. (Czyli co, zakładając że parametry termistora są takie same to wystarczy że ewentualnie dodam offset do odczytu z ADC?)

    Czy pomiary lepiej tablicować czy liczyć?.
    Jeśli miał bym tablice to do umieszczenia było by 2kB (żeby nie komplikować zakładam że tablica będzie od 0 do 100st a wartość 98,2 to 982), pobranie wyniku było by proste i szybkie...

    Jeśli chodzi o liczenie to wysznupałem taki wzór Link

    Zdaje się że poniżej jest wg tego taki kod:

    Code:
    // calculate NTC resistance , 1023 = 10 bits ADC  10000 = pullup value 
    
    float fCalcNtc( float wADCVal ){
       float fRntc;
      fRntc = 10000 *  (float) wADCVal / ( 1023.0  - (float) wADCVal);
       return(fRntc);
    }
    // calc temperature from NTC value
    float fCalcTemp( float fRntc){
       float fTemp;
      fTemp = (1.0 / ( (log(fRntc/RREF))/BVALUE  + 1.0/298.0)) - 273.0; //log = ln
       return( fTemp);
    }


    Czego można się po takich wzorach spodziewać?
    U mnie na razie kod urusł o 5k, w temperaturze pokojowej mam 8° błędu no i liczka jest bez przecinku, choć to pewnie moja wina to float (fTemp) dzielę przez 10 i reszte z dzielenia wyświetlam...

    0 15
  • Katalog Megger
  • #2 07 Sie 2010 17:37
    tmf
    Moderator Mikrokontrolery Projektowanie

    Niestety termistory trzeba kalibrować. Uzyskanie rozdzielczości 0,1 stopnia jest zupełnie realne, podobnie jak dokładności 3%. Nawet jakiś miesiąc temu miałem podobny problem - korzystałem z termistora NTC stosowanego w ogrzewnictwie. Po stablicowaniu wyniki mam w granicach 3%. Tablica jest raczej krótka, wartości pośrednie interpoluje. Mozesz wrzucić wzór, ale jak zauważyłeś dołączy to całe libm - pare kB. Niestety kalibracja to nie tylko offset ze względu na nieliniowość samego wzoru.

    0
  • Katalog Megger
  • #3 07 Sie 2010 17:47
    atom1477
    Poziom 43  

    Użyj diody 1N4148. Nie dość że tańsze to jeszcze prostsze w kalibracji i bardziej liniowe. Możliwe że nawet nie będzie wymagało kalibracji przy wymianie czujnika (ale wstępnej kalibracji to raczej będzie wymagało).

    0
  • #4 07 Sie 2010 19:21
    figa_miga
    Poziom 19  

    no tak, dioda była by ok, jednak nie obejdzie się bez dodatkowej elektroniki co jest dużym nimusem(ewentualne względy seryjnych produkcji). No i w ogóle nie mam miłych wspomnień z miernikami na diodzie.

    Termistor prostszy hardware'rowo, gorszy programowo. Z resztą dla atmegi chyba nie zaleca się dawać na ADC źródła o impedancji większej jak 10k więc jeszcze się łapie.

    Na interpolacje w C już w ogóle nie mam pomysłu, w ogóle to ile zbierałeś punktów i w jakim zakreie?
    Spróbuje ściągnąć krzywą tego termistora i zrobić tablice w exelu.

    0
  • #5 07 Sie 2010 21:02
    tmf
    Moderator Mikrokontrolery Projektowanie

    Wyliczałem dla 0 i 100 stopni, bo to najłatwiejsze. Dodatkowo porównywałem ze wskazaniami średniej z 6 DS18B20. Tablice liczyłem ze wzoru. Interpolacja liniowa pomiędzy punktami. Wyszło całkiem przyzwoicie. Co do impedancji źródła - to ma znaczenie tylko dla przebiegów zmiennych, w tym wypadku bez znaczenia.

    0
  • #6 07 Sie 2010 23:26
    janbernat
    Poziom 38  

    Może LM35- zawsze to 10mV/deg a nie 2mV jak z diody.
    LM35DZ 4-3zł w TME.

    0
  • #7 08 Sie 2010 00:12
    94075
    Użytkownik usunął konto  
  • #8 08 Sie 2010 11:12
    tmf
    Moderator Mikrokontrolery Projektowanie

    Oczywiście, słyszałeś o czymś takim jak oversampling dla zwiększenia rozdzielczości ADC?

    0
  • #9 08 Sie 2010 17:05
    janbernat
    Poziom 38  

    Po pierwsze- sam dzielnik rezystancyjny daje na wyjściu wartość napięcia nieliniowo zależną od wartości opornika w dzielniku.
    Po drugie- wykorzystamy tylko część zakresu 10 bitowego przetwornika z ATmegi- co znakomicie "poprawi" nam rozdzielczość.
    Po trzecie- ten rezystor też jest nieliniowy.
    Po czwarte- ATmega nie ma dodanego koprocesora - sprawdź ile pamięci zajmie liczenie logarytmu.
    Akurat o tym na forum niedawno było- 4486 bajtów programu i 280 RAM.

    0
  • #10 08 Sie 2010 19:51
    94075
    Użytkownik usunął konto  
  • #11 08 Sie 2010 20:14
    atom1477
    Poziom 43  

    Dlaczego mało realne? Chodzi o rozdzielczość a nie dokładność.

    0
  • #12 08 Sie 2010 22:37
    94075
    Użytkownik usunął konto  
  • #13 08 Sie 2010 22:47
    tmf
    Moderator Mikrokontrolery Projektowanie

    Znaczy co, twierdzisz, że np. inżynierowie Atmela nie wiedzą o czym piszą: "AVR121: Enhancing ADC resolution by oversampling".

    0
  • #14 08 Sie 2010 23:00
    94075
    Użytkownik usunął konto  
  • #15 08 Sie 2010 23:08
    tmf
    Moderator Mikrokontrolery Projektowanie

    Ale w tym wypadku jest - temperatura zmienia się na tyle wolno, że spadek częstotliwości samplowania nie ma znaczenia. Poza tym potrzebujemy tylko 1-2 dodatkowe bity. To się robi bez problemu. Jeśli uważasz inaczej to napisz konkretnie co masz w TYM wypadku przeciw oversamplingowi, a nie wysyłaj bezsensowne posty.

    0
  • #16 09 Sie 2010 00:44
    94075
    Użytkownik usunął konto