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.
Du schreibst vollkommen wirr. Vllt. morgen nochmal in nüchternem Zustand versuchen?
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
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.
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
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.
Joe F. schrieb: > Du schreibst vollkommen wirr. Vllt. morgen nochmal in nüchternem Zustand > versuchen? LOL! lg. Heiner
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.
Achim, könntest Du den geschilderten Sachverhalt mal um eine konkrete Frage ergänzen? Ich möchte ungern mutmaßen, worum es eigentlich geht.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.