Forum: Mikrocontroller und Digitale Elektronik Kalibrierprozedur Spannungsmessung ADC


von Andreas (Gast)


Lesenswert?

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.

von Wolfgang (Gast)


Lesenswert?

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.

von Purzel H. (hacky)


Lesenswert?

Eine Zweipunkt Prozedur. Ein Kurzschluss am Eingnag und eine bekannte 
Spannung. Wo exakt liegt das Problem ?

von runtastic (Gast)


Lesenswert?

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.

von Andreas (Gast)


Lesenswert?

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

von Purzel H. (hacky)


Lesenswert?

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.

von Andreas (Gast)


Lesenswert?

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?

von Wolfgang (Gast)


Lesenswert?

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 ;-)

von Chloddno (Gast)


Lesenswert?

Irgendwie fehlt da ein Stueck Mathematik.

von Andreas (Gast)


Lesenswert?

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?

von Wolfgang (Gast)


Lesenswert?

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.

von Andreas (Gast)


Lesenswert?

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
}

von Harald W. (wilhelms)


Lesenswert?

Andreas schrieb:

> - Kann ich mir die Offsetkompensierung ersparen wenn ich mit einem
> Faktor multipliziere?

Nein.

von Chloddno (Gast)


Lesenswert?

Bei einem Wert von Null ist der Multiplikator irrelevant.
Ich wuerd man die Geradengleichung anschauen.

von Harald W. (wilhelms)


Lesenswert?

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

von Andreas (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.