Forum: Mikrocontroller und Digitale Elektronik Softwarekalibrierung eines Messsystems, Referenztabelle?


von Lazley (Gast)


Lesenswert?

Nabend lieben User,

ich plane ein Messsystem zur Messung von Strömen  und Spannungen mittels 
ADC.
Nun möchte ich die Messungen so genau wie möglich durchführen (bei 
10bit). Da meine Referenzspannung, meine Widerstände, meine Verstärker 
und auch der ADC des Controllers (AtMega8 / C) Toleranzbehaftet ist, 
möchte ich eine Funktion in C implementieren, welche eine 
softwaretechnische Kalibrierung des Systems durchführt bzw. den Messwert 
korrigiert.
Hat vielleicht jemand eine Idee oder eine Anregung, wie man so etwas 
bewältigen könnte?
Wäre für jeden Anreiz dankbar

LG Laz

von hans (Gast)


Lesenswert?

Hallo Lazley,

meist ist eine linearisierung über den Messbereich ausreichend.

Beispiel Spannung soll 24 Volt  Bereich 20 bis 28 Volt

Du brauchst 2 Punkte am besten an den Rändern.

Spannung anlegen (genaue Messung extern) und Intern ( 10 Bit wert)

Aus den Zwei Punkten dann Offset und Faktor berechnen (Geradengleichung
Aufstellen).

Danach gilt für Messungen: Messwert = Faktor * 10 bit Wert + Offset

Faktor und Offset (evtl. Einheit z.B. mA,A) für den Messkanal in EEProm 
speichern.

Gut mit PC über RS232 zu Automatisieren.

Gruß Hans

von Chris D. (m8nix)


Lesenswert?

Hi Lazley,

Wäre ja zu schön wenn man durch simple Mathematik Messfehler korrigieren 
könnte.. Das Problem ist, du kennst die Toleranzgrenzen aber nicht deren 
reale Grösse somit bleibt dir nur eins... Dein Messergebnis mit einem 
Eichgerät zu kalibrieren.

Zwei Grössen kannst du dennoch in deine Berechnung einfließen lassen ->
Du kennst die grösse deines Shunt's und den Eingangswiderstand deiner 
Messspannungsschaltung... Die bügeln dir aber nicht die 
Bauteiltoleranzen weg

Gruss Chris

von hans (Gast)


Lesenswert?

Die o.a. Linearisierung findet nicht nur auf dem Papier statt!

Es wird genau die Hardware verwendet die anschliesend auch die Messwerte
liefern soll. Daher auch das genaue Messen extern!

Wenn dann die Einsatzbedingungen später nicht zu stark abweichen
sind die Ergebnisse durchaus brauchbar.

z.B. die Toleranzen eines Spannungsteilers können genau für diesen einen 
Messkanal erfast werden. Die Werte sind natürlich nicht übertragbar auf
andere Messkanäle bzw. Aufbauten.
Daher jeden Kanal bei jedem gerät einzeln einmessen (deshalb auch 
automatisieren).
Durch das geschickt wählen der Messpunkte wird der Messwert im 
erwartungsbereich noch genauer (Bsp. oben 20 und 28 Volt und nicht
0 bis 30)

Diese Variante hat schon Audits überstanden!!

Gruß Hans

von Bernd (Gast)


Lesenswert?

Hallo Lazley

Es geht im Prinzip so, wie Hans schreibt. Es wird zur Kalibration eine 
Referenz benötigt, die möglichst ein wenig genauer ist, als das spätere 
Messergebnis.

Lineare Korrektur:
Es werden mindestens 2 Messpunkte benötigt. Ein Punkt in der Nähe des 
Nullpunktes und einer in der Nähe des Vollausschlages. Alternativ können 
auch mehrere Messpaare aufgenommen werden. Es wird die sogenannte 
Umkehrfunktion benötigt. Dazu kannst du in einer Exceltabelle in die 1. 
Spalte den AD-Wert und in die 2. Spalte den Referenzwert eingetragen. 
Nun stelle die Kurve in der XY Darstellung dar und füge eine lineare 
Trendlinie ein. Bei Eigenschaften der Trendlinie kannst du die Funktion 
einblenden.

Diese Funktion mit der Form y = m*x + b musst du nun nur noch in dein C 
Programm übertragen. Damit lassen sich durch simple Mathematik die 
meisten Messfehler korrigieren.

Nichtlineare Fehlerkorrektur.
Falls die Kurve stark gekrümmt ist, muss zur Korrektur eine Parabel bzw. 
eine Funktion gewählt werden, mit welcher die Messwerte in der Tabelle 
möglichst genau nachgebildet werden können. Häufig sind auch Polynome 2. 
3. und 4. Ordung, quadratische oder logarithmische Funktionen oder 
Wurzelfunktionen.

Zuletzt musst du den Vorgang, welchen du mit Excel durchgeführt hast, in 
dein C Programm übertragen. Die Software bekommt ein paar Messpunkte und 
errechnet die Korrektur. Stichwort: Methode der kleinsten 
Fehlerquadrate.

Gruss, Bernd

von Chris D. (m8nix)


Lesenswert?

Ich denke bei einer so hohen Auflösung von 10 Bit ist die Frage nach 
Temperaturdrift und Lanzeitstabilität hinfällig

von claude monet (Gast)


Lesenswert?

Vielen Dank für die Beiträge. Werde mich mal ein wenig mit den 
Suchbegriffen auseinander setzen und mich bald melden... Vielen Dank 
noch einmal für die Tips...

von Lazley (Gast)


Lesenswert?

Hi,

also wäre es möglich, dass ich einmal genau ein paar Messwerte erfasse 
(oder sind 2 Wertepaare an den Rändern für die Anwendung die bessere 
Lösung?) und diese dann im EEPROM speichere? Oder kann ich die Werte als 
Kontanten in mein Programm integrieren?
Danach stelle ich mit Hilfe der kleinsten Fehlerquadrate meine 
Geradengleichung auf bzw errechne die Ausgleichsgerade. Oder muss ich 
einfach eine Geradengleichung mittels der 2 Wertepaare aufstellen? 
Wahrscheinlich macht die Methode der kleinsten Quadrate bei mehreren 
Messwerten Sinn, was bei mir wegen dem linearen Zusammenhang überflüssig 
wäre (liege ich da richtig)?
>Danach gilt für Messungen: Messwert = Faktor * 10 bit Wert + Offset
Ist das dann mein korrigiertes Messergebnis (ADC-WERT) und ich kann die 
dann wie gewohnt in V bzw A umwandeln???
Welche Einflüsse sind dann kompensiert? Nur Toleranzen?
Klar dass da die Tempkorrektur etc nicht drin ist, aber grundsätzlich 
geht es mir erst einmal um die Art und Weise wie man da rangeht und da 
habt ihr mir schon sehr geholfen.
Besten Dank für die Mühe...

Laz Monet

von spess53 (Gast)


Lesenswert?

Hi

Schon mal bei Atmel nachgesehen?

AVR120: Characterization and Calibration of the ADC on an AVR

MfG Spess

von Lazley (Gast)


Lesenswert?

Hallo,

ja hab ich mir intensivst angeschaut, aber leider finde ich nicht zu all 
meinen Fragen eine Antwort. (habe auch schon anderweitig gesucht) Und 
leider wird auf den mathematischen Kram nicht eingegangen. Stehe 
immernoch vor dem Problem, vielleicht hat noch jemand eine Idee oder 
eine Antwort auf meine Fragen?
Habe zuvor leider noch nicht mit dem EEPROM gearbeitet, werde mich aber 
wohl dran begeben, wenn ich weiss, wie genau die Mathematik der Thematik 
aussieht. In der Appnote120 steht, dass ich einen Gain und 
Offset-Abgleich benötige. Damit ist nur der Achsenabschnitt meiner 
Trendlinie und die Steigung der Geraden gemeint? Ich denke, dass ich 
linear Approximieren werde, da wegen dem Ohm´schen Gesetz mein Messwert 
durchaus linear sein sollte? Will ja nur Spannungen und Ströme messen 
(sollte im idealfall doch eine Gerade sein???).
Kann mir vielleicht jemand bei der Aufgabe "unter die Arme greifen"? 
Verstehe noch nicht ganz, was ich im EEPROM ablegen muss und wozu das 
ganze gut ist. Ich könnte ja auch die beiden Korrekturdaten (wenn ich 
denn die Ablegen muss) in mein Quellcode bzw die Kalibirierroutine 
einbinden (als Konstanten) und dann quasi in den Flash programmieren? 
Ist das nur so üblich, dass man "die" Parameter im EEPROM ablegt oder 
hat das auch einen näheren Sinn?

Würde mich über jede Hilfe sehr freuen.
Schönen Abend und einen netten Sonntag
Laz

von Lazley (Gast)


Lesenswert?

hat keiner eine idee???

von Lazley (Gast)


Lesenswert?

hab ich was falsch gemacht?

von hans (Gast)


Lesenswert?

Hallo Lazley,

wenn du nach dem Rezept von oben vorgehst hast du gleich den
kpl. Messwert.

Bei meinem Beispiel hast du für 20 Volt (genauer Wert extern überprüft)
einen Messwert von 200 erhalten (vom µc), für 28 Volt 800.

Daraus ensteht die Gleichung Messwert = 1/75 * 10 Bit Wert + 17,333

(20 Volt = 200 * Faktor + Offset
 28 Volt = 800 * Faktor + Offset   aufgelößt
  -> Faktor = 1/75 Volt   Offset = 17,333 Volt )

Es ist alles enthalten.

Wenn jetzt dein Wandler den Wert 555 liefert einfach einsetzen und
du weist: Spannung ist 24,73 Volt.

Dadurch das du die Berechnung mit den echten Werten (Volt,A,mA etc.)
durchführst hast du alles incl. Einheit in einer Rechnung.
Daher auch das Speichern der Einheih als Option.

Gruß hans

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.