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

Pomiar temperatur ujemnych LM35DZ

Paweł Frąckowiak 30 Lis 2010 18:28 4685 28
  • #1 8809485
    Paweł Frąckowiak
    Poziom 11  
    Witam serdecznie!

    Mam stosunkowo krótkie pytanie, otóż chciałbym się dowiedzieć jak zmusić układ LM35DZ do pomiaru temperatur ujemnych w przypadku kiedy nie posiadam ujemnego napięcia zasilania?
    W nocie katalogowej LMa jest jakaś opcja z dwiema diodami do masy, ale akurat takowych diod nie posiadam i zastanawiam się czym by je moznabyło zastąpić.

    Pozdrawiam!
  • #2 8809549
    Konto nie istnieje
    Poziom 1  
  • #3 8809599
    Paweł Frąckowiak
    Poziom 11  
    Takie jeszcze jedno pytanie, otóż tam jest na rysunku przedstawione, że napięcie (to napięcie proporcjonalne do temperatury) należy mierzyć przed diodami, a to oznacza konieczność podłączenia tego do czegoś...

    Jeśli mógłby ktoś mi choć w paincie narysować jak taki układ z tymi diodami podłączyć do uC.

    Z góry dzięki!!!
  • #4 8809758
    Konto nie istnieje
    Poziom 1  
  • #5 8809797
    omicronNs
    Poziom 21  
    Chcesz mierzyć temperaturę a nie wiesz jak podłączyć czujnik do procesora. Jak Ty napiszesz program, który będzie interpretował sygnał z czujnika, skoro z tego co widać, nie rozumiesz koncepcji pomiaru z tymi diodami? Poza tym, w paincie nie rysuje się schematów.
  • #6 8810185
    Paweł Frąckowiak
    Poziom 11  
    atom1477 napisał:
    Z diod pod jedno ADC, z LMa na drugie ADC.


    Dzięki za odpowiedz!!!

    Rozumiem, że potem należy odjąć od siebie te wartości i wyjdzie pożądana wartość napięcia odpowiadająca temperaturze.

    Co do wypowiedzi omicronNs to wiem na jakiej zasadzie działa pomiar temp, ale nigdy nie używałem LM35, a już tym bardziej w takiej konfiguracji więc pytam.
  • #7 8810334
    Konto nie istnieje
    Poziom 1  
  • #8 8810402
    galusz
    Poziom 15  
    Wy w ogóle wiecie po co te diody?
    https://www.elektroda.pl/rtvforum/topic135232.html
    Diody dają spadek napięcia ok. 2*0.6V=1.2V czyli LM w stosunku do normalnej masy będzie zasilany napięciem ujemnym o różnicy 1.2V Od cała filozofia.

    Cytat:
    Z diod pod jedno ADC, z LMa na drugie ADC.

    W życiu. Na tych diodach dostaniesz stale napięcie 1.2V więc po co je mierzyć?

    Tak to podłącz i będzie dobrze...
    Pomiar temperatur ujemnych LM35DZ
  • #9 8810544
    Paweł Frąckowiak
    Poziom 11  
    galusz jesli tak podłącze jak proponujesz to muszę uwzględnić te 1,2V spadku i je odjąć od wyniku czy tak podłączony układ można programować jak LM35 bez opcji pomiaru temperatur ujemnych?

    Zaznaczam, że pytam bo nigdy do tej pory nie bawiłem się czymś takim LM i nie posiadam w tej kwestii żadnego doświadczenia.
  • #10 8810610
    Konto nie istnieje
    Poziom 1  
  • #11 8810636
    galusz
    Poziom 15  
    Tak oczywiście w programie musisz to uwzględnić...

    V OUT
    =+1,500 mV at +150°C
    = +250 mV at +25°C
    = −550 mV at −55°C

    Jednakże w naszym wypadku musimy do tych wartości dodać 1.2V (musisz dokładnie zmierzyć) czyli :
    dla 0°C powinieneś mieć 1.2V
    dla -55°C powinno być 0.65V

    Dokładnie to już sam musisz przetestować..

    Dodano po 5 [minuty]:

    @atom1477
    Ok przyznaje, diody też można mierzyć, celem korekty temperaturowej.

    Natomiast z tego co pamiętam to większy błąd posiada sam LM niż zmiany przewodzenia diod.
    Bynajmniej temat rozpracowany :)
  • #12 8810689
    Konto nie istnieje
    Poziom 1  
  • #13 8810726
    galusz
    Poziom 15  
    Raczej 0.4mV, czyli 4%. Poza tym diody raczej nie będą pracowały w tak wielkich zakresach jak czujnik...

    Nawet 4% można zawsze można kompensować...
  • #14 8810747
    Konto nie istnieje
    Poziom 1  
  • #15 8811531
    mgiro
    Poziom 22  
    W dokumentacji wszystko jest
  • #16 8811786
    krzemowy
    Poziom 19  
    Cytat:
    Typically, silicon diodes have approximately −2 mV/˚C temperature coefficient at room temperature.

    źródło cytatu

    Mnie uczyli(?) jeszcze inaczej, że współczynnik temperaturowy diody krzemowej jest jak wyżej.
  • #17 8812136
    Konto nie istnieje
    Poziom 1  
  • #18 8839994
    Paweł Frąckowiak
    Poziom 11  
    Witam ponownie!

    Sądziłem, że już sobie poradzę ale coś mi nie gra w programie. Nie wprowadziłem jeszcze modyfikacji mających na celu pomiar temp ujemnych bo najpierw chciałem mieć pewność, ze dobrze mierze te dodanie i tu zonk.

    Otóż podłączyłem wszystko jak sądzę dobrze, jeśli tak nie jest to proszę o korekty:

    korzystam z napięcia odniesienia wewnątrz procka więc nóżkę Vref podłączyłem przez kondensator do masy. Zasilanie całości z 3,3V (LM35 też tym zasilam i pomiar napięcia wyjściowego za pomocą miernika zgodny ze wskazaniem termometru na ścianie więc to raczej nie jest źródłem problemu). Zasilanie również przez kondensator do masy (gdzieś wyczytałem, że tak należy uczynić).

    Problem polega na tym, że wynik na LCD wyrzucam bez jakichkolwiek przeliczeń napięcia na temp czyli jak nic moim oczom powinna się ukazać wartość 230 (mV w sumie), a tu jak na złość pokazuje się wartość 23. Dlaczego tak się dzieje? Co robię źle? Zaznaczam że na mierniku widzę 230mV.

    Poniżej zamieszczam kod który to obsługuje:

    inicjalizacja:
    
    void init_adc()
    {
    	DDRC &= ~_BV(PC0);
    	PORTC &= ~_BV(PC0);
    
    	ADMUX &= ~_BV(MUX0);
    	ADMUX &= ~_BV(MUX1);
    	ADMUX &= ~_BV(MUX2);
    	ADMUX &= ~_BV(MUX3);
    
    	ADMUX |= _BV(REFS0);
    	ADMUX |= _BV(REFS1);
    	
    	ADMUX |= _BV(ADLAR);
    	ADCSRA |= _BV(ADPS1);
    	ADCSRA |= _BV(ADPS2);
    	ADCSRA |= _BV(ADEN);
    }
    


    pomiar:

    
    double pomiar_adc()
    {
    	ADCSRA |= _BV(ADSC);
    	
    	while ( bit_is_set(ADCSRA, ADSC) )
    	{
    	}
    	
    	double wynik = ADCH;
    	
    	return wynik;
    	
    }
    


    a tym to wyświetlam:
    
    void wyswietl_temp(double pomiar)
    {
    	char temp[5];
    
    	itoa(pomiar, temp, 10);
    
    	LCD_GoTo(9,0);
    	if ( pomiar < 10 )
    	{
    		LCD_WriteText("0");
    		LCD_WriteText(temp);
    		LCD_WriteText(" st");
    	}
    	else
    	{
    		LCD_WriteText(temp);
    		LCD_WriteText(" st");
    	}
    }
    


    Jeśli ktoś miałby jakieś sugestie to będę zobowiązany!
  • #19 8840159
    Konto nie istnieje
    Poziom 1  
  • #20 8840213
    Paweł Frąckowiak
    Poziom 11  
    właśnie do tego doszedłem :-)
    Chodzi o to ze to trzeba przeliczyć względem napięcia odniesienia i rozdzielczości przetwornika.

    Tak mnie tylko zastanawia to co mi wyświetlał, czyli te nieszczęsne 23, to była ilość poziomów kwantyzacji sygnału?

    Druga sprawa to jak zwiększyć dokładność wskazań do jednego miejsca po przecinku poza oczywistą zmianą itoa() na sprintf()?
  • #21 8840426
    Konto nie istnieje
    Poziom 1  
  • #22 8840618
    Paweł Frąckowiak
    Poziom 11  
    atom1477 serdeczne dzięki za zainteresowanie!
    udało mi się wreszcie pomierzyć temp dodatnie więc zabrałem się za ujemne.

    galusz napisał:
    Cytat:

    Tak oczywiście w programie musisz to uwzględnić...

    V OUT
    =+1,500 mV at +150°C
    = +250 mV at +25°C
    = −550 mV at −55°C

    Jednakże w naszym wypadku musimy do tych wartości dodać 1.2V (musisz dokładnie zmierzyć) czyli :
    dla 0°C powinieneś mieć 1.2V
    dla -55°C powinno być 0.65V

    Dokładnie to już sam musisz przetestować..


    i jak napisał tak uczyniłem czyli kod uległ zmianie i teraz wygląda tak:
    
    double pomiar_adc()
    {
    	ADCSRA |= _BV(ADSC);
    	
    	// czekamy, aż zakończy się konwersja
    	while ( bit_is_set(ADCSRA, ADSC) )
    	{
    	}
    	
    	double wynik = ( ADCH * (2640/256) ) + 970;	
    	
    	return (wynik/10);
    


    dodaje te 970 bo tyle mV mam spadku napięcia na dwóch diodach prostowniczych podłączonych szeregowo do masy, niestety wyświetlane wyniki w żaden sposób nie maja się do rzeczywistości.

    Prosiłbym o nakierowanie na błąd w rozumowaniu.

    Z góry dzięki i pozdrawiam!
  • #23 8841138
    Konto nie istnieje
    Poziom 1  
  • #24 8842498
    Paweł Frąckowiak
    Poziom 11  
    a że się tak tylko zapytam, jakie znaczenie i do czego służy ten rezystor 18k przedstawiony na schemacie podanym przez galusza bo w sumie jego nie zastosowałem.

    Pozdrawiam!
  • #25 8842659
    Konto nie istnieje
    Poziom 1  
  • #26 8842687
    piotrva
    VIP Zasłużony dla elektroda
    dodam, że wersje z literką "D" po nazwie nie mierzą temp. ujemnych.
  • #27 8842734
    Dar.El
    Poziom 41  
    Witam
    Producent nie gwarantuje poprawnego pomiaru ujemnych temperatur dla LM35D, ale wcale to nie znaczy że tak będzie. Nie spotkałem się jeszcze z problemem pomiaru ujemnych temperatur dla wersji D.
  • #28 8843545
    piotrva
    VIP Zasłużony dla elektroda
    cóż, szczerze nigdy nie sprawdzałem, ale z tego co wiem od kolegów z forum, to lm35d wogóle nie schodził poniżej 0mV względem jego masy...
    ale rzecz jest warta sprawdzenia, bo mam zarówno LM35DZ jak i LM35CAZ
  • #29 8882134
    Paweł Frąckowiak
    Poziom 11  
    Sprawdziłem w nocie katalogowej i faktycznie LM35DZ nie mierzy temp ujemnych więc nabyłem sobie LM35CZ i ten według noty mierzyć powinien.

    Podłączyłem sobie lm-a jak nota nakazuje przez dwie diody do masy, wyjście podłączyłem przez rezystor 20k do masy (w nocie jest napisane ze powinien to być 18k, ale takim nie dysponuje więc użyłem najbliższego tym 18k jaki miałem).

    Testy w temp powyżej zera wykazały, że wszystko powinno grać bo na wyświetlaczu wyświetlana była temp dokładnie taka jak na termometrze pokojowym, niestety po wywaleniu LMa za okno (temp ok -3 do -4 stopni) niestety na wyświetlaczu wyświetlana była temp 3 do 4 stopni na plusie. Nie bardzo wiem co może być nie tak. Poniżej zamieszczam kod, może w nim coś namieszałem

    
    int pomiar_adc()
    {
    	ADCSRA |= _BV(ADSC);
    	while ( bit_is_set(ADCSRA, ADSC) )
    	{
    	}
    	
    	int wynik = ( ADCH * (2630/256) ) - 1200;
    	
    	return (wynik/10);
    }
    


    Z góry dzięki za pomoc!!!
REKLAMA