Forum: Mikrocontroller und Digitale Elektronik Xmega ADC Kalibrierung


von DD (Gast)


Lesenswert?

Kurze frage an alle AD Experten.

Ich wollte meinen ADC am xemga etwas genauer machen.

Ich will bis 10V messen und benutze die interne 1V Referenz
mit einem Spannungsteiler 18K und 2K.

Ich hab zuerst eine GND Messung vorgenommen und mit folgendem Kalman 
gefiltert.

https://github.com/denyssene/SimpleKalmanFilter

Das hat einen ADC Messwert von rund 160 (nutze den 12 bit modus)
Nicht 200 wie im Applikation sheet 1.3 
(http://ww1.microchip.com/downloads/en/Appnotes/00002535A.pdf)
denke mal das ist noch oke ?

Den ziehe ich von allen zukünftigen Messungen ab.

als nächste wollte ich mit einer zwei Punkt Kalibrierung (min und max 
Messwert) eine Korrekturgerade machen... das könnte man ja nicht nur mit 
min und max sondern auch mit mehreren Punkten (lineare regression)

Ist das dann schon eine drei Punkt Kalibrierung? oder nutzt man dafür 
wirklich drei punkte und eine Parabel ?

Da wäre ja auch wieder eine regression möglich ?

MFG
DD

von Max M. (Gast)


Lesenswert?

3 Punkt ist 3 Punkt und dazu braucht man 3 Punkte.
Null, Max und 50% bieten sich da an.

Warum eigentlich Kalman?
Der ist doch zum abschätzen nicht messbarer Systemgrößen auf Basis 
fehlerbehafteter Messungen.
Warum nicht gleitender Mittelwert?

von DD (Gast)


Lesenswert?

Max M. schrieb:
> 3 Punkt ist 3 Punkt und dazu braucht man 3 Punkte.
> Null, Max und 50% bieten sich da an.

Und packt man das in eine gerade oder wie läuft das ab wenn ich meine 
drei punkte habe ? oder in eine Parabel ?

Max M. schrieb:
> Warum eigentlich Kalman?
Der code ist mir mal entgegen gesprungen ... Neugier probierlaune
> Warum nicht gleitender Mittelwert?
Wär sicher auch gegangen und einfacher.

von Max M. (Gast)


Lesenswert?

Der 50% Wert wird wohl schwerlich auf der geraden zwischen Null und Max 
liegen.
Auch die Parabel ist eine Näherung.
Aber eben eine bessere als die Gerade.

von Wolfgang (Gast)


Lesenswert?

DD schrieb:
> Und packt man das in eine gerade oder wie läuft das ab wenn ich meine
> drei punkte habe ?

Eine Gerade wird durch genau zwei Parameter beschrieben. Bei drei 
Punkten ist dein System überbestimmt und du kannst es i.A. nicht allen 
Punkten Recht machen. Lern man soetwas heutzutage nicht mehr in der 
Schule?
Bei drei Punkten kannst du eine Gerade bestimmen, die nach von dir 
festzulegenden Kriterien optimal ist. Der Herr Gauß hat z.B. die Summe 
der Fehlerquadrate minimiert.
https://de.wikipedia.org/wiki/Methode_der_kleinsten_Quadrate

von Max M. (Gast)


Lesenswert?

DD schrieb:
> Neugier probierlaune

Wenn Du so motiviert bist, könntest Du den Kalman z.B. auf die 
Temperaturdrift ansetzen.
Die ref Spg und die Widerstände sind ja nicht wirklich stabil.
100-200ppm bei den Widerständen und der 18K bekommt mehr Verlustleistung 
ab als der 2K.
Das wäre doch mal spannend wie genau Du das bekommst wenn Du den int. 
temp. Sensor des Xmega benutzt (muss auch kalibriert werden).

Aber die größten Abweichungen kommen oft aus den Ecken wo man nicht so 
genau hinsieht.
Woher kommen z.B. die 0-10V?
Irgendwo von extern, wo bei der simplen Messwertaufbereitung der nur 
mässig stabile GND zwischen Sender und Empfänger voll in die Messung 
eingeht?
Wie hoch ist die Quellenimpedanz, wie hoch die Impedanz Deiner Messung 
und wie stark verfälscht das das Ergebniss?

von DD (Gast)


Lesenswert?

Ja die 10V kommen von nem Solarpannel ich will damit messen ob das 
gerade gut bestrahlt wird:)

Max M. schrieb:
> Wenn Du so motiviert bist, könntest Du den Kalman z.B. auf die
> Temperaturdrift ansetzen.

Tatsächlich habe ich ein BME680 on bord, aber die Bosch lib macht das 
wahrscheinlich eh schon besser als ich es je machen könnte.
Impedanzen kann ich dir leider nicht nennen das übersteigt meine 
Messmittelfähigkeiten und Geldbörse :)

MFG
DD

von Hugo H. (hugo_hu)


Lesenswert?

DD schrieb:
> Da wäre ja auch wieder eine regression möglich ?

Ja.

von Alois (Gast)


Lesenswert?

DD schrieb:
> Kurze frage an alle AD Experten.
>
> Ich wollte meinen ADC am xemga etwas genauer machen.
>
> Ich will bis 10V messen und benutze die interne 1V Referenz
> mit einem Spannungsteiler 18K und 2K.
>
> Ich hab zuerst eine GND Messung vorgenommen ...
> Das hat einen ADC Messwert von rund 160 (nutze den 12 bit modus)
> Den ziehe ich von allen zukünftigen Messungen ab.


Dein 12-bit-Wandler sollte 'counts' zwischen 0 für 0V und 4096 für 10V 
auswerfen. 1 count enstpricht dabei 2.4mV.

Frage: Wie genau soll deine Messung denn ausfallen?

Die 160 counts entsprechen einer Spannung von 390mV. Ich würde sagen, da 
ist was faul und würde erst mal dem Problem nachgehen.

(Tipp: Messreihe 0V, 1V, 2V, ... 10V)

Ansonsten: Benutze eine 2-Punkt-Kalibrierung, Kalibrierpunkte bei 10% 
und 90% [Max M. (prokrastinator) hatte das schon angedeutet] - und gut 
ist.

Alois

von Wolfgang (Gast)


Lesenswert?

DD schrieb:
> Ja die 10V kommen von nem Solarpannel ich will damit messen ob das
> gerade gut bestrahlt wird:)

Spannung vom Solarpanel als Kriterium für Sonneneinstrahlung wäre 
dermaßen nichtlinear, dass du dir dann über die Linearität deines ADC 
auch keine Gedanken mehr zu machen bräuchtest.

von DD (Gast)


Lesenswert?

Alois schrieb:
> Dein 12-bit-Wandler sollte 'counts' zwischen 0 für 0V und 4096 für 10V
> auswerfen. 1 count enstpricht dabei 2.4mV.
>
> Frage: Wie genau soll deine Messung denn ausfallen?
>
> Die 160 counts entsprechen einer Spannung von 390mV. Ich würde sagen, da
> ist was faul und würde erst mal dem Problem nachgehen.

nöö ist im Datenblatt des Xmegas und in dem Link genau so spezifiziert.

Wolfgang schrieb:
> Spannung vom Solarpanel als Kriterium für Sonneneinstrahlung wäre
> dermaßen nichtlinear, dass du dir dann über die Linearität deines ADC
> auch keine Gedanken mehr zu machen bräuchtest.

Da hast du recht und was ändert des daran den momentanen volt wert genau 
zu ermitteln.

Wenn alles tut würde ich natürlich auch den lipo mit dem gleichen code 
überwachen :)

von Alois (Gast)


Lesenswert?

DD schrieb:
>> Die 160 counts entsprechen einer Spannung von 390mV. Ich würde sagen, da
>> ist was faul und würde erst mal dem Problem nachgehen.
>
> nöö ist im Datenblatt des Xmegas und in dem Link genau so spezifiziert.


Hast recht, ist in 1.3 Conversion Mode und 1.5.1 Conversion Result - 
Unsigned Mode beschrieben.

Die Output codes sind um ΔV (~200 counts, in deinem Fall 160 counts) 
nach oben verschoben. Dort steht auch, dass ΔV intern erzeugt wird um 
mit dem ADC sicher 0V, ergo von -ΔV bis Vref-ΔV messen zu können.

Alois hättes sich halt nicht auf 1.12.2 Offset Error – Single-Ended 
Channels alleine verlassen sollen ...


Nochmals: Benutze eine 2-Punkt-Kalibrierung, Kalibrierpunkte bei 10% und 
90% - und gut ist. Damit werden auch die ΔV-counts automatisch 
berücksichtigt.

Hatte ich schon mal gefragt: Wie genau soll deine Messung denn 
ausfallen? Ev. solltest du für die 2 Widerstände im Vorteiler solche mit 
kleinem, zumindest aber gleichem TK einsetzen.

Schaltungstrick:
10k+10k+10k nach oben, 10k||10k||10k nach Masse -> (3x10k):(10k/3) = 
9:1.
Die 6 Widerstände 1% vom gleichen Gurt und du hast einen nahezu 
optimalen Teiler (<< 1%, exzellenter TK) für kleines Geld.

Alois

von DD (Gast)


Lesenswert?

Alois schrieb:
> Nochmals: Benutze eine 2-Punkt-Kalibrierung, Kalibrierpunkte bei 10% und
> 90% - und gut ist. Damit werden auch die ΔV-counts automatisch
> berücksichtigt.

Das wollte ich wissen DANKE! für sowas fehlt mir die Erfahrung wie die 
Punkte zu wählen sind nicht das Know how :)

Alois schrieb:
> Schaltungstrick:
> 10k+10k+10k nach oben, 10k||10k||10k nach Masse -> (3x10k):(10k/3) =
> 9:1.
> Die 6 Widerstände 1% vom gleichen Gurt und du hast einen nahezu
> optimalen Teiler (<< 1%, exzellenter TK) für kleines Geld.

Das ist ein super TIPP! nur etwas platz aufwendig :) passt glaub so 
nicht mehr auf mein Design wenn ich zuhause bin schau ich in den plan 
was drinnen ist

MFG
DD

von Peter M. (r2d3)


Lesenswert?

Hallo Alois,

Alois schrieb:
> Nochmals: Benutze eine 2-Punkt-Kalibrierung, Kalibrierpunkte bei 10% und
> 90% - und gut ist. Damit werden auch die ΔV-counts automatisch
> berücksichtigt.

warum sollte man ein Gleichspannungsmessgerät mit einem Messpunkt bei 
10% und nicht bei Null justieren?

Für die Nullpunktkalibrierpunkt braucht man noch nicht einmal eine 
Quelle.

von Max M. (Gast)


Lesenswert?

Schau auch in die AVR1300 App Note von MC.
Da steht alles zur Kalib drin.

Der Xmega hat auch Kalib Daten im NVM. Wird während der Produktion 
ermittelt und muss von Dir in das ADC Register geladen werden.
https://www.kampis-elektroecke.de/mikrocontroller/xmega-adc/
Verbessert die Linearität auf +-2LSB
Lies auch die Errata zum ADC.
Da ging damals einiges nicht wie im DB beschrieben. K.A. ob die das je 
gefixt haben.

Um Offset und Gain musst Du Dich aber selber kümmern.

Peter M. schrieb:
> warum sollte man ein Gleichspannungsmessgerät mit einem Messpunkt bei
> 10% und nicht bei Null justieren?

Man verschiebt die als ideal angenomme Gerade etwas in die Mitte des 
realen gekrümmten Verlaufes. Etwas mehr Fehler bei 0 und 100%, dafür 
weniger in der Mitte.
Außerdem steuert man den ADC ja nicht voll aus, so das 90% ADC ja eher 
bei dem 100% Messwert liegen.
Man kann einen der Punkte auch dahin legen wo man besonders genau sein 
will, wenn einem der Rest relativ unwichtig ist.

Das macht jeder wei er meint und wie es am Besten für ihn passt.
10% / 90% ist so ein Wert aus der Praxis

von DD (Gast)


Lesenswert?

Max M. schrieb:
> Der Xmega hat auch Kalib Daten im NVM. Wird während der Produktion
> ermittelt und muss von Dir in das ADC Register geladen werden.
> https://www.kampis-elektroecke.de/mikrocontroller/xmega-adc/
> Verbessert die Linearität auf +-2LSB
> Lies auch die Errata zum ADC.
> Da ging damals einiges nicht wie im DB beschrieben. K.A. ob die das je
> gefixt haben.

Hab ich durchgelesen und ist auch schon umgesetzt im code ... bzw habe 
ich mich an dieses Tut schon gehalten

Ich hab meinen Spannungsteiler mit 10K und 1K aufgebaut ... logisch ich 
duppel klar bei 10V Solarzelle und 1V Referenz ist das der maximale wert 
hätte ich nur etwas überlegen müssen nicht im Schaltplan schauen.

MFG
DD

von DD (Gast)


Lesenswert?

Max M. schrieb:
> Man verschiebt die als ideal angenomme Gerade etwas in die Mitte des
> realen gekrümmten Verlaufes. Etwas mehr Fehler bei 0 und 100%, dafür
> weniger in der Mitte.
> Außerdem steuert man den ADC ja nicht voll aus, so das 90% ADC ja eher
> bei dem 100% Messwert liegen.
> Man kann einen der Punkte auch dahin legen wo man besonders genau sein
> will, wenn einem der Rest relativ unwichtig ist.

Ahhh das dann quasi der Trick das man keine Parabel nehmen muss und in 
der Praxis noch genau genug ist ?

von Max M. (Gast)


Lesenswert?

DD schrieb:
> Ahhh das dann quasi der Trick das man keine Parabel nehmen muss und in
> der Praxis noch genau genug ist ?

Was ist genau genug?
Dem einen reichen unkalibrierte 8bit, dem anderen sind 19bit ENOB gerade 
so akzeptabel.
In Deinem Fall spielt das alles garkeine Rolle, aber Du möchtest spielen 
also leg mal fest wie Deine maximale Abweichung vom Ideal sein darf und 
wenn Du das eng genug legst, wirst Du massive Schwierigkeiten haben das 
überhaupt mit einem integrierten 12bit Wandler zu packen.
10mV ist okay. 12Bit ADC, 2LSB Linearitätsfehler, mit 2 Punkt und ADC 
Kalib Daten aus dem NVM zu machen
5mV und Du musst schon min die 3 Punkt kalib machen und da ist die Temp 
drift nicht mal drin.

Bei 1uV kannst Du Dich dann auf den Kopf stellen.
Das ist zwar mit einem 24bit ADC rechnerisch möglich, in der Realität 
19Bit ENOB bei konstanter Temperatur zu erreichen ist aber eine fast 
unlösbare Aufgabe die man auch mit Geld nicht erschlagen kann.
Also genau genug ist es wenn es genau genug für deine Aufgabe ist.

Wenn Du die Temperaturerhöhung von 0,1°C in einem Jahr auf 100 Jahre 
hochrechnest, um Klimamodelle zu erstellen, dann sollten das auch 
wirklich 0,10 °C sein und nicht 0,197°C mit ADC Fehler.

von DD (Gast)


Lesenswert?

Max M. schrieb:
> 10mV ist okay. 12Bit ADC, 2LSB Linearitätsfehler, mit 2 Punkt und ADC
> Kalib Daten aus dem NVM zu machen

Das klingt doch ganz vernünftig! mehr brauche ich wohl auch nicht würde 
ich sagen um ne Solarzelle und ein lipo zu überwachen.

Also wirds ne zweipunkt

von Wolfgang (Gast)


Lesenswert?

DD schrieb:
> Da hast du recht und was ändert des daran den momentanen volt wert genau
> zu ermitteln.

Du kannst natürlich ermitteln, was du willst. Mit der Spannungsmessung 
bekommst du allerdings eine Kreuzung aus Thermometer und nichtlinearem 
Irgendwassensor.

von Max M. (Gast)


Lesenswert?

Wolfgang schrieb:
> Du kannst natürlich ermitteln, was du willst. Mit der Spannungsmessung
> bekommst du allerdings eine Kreuzung aus Thermometer und nichtlinearem
> Irgendwassensor.

So sieht das aus.
Der ADC misst dann relativ genau einen 'Sensor' der 'irgendwas' misst 
das in einem relativ losen Zusammenhang mit der Sonneneinstrahlung 
steht.
Und mit der Temperatur, der Belastung und x Metern Kabel dazwischen und 
das es zwischen dem GND der Xmega PCB und der GND der Solarzelle einen 
mehr oder minder dramatischen Unterschied gibt.
Als ob man mit der Mikrometerschraube eine wabbelige Toastbrotscheibe 
misst.
Aber die Mikrometerschraube ist super kalibriert :-)

von Alois (Gast)


Lesenswert?

DD schrieb:
> Alois schrieb:
>> Nochmals: Benutze eine 2-Punkt-Kalibrierung, Kalibrierpunkte bei 10% und
>> 90% - und gut ist. Damit werden auch die ΔV-counts automatisch
>> berücksichtigt.
>
> Das wollte ich wissen DANKE! für sowas fehlt mir die Erfahrung wie die
> Punkte zu wählen sind nicht das Know how :)

10% deshalb, um von 0V weg zu kommen. Durch den ΔV-Trick wäre dies hier 
nicht notwendig.

Der Nachteil des ΔV-Tricks ist, dass du die beschriebenen 200 counts an 
der 100%-Vollaussteuerung verlierst. Drum gehst da auf 90%.

10% und 90% sind nicht in Stein gemeißelt. Max M. hatte ja Beispiele 
genannt, wo man davon abweichen wird.

>
> Alois schrieb:
>> Schaltungstrick:
>> 10k+10k+10k nach oben, 10k||10k||10k nach Masse -> (3x10k):(10k/3) =
>> 9:1.
>> Die 6 Widerstände 1% vom gleichen Gurt und du hast einen nahezu
>> optimalen Teiler (<< 1%, exzellenter TK) für kleines Geld.
>
> Das ist ein super TIPP! nur etwas platz aufwendig :) passt glaub so
> nicht mehr auf mein Design wenn ich zuhause bin schau ich in den plan
> was drinnen ist

Kam nicht ganz richtig rüber: So was macht ich nur, wenn es mal extrem 
genau und/oder es noch 'heute' sein muss (z.B. Teiler in einem 
DIY-Messgerät).

Mit der 2-Punkt-Kalibrierung ist die Genauigkeit des Teilers unwichtig - 
weil der gleich mitkalibriert wird. Aber noch mal: Bleib weg von 100% 
Aussteuerung - es könnten leicht mal nur 95% sein (bei 5% Widerständen 
(*)).

Alois

(*) Ich habe meine Alt-Widerstände so gut wie aufgebraucht - und fülle 
bedrahtet nur noch mit 1% aus der E96-Reihe auf. Hauptwerte: 10, 15.0, 
22.1, 33.2, 47.5, 68.1

von Max M. (Gast)


Lesenswert?

Alois schrieb:
> Der Nachteil des ΔV-Tricks ist, dass du die beschriebenen 200 counts an
> der 100%-Vollaussteuerung verlierst. Drum gehst da auf 90%.

Man verliert nichts.
Man zieht eine gerade Linie zwischen 10% und 90% und die verläuft 
natürlich ziemlich genau durch die Punkte durch die auch die 0% 100% 
Messunge gelaufen wäre.
Ich könnte auch bei 20% 50% oder 40% 45% messen.
Wird eben nur immer ungenauer in den Randbereichen, aber die Linie ist 
immer gerade und läuft durch 0 und 100%

von DD (Gast)


Lesenswert?

die Zweitpunkt Kalibrierung ist jetzt drinnen.
Es gibt trotzdem noch ein offeset, aber ich habe einen verdacht.

Ich nehme die ADC counts und rechne sie direkt in Spannung um (Adc 
Auflösung und ref sind ja bekannt)

Diese Spannung 0.2644V entspricht zb 3.48V in der Realtät.
Wahrscheinlich ist es schlauer bei der Zweipunkt Kalibrierung sich 
gleich die Counts zu Schnappen. Durch die Umrechnung bringe ich ja nur 
weitere Ungenauigkeit rein fällt mir so im nachhinein auf.

MFG
DD

von Max M. (Gast)


Lesenswert?

DD schrieb:
> die Zweitpunkt Kalibrierung ist jetzt drinnen.
> Es gibt trotzdem noch ein offeset

Das widerspricht sich. Hättest Du richtig kalibriert und würdest mit den 
Kalibrierdaten richtig umrechnen, gäbe es die Abweichung (fast) nicht 
mehr.

Durch die 2 Punkt Kalib bekommst Du eine Nullpunktverschiebung und eine 
Steigung.
Also einen Offset und einen Multiplikator.
Natürlich brauchst Du dann auch eine Berechnung deren Fehler klein genug 
ist.

von DD (Gast)


Lesenswert?

Max M. schrieb:
> Das widerspricht sich. Hättest Du richtig kalibriert und würdest mit den
> Kalibrierdaten richtig umrechnen, gäbe es die Abweichung (fast) nicht
> mehr.

Wenn man an stelle der umgerechneten Spannung die zwei Punkt mit den ADC 
counts macht so das am ende ne Spannung rausfällt, ist es auf 0.01V 
genau mit dem Multimeter. Genauer geht wohl ich nicht mit einem 
Multimeter für Otto normal verbrauchter :) Aus Interesse werden ich aber 
auch 3 Punkt probieren...
Wird aber wahrscheinlich in der Praxis nicht die Welt bewegen mit so nen 
ADC

MFG
DD

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.