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
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?
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.
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.
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
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?
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
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
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.
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 :)
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
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
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.
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
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
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 ?
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.
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
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.
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 :-)
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
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%
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
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.
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