werde ich mal ausrechnen - Suche aber erst noch den Rechenfehler. In Excel hat das so schön funktioniert...
Was du da rausbekommst ist die Teilspannung eines Widerstandsteilers. Du solltest dir mal die Mühe machen. die Teilspannung für einzelne Stützpunkte auszurechnen, dann siehst du den Zusammenhang zwischen Teilspannung und Temperatur.
Gruß
Detlef
werde ich mal ausrechnen - Suche aber erst noch den Rechenfehler. In Excel hat das so schön funktioniert...
Fehler gefunden!
Hatte eine Klammer in der Rechnung nicht beachtet![]()
Wie kann ich die Zahl auf eine Kommastelle begrenzen?
Temp: 24.83618164°C
Also dass funktioniert nicht: Print "Temp: " ; Temp , "###.#" ; "°C"
Code:$regfile = "m8def.dat" 'AT-Mega8 $crystal = 1000000 'Quarz: 1 MHz $baud = 2400 'Baudrate der UART: 2400 Baud '=============================================================================== ' Variablen '=============================================================================== Dim Result As Word Dim Ohm As Single Dim Temp1 As Single 'wegen den negativen Zahlen!!! Dim Temp2 As Single Dim Temp3 As Single Dim Temp As Single Config Portc = Input Config Adc = Single , Prescaler = Auto , Reference = Avcc Start Adc '------------------------------------------------------------------------------- 'Programm: '------------------------------------------------------------------------------- Do Result = Getadc(1) Ohm = 2.0238 * Result 'Temp = 3730 / (Log(ohm) + 5.59017600439636) Temp1 = Log(ohm) Temp2 = Temp1 + 5.59017600439636 Temp3 = 3730 / Temp2 Temp = Temp3 - 273 Print "Result: " ; Result Print "ohm: " ; Ohm Print "Temp1: " ; Temp1 Print "Temp2: " ; Temp2 Print "Temp3: " ; Temp3 Print "Temp: " ; Temp , "###.#" ; "°C" Wait 1 Loop End
Das Formatieren macht man in Bascom mit Fusing:
Fusing(Temp, "###.#")
Gruß
Detlef
Aber wie bekomme ich dann noch den text davor und dahinter?
Print "Temp: " ; Temp ; "°C"
Es hagelt Fehlermeldungen.
Print Fusing "Temp: " ;(temp , "#.&" ) ; "°C"
Print "Temp: " ; Fusing(temp , "###.#" ) ; "°C"
Gruß
Detlef
Vielen Dank für die schnellen und guten Antworten!
Die Temperaturmessung ist nun fertig!!!
Danke, Tobias
Kontrolliere mal den Fehler der Temperaturmessung indem du in 5 °C Schritten aus dem Datenblatt die Widerstandswerte einsetzt und dann die Teilspannung am ADC berechnest. Ich bin ziemlich sicher, dass du da mit einem großen Fehler rechnen musst, es sei denn, du beschränkst dich auf normale Raumtemperaturen.
Gruß
Detlef
Hallo,
mich hatte interessiert, auf welche Genauigkeit man mit einem so nichtlinearen Element wie einem NTC kommen kann.
Als Beispiel habe ich die Schaltung von TobiasBlome genommen:
Ein NTC von +5 V an den ADC-Eingang des AVR und von dort ein Widerstand von 1 kOhm nach Masse.
Die Berechnung erfolgte in Excel:
1. Spalte: Die Isttemperatur in °C
2. Spalte: Der Faktor Widerstand NTC bei Temperatur zu Widerstand bei 25 °C
3. Spalte: Berechneter NTC-Widerstand in Ohm
4. Spalte: Der Teilungsfaktor des Widerstandsteilers am ADC-Eingang
5. Spalte: Teilungsfaktor * Maximalwert des ADC (1023) = Ergebnis des ADC
6. Spalte: Ergebnis aus ADC - Offset
7. Spalte: Ergebnis 7. Spalte * Faktor in °C
8. Spalte: 7. Spalte - 1. Spalte = Linearitätsfehler in °C
Offset und Faktor habe ich für den Bereich 0 °C bis 35 °C optimiert, für andere Bereiche müssen die Werte angepasst werden.
Aus der Tabelle und dem Diagramm ist zu sehen, dass der Linearitätsfehler im Bereich 0 bis 35 °C bei max. +/-0,4 °C liegt.
Bei 0 °C bis 50 °C würde der Fehler einer optimierten Korrektur schon bei +/-1 °C liegen.
Ergebnis:
Für die Berechnung der Temperatur ist kein Logarithmus erforderlich. Die Anpassung erfolgt durch einfache Addition und Multiplikation.
Gruß
Detlef
Edit:
Was ich bei der Berechnung nicht berücksichtigt habe, ist die Eigenerwärmung des NTC. Sie beträgt bei der verwendeten Schaltung bei 25 °C schon fast 1 °C!
Mögliche Abhilfe:
Verwendung eines hochohmigeren NTSs, der aufgrund des niedrigeren Stromes auch eine geringere Verlustleistung und damit Erwärmung hat.
Hallo,
da hast du vollkommen recht: Es wäre sinnvoller gewesen einen 10k NTC zu benutzen(den NTC hab ich so ohne nachzudenken gekauft-zum testen). Ich möchte meinen PC-Gehäuselüfter damit regeln - also 20-50?!°C. Deswegen muss er nicht sooo genau sein. Im Datenblatt steht folgendes:
Max. power at 25 °C = P25 = 450mW
Resistance tolerance = DR/RN = +/-5%/+/-10%
Rated temperature = TN = 25°C
B value tolerance = DB/B = +/-3%
Zur Eigenerwärmung:
bei 50°C habe muss der NTC 0,034W vernichten, ich denke das geht
bei 70°C sind das aber schon 0,089W und
bei100°C sind das schooooon 0,264W! Das ist zuviel!!!
ausserdem ist das ein Spannungsteiler und da hat der Kohleschichtwiderstand bei 1k schon +/-50Ohm!
-> bei 25°C sind das 2,56V bzw. 2,44V und das sind ja auch schon wieder 2-3°C? Unterschied - also könnte man überlegen ob man statt dem Kohleschichtwiderstand ein Trimmer einbaut und den mit einem Messgerät "eicht" oder vielleicht die Temperatur an ein anderes Termometer angleicht?!
Wenn man eine genaue Temperatur benötigt sollte man lieber fertige Sensoren nutzen bei denen der Messwert schon digital ausgegeben wird z.B. den DS18S20 -> kostet ca. 7 Euro das Stück
Soviel dazu.
Hat einer eine Idee wie ich nun mit dem Single Wert den Lüfter ein und aus schalte?
Ich möchte das über PWM machen und da brauche ich glaub ich einen Wert zwischen 0-254 (0%-100%)
If Temp => 25 Then
PWM = 50
If Temp => 30 Then
PWM = 100
IF PWM => 35 Then
PWM = 150
...
End
Das sieht umständlich aus und der Lüfter wird warscheinlich hoch und runter "eiern" oder?
Wie würdet ihr das machen?
Tobias
P.S. wie hast du denn die Bilder hineinbekommen?
Lesezeichen