- LiFePO4 Speicher Test         
Ergebnis 1 bis 9 von 9

Thema: NTC Temperatursensor geht "in die falsche Richtung"

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.01.2012
    Beiträge
    132

    NTC Temperatursensor geht "in die falsche Richtung"

    Anzeige

    Praxistest und DIY Projekte
    Hallo zusammen

    Ich versuche momentan eine Temperaturmessung mit einem NTC zu machen. Mein Sensor ist der folgende:
    Honeywell 135-104LAG-J01. Weitere Infos zum Sensor gibts hier: http://sensing.honeywell.com/index.p...=1&pr_id=53807

    Ich habe mir dazu folgende Tabelle erstellt: (Anhang 1). DIe sollte soweit ja eigentlich stimmen.
    Hier ist nun mein Code mit dem ich das Ganze auf dem AVR (Atmega ausprobiere:

    Code:
    /*
     * Test_AD.c
     *
     * Created: 20.10.2013 21:36:29
     *  Author: Marius
     */ 
    
    
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #define F_CPU 8000000
    #include <util/delay.h>
    #include <string.h>
    #include <stdio.h>
    #define BAUD 9600
    #define MYUBRR F_CPU/16/BAUD-1
    
    #define UART_MAXSTRLEN 10
    
    volatile uint8_t uart_str_complete = 0;     // 1 .. String komplett empfangen
    volatile uint8_t uart_str_count = 0;
     unsigned char uart_string[UART_MAXSTRLEN + 1] = ""; //volatile!!!
    
    int adctbl [33]  = { 1016, 1008, 994, 969, 928, 867, 783, 681, 568,	456, 355, 271, 204, 152, 114, 86, 65, 49, 38, 29, 23, 18, 14, 
    	12, 9, 8, 6, 5, 4, 4, 3, 2, 1};
    	
    uint16_t temptbl [33] = { -60, -50,-40, -30, -20, -10, 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180,
    	190, 200, 210, 220, 230, 240, 270, 300 };
     
    void USART_Transmit(unsigned char data ){
    	/*
    	Wait for empty transmit buffer
    	*/
    	while
    	( !( UCSRA & (1<<UDRE)));
    	/*
    	Put data into buffer, sends the data
    	*/
    	UDR = data;
    }
    
    void USART_Init_Interrupt(unsigned int UBRR){
    	sei();
    	UBRRH = UBRR >> 8;
    	UBRRL = UBRR & 0xFF;
    	UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); // Asynchron 8N1
    	UCSRB |= (1<<RXEN)|(1<<TXEN)|(1<<RXCIE);  // UART RX, TX und RX Interrupt einschalten
    }
    
    uint16_t convertADCtoTemp(uint16_t adc){
    	int i=0;
    	while(!(adc <= adctbl[i] && adc >= adctbl[i+1])){
    		i++;
    	}
    	USART_Transmit(i);
    	return temptbl[i];
    }
    
    int main(void){
    	
    	USART_Init_Interrupt(MYUBRR);
    	
    	ADMUX=0b01000101; //int ref, Ergebnis in ADCH, Pin PC5
    	ADCSRA=0b10000101;
    	
    	while(1){
    		//int sample=0;
    		ADCSRA = ADCSRA | (1<<ADSC);  // single conversion mode ein
    		while(ADSC == 1);  // warten bis konvertierung abgeschlosen
    		
    		uint8_t theLowADC = ADCL;
    		uint16_t adc = ADCH<<8 | theLowADC;
    		
    		USART_Transmit((ADCH));	
    		USART_Transmit(theLowADC);
    		USART_Transmit(13);
    		_delay_ms(1000);
    		
    	}
    	
    	
    }
    Die Schaltung ist wie folgt: Aus dem NTC und einem 100kOhm Widerstand ist ein Spannungsteiler aufgebaut dessen Ausgang an PC5 des ATmgea geht. Der NTC geht gegen +5V und der feste Widerstand gegen GND.

    Wenn ich nun den NTC auf dem Board habe dann bekomme ich über UART einen Wert von 00000001 1111'0100 übermittelt, dies entspricht 500(dez). Laut der Tabelle die ich hochgeladen hat ergibt dies nun eine Temperatur zwischen 20 und 30 Grad Celsius. Dies stimmt soweit für mein Arbeitszimmer.
    Wenn ich nun eine Feuerzeugflamme nebendrann halte (ca. 1cm vom NTC entfernt) bekomme ich: 00000011 1101'0000, dies ergibt 976(Dez) was laut Tabelle einer Temperatur zwischen -50 bis -40 Grad entspricht, das kann ja nicht sein xD

    Produziere ich etwa mit der hohen Temperatur irgendwo einen Overflow?

    Wäre froh wenn ihr mir helfen könntet=) (BTW: Ich bin erfahren im Programmieren mit Java, mit C noch nicht so)

    Liebe Grüsse

    Thor_
    Angehängte Dateien Angehängte Dateien

  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    21.06.2011
    Ort
    Dresden
    Beiträge
    219
    Hi,
    NTC heisst negativer T-Koeefizient, d.h., der Widerstand nimmt mit steigender Temperatur ab, in deiner Schaltung ist er gegen +5V gelegt, d.h.,
    bei steigender Temperatur nimmt die Spannung zu, in deiner Tabelle ist's genau umgekehrt, dort sind höheren acdtbl die niedrigeren Temperaturen
    zugeordnet, vielleicht geht ja die Tabelle davon aus, dass der NTC gegen Masse geschalten ist.
    mfg
    Achim

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.01.2012
    Beiträge
    132
    Hi Achim

    Vielen Dank für deine Antwort!
    Heisst das, ich muss nur den NTC gegen GND schalten und den festen gegen 5V und dann ist gut?

    liebe Grüse

    Thor_

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Wie du in deiner Tabelle siehst, wird der ADC-Wert bei steigender Temperatur kleiner.
    Das geht nur wenn der NTC gegen GND geschaltet ist. Dann wird bei steigender Temperatur der Widerstand geringer und damit sinkt auch die Spannung am Spannungsteiler und damit am ADC-Eingang.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Zitat Zitat von Thor_ Beitrag anzeigen
    Die Schaltung ist wie folgt: Aus dem NTC und einem 100kOhm Widerstand ...
    Der Eingangswiderstand deines ADCs ist klein gegen deine Messanordnung. Der Gesamtwiderstand aus NTC und Vorwiderstand sollte kleiner als 10K sein. Genauere Angaben liefert das Datenblatt deines µCs. Du misst also im wesentlichen deinen ADC aus und nicht den NTC.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  6. #6
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Das mit dem 100k Widerstand hatte ich übersehen. Es lässt sich aber mit einem 10n Kondensator am ADC-Eingang leicht kompensieren. Die Spannungsänderung durch den NTC ist so langsam das die Zeitkonstante keine Rolle spielt.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  7. #7
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.685
    ... Der Gesamtwiderstand aus NTC und Vorwiderstand sollte kleiner als 10K sein ...
    Nur als Beispiel - so messe ich die (Board-) Temperatur mit NTC und mega328.

    ......Klicke auf die Grafik für eine größere Ansicht

Name:	ntc_MoCo2.png
Hits:	17
Größe:	10,7 KB
ID:	26845

    ......© robotikhardware
    Ciao sagt der JoeamBerg

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.01.2012
    Beiträge
    132
    Hallo zusammen

    Ich habe heute morgen nochmals ein bisschen daran rumgemacht und es eigentlich hinbekommen, einfach durch das Tauschen des NTC und des Widerstandes (NTC gegen Masse, nicht gegen +5V).

    Ich habe erst jetzt eure weiteren Antworten gesehen (vielen Dank!)
    Wenn der EIngangswiderstand zu gross ist heisst das aber ja eigentlich, dass ein 100kOhm NTC generell ungeeignet ist oder?

    Ich interessiere mich vor allem für den Bereich ab 120 Grad bis 300 Grad, darunter reicht mir im Allgemeinen die Information "noch zu kalt". Da bewegen wir uns im Widerstandswert um 12kOhm (für den NTC).
    Meint ihr das wäre OK? (ich würde dann den festwiderstand auch noch auswechseln gegen einen 10kOhm Widerstand, die Tabelle müsste ich nachher natürlich neu berechnen, aber das ist dank Excel ja kein Problem).

    Könntet ihr bitte noch kurz ausführen, was der Kondensator (parallel?) zu dem Festwiderstand bewirkt? Bin mir da nicht im Klaren.

    Liebe Grüsse

    Thor_

  9. #9
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Im ADC ist ein Kondensator von etwa 14p, der muss aufgeladen werden. Wenn der Quellwiderstand zu hoch ist, verfälscht das durch den Kondensator die Messspannung.
    Mit einem Kondensator parallel wird der Kleine von dem Großen geladen ohne die Messspannung wesentlich zu verändern.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

Ähnliche Themen

  1. Nibo2 - "falsche" Werte der Abstanzsensoren
    Von RenzaPeter im Forum Sonstige Roboter- und artverwandte Modelle
    Antworten: 12
    Letzter Beitrag: 14.03.2012, 15:19
  2. 74HC595-Bruder für "andere" Richtung
    Von Jaecko im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 3
    Letzter Beitrag: 15.09.2010, 15:58
  3. "Gehäuse" für DIP8 Temperatursensor DS1621
    Von Haveaniceday im Forum Sensoren / Sensorik
    Antworten: 9
    Letzter Beitrag: 15.02.2008, 13:54
  4. Motoren drehen in die falsche Richtung
    Von guest06 im Forum Asuro
    Antworten: 18
    Letzter Beitrag: 21.03.2007, 09:19
  5. avrdude - wie geht das vergleichbar dem "WriteAll"
    Von vajk im Forum C - Programmierung (GCC u.a.)
    Antworten: 9
    Letzter Beitrag: 08.10.2006, 23:41

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests