Über Spannung gemessenen Strom in Dezimal wandeln

Gast #4436911
Lesenswert?
• ▲
▼
Hallo,

Ich möchte den durch einen Strom CAS50 gemessenen Strom in eine Spannung 
wandeln.

Hierführ habe ich folgende Messwerttabelle angefertigt:

-10A : 573
- 9A : 569
- 8A : 566
- 7A : 562
- 6A : 559
- 5A : 556
- 4A : 553
- 3A : 549
- 2A : 546
- 1A : 543
+ 0A : 540
+ 1A : 537
+ 2A : 535
+ 3A : 533
+ 4A : 531
+ 5A : 528
+ 6A : 526
+ 7A : 524
+ 8A : 522
+ 9A : 520
+10A : 518

Es ergibt sich für den positiven Bereich -2,2/A
Für den negativen Bereich +3/A.

Diese Werte möchte ich nun Programmgesteuert in den entsprechenden Strom 
umwandeln.
1
if(i1<540)    //Positiver Strom
2
{
3
  mode2_1[3]='+';
4
  double strom=(double) (i1-540)*-2.2;
5
  int zehn=strom/10;
6
  strom=strom-(zehn*10);
7
  int eins=strom;
8
  strom=(strom-eins)*10;
9
  int zehntel=strom;
10
  strom=(strom-zehntel)*10;
11
  int hundtel=strom;
12
  mode2_1[4]=(zehn+0x30);
13
  mode2_1[5]=(eins+0x30);
14
  mode2_1[7]=(zehntel+0x30);
15
  mode2_1[8]=(hundtel+0x30);
16
}
17
else
18
{
19
  mode2_1[3]='-';
20
  double strom=(double) (i1-541)*3.0;
21
  //double strom=15.29;
22
  int zehn=strom/10;
23
  strom=strom-(zehn*10);
24
  int eins=strom;
25
  strom=(strom-eins)*10;
26
  int zehntel=strom;
27
  strom=(strom-zehntel)*10;
28
  int hundtel=strom;
29
  strom=(strom-hundtel)*10;
30
  mode2_1[4]=(zehn+0x30);
31
  mode2_1[5]=(eins+0x30);
32
  mode2_1[7]=(zehntel+0x30);
33
  mode2_1[8]=(hundtel+0x30);
34
}

Ich nehme also 540 als Nullpunkt an.
Werte kleiner 540 Stehen für positiven Strom, werte > für neg-Strom.

Danach wird der 0-Punkt abgezogen und je nach Pos/Neg mit 3 oder -2,2 
multipliziert.

--> Hier scheint etwas nicht zu funktionieren.
Es kommt z.b. "+°,,(0" raus

Wenn ich jedoch strom z.b. mit 15,29 definiere so steht auf dem Display 
auch 15,29.

Habt ihr eine Idee was an den Zeilen:
1
double strom=(double) (i1-541)*-2.2;
2
double strom=(double) (i1-541)*3.0;

entscheident falsch sein könnte?
#4437163
Lesenswert?
• ▲
▼
Deine Berechnung ist falsch. Du müsstest durch -2.2 bzw. 3.0 teilen, um 
den Strom zu errechnen, und nicht damit multiplizieren.

Deine Messkurve kannst du allerdings gut mit einem Polynom annähern 
(Wolfram Alpha hilft hierbei):

strom = i1*i1 / 363 - 1223*i1 / 363 + 122940 / 121

Dann kannst du auch gleich den Strom x100 errechnen, und kommst mit 
reiner Integer Arithmetik aus:
1
int strom = (100*i1*i1 - 122300*i1) / 363 + 101603;
2

3
if (strom < 0) {
4
  mode2_1[3] = '-';
5
  strom = -strom;
6
}
7
else
8
  mode2_1[3] = '+';
9

10
mode2_1[4] = strom / 1000 + '0'; strom %= 1000; // zehner
11
mode2_1[5] = strom /  100 + '0'; strom %=  100; // einer
12
mode2_1[7] = strom /   10 + '0'; strom %=   10; // zehntel
13
mode2_1[8] = strom        + '0';                // hunderstel
Gast #4437198
Lesenswert?
• ▲
▼
Jürgen S. schrieb:
> Die Tabelle ist aber differenziell unstetig - riecht nach Messfehler.

Kein Wunder. Die Messwerte entstammen einer Messung und Messungen sind 
nun mal fehlerbehaftet. Oder meinst du einen Ausreißer, welcher?

Bei der miesen Auflösung von gerade mal 2..4 LSB zwischen zwei 
Stützstellen darf man da wohl nicht viel drauf geben. Schon ein 
Messfehler von 1 Bit schlägt kräftig zu. Da ist wohl die Umrechnung über 
das Ausgleichspolynom die beste Lösung.
Gast #4437247
Lesenswert?
• ▲
▼
Joe F. schrieb:
> Hier zum Vergleich.

... und da sieht man deutlich, dass das verwendete Polynom schlecht 
geeignet ist, um die Messwerte vernünftig zu approximieren. Im Bereich 
negativer Ströme weicht es systematisch heftig von den Messungen ab. 
Also muss da ein anderes Modell her. Die lineare Annäherung ist wegen 
weniger Freiheitsgraden natürlich noch schlechter.
#4437265
Lesenswert?
• ▲
▼
W.A. schrieb:
> und da sieht man deutlich, dass das verwendete Polynom schlecht
> geeignet ist, um die Messwerte vernünftig zu approximieren

Ich nehme eher an, dass die Messwerte in der Tabelle nicht besonders gut 
sind, und bin mal davon ausgegangen, dass die Werte bei -10A, 0A und 
+10A als Eckpunkte stimmen.
Der Sensor hat angeblich eine hohe Linearität, der Fehler sollte bei 
unter 1% liegen.
Warum die Kurve überhaupt gekrümmt ist, ist mir daher nicht klar.
Da scheint schon irgend etwas bei der Spannungsmessung schief zu gehen.

Für eine höhere Genauigkeit im 10A Bereich wäre dann ein CAS 25 besser 
gewesen, warum hast du dich für den CAS 50 entschieden, Matze?

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.