Re: PT1000 Umrechnungsformel Kategorie: CC2-Unit & Appl.Board / CC2-Station (von André H. - 10.01.2006 16:24) | ||
Als Antwort auf PT1000 Umrechnungsformel von Lars - 10.01.2006 9:58 | ||
| ||
Hallo Lars, Zuerst eine wichtige Bitte: Benutze bitte die code-Tags, wenn Du Quellcode postest. Einfache Routinen kann man zwar noch recht gut lesen, wenn es aber mal etwas komplexer wird, erleichtert eine entsprechende Formatierung die Arbeit sehr. > ich nehme über Multiplexer von PT1000 Rohwerte auf und muss diese für korrekte Temperaturdaten in > eine Formel einbinden. Folgende Standartformel habe ich dazu in den Modulen von Helbig gefunden: > ... > Jedoch verlaufen meine Rohdaten ausschlie�lich von 0 bis 1023 und nicht wie sonst bis 10230. > Kann ich nun einfach bei allen Faktoren und Summanden die Werte eine 10er Potenz kleiner > einstellen oder werden dann meine gewollten Temperaturwerte völlig falsch? > >also so stelle ich mir die Formel dann vor: > function getPT (int x) returns int > { > long y; > y=x; > if x>=723 y=(y-723)/0,5+140; > else > if x>=418 y=((y-418)*62,5)/317,7+80; > else y=(y*4)/20,9; > return y; > } Nein, so einfach ist das wieder nicht. Die Funktion, die Du hast, ist für das CC2-ReglerBoard, besser gesagt, für AD-Werte aus dem Modul rbports.c2 . Hier wird 10mal hintereinander der AD-Wert eingelesen und die Summe zurückgegeben, um eine etwas bessere Auflösung zu erhalten. Die Funktion für den normalen Bereich müsste so aussehen: function getPT (int x) returns int {long y; y=x; if x>=723 y=(y-723)*2+1400; // // 1400 mu� bleiben(Offset in 10tel Grad) else if x>=418 y=((y-418)*6250)/3177+800; else y=(y*400)/209; return y; } Die AD-Wert-Offsets müssen durch 10 geteilt werden. Die Faktoren müssen mit 10 multipliziert werden. Die Temperaturoffsets müssen unverändert bleiben. Wie aber Krassos bereits schrieb, ist die Funktion für 0 bis 200°C gedacht. Wenn Du also Deinen Me�adapter anders abgeglichen hast, mu� auch die Funktion entsprechend geändert werden. Bei mir sieht beispielsweise die Auswertung der PT1000 so aus: function getPT(int x) returns int {long y; if x==0 return -32000; // Fühler Kurzschlu� if x==10230 return -31000; // Fühler unterbrochen y=x; if x>=7800 return ((y-7800)*75)/243 +2000; if x>=5810 return ((y-5810)*60)/199 +1400; if x>=4130 return ((y-4130)*50)/150 + 900; if x>=1030 return ((y-1030)*90)/310; return (y*30)/103 - 300; } Wenn man dies für den normalen AD-Bereich umschreiben müsste, sieht das so aus: function getPT(int x) returns int {long y; if x==0 return -32000; // Fühler Kurzschlu� if x==1023 return -31000; // Fühler unterbrochen y=x; if x>=780 return ((y-780)*750)/243 +2000; if x>=581 return ((y-581)*600)/199 +1400; if x>=413 return ((y-413)*500)/150 + 900; if x>=103 return ((y-103)*900)/310; return (y*300)/103 - 300; } Im Allgemeinen ist die Funktion so aufgebaut, da� die Berechnung in mehrere Teilbereiche der Temperaturen aufgeteilt ist. Im letzten Beispiel sind das folgende Bereiche: 200,0°C bis 275,0°C (wobei 275,0°C als unterbrochener Fühler gewertet wird) 140,0°C bis199,9°C 90,0°C bis 139,9°C 0,0°C bis 89,9°C -30,0°C bis -0,1°C (wobei -30°C als Fühlerkurzschlu� gewertet wird) Das ganz wird gemacht, um die Nichtlinearität des Fühlers auszugleichen. Es gibt auch leute, die machen das mit einer "abstrakten" Formel, aber so genau mu� es z.B. in der Heizungstechnik auch nicht sein. ;-) Der Aufbau aus einer Formelzeile sollte so ersichtlich werden: if ADWert>=ADOffset return ((ADWertL - ADOffset)*TBereich)/ADBereich + TOffset MfG André H. Antworten bitte nur ins Forum! Fragen per EMail auf Forum-Postings werden nicht beantwortet! Das macht meine Heizung gerade | ||
Antwort schreiben Antworten: |