Hallo!
Welche Auflösung wird erreicht bei der Messung der Eigenspannung?
Also ich hab hier einen AtMega32 und messe damit seine
Versorgungsspannung, MUXER auf AVCC messung an Kanal 30 ( 1.22V BG Diode
)
Wie genau kann ich damit nun messen? Sollte doch eigentlich auf min. 5mV
genau gehen oder nicht ?
Danke
MfG
Hugo E.
Hugo E. schrieb:> Wie genau kann ich damit nun messen? Sollte doch eigentlich auf min. 5mV> genau gehen oder nicht ?
Da du den "Kehrwert" misst, ändert sich die Auflösung mit der Spannung.
Und 5mV sind out-of-the-box nicht drinnen, die BG-Diode schwankt über
den erlaubten Vcc- und Temperaturbereich um ca. 20mV, der "Startwert" um
bis zu 200mV.
Naja ich messe die Spannung erst 8 mal bevor ich das Ergebnis als
tatsächliches ergebnis ansehe, da die BG Diode ja hochohmig ist und so.
soll heißen, besser als 20mV genauigkeit bekommt man nicht hin ?
8 mal Messen unterdrückt Fehler durch Rauschen.
Es ändert nichts daran, dass die BG-Diode, je nach
Exemplar 1,15 bis 1,35 V liefert.
(Datenblatt: "Internal Voltage Reference Characteristics")
Bei 5,0 V liefert der ADC 235 bis 276,
bei 2,7 V liefert der ADC 436 bis 512.
Allerdings kann man den ADC-Wert bei bekannter Spannung
als Referenz nehmen. - Wie sich Veränderungen der
Betriebsspannung auswirken, lässt sich dazu auch berechnen.
Besser als 15...20 mV über den erlaubten Temperaturbereich
wird die Messgenauigkeit aber kaum.
Naja gut 15-20mV wären ja schon in Ordnung, was müsste ich dazu alles
machen, den µC kalibrieren, also einmal die exakte Spannung der BG Diode
feststellen, und was wäre noch zu machen um zumindest diese 15-20mV
Genauigkeit zu erhalten?
Hugo E. schrieb:> und was wäre noch zu machen um zumindest diese 15-20mV> Genauigkeit zu erhalten?
Zuerst mal ausrechnen, wieviel mV ein Bit bei deiner gewünschten
Spannung ausmacht. Wie oben schon geschrieben, du misst den Kehrwert,
ein Bit entspricht also nicht immer gleichvielen mV.
Dann überlegen, in welchem Temperaturbereich die Schaltung laufen und
exakt messen soll. Ggfs Umgebungstemperatur messen, und die Berechungen
nachjustieren.
Dann, nach Einstellen des ADMux auf Vbg lange warten, anschließend
mehrere Messungen durchführen und Mitteln. Ohne die Wartezeit verhunzen
dir die ersten paar versauten Messungen den Mittelwert.
Hallo
Also das ganze soll schon über nen recht hohen Temperaturbereich von
-10° - +30° gehen ...
Das Problem ist, es ist nicht so dass ich einmal die Spannung messe und
fertig, sondern das ziel dieses Gerätes ist immer seine eigene
Versorgung zu messen und weiterzusenden.
Ich mittle das Ergebnis nicht, sondern messe 8 mal und verwerfe die
ersten 7, hab ich so im Internet gelesen, dass man das bei der internen
BGD machen soll, weil sie so hochohmig ist. Hab hier mal aufgebaut, von
10 Messungen hab ich 9x 5.017 und 1x 5.037, mit nem exakten Multimeter
hab ich 5.024V gemessen. funktioniert also eigentlich recht gut ? Dabei
hab ich die BGD nichtmal kalibriert, sondern sie wie im Datenblatt mit
1.22V angegeben angenommen.
Hugo E. schrieb:> Ich mittle das Ergebnis nicht, sondern messe 8 mal und verwerfe die> ersten 7, hab ich so im Internet gelesen, dass man das bei der internen> BGD machen soll, weil sie so hochohmig ist.
Kann man so machen. Kommt aber eigentlich nur auf die Wartezeit nach
Anlegen der BG-Spannung an den AD-Muxer bzw S/H-Cap an. Ob du die
Wartezeit durch delay-schleifen, durch einen Timer oder durch
Dummy-Messungen machst, ist wurscht.
Und wenn du den ADC NUR für diese Messung verwendest, du also nicht
ständig die Referenz-Quelle bzw den Mux umstellst, brauchst garnicht
warten.
In dem Fall würde ich einen gleitenden Mittelwert o.Ä. bilden, damit
kriegst du noch etwas mehr Auflösung (nicht Genauigkeit) hin.
> 9x 5.017 und 1x 5.037,
Schwanken die zufällig genau um ein Bit?
> Dabei> hab ich die BGD nichtmal kalibriert, sondern sie wie im Datenblatt mit> 1.22V angegeben angenommen.
Dann hast du Glück gehabt... Ich hab hier z.B. nen Tiny liegen, der nur
ca. 1.14V hat.
Hallo!
Danke für die Antwort, ich muss den Muxer die umschalten! ich messe in
der Sekunde aber öfters die BG- Referenz.
in der Application Note AVR121 steht auch drinnen wie man die
Genauigkeit erhöht wenn man mehrere Messungen hintereinander macht, nur
weiß ich nicht wie die das machen, denn Mitteln tun die das nicht so
einfach. Kannst du mir vielleicht sagen wie die das machen?
Danke
Lg
Hugo
Sorry meinte natürlich die Auflösung zu erhöhen!!!
Es schwankt manchmal genau 1LSB je nachdem wies gerade steht, wenns
genau dazwischen ist natürlich öfters. wenn du weißt wie ich das meine
Lg
Hugo E. schrieb:> Wie kann ich das nun machen, dass ich zb. 12 Bit genauigkeit erhalte?
Nichts, die Gesetze der Physik stehen nicht im Gesetzbuch, Du kannst sie
also weder brechen noch umgehen.
> 4> Messungen oder? und dann? Das verstehe ich nicht gannz
Das könnte die Auflösung verbessern, aber nicht die Genauigkeit. Die ist
schon alleine aufgrund der Exemplarstreuung und Drift der
Bandgap-Spannung nicht gegeben.
Als Batterie-Checker und Not-Aus bei Unterspannung reicht die
erreichbare Genauigkeit und Auflösung allemal. Willst Du Präzision, so
musst Du auch den entsprechenden Aufwand treiben.
...
Hugo E. schrieb:> Wie kann ich das nun machen, dass ich zb. 12 Bit genauigkeit erhalte? 4> Messungen oder? und dann? Das verstehe ich nicht gannz
"echte" 12 Bit kriegst du damit nicht, das setzt ein ganz spezielles
Rauschen auf deinem Eingangssignal vorraus.
Sowas in etwa könntest du aber verwenden:
1
uint16_tavg;
2
// in der ADC-Complete ISR bzw nach der Eigenspannungsmessung
3
{
4
uint16_tx=avg>>6;
5
avg-=x;
6
avg+=ADC;
7
}
schon hast du (nach längerem "einschwingen", wenn "avg" mit 0
vorinitialisiert wird) in "avg" 16 bit Daten.
Wieviele von den 16Bit nützlich sind, und wieviele davon nur
"Zufallswerte" sind, musst du selber rauskriegen/ausprobieren.
sorry ja ich meine Auflösung, messen möchte ich eine 1.235V LM4041
Referenzspannung die ist recht genau!
ich möchte nur die Auflösung ein wenig erhöhen auf 12 Bit oder so, wieso
ist dein Rechenergebnis nur manchmal richtig oder wie soll ich das
verstehen? Und wie kann ich denn, das 1LSB rauschen erzeugen ?
Danke
Lg
Hugo E. schrieb:> ich möchte nur die Auflösung ein wenig erhöhen auf 12 Bit oder so, wieso> ist dein Rechenergebnis nur manchmal richtig oder wie soll ich das> verstehen?
Die Rechnung von mir oben läuft kontinuierlich. nach jeder Messung wird
der Mittelwert aktualisiert. Ist aber kein normaler Mittelwert, da kurz
zurückliegende Messungen stärker gewichtet werden als alte.
Probiers einfach mal aus.
In Excel/oocalc eine Spalte mit 500+zufall(100) füllen, die andere
spalte mit Formel "wert drüber"- "wert drüber"/64 + Spalte daneben.
> Und wie kann ich denn, das 1LSB rauschen erzeugen ?
Rauschgenerator? Vermutlich aufwändiger als gleich einen 12Bit-ADC zu
verwenden.
Einfach hoffen, das es von selber genug rauscht?
Hallo!
In der AVR121 ist das anders gemacht oder ?
Das addiert sich doch immer weiter auf das ergebnis oder ? und
irgendwann bin ich einfach mal über 16-Bit und aus, das wars ? Ich
schieb ja AVG binär 6 nach rechts ? macht also zb. aus 500 -> 7 macht
dann zb. vorher avg=500 danach -7 und danach wieder ADC dazu also zb.
993 oder?
Hugo E. schrieb:> In der AVR121 ist das anders gemacht oder ?
Vermutlich. Machs halt so wie in der Appnote, wenn du deren Code
verstehst.
> Das addiert sich doch immer weiter auf das ergebnis oder ? und> irgendwann bin ich einfach mal über 16-Bit und aus, das wars ?
Nö, über 16bit kommt das nicht raus, es kommen ja immer max. 10 bits vom
ADC nach.
> Ich> schieb ja AVG binär 6 nach rechts ? macht also zb. aus 500 -> 7 macht> dann zb. vorher avg=500 danach -7 und danach wieder ADC dazu also zb.> 993 oder?
Ja. Im nächsten Durchlauf werden dann 14 abgezogen. usw.
Nach vielen hundert Durchläufen steht avg dann z.B. auf 32000. es werden
500 abgezogen (32000>>6). Es werden 500 (ADC) dazugezählt. => Ergebnis
ist wieder 32000. Kein Überlauf. Auch wenn ADC immer am Anschlag (1023)
ist, läufts nicht über.
Würdest du aber wissen wenn du es, wie vorgeschlagen, einfach mal
ausprobiert hättest.
das langsame "Auffüllen" von avg lässt sich beschleunigen, wenn das bei
Programmstart auf ADC<<6 statt auf 0 initialisiert wird.