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.
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
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.
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.
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.
>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.
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.
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?
> 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.
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...
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.
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.
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.
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.