Pin 17 vom IC1. Das sollte sich als Referenz für die Batteriemessung eignen.
Hallo,
ich Suche gerade nach einer Möglichkeit beim AAR04 die aktuelle Batteriespannung zu ermitteln. Meine erste Idee war, wie beim Asuro und beim NIBObee hierfür die interne Referenzspannung des Controllers zu verwenden. Die interne Referenzspannung beim ATmega 328P beträgt jedoch nur 1,1 V. Der Spannungsabfall an R31 ist jedoch deutlich größer. Wozu dann überhaupt dieser Spannungsteiler aus R31 und R32?
Im Schaltplan ist eine externe Referenzspannung von 3,3 V angegeben. Allerdings verstehe ich nicht, wo diese Spannung herkommt und ob sich diese für die Ermittlung der Batteriespannung eignet. Hat jemand eine Idee?
Gruß
Fraggle
Geändert von Fraggle (31.12.2012 um 14:32 Uhr)
Pin 17 vom IC1. Das sollte sich als Referenz für die Batteriemessung eignen.
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Ahhh, jetzt sehe ich auch wo die 3,3 V herkommen. Also versuche ich es mit der externen Referenzspannung. Vielen Dank!
Du kannst auch auf anderem Wege direkt messen, die interne Spannungsreferenz dürfte genauer sein als die 3,3V vom FT232. Dazu musst du ARef auf VCC stellen und den Messkanal Vin auf VBG (interne 1,1V Spannungsreferenz) konfigurieren.
Die Spannung berechnet sich dann wie folgend (ADC = Wert im ADC-Register nach der Wandlung, VCC = Versorgungsspannung, VBG = interne Referenzspannung):
ADC = Vin / ARef * 1024 = VBG / VCC * 1024
Nach Umformung: VCC = 1024 / ADC * VBG
mfG
Markus
Tiny ASURO Library: Thread und sf.net Seite
ich habe selbst gerade feststellen müssen, dass die 3,3V vom FT232 völlig ungeeignet ist. Mit einem Multimeter gemessen beträgt diese 4,1 V im USB-Betrieb, bei Batteriebetrieb nochmals deutlich darüber. So kann es nicht gehen, ich werde jetzt die Idee von Markus umsetzen, vielen Dank dafür.
Gruß
Fraggle
- - - Aktualisiert - - -
@Markus: Wenn ich die interne Referenzspannung verwende, habe ich doch nur die Möglichkeiten a) Betriebsspannung als Referenz oder b) intern bereitgestellte Spannung (1,1V) als Referenz zu verwenden. Deinen Satz: "Dazu musst du ARef auf VCC stellen und den Messkanal Vin auf VBG (interne 1,1V Spannungsreferenz) konfigurieren" verstehe ich nicht. Wie geht das?
Hallo
Ein interessantes Thema. Schau mal ins Datenblatt unter "Table 24-4. Input Channel Selections" Um die internen 1.1V zu messen muss der Kanal 14 (0b1110) ausgewählt werden.
Zur Formel: Ich würde es so ausrechnen:
Vcc(=VREF)/1023 = 1.1V/ADC-Wert.
Ich glaube, der R29 (1k) muss entfernt werden und REFS1:0 muss 0:1 sein: "AVCC with external capacitor at AREF pin"
Gruß
mic
Geändert von radbruch (31.12.2012 um 17:42 Uhr)
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
mic hat recht. Bei anderen AVRs gibt es noch AVCC ohne Entkoppelkondensator, es gibt dann keine Verbindung zum Pin AREF.
Edit: mic, dir ist die 1023 bei der Umformung abhanden gekommen. 2,2V VCC ergäben ADC 511 oder 512, du würdest da einen seeeeehr kleinen Wert ermitteln.
mfG
Markus
Tiny ASURO Library: Thread und sf.net Seite
ja, die Tabelle 24-4 im Datenblatt habe ich auch schon betrachtet. Ich verstehe nur nicht, woher der Controller dann weis, dass er eigentlich die Spannung an Kanal 2 bestimmen soll und was meinst du mit "Um die internen 1.1V zu messen ...". Die 1,1V sind doch fest. Klar ist "AVCC with external capacitor at AREF pin" bezieht sich auf VCC als Referenzspannung. Nur die möchte ich ja gerade bestimmen. Das R29 entfernt werden muss glaube ich nicht, da die Liniensensoren mit VCC als Referenzspannung tadellos funktionieren. Ich muss jetzt noch etwas fürs Raclette vorbereiten. Morgen (oder Übermorgen) denke ich noch mal darüber nach. Guten Rutsch! Fraggle
Hallo
Für mich ist das auch Neuland, ich hatte bisher immer die 2,56V-Referenz verwendet.
Hier muss man rückwärts denken: Welche Vcc müßte als Referenz anliegen damit die internen 1.1V als der vom ADC eingelesene Wert erscheint? Hier ein Rechnenbeispiel für 5V als Vcc (nach meiner Formel oben):
Vcc = 1.1V*1023/ADC
1023/5V = ADC/1.1V oder adc=1023/5V*1.1V
Der ADC würde ca. 225 einlesen.
Gegenprobe: Die Batteriespannung, und damit auch die Referenzspannung, sinkt und deshalb steigt der eingelesene Wert für die internen 1.1V (im Vergleich zu Vcc/VREF). Bei eingelesenen 250 würde die Batteriespannung auf 1.1V*1023/250 oder 4,5V abgesunken sein.
Der R29 verbindet die externe Referenz mit 3.3V, Wir wollen aber Vcc als Referenz verwenden, deshalb muss diese Verbindung über R29 verschwinden. Dann bleibt nur noch C9 als "external capacitor at AREF pin".
Was mich verwirrt: In dem von dir verlinkten Schaltplan ist ein Mega168-AU eingezeichnet, dessen Pinout ist unterschiedlich zu deinem 328P!
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Frohes Neues,
endlich habe ich es auch verstanden! Ich war die ganze Zeit so auf den Spannungsteiler aus R31 und R32 und damit auf Kanal 2 des AD-Wandlers fixiert, dass ich alles andere ausgeblendet habe. Es funktioniert mit der sogenannten Bandgap-Referenz des AVRs. Dazu
- den Pin AVCC auf VCC legen (ist hardwaremäßig schon vorgegeben).
- AVCC als Referenzspannung festlegen.
- Kanal 14 als Eingangskanal (VBG) festlegen.
- Berechnung vom aktuellem VCC-Wert wie von Markus beschrieben.
Funktioniert bestens, vielen Dank für die Tipps!
@radbruch: Laut Datenblatt sind die AVRs ATmega168A und ATmega328P doch Pinkompatibel. Finde den Schaltplan allgemein sehr unübersichtlich, insbesondere wenn man den Roboter in C und nicht im Arduino-Dialekt programmieren möchte.
Gruß
Fraggle
Geändert von Fraggle (01.01.2013 um 14:26 Uhr)
Lesezeichen