PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Temperatur berechnen per NTC 10k Ohm am ADC Kontrolle Wasserkühlung



Lordcyber
01.11.2018, 10:27
Hallo,
ich bin so langsam am verzweifeln.
Ich will per Atmega mehrer 10k NTC auslesen.
Warum gerade dieser Sensor, ich weiß 18B20 wäre einfacher.
Aber es kommen 3 dieser Sensoren rein:
https://www.aquatuning.de/wasserkuehlung/ueberwachung/sensor-temperatur/7367/phobya-temperatursensor-innen/aussengewinde-g1/4?c=391

Da diese direkt in den Kreislauf können.

Aktuell Arbeite ich mit dem Atmega 328 wird aber später ein 256.
Da ich es erst mal irgendwie ans laufen bekommen will.
Testaufbau ist ein Arduino UNO mit DFF ROBOT LCD KEYPAD SHIELD.
ADC auslesen klappt schon mal wunderbar.
Nur wie bekomme ich eine Temperatur Wert da raus:

Aktuellen Code hab ich mal angehängt. Ich hab ihn so gut wie möglich Dokumentiert. Das man auch den momentane Aufbau der Schaltung nachverfolgen kann.
Ich hoffe Ihr könnt mir weiter Helfen.



'Programm zum Ansteuern des Arduino Uno mit DF ROBOT LCD Keypad Shield
'Erweitert um NTC 10 KOhm Sensor.


'---------- Atmega -----------------------------------------------------

'Controller: Original ATMega328
'Quarz: 16MHz


'---------- LCD -----------------------------------------------------

'Belegung LCD:
'Backlight - PB2
'DB4 - PD4
'DB5 - PD5
'DB6 - PD6
'DB7 - PD7
'RS - PB0
'E - PB1


'---------- Tastatur -----------------------------------------------------

'Belegung Tasten:
'Über Widerstandsnetzwerk an PC0 (ADC0)

'keine Taste gedrückt: 1023 - Abfrage auf ADC > 1000
'Select: 739 - Abfrage auf ADC < 790
'Links: 503 - Abfrage auf ADC < 555
'Unten: 327 - Abfrage auf ADC < 380
'Oben: 143 - Abfrage auf ADC < 195
'Rechtst: 0 - Abfrage auf ADC < 50


'---------- NTC -----------------------------------------------------

'Temperatur Messung:
'NTC 10K an PC1 (ADC1)
'NTC ueber 10K Wiederstand an VCC 5V

' VCC--10k---|-----NTC-----GND
' |
' PC1


'V_a Spannung am Messeingang
'T_0 Nenntemperatur des NTC-Widerstands in K
'R_0 Nennwiderstand des NTC-Sensors in Ohm
'B Materialkonstante B
'Rv Vorwiderstand in Ohm
'Rn Widerstand des NTC-Sensors temperaturabhängig


'---------- Konfiguration Atmega -----------------------------------------------------

$regfile = "m328pdef.dat"
$crystal = 16000000
$hwstack = 100
$swstack = 100
$framesize = 100


'---------- LCD -----------------------------------------------------

Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , _
Db7 = Portd.7 , E = Portb.1 , Rs = Portb.0
Config Lcd = 16 * 2
Cursor Off Noblink
Cls


'---------- ADC Port C --------------------------------------------------------

Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc


'---------- Beleuchtung LCD ---------------------------------------------------

Config Portb.2 = Output 'PinB.2 als Ausgang für das LCD Backlight
PortB.2 = 1


'---------- Variablen -----------------------------------------------------

Dim Wert_von_tastatur As Word 'aktueller ADC-Wert
Dim Wert_von_NTC As Word 'aktueller ADC-Wert
Dim Rn As Single , Merke_1 As Single , Temp As Single


'---------- Konstanten --------------------------------------------------------
Const Rv = 10000
Const R_0 = 10000
Const B = 3900 '3528



'---------- Hauptprogramm -----------------------------------------------------

do
Wert_von_NTC = Getadc(1) 'adc-Wert einlesen
Wert_von_tastatur = Getadc(0) 'adc-Wert einlesen
locate 1,1
lcd "ADC0"
locate 1,10
lcd "ADC1"
Gosub Berechnung

locate 2,10 'Ausgabe Wert ADC 1
lcd "" ; Temp

locate 2,1 'Ausgabe Wert ADC 0
lcd Wert_von_tastatur ;"


'locate 2,10 'Ausgabe Wert ADC 1
'lcd Wert_von_NTC ;"

waitms 600
locate 2,1
lcd " "







loop
end

'---------- Sub Berechnung -----------------------------------------------------
Berechnung:
Temp = Wert_von_NTC * Rv
Wert_von_NTC = 1024 - Wert_von_NTC
Temp = Temp / Wert_von_NTC
Temp = Temp / R_0
Temp = Log(temp)
Temp = Temp * 298
Temp = Temp + B
Temp = B / Temp
Temp = Temp * 298
Temp = Temp - 273


return





Aktueller Aufbau der Testschaltung:
33732

Moppi
01.11.2018, 16:47
http://blog.fh-kaernten.at/ingmarsretro/tag/temperaturmessung-mit-arduino/
http://do2jmg.eu/temperatur-messen-mit-dem-arduino/

http://forum.arduino.cc/index.php?topic=155733.0
http://forum.arduino.cc/index.php?topic=155733.msg1168213#msg1168213
http://forum.arduino.cc/index.php?topic=155733.msg1170722#msg1170722

MfG
Moppi

oberallgeier
01.11.2018, 17:27
H.. per Atmega mehrer 10k NTC .. ADC auslesen klappt schon mal wunderbar. Nur wie bekomme ich eine Temperatur Wert da raus ..Möglichkeit 1 (von vielen):
Datenblatt des NTC nehmen, aus Deiner Schaltung den möglichen Spannungshub ausrechnen, zum Spannungshub des ADC ins Verhältnis setzen durch einfach Umrechnung auf ein gewünschtes Temperaturformat.
Möglichkeit 2 (so mache ich es beim Motorcontroller für zwei 60Watt-Motörchen in meinem archie):
Bei Regelungen - oder Alarmen - braucht man den Controller garnicht mit in eine Umrechnungsmühle zu zwängen, wenn man nicht unbedingt den tatsächlichen Temperaturwert anzeigen möchte/muss/soll. Ich schaue mir das Diagramm ADC-Werte-gegen-Temperaturensprechungen an und übersetze meine Schalt- oder Reaktionswerte in ADC-Digits. Mit den entsprechenden ADC-Messergebissen kann ich nun prima den Controller zu den Reaktionen bringen die er machen soll, ohne dass er lange rumrechnet. Wenn der ADC dann noch im free-runnig-Mode (mit Interrupt) ist erfolgt die Temperatur-Auswertung sozusagen nebenher.