Forum: Compiler & IDEs NTC Softwarelinearisierung


von Alfred Q. (higedigdag)


Angehängte Dateien:

Lesenswert?

Hallo an alle!

Ich wollte mit einem avr die temp. mit einem ntc messen.
Die werte für eine Kennlinie sind vorhanden.

Ist es möglich das man z.b. mehrere geraden an die "krumme" Kennlinie 
des ntc anlegt und diese dann in dem jeweiligen Bereich zur Berechnung 
benutzt?

Hat jemand schon mal etwas in der Richtung gemacht?

Ich habe eine pdf als Beispiel gemacht.

Mir ist klar das diese Methode mit einem recht großen Fehler behaftet 
ist.
Aber es muss nicht so genau sein. Wollte das Problem halt per Software 
lösen.

Mfg Andy

von Karl H. (kbuchegg)


Lesenswert?

Andy H. wrote:
> Hallo an alle!
>
> Ich wollte mit einem avr die temp. mit einem ntc messen.
> Die werte für eine Kennlinie sind vorhanden.
>
> Ist es möglich das man z.b. mehrere geraden an die "krumme" Kennlinie
> des ntc anlegt und diese dann in dem jeweiligen Bereich zur Berechnung
> benutzt?

Möglich ist alles.
Im PDF wurde das ja anscheinend schon gemacht.
Es gibt 13 Geraden, die an die Kennlinie angelegt
wurden.

Berechne noch die Schnittpunkte von 2 aufeinanderfolgenden
Kennlinien, damit du eine Tabelle aufstellen kannst, ab wann
welche Geradengleichung gilt und dann sollte das eigentlich
schon gehen.

von Alfred Q. (higedigdag)


Lesenswert?

ja genau, das wollt ich noch machen...
hab nur gerade nich ganz so viel zeit weil ich noch für die klausuren 
lernen muss :(

wie hoch ist denn der rechenaufwand bei sowas?

von Karl H. (kbuchegg)


Lesenswert?

Andy H. wrote:
> ja genau, das wollt ich noch machen...
> hab nur gerade nich ganz so viel zeit weil ich noch für die klausuren
> lernen muss :(
>
> wie hoch ist denn der rechenaufwand bei sowas?

Trivial:

> Berechne noch die Schnittpunkte von 2 aufeinanderfolgenden
> Kennlinien,

Falls du nicht weist, wie das geht:

2 Geraden schneiden sich in einem Punkt (wenn sie nicht gerade
parallel sind)
Es gibt also einen Punkt Xs/Ys, der auf beiden Geraden liegen
muss (sonst wäre er ja kein Schnittpunkt)

Für diesen Punkt gilt logischerweise: er liegt auf Gerade 1.
Er erfüllt also die Gleichung

      Ys = m1 * Xs + n1

Aber derselbe Punkt muss logischerweise auch auf Gerade 2 liegen
Ere muss also auch die Gleichung

      Ys = m2 * Xs + n2

erfüllen

(m1, n1 sind die Koeffizienten der ersten Gerade
 m2, n2 sind die Koeffizienten der zweiten Gerade
 die hast du ja schon, sind im PDF angegeben)

Jetzt hast du aber 2 Gleichungen, mit 2 Unbekannten


      Ys = m1 * Xs + n1
      Ys = m2 * Xs + n2

(m1,n1,m2,n2 sind konstant; Xs, Ys sind die Unbekannten)

und das sollte sich doch lösen lassen.
zb durch Einsetzen von Ys aus Gleichung 1 in Gleichung 2

   m1 * Xs + n1 = m2 * Xs + n2

   m1  Xs - m2  Xs = n2 - n1

   Xs( m1 - m2 ) = n2 - n1

        n2 - n1
   Xs = -------
        m1 - m2


Das rechnest du dir mal für die Zahlenwerte von 2 Gleichgunen
konkret aus und setzt das in Gleichung 1 ein

    Ys = m1 * Xs + n1

und erhältst so den Widerstandswert an dem von Gleichung 1 auf
Gleichung 2 umgeschaltet werden muss.


von Karl H. (kbuchegg)


Lesenswert?

Nochwas: Die im PDF angegebenen Gleichungen sind Vorwärtsgleichungen
X ist die Temperatur, Y ist der Widerstandswert.

Du wirst das aber wahrscheinlich in die andere Richtung brauchen.
Gegeben Widerstandswert, gesucht Temperatur.

oder mathematisch ausgedrückt:
Die Gleichung
   Y = m * X + n

nach X auflösen.

von Alfred Q. (higedigdag)


Lesenswert?

ja super...
danke für die Antwort.

Werde das in den Ferien mal ausgiebig testen.

von MI.SA. (Gast)


Lesenswert?

Hallo

Eine andere Möglichkeit.

1
#define NTC_RN      33000.0
2
#define NTC_RV      100000.0
3
#define NTC_A1      0.003354016
4
#define NTC_B1      0.0002519110
5
#define NTC_C1      0.00000351094
6
#define NTC_D1      0.000000110518
7
8
get_TemperaturV(float & val)
9
{
10
 float ohm, tmp , tcelsius ;
11
12
 ohm = get_Ohm( ADC(ONE) );
13
 tmp =1/( NTC_A1+NTC_B1*log(ohm/NTC_RN)+NTC_C1*pow(log(ohm/NTC_RN),2) +NTC_D1*pow(log(ohm/NTC_RN),3));
14
 tcelsius = (tmp  - 273.15);
15
 val = (tcelsius);
16
 return true;
17
}
18
19
get_Ohm(float val)
20
{
21
 float ohm;
22
23
 if ( val < 1 )
24
   {
25
  val = 1;
26
  }
27
 ohm = NTC_RV/(1024.0/val-1);
28
 return (ohm);
29
}


NTC_RV = Vorwiderstand (z.B. 100K)
NTC_RN = NTC Widerstand bei 25°C (z.B. 33K)
NTC_A1 , NTC_B1 , NTC_C1 , NTC_D1 = Materialkonstanten (Datasheet 
Vishay)

gruss

von Alfred Q. (higedigdag)


Lesenswert?

Ich habe leider kein gutes Datenblatt für diesen NTC.
Also fehlen mir auch diese Konstanten.

Es ist ein Öltemp.fühler von VDO in peilstabform. gibt leider kaum 
Informationen über die Sensoren.

Ich hab die Sache mit den Geraden gestern mal simuliert, als 
Konsolenanwendung :) klappt ganz gut.

trotzdem danke

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

von Infineon gibts das:
NTC Thermistors Standardized R/T characteristics
http://www.epcos.com/web/generator/Web/Sections/ProductCatalog/NonlinearResistors/NTCThermistors/PDF/PDF__Standardized,property=Data__en.pdf;/PDF_Standardized.pdf
elend lange URL, und die angegebenen Formeln sehen auch nicht sehr 
hilfreich aus.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.