Hallo Jungs
ich bin daran, eine Hardware zu bauen, wo ein STM32 ein paar ADCs und
DACs ansteuert. Ichhabe 16 Bit Wandler eingesetzt und auch
dementsprechende Spannungsreferenzen verbaut. Das Layout habe ich nach
diversen Application Notes optimiert.
Wenn ich jetzt den DAC nutzen möchte, um eine 'genaue' Spannung
auszugeben oder den ADC, um was zu messen, dann sollte ich ja eine
Kalibrierung vornehmen. Die Frage ist: wie kalibriere ichmein System, um
die maximal mögliche Genauigkeit zu erzielen? Offset und Gain einfach
anhand zweier Referenzmessungen bestimmen, oder eine Rampe fahren und
dann daraus Offset und Gain mit linearer Regression bestimmen?
gibt es noch andere Möglichkeiten? allgemein: worauf sollte ich noch
achten, um eine möglichst hohe Genauigkeit und reproduzierbarkeit der
Messungen zu erzielen?
Wir machen sowas grundsätzlich als Zweipunkt-Justage. Der ADC gibt z. B.
zwei Spannungen aus, sagen wir 1 V und 9 V, die man mit mit einem
entsprechend präzisen Multimeter komfortabel messen kann, die
Justierfaktoren werden errechnet und dann ist das fertig. Details wie
Nichtlinearität zu berücksichtigen ist zwar theoretisch möglich, man
muss sich aber überlegen, ob das sinnvoll ist. Wenn du eine
Linearitätsabweichung von z. B. 1/2048 = 12 Bit brauchst, nimmst du
einfacher einen 16 Bit Wandler. Das ist deutlich einfacher und unterm
Strich billiger.
Um einen ADC zu justieren, geht man im Prinzip analog vor. Zwei stabile
Spannungen erzeugen, diese messen, ein bisschen rechnen und gut isses.
Für sehr kleine Eingangsspannungen, die noch verstärkt werden, wird das
deutlich komplexer, aber das war ja nicht die Frage.
" diese messen, ein bisschen rechnen und gut isses"
und wie sieht dieses bisschen rechnen aus?!
Eine ähnliche frage hatte ich vor einigen Tagen hier auch schonmal
gestellt..wie so oft kam nichts brauchbares bei raus :-(
Auch bei zwei Messwerten kann man eine lineare Regression machen.
Konkret: Wenn der ADC bei 1 V den Wert A ausspuckt, und bei 9 V den Wert
B, dann ist bei Wert C die Spannung:
dmsfreak schrieb:> Die Mathematik entspricht der Definition einer Geraden durch zwei> Punkte.
Die Mathematik sagt aber auch, dass mit zwei Punkten bestenfalls eine
Gerade definiert ist. Mögliche Nichtlinearitäten fallen dabei
zwangsweise unter den Tisch.
Ovi schrieb:> gibt es noch andere Möglichkeiten? allgemein: worauf sollte ich noch> achten, um eine möglichst hohe Genauigkeit und reproduzierbarkeit der> Messungen zu erzielen?
Kommt drauf an was für ein ADC das ist, was an Schaltung noch davor
sitzt und - wie schon erwähnt wurde - wie genau und reproduzierbar (in
welchem Zeitraum -> Langzeitdrift von Widerständen, Spannungsreferenzen
usw.) das sein muss.
Fehler können abhängig von der Quellimpedanz und/oder Eingangsspannung
sein, Offsets und Verstärkung ebenso wie Nicht-Linearitäten.
Dazu driftet alles mehr oder weniger stark in Abhängigkeit von
Lufttemperatur, -Feuchtigkeit und -Druck.
Luftdruck dürfte hier zu vernachlässigen sein, da dieser bei
Widerständen und Spannungsreferenzen nur im sub-ppm Bereich eine Rolle
spielt. Bspw. liegt Manganin-Draht bei 0.023 uOhm/Ohm/kPa.
Luftfeuchtigkeit und Temperatur dagegen mit Sicherheit...
Zudem muss auch das Messequipment entsprechend genauer sein, um
Messunsicherheiten angeben können...
Man sollte sich ueberlegen, was das Ganze bringen soll. Um einen 16bit
ADC kalibieren zu koennen. muss der Messaufbau, dh Spannungsteiler, plus
Referenz besser als 10^-5 sein. Das waeren dann 10ppm. Ich bekomm zwar
eine Referenz mit kleinerer Drift aber nicht mit 10ppm absoluter
Genauigkeit. Bezahlbar. Widerstaende von 0.01% gibt's noch, aber eher
teuer. Das waeren dann aber 100ppm, dafuer mit 2ppm/K drift.
Die Nichtlinearitaet eines ADC messen zu wollen macht wenig Sinn.
Also was soll das Ganze?
Jetzt Nicht schrieb:> Man sollte sich ueberlegen, was das Ganze bringen soll. Um einen 16bit> ADC kalibieren zu koennen. muss der Messaufbau, dh Spannungsteiler, plus> Referenz besser als 10^-5 sein. Das waeren dann 10ppm. Ich bekomm zwar> eine Referenz mit kleinerer Drift aber nicht mit 10ppm absoluter> Genauigkeit. Bezahlbar. Widerstaende von 0.01% gibt's noch, aber eher> teuer.> Das waeren dann aber 100ppm, dafuer mit 2ppm/K drift.
Wenn die Anforderungen "möglichst hohe Genauigkeit und
Reproduzierbarkeit" so hoch sind, sollten die Kosten eigentlich keine
wesentliche Rolle spielen...
> Die Nichtlinearitaet eines ADC messen zu wollen macht wenig Sinn.
Das ist noch ohne teures Equipment machbar z.B.:
High-Performance ADC Linearity Test Using Low-Precision Signals in
Non-Stationary Environments
http://www.researchgate.net/profile/Degang_Chen/publication/4217671_High-performance_ADC_linearity_test_using_low-precision_signals_in_non-stationary_environments/links/0c96052a2015960eb3000000.pdf
oder
Low-resolution DAC-driven linearity testing of higher resolution ADCs
using polynomial fitting measurements
http://dl.acm.org/citation.cfm?id=2490376
oder
Testing of High Resolution ADCs using Lower Resolution DACs via
Iterative
Transfer Function Estimation
http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=5170452
>Wenn die Anforderungen "möglichst hohe Genauigkeit und
Reproduzierbarkeit" so hoch sind, sollten die Kosten eigentlich keine
wesentliche Rolle spielen...
Ich habe das Gefuehl der Poster hat keine Ahnung was er da machen will.
Deshalb mein Rat. Der ADC ist sicher gut genug wenn die Referenz gut
genug ist. Die Daten kann man den Datenblaettern entnehmen. Das Geheul
kommt dann erst wenn der ADC auf den hinteren 4 bit wachelt wo
eigentlich ein stabiles Bit erwartet wird.
Bei analogen Sensoren ist es, je nach Anforderung sinnvoll, diese
zusammen mit dem ADC durch einige Referenzpunkte zu vermessen und ggf.
additiv (Offset), bzw. multiplikativ, oder algorithmisch (Steigung) zu
kalibrieren, wenn das erforderlich sein sollte. Man kann das mit
Konstanten, Formeln, oder LU-Tabellen machen, wobei dann konsequenter
Weise die gesamte Kette (analoger Sensor, AD, DA, analoger Aktor)
einbezogen werden muss. Welche Genauigkeit dabei letzlich nötig ist und
welcher Aufwand dafür noch akzeptabel ist, muss der Entwickler
abschätzen.
Generell versucht man im µC-Bereich, dort wo es machbar ist, die
Eingangsgrössen digital zu generieren (z.B. Encoder), zu übertragen, zu
verarbeiten und ausgeben zu können.
Ansonsten, im Hobby- oder Consumerbereich einfach mal entspannt "5e
gerade sein lassen" und die Erbsen nur in jenen Lebenssituationen
zählen, wo es angebracht ist... ;-)
"Ich habe das Gefuehl der Poster hat keine Ahnung was er da machen will.
"
Wo ist jetzt bitte das Problem?!? Wo beantwortet das bitte die Frage?!
Er fragt wie man ein Eingangssignal Linearisieren kann PUNKT!!
Bisslang gibt es wie bei meinem Threat vor eingien Tagen viel bla bla
aber keine Brauchbare Hilfe..wie immer..
Wenn man keine Ahnung hat, sollte man wenigstens Verwirrung stiften?!
oder was?
>Er fragt wie man ein Eingangssignal Linearisieren kann PUNKT!!
Natuerlich kann man. Eine Frage der Anforderungen. Das Messequipment
muss ein Stueck genauer sein wie der Fehler, den man beheben will, sein.
Dann misst man soviele Punkte wie man haben moechte und legt zB eine
Gerade, oder ein Polynom durch.
Wenn ich das genauere Equipment schon habe, kann ich doch gleich dieses
verwenden... und das Ungenaue stehen lassen...
es geht um das WIE!!!
Völlig wurscht was für Werte!!
Er fragt nur wie man das generell! anstellt!!
Also nach dem Motoo, miss einmal bei Wert 1V dann bei 4V
PAcke diese in ein Array und lasse fdiese Funktion darüber laufen.....
ODer verwende so eine Formel, mit der kann man mit zwei Vorgabe Punkten
linearisieren!!
oderoderoder!
Lösungsvorschläge werden gesucht sind Gefasel
T506 schrieb:> Wo ist jetzt bitte das Problem?!? Wo beantwortet das bitte die Frage?!>> Er fragt wie man ein Eingangssignal Linearisieren kann PUNKT!!>> Bisslang gibt es wie bei meinem Threat vor eingien Tagen viel bla bla> aber keine Brauchbare Hilfe..wie immer..> Wenn man keine Ahnung hat, sollte man wenigstens Verwirrung stiften?!> oder was?
Dem TO wurde erklärt, wie man linear eine Fehlerkorrektur machen kann.
Ihm wurde auch aufgezeigt, wie man Nichtlinearitäten bestimmen und somit
eliminieren kann. Der TO hat sich aber nicht mehr gemeldet, sodass
keiner weiß, welche Anforderungen wirklich notwendig sind. Die Fragen
wurden also soweit es ging beantwortet.
Wo ist also dein Problem? Dass du trotz der Stichwörter und Links in
deinem, als auch in diesem Thread immer noch nicht in der Lage bist aus
zwei Punkten eine Gerade aufzustellen, dafür kann hier niemand etwas.
Also halte dich etwas zurück.
T506 schrieb:> Er fragt wie man ein Eingangssignal Linearisieren kann PUNKT!!
Nein, er fragt nach einer Kalibrierung - nicht nach einer
Linearisierung. Die Linearisierung bekommt man mit 2 Punkten nicht hin.
Wie man das mit der Kalibrierung mach hat Clemens oben schon
hingeschrieben. Solange der OP nicht erklärt, ob er wirklich den AD oder
nicht eher die gemessenen Sensorwerte kalibrieren will kommt man hier eh
nicht weiter.
Gerhard
Ovi schrieb:> wie kalibriere ich mein System, um die maximal mögliche Genauigkeit zu erzielen
Die Fragestellung halte ich für falsch. Eine "maximal mögliche
Genauigkeit" ist faktisch nicht zu erreichen. Alterung,
Temperatur/Luftfeuchte, Nichtlinearitäten, Störstrahlungen (Handys et
al.), Spannungsschwankungen, Abkühlung durch Wind, Verschmutzung usw.
usf. sind nicht in allen Kombinationen überprüfbar.
Anforderungen und Umweltbedingungen werden festgelegt, erst danach
kannst du kalibrieren. Dazu gehören dann auch Samplerate,
Mittelwertbildung etc pp.
Für die Bewertung des dynamischen Verhaltens von 16 Bit A/D Wandlern
finde ich diese Referenzdesign von AD sehr hilfreich:
http://www.analog.com/en/design-center/reference-designs/hardware-reference-design/circuits-from-the-lab/CN0254.html
dmsfreak schrieb:> Wir machen sowas grundsätzlich als Zweipunkt-Justage. Der ADC gibt z. B.> zwei Spannungen aus, sagen wir 1 V und 9 V,
Dann geht die Linie aber nicht durch den Nullpunkt. Entweder 1-Punkt,
oder 3-Punkt mit Null.
dmsfreak schrieb:> Wir machen sowas grundsätzlich als Zweipunkt-Justage. Der ADC gibt z. B.> zwei Spannungen aus, sagen wir 1 V und 9 V, die man mit mit einem> entsprechend präzisen Multimeter komfortabel messen kann, die> Justierfaktoren werden errechnet und dann ist das fertig. Details wie> Nichtlinearität zu berücksichtigen ist zwar theoretisch möglich, man> muss sich aber überlegen, ob das sinnvoll ist. Wenn du eine> Linearitätsabweichung von z. B. 1/2048 = 12 Bit brauchst, nimmst du> einfacher einen 16 Bit Wandler. Das ist deutlich einfacher und unterm> Strich billiger.
genauso mache ich das auch immer, einfache Geradengleichung
Y= m * X + b
oder man macht eine Tabelle, für jeden Digitalwert eine Spannung
eintragen
Mittelwertbildung über 8-32 Messungen ist auch kein Fehler wenn die
Messzeit passt. (für DC oder Batteriemessungen)
PS zum Titel verschenke ich ein "p"
X4U schrieb:> Ovi schrieb:>> wie kalibriere ich mein System, um die maximal mögliche Genauigkeit zu erzielen
Er will ja nicht die absolute max. Genauigkeit, sondern die max.
Genauigkeit seines Systems. Mit anderen Worten, er will das was er
aufgebaut hat so gut kalibrieren wie es sein Aufbau eben her gibt. Da
reicht u.U. ein 4stelliges Multimeter.
Klaus L, wie kommst du auf dieses schmale Brett? Warum soll die Gerade
nicht durch Null gehen? Du meinst möglicherweise, dass man bei 0 V eine
etwas höhere Messunsicherheit hat, das kann sein. Kann man leicht
ausrechnen.
Aber: Die wenigsten Leute interessieren sich für einen Spannungsgeber
von fast 0 V. Und die wenigen, die das brauchen, z. B. zur
Thermoelement-Simulation, bauen Geräte mit einem Spannungsteiler nach
dem DAC. Und absolut 0 V geben sollte nicht zu schwer sein. Das geht
sogar ohne DAC. :-)
Den Fall fast 0 V messen möchte ich hier nicht weiter vertiefen, das
geht zu weit.
dmsfreak schrieb:> laus L, wie kommst du auf dieses schmale Brett? Warum soll die Gerade> nicht durch Null gehen?
Weil man dann nur einen Punkt benötigt. Nimmst Du aber zwei ins Boot,
dann unterstellst Du, dass sie das nicht tut. 2 Punkte sind aber nötig,
um die Steilheit vieler Systeme im Arbeitspunkt abzubilden. Um das
Problem zu lösen, nutzen viele die abschnittsweise Geradenbildung.
Sauberer geht es dann mit einer Xhoch2 und Xhoch3.