Temperaturermittlung von NTC-Thermistoren

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Temperaturermittlung von NTC-Thermistoren

      Hallo in die Runde,
      vor einigen Jahren habe ich mit der Software "Appomatox" ein Toolgenutzt, um mit Bascom aus einem ermittelten Widerstandswert die Temperatur einesNTC-Thermistors zu bestimmen.
      Bei der Suche nach einer äquivalenten Software bin ich auf die Steinhart-Hart-Gleichunggestoßen, mit der man m. M. wesentlich genauer die Beziehung vonTemperatur<>Widerstand darstellen kann.
      Hat man die erforderlichen Parameter, die ggf. bereits im Datenblatt vorhandensind oder mit entsprechender Unterstützung (z. B. Excel) ermittelt, kann aus einemermittelten Widerstandswert die Temperatur bestimmt werden.

      Die Formel zur Berechnung ist etwas "kompliziert" und mich würde an dieser Stelleinteressieren, ob bereits jemand diese in Bascom umgesetzt und welcheErfahrungen damit gesammelt werden konnten.
      Vielen Dank im Voraus!

      Gruß Ingolf<img src="" d:\!_test="" (kein="" backup)\!-löschbar\sh-gleichung.jpg""="">
      SH-Gleichung.jpg
    • Danke für den Hinweis, da ich die Seite bisher nicht kannte.

      Dort werden zur Berechnung 4 Parameter "angezogen", wobei ich bereits recherchiert habe, dass der eine bedeutungslos sein soll.
      Bei der Ermittlung der Parameterwerte hat einer den Wert Null, was ggf. die Bedeutungslosigkeit erklärt.
      Wenn die Parameter nicht - wie dort erwähnt - in den Datenblättern angegeben sind, ist eine Ermittlung über drei
      bekannte Wertepaare möglich.

      Wer mehr zur "Steinhart-Hart-Gleichung" erfahren möchte, kann dem beigefügten Link folgen:
      https://de.wikipedia.org/wiki/Steinhart-Hart-Gleichung
    • Kennst du denn die Werte für A, B und R?

      Ich würde das über eine Tabelle machen, da die Heißleiter i.d.R. nicht linear sind.

      Noch einfacher gehts mit einem PT 100 / PT1000.
      Die sind fast linear und die Widerstände für den Temperaturbereich sind im Datenblatt angegeben.

      Wenns aber partu der NTC sein soll, würde ich die Tabelle nehmen und an mehreren Eckpunkten messen.

      Wie sieht denn deine Schaltung aus?
    • Zunächst dachte ich, dass es kompliziert sein wird, die Parameter A-C zu ermitteln, die für die Berechung der Temperatur bei einem gemessenen Widerstandswert erforderlich sind.
      Manche Hersteller (Vishay) geben sie in Übersichten an, aber es gibt auch kleine Tools, mit denen sie sich aus drei bekannten Wertepaaren schnell ermitteln lassen.
      Ich habe mich für ein Excelblatt der Fa. Beckhoff entschieden, was man als ZIP-Datei downloaden kann:
      infosys.beckhoff.com/index.php…ml&id=8237041910046223450

      PTn kenne ich, möchte aber die preiswerteren NTC einsetzen und auf die Genauigkeit kommt es nicht so sehr an.
      Die Schaltung besteht aus einem Kondensator und einem bekannten Vergleichswiderstand. Mit den Werten für die Entladezeiten lässt sich der aktuelle Widerstandswert des NTC ermitteln. Den kann man in die Gleichung einsetzen und erhält als Ergebnis die Temperatur, was alles funktioniert.
      Allerdings habe ich bei der Umsetzung der erforderlichen Gleichung nach Bascom bei den ersten Programmzeilen gesehen, dass der Log-Befehl mit Single-Variablen relativ viel Programmspeicher belegt.

      Daher meine Frage nach Erfahrungen beim Einsatz der Steinhart-Hart-Gleichung bei den MC bzw. der Anwendung des Log-Befehls.
    • Pluto25 schrieb:

      Mit wie viel zusätzlicher Hardware?
      Nach der Schaltung habe ich bereits gefragt. Amatronik hat die Frage aber völlig ignoriert.

      Amatronik schrieb:

      "Chat GPT" erwähnte sie und machte mich darauf neugierig.
      Wieso fragst du nicht ChatGPT nach einem Codebeispiel für die Umsetzung in Basom?

      Meist kommt da schon was recht brauchbares raus. Man muss nur noch wenig ändern, dass es funktioniert.
    • write me a bascom-program for a temperature program using the Steinhart-Hart-Gleichung
      —-

      ChatGPT:
      Certainly! Below is a simple example of a BASCOM program for measuring temperature using the Steinhart-Hart equation. This example assumes you're using a sensor like a thermistor, and you'll need to replace the placeholders with your actual hardware details.



      Written by ChatGPT:

      BASCOM-Quellcode

      1. $regfile = "m328pdef.dat" ' Use the appropriate chip definition file for your microcontroller
      2. $crystal = 16000000 ' Set the crystal frequency
      3. ' Define ADC parameters
      4. $baud = 9600 ' Set the baud rate
      5. $hwstack = 64 ' Set the hardware stack size
      6. $swstack = 64 ' Set the software stack size
      7. $framesize = 64 ' Set the frame size
      8. ' Define pin and variable for temperature sensor
      9. Dim SensorPin As Byte
      10. Dim RawValue As Word
      11. Dim Temperature As Single
      12. ' Subroutine to read temperature from the sensor
      13. Sub ReadTemperature()
      14. ADCin SensorPin, RawValue ' Read raw ADC value from the sensor
      15. Temperature = 1 / ((0.001125308 + (0.000234711 * Log(RawValue / 1024) + (0.000000085 * Log(RawValue / 1024) ^ 3)))) - 273.15 ' Steinhart-Hart equation
      16. End Sub
      17. ' Main program
      18. Start:
      19. SensorPin = 0 ' Replace with the appropriate ADC pin for your setup
      20. Do
      21. ReadTemperature() ' Read temperature
      22. Print "Temperature: "; Temperature; " °C" ' Display temperature
      23. Waitms 1000 ' Wait for 1 second
      24. Loop
      25. End.
      Alles anzeigen


      Please note that you may need to adjust the sensor pin and other parameters based on your specific hardware setup. Also, make sure that the Steinhart-Hart equation coefficients in the equation are suitable for your thermistor characteristics.
    • Hallo,
      Frage nach der Schaltung ignoriert - eher nicht richtig gelesen ... ;)
      Ich schrieb bereits:

      Die Schaltung besteht aus einem Kondensator und einem bekannten Vergleichswiderstand. Mit den Werten für die Entladezeiten lässt sich der aktuelle Widerstandswert des NTC ermitteln ...

      Bei halber Betriebsspannung schaltet ein LM311 und löst einen Interrupt aus, der die Zeitzählung (Entladung) anhält. Je nachdem, wie der Timer programmiert ist, erhält man einen Wert für die Berechnung des Widerstandes.
      Außer, man verwendet einen LM311 aus China. Stundenlang habe ich nach der Fehlerursache gesucht, bis der OPV als Quelle entdeckt wurde. Irgendwie funktioniert die ganze gelieferte Charge nicht :(
      Oder man schaut in die Zeitschrift Funkamateur 06/2007 Seite 625, die u. a. aktuell auf eine Grafikanzeige, optionaler Einsatz von DS18B20 und SMD-Technik geändert wird.
      Wenn mehr Interesse besteht, hänge ich die Schaltung dran, tut aber nichts zu meiner Frage nach einer optimalen programmtechnischen Umsetzung und ggf. Erfahrungen.

      Was ChatGPT an Programmcode erzeugt, kann nur als Grundgerüst verwendet werden. Mir geht es eher um eine speicherplatzoptimierte Codierung bei Einsatz des Befehls "Log" in der Steinhart-Hart-Gleichung.
      Frag mal ChatGPT nach einem kleinen Kreuzworträtsel, der Anzahl der Beine der Mitwirkenden bei einem Fußballspiel oder der Wortanzahl der Anfrage, wird man mit interessanten Ergebnissen überrascht.
      Für mich schwer vorstellbar ist bei den Antworten der KI-Einsatz bei selbstfahrenden Pkw.
    • Amatronik schrieb:

      speicherplatzoptimierte Codierung bei Einsatz des Befehls "Log"
      Sorry wenn das jetzt nach Getrolle klingt aber eine Single Berechnung und dann auch noch log hat nichts mit "Optimiert" zu tun. Es ist generelle ein platzverschwenderische zeitraubende und ungenaue Methode.
      Ob das ungenau da noch auffällt liegt daran wie präzise die Erfassung und der Sensor (sein b-Wert) ist.
      Wenns denn doch sein muß sollte Stephans Formel soweit umgestellt werden das keine großen Differenzen bei den Singles auftreten. Da z.B bei 1 + 0,00000085 = 1 und nicht 1,00000085 als Ergebniss kommt.
      PS Sollte der interne AC nicht mit dem 311 gleichwertig sein?
      Welche Auflösung wird erreicht? Gameport machen das ähnlich mit 6? 7? bit Auflösung?
    • Pluto25 schrieb:

      Stephans Formel
      ChatGPTs Formel... ;)


      Amatronik:
      Frag mal ChatGPT nach ... der Anzahl der Beine der Mitwirkenden bei einem Fußballspiel
      -----------
      Ich:
      Wie ist die Anzahl der Beine der Mitwirkenden bei einem Fußballspiel?
      ——-----
      ChatGPT:
      In einem regulären Fußballspiel hat jede Mannschaft elf Spieler auf dem Spielfeld. Daher hat eine Mannschaft insgesamt 11 Spieler x 2 Mannschaften = 22 Spieler auf dem Spielfeld. Jeder dieser Spieler hat zwei Beine, also wäre die Gesamtanzahl der Beine der Mitwirkenden in einem Fußballspiel 22 Spieler x 2 Beine = 44 Beine.



      (Bei der Frage nach der Anzahl der Wörter der letzten Anfrage darfst Du nur auf Englisch fragen, da ChatGPT eine deutsche Frage erst ins englische übersetzt und dann die Anzahl der englischen Frage speichert.)
      (Für eine grafische Ausgabe eines Kreuzworträtsels ist ChatGPT nicht gebaut, da musst Du für ein Kreuzworträtsel schon mit Tricks arbeiten - und wieder berücksichtigen, dass Deutsch nicht die Stärke von ChatGPT ist)
    • Man müsste mal testen, wie sich der interne AC verhält; eigentlich sollte die Schaltung damit ebenfalls funktionieren, auch wenn zwei AVR-Eingänge erforderlich sind, oder?
      Beim LM311 handelt es sich um einen Hochgeschwindigkeits-Differentialkomparator.


      Die Formel kann in der angegebenen Form von Bascom eh nicht verarbeitet werden. Sie muss gesplittet werden, sonst meckert der Compiler.
      Dies irgendwie speicheroptimiert zu programmieren ist eigentlich mein Anliegen, vielleicht per ASM?.Beim Einsatz des Befehls "Log" wird man wohl mit den "Nebenwirkungen" leben müssen.
      Ich denke mal, dass die Formel gegenüber dem Einsatz eines Datenfeldes bereits einen großen Vorteil bedeutet.
    • BASCOM does not accept such complex formulas. Please write the formula line by line.
      ---
      ChatGPT:
      Certainly! Here's a simplified version of the Steinhart-Hart equation in BASCOM, broken down line by line:


      Quellcode

      1. $regfile = "m328pdef.dat"
      2. $crystal = 16000000
      3. $baud = 9600
      4. Dim adc_value As Word
      5. Dim resistance As Single
      6. Dim temperature As Single
      7. Do
      8. ' Read analog temperature sensor value
      9. Adc10 = 5 ' Use the internal reference voltage (5V)
      10. Adc Channel = 0 ' Connect the temperature sensor to Analog Pin 0
      11. Adc Conversion ' Start the conversion
      12. Waitms 10 ' Wait for conversion to complete
      13. adc_value = Adc Read( Channel )
      14. ' Convert analog value to resistance
      15. resistance = (1024 / adc_value) - 1
      16. resistance = 10000 / resistance
      17. ' Calculate temperature using Steinhart-Hart equation
      18. temperature = resistance / 10000 ' R/R0
      19. temperature = Log(temperature) ' ln(R/R0)
      20. temperature = temperature / 3950 ' 1/B
      21. temperature = temperature + (1 / 298.15) ' + 1/T0
      22. temperature = 1 / temperature ' Invert
      23. temperature = temperature - 273.15 ' Convert to Celsius
      24. ' Display temperature in degrees Celsius
      25. Print "Temperature: "; Round(temperature, 2); " °C"
      26. Waitms 1000 ' Wait for a second before reading temperature again
      27. Loop
      Alles anzeigen

      This version breaks down the Steinhart-Hart equation into individual steps that are compatible with the BASCOM language. Adjust the code according to your microcontroller and sensor specifications.

      =======================================================
      Ich:
      please don't use ln or log in the formula
      ----
      ChatGPT:
      Certainly, I can provide an alternative implementation without using the logarithmic functions. Here's a version of the Steinhart-Hart equation without ln or log:


      BASCOM-Quellcode

      1. $regfile = "m328pdef.dat"
      2. $crystal = 16000000
      3. $baud = 9600
      4. Dim adc_value As Word
      5. Dim resistance As Single
      6. Dim temperature As Single
      7. Do
      8. ' Read analog temperature sensor value
      9. Adc10 = 5 ' Use the internal reference voltage (5V)
      10. Adc Channel = 0 ' Connect the temperature sensor to Analog Pin 0
      11. Adc Conversion ' Start the conversion
      12. Waitms 10 ' Wait for conversion to complete
      13. adc_value = Adc Read( Channel )
      14. ' Convert analog value to resistance
      15. resistance = (1024 / adc_value) - 1
      16. resistance = 10000 / resistance
      17. ' Calculate temperature using Steinhart-Hart equation
      18. temperature = resistance / 10000 ' R/R0
      19. temperature = temperature * temperature ' (R/R0)^2
      20. temperature = temperature * temperature ' (R/R0)^4
      21. temperature = temperature * 1.18E-5 ' a4
      22. temperature = temperature + (temperature * temperature * 2.37E-5) ' + a3 * (R/R0)^2
      23. temperature = temperature + 1.39E-3 ' + a2 * (R/R0)
      24. temperature = temperature + 2.18E-2 ' + a1
      25. temperature = temperature + 1.31E-1 ' + a0
      26. temperature = 1 / temperature ' Invert
      27. temperature = temperature - 273.15 ' Convert to Celsius
      28. ' Display temperature in degrees Celsius
      29. Print "Temperature: "; Round(temperature, 2); " °C"
      30. Waitms 1000 ' Wait for a second before reading temperature again
      31. Loop
      Alles anzeigen
      This version uses a series of multiplication and addition operations to approximate the Steinhart-Hart equation without explicitly using logarithmic functions. Adjust the coefficients based on your sensor's specifications.

      =====================


      Genug gespielt...... ;)
    • Amatronik schrieb:

      auch wenn zwei AVR-Eingänge erforderlich sind, oder?
      Nicht zwingend. Der AC kann die interne Ubg zum Vergleich ziehen und auf den Icp wirken für den Timer.
      Der selbe Pin könnte auch zum Laden genutzt werden.
      Das Datenfeld muß ja nicht 1024 Word groß sein :D Ein paar Eckpunkte (alle 10°? - besser auf den Bäuchen der Linerarabweichung) sollten die Genauigkeit des Eingangs übertreffen können.
      Welcher Temperaturbereich soll abgedeckt werden?
    • mein ChatGPT (übrigens auf Deutsch und ohne Anmeldung verwendbar) spuckt dann doch etwas andere Informationen aus als bei Stefan.

      Interessant ist es dennoch und gleichzeitig kurios!

      Das folgende tut jetzt nichts zur Sache, ist aber troßdem mal ein Spaß!

      Ich habe deshab aus Spaß folgende Frage gestellt:
      Eine Biene hat ein gebrochenes Bein und bekam daher einen Gips. Darf sie nun damit Fliegen oder gibt es ein Gesetzt, was den Flug verbietet? Vielleicht wegen Gefährdung von anderen Bienen? Gibt es hier Unterschiede in den verschiedenen Ländern bezüglich Flugerlaubis?

      Und hier die Antwort:
      ChatGPT
      Bienen haben keine Knochen, daher ist es unwahrscheinlich, dass eine Biene ein
      gebrochenes Bein hat und einen Gips benötigt. Bienen haben ein inneres
      Skelett, das aus einer harten Chitinschicht besteht.
      Da Bienen normalerweise fliegen können, sobald sie aus der Puppenphase schlüpfen, wäre es für eine Biene mit einem gebrochenen Bein sehr schwierig, zu fliegen. Es könnte sie in ihrer Mobilität einschränken und das Fliegen beeinträchtigen.
      Es gibt jedoch keine spezifischen Gesetze, die den Flug von Bienen mit gebrochenen Beinen verbieten. In den meisten Ländern gibt es keine konkreten Vorschriften für den Flug von Bienen, da ihre Mobilität normalerweise nicht eingeschränkt ist. Die Gefährdung von anderen Bienen wäre eher gering, da Bienen kollektiv agieren und Verletzte normalerweise von ihren Artgenossen unterstützt werden.
      Es ist wichtig anzumerken, dass dies allgemeine Informationen sind und
      es natürlich möglich ist, dass es bestimmte lokale Vorschriften oder
      Empfehlungen gibt, die den Flug von verletzten Bienen regeln. Es wäre
      ratsam, sich bei lokalen Imkerverbänden oder Bienenexperten über
      spezifische Regeln oder Richtlinien in verschiedenen Ländern zu
      informieren.

      Nach Schildern für Bienen hab ich jetzt nicht gefragt :thumbsup:
    • Auch der Code ist so nicht unter Bascom lauffähig, jedoch
      konnte ich die zweite Berechnung auf 1/8 Flash verringern: a_22_9ac28a82
      Print "Temperature: -266,66°C"
      Da kommt unabhängig von Eingangswert nie was anderes raus :cursing:

      Die Antwort der Bienen ist auch nicht besser. Die haben ein Außen (nicht Innen)Skelett und können sich auch ein Bein brechen, eher jedoch einen Bänderriss. Unklar ob und wie gut das verheilt. Mir fehlt immer noch eine Methode sie (Verletzungsfrei) zu kennzeichnen.

      Der erste Code spukt scheinbar brauchbare "Schätzungen" aus. Von -77 bis 390° die von -40 - 150° stimmen können. Vorwiderstand? Konstantstromquelle?
      Unsinnig zwei Kommastellen an zu zeigen bei 0,1K minimale Auflösung.
      Zumal das Print Fusing ca so viele Takte verballert wie die Berechnung selbst.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Pluto25 ()

    • Pluto25 schrieb:

      Mir fehlt immer noch eine Methode sie (Verletzungsfrei) zu kennzeichnen.
      Kleiner Farbklecks auf den Rücken mit ungiftiger Farbe?

      Pluto25 schrieb:

      Der erste Code spukt scheinbar brauchbare "Schätzungen" aus. Von -77 bis 390° die von -40 - 150° stimmen können.
      Mit Double gerechnet? Da sind doch einige Stellen nach dem Komma.

      Pluto25 schrieb:

      Vorwiderstand? Konstantstromquelle?
      Das wurde ja schon beantwortet. Siehe Post #11.
    • Mitch64 schrieb:

      Das wurde ja schon beantwortet. Siehe Post #11.
      Ja er will das ja ganz anders aufnehmen. Würde ich die Werte kennen aus dehnen die Ki ihre Werte hat könnte ich die Richtigkeit prüfen. Die Steinhart gilt für den Widerstand? Der ist aber nicht gleich dem Adc-Wert.

      Ich habs um 30% beschleunigen können :S aber nur 10% Flash Ersparniss raus geholt :(

      Quellcode

      1. $regfile = "m328pdef.dat"
      2. $crystal = 16000000
      3. '$baud = 9600
      4. Dim Adc_value As Word
      5. Dim Tempi As Integer
      6. Dim Tempstr As String * 5
      7. Dim Resistance As Single
      8. Dim Temperature As Single
      9. Do
      10. Adc_value = Getadc(0)
      11. '( Convert analog value to resistance
      12. Resistance = 1024 / Adc_value
      13. Resistance = Resistance - 1
      14. resistance = 10000 / resistance
      15. ' Calculate temperature using Steinhart-Hart equation
      16. temperature = resistance / 10000 ' R/R0
      17. temperature = Log(temperature) ' ln(R/R0)
      18. Temperature = Temperature / 3950 ' 1/B
      19. Temperature = Temperature + 0.003354 ' + 1/T0
      20. temperature = 1 / temperature ' Invert
      21. Temperature = Temperature - 273.15 ' Convert to Celsius
      22. ' Display temperature in degrees Celsius
      23. Print "Temperature: " ; Fusing(temperature , "000.00") ; " °C"
      24. ')
      25. ' (
      26. Temperature = 1024 / Adc_value
      27. Temperature = Temperature - 1
      28. Temperature = 1 / Temperature
      29. Temperature = Log(temperature) ' ln(R/R0)
      30. temperature = temperature / 3950 ' 1/B
      31. Temperature = Temperature + 0.003354 ' + 1/T0
      32. Temperature = 100 / Temperature ' Invert
      33. Tempi = Temperature
      34. Tempi = Tempi - 27315 ' Convert to Celsius
      35. ' Display temperature in degrees Celsius
      36. Tempstr = Str(tempi)
      37. Print "Temperature: " ; Format(tempstr , "00.00") ; " °C"
      38. ' )
      39. Loop
      Alles anzeigen

      Mitch64 schrieb:

      Da sind doch einige Stellen nach dem Komma.
      Natürlich waren sie da, ich hab sie nur nicht aufgeschrieben.

      Mitch64 schrieb:

      Kleiner Farbklecks auf den Rücken
      Das gefiehl ihr so gar nicht. a_166_29aea317 Unklar ob sie ihn weggeputzt hatte, die anderen sie zerlegt haben oder sie einfach nur einen großen Bogen um mich macht ;)