Hallo, ich habe eine simple Spannungsmessung mithilfe eines OPVs und einem 12bit ADC u(uc). Nun möchte ich eine art Kalibrierprozedur durchführen, um die Fehler des OPVs und der Widerstände zu kompensieren. Eine "Ein-Punkt-Kalibrierung" sollte ausreichen. Hat jemand schon Erfahrungen in diesem Thema sammeln können? Wie gehe ich am besten vor, im speziellen was den code betrifft? Dachte z.B daran, eine Spannung anzulegen und diese mit einem anderen Kalibrierten Spannungsmessgerät zu messen. Dieser Wert wird dem uC übermittelt und mit dem mit dem vom uC gemessenen Wert verglichen. Die Differenz von den beiden Werten wird vom uC gespeichert und in Zukunft vom gemessenen ADC Wert abgezogen.
Andreas schrieb: > Eine "Ein-Punkt-Kalibrierung" sollte ausreichen. Gerade wenn du systematische Fehlerquellen hast (OP mit Offset-Spannung und verstärkungbestimmende Widerstände), solltest du über Zwei-Punkt-Kalibrierung nachdenken, damit du beides im Griff hast.
Eine Zweipunkt Prozedur. Ein Kurzschluss am Eingnag und eine bekannte Spannung. Wo exakt liegt das Problem ?
Ein Relais am Eingang das entweder dein Signal durch leitet oder gegen Masse schaltet. Beim einschalten liegt das Relais gegen Masse und du misst den Offset. Dann umschalten und den gemessenen Offset abziehen.
Bezüglich einer Zweipunkt kalibrierung, wie mache ich am besten die Auswertung bei einer ADC Messung (wenn der Kurzschlusswert und ein bekannter Wert vorhanden sind)?
Wir wissen leider nichts ueber das Umfeld. Bei 12 bit koennen wir auf 0.1% genau messen. Das Schlimmste wird der Offset sein. Also bei Null am Eingang diesen ADC Wert festhalten von allen Messwerten abziehen. Dann bleiben noch die Verstaerkungsfehler. Um wieviel ist der Maximalwert daneben? In den ueblichen Anwendungen laesst man das dann bleiben, und akzeptiert ein Prozent oder so als Fehler. Man kann diesen Falktor auch bestimmen und dann bleibt uebrig : Temperaturgang des Offsets, Temperaturgang der Verstaerkung, Nichtlinearitaeten.
also konkret handelt is sich um einen 12bit ADC. Wenn ich jetzt den Wert hole bei kurzgeschlossenem Eingang habe ich den Offsetfehler. Den werde ich bei JEDER Messung dann abziehen. Bezüglich dem Verstärkungsfehler, ich ermittle den Wert bei einer bekannten größe (z.b bei 1V). Wie mache ist das am Vernünftigsten im Code bei einer ADC Messung um den Verstärkungsfehler wegzurechnen?
Andreas schrieb: > Wie mache ist das am Vernünftigsten im Code bei einer ADC Messung um den > Verstärkungsfehler wegzurechnen? Du multiplizierst das Wandlerergebnis mit einem Skalierungsfaktor, der so groß ist, dass der richtig Wert herauskommt ;-)
Chloddno schrieb: > Irgendwie fehlt da ein Stueck Mathematik. denke ich nicht, nur ein stück erfahrung. möchte das rad nicht neu erfinden. machst du das leicht?
Andreas schrieb: > Wie mache ist das am Vernünftigsten im Code ... Bevor es an den Code geht, muß erstmal der Algorithmus, i.e. die Berechnungsformel stehen. Andreas schrieb: > denke ich nicht, nur ein stück erfahrung. Ich werf mal die Stichworte "Textaufgabe" und "Dreisatz" in die Debatte.
So, hab mal was geschrieben wie ich das jetzt so machen würde. Folgende Fragen stelle ich mir noch: - Kann ich mir die Offsetkompensierung ersparen wenn ich mit einem Faktor multipliziere? Der sollte dort schon eingerechnet sein. - Sollte ich noch eine Abfrage reinnehmen, das sicherstellt das bei der Berechnung des Faktors kein Blödsinn vom ADC gemessen wird. Also sollte der Wert innerhalb eines Vernünftigen Bereich sein.
1 | //Die errechneten Counts bei einer bekannten Größe am Eingang
|
2 | #define CALCOUNT 2345
|
3 | |
4 | float value; |
5 | float offset; |
6 | float calvalue; |
7 | |
8 | |
9 | void get_offset(void) |
10 | {
|
11 | short_input(); |
12 | offset=getadc(); |
13 | }
|
14 | |
15 | void get_calvalue(void) |
16 | {
|
17 | set_ext_voltage(1); |
18 | calcvalue = getadc() - offset; |
19 | calcvalue = calcvalue/CALCOUNT; |
20 | |
21 | }
|
22 | |
23 | read_adc(void) |
24 | {
|
25 | |
26 | value = getadc(); |
27 | |
28 | value = value - offset; |
29 | value = value*CALCCOUNT; |
30 | }
|
Andreas schrieb: > - Kann ich mir die Offsetkompensierung ersparen wenn ich mit einem > Faktor multipliziere? Nein.
Bei einem Wert von Null ist der Multiplikator irrelevant. Ich wuerd man die Geradengleichung anschauen.
Chloddno schrieb: > Bei einem Wert von Null ist der Multiplikator irrelevant. > Ich wuerd man die Geradengleichung anschauen. Die Wahrscheinlichkeit, das sich der Nullpunkt ändert, ist wesentlich grösser als das sich der Verstärkungsfaktor ändert. Bei letzteren reicht meist eine einmalige Einstellung beim Bau. Den Nullpunkt dagegen sollte man in wesentlich kürzeren Zeitabständen korrigieren. Gruss Harald
Chloddno schrieb: > Bei einem Wert von Null ist der Multiplikator irrelevant. > Ich wuerd man die Geradengleichung anschauen. ist die wirklich notwendig?
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.