Forum: Mikrocontroller und Digitale Elektronik ADC-Kalibrierung, Repräsentierung der Werte


von A. S. (Gast)


Lesenswert?

Wenn ein AD-Spannungseingang lineaer kalibriert wurde, dann werden ja 
irgendwie 2 Werte angegeben. Meist Steigung (m) und Offset (b), z.B. 
(@12-Bit) m=380[mV/256], b=11[mV] für U[mv]=(long) m*AD/0x100+b.

Jetzt hat jeder bei uns etwas andere Formate, "damit es nur 23Bit der 
2MB" belegt. Und ob "380" plausibel ist, kann ich kaum beurteilen. Wir 
sind uns hier zumindest einig, dass keine bisherige Repräsentierung 
sinnvoll ist.

Der Speicherplatz ist unkritisch, aber die Werte sollten irgendwie 
selbsterklärend sein. Notfalls rechnet die Applikation sie später in 
handhabbare m und b um. Ich habe mir nun überlegt, künftig 3 Werte (1 
int, 2 double) abzulegen:

A) 4095: ADC-Maxwert, integer
B) -0.1234f: Spannung in V bei ADC=0
C) +5.5678f: Spannung in V bei ADC-Maxwert (4095)

Das Format wäre relativ universell. Die Werte zeigen einen 
[0..5V]-Eingang@12Bit mit Anhebung. Wenn ich die an einem 
[0..12V]-Eingang sehe, stimmt etwas nicht. Und am [0..1V]-Eingang sehe 
ich sofort, dass 2 Bit verschenkt werden.

Analog für Strom, z.B. [0..20mA]@10Bit:
A) 1023
B) -0.000123f: Strom in A bei ADC=0
C) +0.025678f: Strom in A bei ADC-Maxwert (1023)

Wäre das Unsinn? Hat jemand was universelleres?

Edit: A) ist natürlich konstant (wird gebraucht für m und b).
B) und C) sind "ideale" Endpunkte der Kalibrierung. Keine gemessenen 
Werte. Meist können sie nichtmal erreicht werden.

von Joe F. (easylife)


Lesenswert?

Du schreibst vollkommen wirr. Vllt. morgen nochmal in nüchternem Zustand 
versuchen?

von Holger D. (hodoe)


Lesenswert?

Achim S. schrieb:
> A) 4095: ADC-Maxwert, integer
> B) -0.1234f: Spannung in V bei ADC=0
> C) +5.5678f: Spannung in V bei ADC-Maxwert (4095)

> Analog für Strom, z.B. [0..20mA]@10Bit:
> A) 1023
> B) -0.000123f: Strom in A bei ADC=0
> C) +0.025678f: Strom in A bei ADC-Maxwert (1023)

Moin, soweit ich das sehe, hast Du jeweils eine Zweipunktkalibrierung 
(Endpunkte) vorliegen und B. bzw C. sind dann die Korrekturen für die 
beiden Endpunkte. Kann man so machen. Bedenke aber, dass viele ADC nicht 
wirklich einen linearen Verlauf haben. Wenn das unkritisch ist, dann 
nimm die Werte und lass dann durch die Software die Steigung berechnen. 
Den Schritt kann man sich aber unter Annahme eines linearen Verlaufes 
auch sparen und anstelle der Werte C direkt die Steigung angeben. Der 
Offset ist in B ja schon vorhanden.

Joe F. schrieb:
> Du schreibst vollkommen wirr. Vllt. morgen nochmal in nüchternem Zustand
> versuchen?

Muss das sein? Außerdem ist (Troll-)Freitag.




Gruß
Holger

: Bearbeitet durch User
von Noch einer (Gast)


Lesenswert?

Normalerweise berechnest du m und b gar nicht aus den Endwerten, sondern 
aus Werten, die du einfach messen kannst.

Nehmen wir mal an, einen Temperaturfühler kalibrierst du bei 20° und 
50°.

Bei deinem System musst du zuerst m und b aus diesen beiden Punkten 
berechnen. Danach berechnest du die Endpunkte und daraus wieder m und b.

von Joachim B. (jar)


Lesenswert?

wegen der Linearität kann man das Wertepaar von X/Y auch in den 
gewünschten Bereich einengen oder unterteilen in mehrere Abschnitte.

: Bearbeitet durch User
von A. S. (Gast)


Lesenswert?

Vielen Dank für die Rückmeldungen.

Es geht mir jedoch ausschließlich um die Repräsentierung der Werte, 
vor allem über verschiedene Produkte.

Die Kalibrierung selber je nach Baugruppe erfolgt manchmal garnicht 
(fix, eng toleriert), manchmal Zweipunkt, manchmal per linearer 
Regression. In allen Fällen aber reicht linear, also m und b. Die kann 
man ja beliebig umrechnen, und ich würde halt künftig obige Weise 
favorisieren.

Bisher hat jedes Produkt und manchmal sogar jeder Eingangstyp sein 
eigenes Format. Im Code gibt es dann auch jedesmal anderen Code. Und bei 
modularen Produkten entstanden Gräber von "bei Typ 1 rechne so, bei Typ 
2 so". Und wenn ich den Entwickler von Typ1 frage, ob die Kalibrierwerte 
ok sind, dann holt der erst Schaltplan und Taschenrechner (oder die 
Doku) raus, um zu sehen, was die Zahlenwerte bedeuten.

In obiger Repräsentierung wären die Werte für ähnliche Eingänge auch 
ähnlich.
Beispiel 1: Eingangsmodul E hat 10Bit. Der Nachfolger E1 hat 12Bit. 
Trotzdem bleibt der Bereich von B) und C) gleich.

Beispiel 2: B) ist 0.1V --> ich sehe sofort, dass dieser Eingang niemals 
runter bis 0V messen kann.

von gedünsteter Trippeltroll (Gast)


Lesenswert?

Scheint mir ein Trollpost zu sein. Ich denke nicht, dass der Poster die 
Moeglichkeiten hat, einen ADC zu vermessen. Ein ADC hat die Referenz, 
allenfalls intern, allenfalls extern, allenfalls differentiell, oder GND 
basiert. Die untere Referenzspannung bekommt den unteren Wert, die obere 
Referenzspannung bekommt den oberen Wert. Dazwischen die 2^n linearen 
Schritte. Dann kommen noch ein paar Spezifikationen, und fertig.

In 99% der Faelle macht es keinen Schritt die ADC Werte in irgendwas 
umzurechnen. Allenfalls muss man einen Sensor linearisieren. Was 
sinnvollerweise eine Abbildung von integer nach integer ist.

Allenfalls muss man fuer eine Anzeige hin und wieder mit Float 
umrechnen. Dabei sollte single-float genuegen, denn wer hat schon mehr 
als 5-6 Stellen, brauchbar.

von Noch einer (Gast)


Lesenswert?

>bei Typ 1 rechne so, bei Typ 2 so

Im Bauwesen legen die Statiker alle Berechnungen gleichartig an. Schau 
dir mal an, was für ein Aufwand dafür erforderlich ist.

Die weltweit abgesprochenen Normen. Die staatlichen Vorschriften, ein 
Statiker muss sich an die Normen halten. Das FH-Studium, in dem einem 
Statiker diese Rechenverfahren eingetrichtert werden. Die 
Schadensersatz-Prozesse, wenn Missverständnisse auftreten...

Jede kleine Verbesserung benötigt Jahrzehnte. Dann doch lieber ein 
Sammelsurium von Spontanerfindungen.

von Heiner (Gast)


Lesenswert?

Joe F. schrieb:
> Du schreibst vollkommen wirr. Vllt. morgen nochmal in nüchternem Zustand
> versuchen?

LOL!

lg. Heiner

von Joachim B. (jar)


Lesenswert?

gedünsteter Trippeltroll schrieb:
> Scheint mir ein Trollpost zu sein.

deiner?

gedünsteter Trippeltroll schrieb:
> Ich denke nicht, dass der Poster die
> Moeglichkeiten hat, einen ADC zu vermessen. Ein ADC hat die Referenz,
> allenfalls intern, allenfalls extern, allenfalls differentiell, oder GND
> basiert. Die untere Referenzspannung bekommt den unteren Wert, die obere
> Referenzspannung bekommt den oberen Wert. Dazwischen die 2^n linearen
> Schritte. Dann kommen noch ein paar Spezifikationen, und fertig.

viele Worte, definiere "einen ADC zu vermessen"

nur so DC oder dynamisch oder in einer Klimakammer?

Wie der TO es beschreibt mache ich auch, Spannungsteiler vor ADC 
Eingang, Labornetzgerät, gute kalibrierte DMM (wobei echt übertrieben), 
Spannung einstellen, ADC Wert aufschreiben, rechnen für m und b, u.U. 
nur im eingeschränkten Wertebereich und nicht immer von NULL bis MAX.

Bis jetzt reichte das für meine Anwendungen, nach oben ist natürlich 
mehr, je nach Mittel und Wissen, möglich.

von Peter M. (r2d3)


Lesenswert?

Achim,

könntest Du den geschilderten Sachverhalt mal um eine konkrete Frage 
ergänzen?
Ich möchte ungern mutmaßen, worum es eigentlich geht.

von A. S. (Gast)


Lesenswert?

Peter M. schrieb:
> konkrete Frage

a) Wäre ein einheitliches Format für ein paar Dutzend Produkte der 
nächsten Jahre sinnvoll?

b) gibt es allgemeingültige Standards bei Feldbussen oder Steuergeräten?

c) habt Ihr für Eure letzten 3 Projekte halbwegs gleiche Darstellungen 
verwendet, oder wurde da jedesmal neue Fixpunkt-Rechnung für ADC-Breite, 
Genauigkeit, Eingangsschaltung und Messbereich ausgeknobelt?

Noch einer schrieb:
> Im Bauwesen legen die Statiker alle Berechnungen gleichartig an. Schau
> dir mal an, was für ein Aufwand dafür erforderlich ist.

Statik habe ich gar keinen Zugang zu. Kannst Du ein Beispiel oder einen 
Startpunkt nennen?

von Noch einer (Gast)


Lesenswert?

> Statik

Mal als Beispiel die Berechnung einer Stützmauer.

Ein Statiker würde niemals selbst nachdenken, wie er eine Stützmauer 
berechnet. Der schaut in seine Lehrbücher und findet z.B. so etwas:
http://www.pbs.de/support/programmbeschreibungen/ST023W.pdf

Als erstes steht da, nach welchen DIN Normen er rechnen muss. Die Normen 
verwenden alle die gleichen Buchstaben: p, q, l, E, G... Bei einer Zeile 
wie "aus G : Eah = 101.9 kN/m" weiss jeder, was mit den Buchstaben 
gemeint ist.

Sogar die Skizzen sind gleichartig. Erddruck kommt von rechts. Lasten 
sind senkrecht gestreift, Beton ist schräg durchgehend+gestrichelt...

Auch den Aufbau überblickt sofort jeder Statiker. Alle rechnen mit den 
selben Zwischenergebnissen. Sehen sofort, diese Zeile ist ein 
Endergebnis und danach beginnt eine andere Berechnung.

Sogar diese seltsamen Einheiten wie kNm/m oder cm²/m sind immer gleich.

Wenn das es Prüfstatiker nachrechnet, nimmt er nur die Zeichnung, 
rechnet alles selbst durch und vergleicht die Zeilen mit "vorhanden" 
oder "gewählt".

---

Das einzige Problem an der Sache - willst du neue Arten von Stützmauern 
bauen, musst du zunächst die DIN erweitern und die Berechnung in den 
Lehrbüchern beschreiben. Das zieht sich.

von Jacko (Gast)


Lesenswert?

Wenn du vor Unlinearitäten Angst hast, dann lass die Finger
davon und such dir ein Hobby, wie Ikebana.

Die Unlinearitäten des ADC sind im Datenblatt angegeben
und müssen bei der digitalen Weiterverarbeitung immer als
Messunsicherheit bedacht/angegeben werden. Genauso gilt das für
die Referenzspannung.

Ansonsten gibtst DU doch die Eckwerte vor, wie dein
Eingangssignal von Analog nach Digital kommt:

Da musst DU dir Gedanken machen, wie du alle möglichen Spannungswerte
des Eingangssignals dahin bringst, dass sie
- im Arbeitsbereich des ADCs mit seiner Referenzspannung liegen
  (durch Level-Verschiebung / Abschwächung/Verstärkung vorm ADC)
  und
- diesen Bereich möglichst gut ausnutzen um zur optimalen Auflösung
  zu kommen.

Dann kennst du den Offset und den Faktor dU/Bit und alle weiteren
Messunsicherheiten durch externe Bauelemente mit ihren Toleranzen.

Damit musst du rechnen...

von Peter M. (r2d3)


Lesenswert?

Achim S. schrieb:
> Peter M. schrieb:
>> konkrete Frage
>
> a) Wäre ein einheitliches Format für ein paar Dutzend Produkte der
> nächsten Jahre sinnvoll?

Ich verstehe Dich immer noch nicht.

Achim S. schrieb:
> Jetzt hat jeder bei uns etwas andere Formate, "damit es nur 23Bit der
> 2MB" belegt.

Ob 23Bit oder 24Bit von 2MB belegt sind, erscheint mir nicht 
kriegsentscheidend. Oder geht es gar nicht um Kalibrierungsdaten, 
sondern um die Ablage von Messreihen?


> Und ob "380" plausibel ist, kann ich kaum beurteilen. Wir
> sind uns hier zumindest einig, dass keine bisherige Repräsentierung
> sinnvoll ist.

Über die Plausibilität entscheidet der Nutzer. Oder geht es vielleicht 
um Prüfsummen?

>
> Der Speicherplatz ist unkritisch, aber die Werte sollten irgendwie

Aber oben war doch von "nur 23Bit" die Rede?

> selbsterklärend sein. Notfalls rechnet die Applikation sie später in
> handhabbare m und b um. Ich habe mir nun überlegt, künftig 3 Werte (1
> int, 2 double) abzulegen:

Welche Anwendung arbeitet denn mit Kalibrationsdaten anstelle von 
Messdaten? m und b sind doch nur Mittel zum Zweck?

>
> A) 4095: ADC-Maxwert, integer
> B) -0.1234f: Spannung in V bei ADC=0
> C) +5.5678f: Spannung in V bei ADC-Maxwert (4095)

Ich kenne das nur bei softwaremäßig kalibrierbaren Multimetern.
Da wird für 0V der ADC-Wert gemessen. Damit wird der Offset bestimmt, 
nicht aber die Spannung für einen ADC-Wert von Null.

Ich kenne auch niemanden, der einen Kalibrationsspannung solange 
verändert, bis der ADC seinen Maximalwert liefert.

Der "Gain"-Faktor wird mit irgendeinem Messwert nahe Skalenende 
bestimmt.
Es liegt also nahe, die Messspannung und den Wert des ADC zu speichern 
und keine angenommenen Messwert für den den Maximalwert des ADCs zu 
speichern.

Zwar kann man meine Darstellung in Deine umrechnen, aber man verliert 
dabei die Information, mit welcher Spannung der ADC kalibriert wurde.

von A. S. (Gast)


Lesenswert?

Noch einer schrieb:
> Mal als Beispiel die Berechnung einer Stützmauer.

Vielen Dank! jetzt wird mir "Billiard um halb 10" nach 30 Jahren doch 
noch verständlich, und mein Erstaunen über die Statik meines Hauses vor 
60 Jahren (ich habs nur später gekauft) relativiert.

Aber ja. Ziel wäre es auch bei mir, dass Eingang X von Modul Y mit 3 
Zahlenwerten (hier ADC-max, U@ADC0, U@ ADC-max) ohne weiteren Blick in 
Schaltplan oder Doku schon relativ gut beschrieben ist.

von gedünsteter Trippeltroll (Gast)


Lesenswert?

Ja. Ich habe Umrechnungen im Header des Quelltextes fuer den 
Programmierer.

Und fuer den Betrieb zum Abgleichen habe ich Integer Korrekturfaktoren. 
Die machen dann, dass die Anzeige stimmt, falls das denn einmal noetig 
waere. Was meist nicht der Fall ist.

Wenn mein Temperaturcontroller als auf 0.01 Grad stabil spezifiziert 
ist, ist es in der Regel unwichtig, ob das nun bei 32.000, oder 33.123 
Grad ist.

von Jacko (Gast)


Lesenswert?

Für die nächsten 10 Jahre würde ich nicht planen.

Höchstens dafür, dass du in 10 Jahren noch nachvollziehen kannst,
wie du aus den ADC-Werten mit Offset (b = ADC-Out @ Uin = 0) und
Steigung (m = V/LSB) zu deinen Ergebnissen gekommen bist.

Dokumentiere das schön brav im Code-Header - und gut ist.

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.