Hallo, Ich versuche gerade auf einem ATMega32L eine Batterieüberwachung zu realisieren. Ich versorge die CPU mit 3,6V Lithium und habe eine externe stabile 2,50V Referenzspannung. Ich habe nun vor, die 3,6V zu messen und bei Unterschreitung eines bestimmten Levels irgendwie zu reagieren. Nun mein Problem: Die 3,6V sind zu hoch, um sie direkt zu messen. Ich dachte Ursprünglich, ich könnte das Problem umgehen, indem ich eine Differenzmessung mache ADC1=negative Spannung (=0V) und ADC0=positive Spannung (=max.3,6V), aber da habe ich glaub ich falsch gedacht, oder? Das würde glaub ich nur gehen, wenn man einen Gain von 0,5 einstellen könnte. So wie ich das sehe, muss doch Vin max kleiner sein als VRef, richtig? Meine nächste Idee war ein Spannungsteiler, der hat aber wiederum das Problem, dass er ständig Strom zieht und zusätzlich im worst-case einen zu großen Fehler produzieren würde. Hat jemand eine andere Idee? Vielleicht einen verlustlosen Spannungsteiler, oder so ähnlich?? Im Voraus besten Dank für Hilfe und Anregungen! Oliver
hallo spannungsteiler nur während der messung über fet einschalten peter
Daran habe ich auch schon gedacht. Ich könnte aber doch auch den Spannungsteiler statt gegen Masse gegen einen Portpin laufen lassen, den ich zur Messung auf Ausgang und Low schalte, oder. Habe zwar dann noch den Eingangsstrom zu berücksichtigen, aber das müsste doch so zu realisieren sein, oder? Oliver
Wie wärs mit nem Resetbaustein, falls es welche für 2,5V gibt ? Kostet am Controller auch nur nen Digitalen Eingang... Grüße, Hendi.
Willst du die Batteriespannung nur schätzen oder ganz genau messen? Wenn du sie nicht exakt brauchst, dann kannst du dir eventuell die Diodenspannung von ~ 0,7V bei Si zunutze machen. Irgendsowas wie in der angehängten Schaltung etwa (erste Idee, also noch nicht erprobt). Der Leerlaufstrom beträgt (wenn der Eingang des µC auf hochohmig geschalten ist) (3.6V - (3 x 0,7V ))/1M0 = 1,5µA Ich glaube das kann durchaus vernachlässigt werden. Und selbst wenn man auf 'messen' umschaltet und der Eingang ein wenig niederohmiger werden sollte ändert sich die anliegende Spannung aufgrund der Diodenkennlinie nur unwesentlich. Der Wiederstand könnte ev sogar noch ein wenig höher gewählt werden, das hängt alleine davon ab, ab welchem Flußstrom die Diode in den Knick kommt und welchen Eingangswiderstand der µC hat. Ev gnügt sogar der Eingangswiderstand alleine, dann brauchst du den R1 nicht und hast (fast) gar keinen Ruhestrom. Nimm dir die Dioden die einbauen willst und probiere mal mit einem 10M0 Poti aus wie die Schaltung mit 2V bis 3,6V Batspannung reagiert. Wäre fein, wenn du wissen läßt ob das tatsächlich so funktioniert ;)
Also ich habe in einem Projekt mit Mega8 eine Akkuspannungsüberwachung mit Ausgabe in Prozent auf das LCD. Dazu messe ich die Bandgapspannung in Relation zur Betriebsspannung (4 Zellen NiMH). Dies kommt ohne ADC-Eingangspin aus, da die interne Bandgapspannung gemessen wird und als AREF die Betriebsspannung (ist ja die Akkuspannung) genutzt wird. ;in der Reset-Routine, Initialisierung der Akkuüberwachung: ldi wl,50 ;Startwert für Mittelwert sts batt1,wl ;Akkuzustand ins SRAM sts batt0,null ;Nachkommastellen löschen ldi wl,(1<<adlar)+14 ;linksbündig, Bandgap an out admux,wl ;ADC legen ldi wl,(1<<aden)|(1<<adsc)|(1<<adfr)+6 ;ADC freilaufend mit out adcsra,wl ;Vorteiler 64 einschalten ;als Task der Mainloop, alle hundertstel Sekunde: akkutest: ;Akku-Zustand messen (Vergleich Vcc mit V_bandgap) cbr flags,1<<hundertstel ;Flag löschen, Job wird erledigt ldi wl,80 ;Basiswert Akkuladezustand in wh,adch ;ADC einlesen (60...80) sub wl,wh ;(0...20) mov wh,wl ;Kopie lsl wl ;mal lsl wl ;4, add wl,wh ;nochmal dazu entspricht mal 5 lds r0,batt1 ;Mittelwert aus SRAM holen lds wh,batt0 ;Nachkommastellen auch sub wh,r0 ;1/256 subtrahieren sbc r0,null ;Übertrag auch add wh,wl ;Neuwert/256 addieren adc r0,null ;Übertrag auch sts batt1,r0 ;zurück sts batt0,wh ;ins SRAM rjmp mainloop ;fertig... ;innerhalb Display-Ausgabe alle Sekunde: locate 3,2 ;Position Akku-Meldung printf txtakku ;Text, print8s batt1 ;Wert, print 32 ;Leerzeichen print '%' ;Prozentzeichen print 32 ;und noch'n Leerzeichen ausgeben rjmp mainloop ;fertig... txtakku: .db "Akku-Ladezustand: ",0,0 ----- Das Programm nutzt einige Makros des LCD-Print-Systems: locate positioniert den Cursor im LCD, printf schreibt einen String aus dem Flash in das LCD, print8s sendet ein Byte aus dem SRAM als ASCII-Text an das LCD, print sendet ein Byte (Konstante) als Zeichen an das LCD ...
Könntest du mal den Schaltplan posten, mir ist nicht so klar was du machen möhtest. Was misst du genau, um die Akkuspannug zu messen, weil AREF=gleich Akkuspannung ergibt AREF immer 100%, weil die Messung sich auf AREF sich bezieht. Und wenn die Akkuspannung fällt auch AREF, die sich immer auf die Akkuspannung bezieht.
in dem adc ist eine bandgap-referenz eingebaut. nun stellst du den ADC, dass Referenz-Spannung(Maximal-Wert) = VCC (Batteriespannung) und dann misst du die Bandgap-Referenz (ein spezieller Wert bei der Kanal-Auswahl (meistens der vorletzte) wennn nun die Batterie-Spannung sinkt - die Referenz-Spannung bleibt aber gleich - dann steigt auch der gemessene Wert für die Bandgap-Referenz. durch die formel (steht auch im datenblatt) v = vref * wert / max und vref = vcc kannst du die spannung ausrechnen (oder einfach einen festen wert nehmen, ab dem gewarnt wird)
Danke für die Erklärung... Die Frage nach dem Schaltplan hat sich nun sicherlich erübrigt. Denn es gibt keinen. Es passiert alles innerhalb des AVRs, es wird kein Portpin benötigt und es gibt keine externe Beschaltung. Bit- & Bytebruch... ...HanneS...
Diese Methode ist aber nicht übermäßig genau (Exemplarstreuungen in der Bandgapspannung) und die Auflösung ist auch nicht berauschend (bei 4,8V-Akku etwa 20 von 256 Stufen zwischen voll und leer). Um die Werte etwas zu "beruhigen" (es sind ja sonst nur 5%-Sprünge) habe ich ja die Mittelwertbildung über 256 Messungen eingebaut. Für Betrieb mit 3 Akkuzellen müsste die Auswerteroutine natürlich den neuen Werten angepasst werden. ...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.