Hallo,
ich würde gerne mit dem ADC eines AVR die Batteriespannung messen. Die
Batteriespannung liegt über VCC (max. 1,5V).
Das ganze ist in einem Gerät das möglichst wenig Strom verbrauchen soll.
Daher war die ursprüngliche Idee einen Spannungsteiler zu machen, bei
dem Masse des Spannungsteilers vom AVR geschaltet wird, um in den
Ruhephasen keinen Strom zu verbrauchen. Nur würde in dem Fall die
Spannung an den beiden Pins auf VBAT ansteigen und wäre dementsprechend
zu hoch für den AVR.
Schwierigkeit zwei ist, dass ein abfallen der Spannung auf 0V (entnehmen
der Batterie) einen Interrupt auslösen soll.
Beides war kein Problem als der AVR noch direkt aus der Batterie
gespeist wurde (VCC war VBAT und in den Ruhephasen war der Analog Pin
als IO mit PCINT geschaltet). Aber ein paar Peripheriegeräte brauchen
3,3V und die ganzen Pegelwandler sind wahrscheinlich aufwändiger als die
gesammte Schaltung auf 3,3V zu bauen.
Welche Möglichkeiten gibt es nun möglichst stromsparend die
Batteriespannung zu messen und den Spannungsabfall zu detektieren (und
das möglichst mit einem Pin)?
Vermutlich wird der immer vorhandene Spannungsteiler die passende Lösung
sein. Wenn man parallel 1 oder 2 Kondensatoren hat, darf der
Spannungsteiler auch sehr hochohmig sein ( z.B. 2 mal 1 M Ohm). Zur
Detektion eignet sich dann der analoge Komparator, der meist auch auf
einen der ADC Pins fällt. Vermutlich wird der Komparator mehr Strom
verbrauchen als die Widerständen.
Wenn man unbedingt den Teiler abschalten will, ginge das ggf. über einen
P-Kanal MOSFET mit passender Einschaltschwelle von etwa 2-3 V.
Ja, den PMOS hatte ich auch schon im Kopf, dann fällt aber leider die 0V
Erkennung weg.
AINs und ADCs sind leider verschiedene Pins, was dann einen verbrauch
von 3 Pins bedeuten würde. Da lässt sich was einfacheres mit einem PNP
machen.
Hat jemand noch eine andere Idee als den hochohmigen Spannungsteiler?
Stefan schrieb:> Hat jemand noch eine andere Idee als den hochohmigen Spannungsteiler?
Details wären nützlich.
Welcher Batterie-/Akku-Typ?
Welcher Spannungsregler?
Was willst du mit der gemessenen VBAT anfangen (z.B. Warnung
Batterie/Akku bald leer)?
Welcher µC kommt zur Einsatz?
Wie hoch ist der (maximale) Stromverbrauch der Schaltung?
> Schwierigkeit zwei ist, dass ein abfallen der Spannung auf 0V (entnehmen> der Batterie) einen Interrupt auslösen soll.
Ich sehe da noch die Schwierigkeit, dass der µC bei 0V nicht läuft und
somit auch keinen Interrupt abarbeiten wird. Oder was meintest du mit
dieser Anforderung?
Wenn der AVR von dem Akku versorgt wird, wie kannst du dann die Spannung
mit einem ADC vom AVR zuverlässig messen?
Die Referenz des ADC würde sich doch mit der Spannung des Akkus
verändern und du müsstest doch dann kontinuierlich eine Wertekorrektur
durchführen.
Es kommt mir so vor, als wenn die Brown-Out-Detection die Lösung wäre,
da ja der AVR auch von der zu messenden Batterie versorgt wird.
Vielleicht bräuchte man die Messung dann gar nicht mehr. Wozu soll die
dienen?
Der eine Pin des analogen Komparators ist bei den meisten AVRs auch ein
ADC Eingang. Wenn der ADC aus ist, lässt sich der analoge Komparator
auch über den MUX vom ADC verteilen. Als Vergleichswert für den
Komparator lässt sich die Bandgap Ref. wählen. Man muss dann nur den
Teiler entsprechend wählen.
Stephan schrieb:> Die Referenz des ADC würde sich doch mit der Spannung des Akkus> verändern
wer sagt den das AREF = VCC sein soll?
nicht wenn man die interne REF wählt, die liegt immer unterhalb der
Versorgung, mal 2.56V, mal 1.1V
http://arduino.cc/en/pmwiki.php?n=Reference/AnalogReference
oder ins Atmel AVR Datenblatt schauen
Es kommt wirklich drauf an was für dich wenig Stromverbrauch bedeutet.
Reden wir von 1uA oder 1mA da liegen vom Aufwand Welten dazwischen. Die
interne ref. Braucht ~50uA bei ner Knopfzellen ist das viel bei her
Autobatterie kannst es vernachlässigen.
Gruß Matthias
>Welcher Batterie-/Akku-Typ?
3x AA in Serie.
>Welcher Spannungsregler?
LDO mit 0,15V Drop bei der Höchstbelastung von 300mA
>Was willst du mit der gemessenen VBAT anfangen (z.B. Warnung>Batterie/Akku bald leer)?
Jop, Akkuprotokollierung bzw. warnung
>Welcher µC kommt zur Einsatz?ATMEGA164>Wie hoch ist der (maximale) Stromverbrauch der Schaltung?
Wie oben geschrieben 300mA.
>Ich sehe da noch die Schwierigkeit, dass der µC bei 0V nicht läuft und>somit auch keinen Interrupt abarbeiten wird.
Die Schaltung ist ausreichend mit Kondensatoren gepuffert, dass für den
Fall des Entnehmens noch was ins EEPROM geschrieben werden kann.
@Lurchi
Danke für den Tipp, das werde ich mir mal genauer anschauen
@Stone
Ich kämpfe mit den uA. Das ganze Gerät macht im Endeffekt nix bis ein
externer Interrupt es weckt. Das passiert regulär ein mal am Tag, oder
bei einem besonderen Ereignis. In der Ruhephase bin ich im Moment bei
ca. 1uA vom AVR, 0,5uA von der RTC, mein aktueller Stromfresser LDO mit
4uA und wahrscheinlich noch mal bis zu 50uA in Form diverser Leckströme.
Ein Spannungsteiler mit 100k gesammtwiderstand und dementsprechend 45uA
Strom ist da schon sehr schmerzhaft.
Also drei NiMH-Zellen. Wenn du dich auf Akku-Warnung beschränken kannst,
dann könnte das auch ganz ohne Spannungsteiler und ohne einen einzigen
Pin funktionieren. Dazu einfach die Bandgap-Reference messen mit AVCC
als AREF. Die Warnung löst du aus, sobald VCC einzubrechen beginnt. Bei
nomineller VCC 3.3V sind die Akkus noch ein gutes Stück von der
Tiefentladung entfernt. Voraussetzung dafür ist allerdings, dass sich
der Spannungsregler bei der eigentlich zu geringen Eingangsspannung
gutmütig verhält.
Stefan schrieb:> Ich kämpfe mit den uA.> Ein Spannungsteiler mit 100k gesammtwiderstand und dementsprechend 45uA> Strom ist da schon sehr schmerzhaft.
wer hindert dich einen Port zu AVCC zu legen?
Die AVCC nur vom Port einzuschalten bei Bedarf und die interne Referenz
1.1V oder 2.56V von AVCC mit dem Spannungsteiler an AVCC zu nutzen?
Port AUS -> keine AVCC -> kein Verlust durch Teiler.
Joachim B. schrieb:> wer hindert dich einen Port zu AVCC zu legen?>> Die AVCC nur vom Port einzuschalten bei Bedarf
Aus dem Datenblatt:
"AVCC is the supply voltage pin for Port A and the Analog-to-digital
Converter. It should be externally connected to VCC, even if the ADC is
not used. If the ADC is used, it should be connected to VCC through a
low-pass filter."
Konrad S. schrieb:> Aus dem Datenblatt:
und was wolltest du mitteilen?
Das erschliesst sich aus deinem Posting nicht!
Er will den Stromverbrauch minimieren, das ginge mit einem geschalteten
Spannungsteiler vom Port, der Port ist niederohmig genug so um 100 Ohm
für einen rel. hochohmigen Spannungsteiler so im 10kOhm Bereich. Sogar
der AVCC Verbrauch kann davon gedeckt werden und wird mit abgeschaltet,
also was sollte da hindern?
Konrad S. schrieb:> If the ADC is used, it should be connected to VCC through a> low-pass filter."
ob der nun mit dem "low-pass filter" nach VCC oder nach Port geschaltet
wird ist egal.
Aber vielleicht erklärst du ja deine Gedanken.
Wolfgang schrieb:> Wie verträgt sich deiner Meinung nach denn>> Konrad S. schrieb:>> Aus dem Datenblatt:>> "... It should ..."
na bestens!
soweit mein Englisch reicht und google meint:
"es sollte"
das ist kein Beton!
Der Stromverbrauch eines AVR ATmega ist bekannt, i.d.R. komplett so um
50mA in meinen Applikationen von m32 bis 1284p sowie 328p auch als
Arduino Clone. Davon wird am AVCC nur die Referenz und bei evtl. Port A
gespeist, aber nicht mit allen mA.
Ein Port kann locker bis 20mA übernehmen, das sollte reichen für keine
Lasten an Port A und für die Referenz.
Wenn ich zitieren darf:
Stefan schrieb:> Das ganze ist in einem Gerät das möglichst wenig Strom verbrauchen soll.
gehe ich davon aus das nicht an jedem Port eine 20mA LED hängt, ergo was
wird wirklich an Strom gebraucht an AVCC? kann man messen mit einen
µA/mA Meter nach VCC.
ich sehe kein Problem darin, mit einem Teiler bis 10MOhm auf einen
Comparator oder ADC-Eingang zu, also Querströmen <1uA.
100nF parallell zum Eingang und die Sache läuft.
Mark Space schrieb:> ich sehe kein Problem darin, mit einem Teiler bis 10MOhm auf einen> Comparator oder ADC-Eingang zu, also Querströmen <1uA.> 100nF parallell zum Eingang und die Sache läuft.
OK wenn du weisst wovon du schreibst?
Ich lese immer für AVR ADC eine Eingangsimpedanz im 10k-100k Ohm
Bereich.
Mit MOhm Teiler wäre ich skeptisch, ist aber auch egal weil das ja nicht
nötig ist.
Wer mag misst mit einem RV von 1 Mohm die Eingangsimpedanz vom ADC.
Gutes Messgerät mit Ri von >10MOhm Bedingung, erst die Spannung hinter
dem 1M messen, dann mit angeschaltetem ADC und durch die Differenz
bekommt man die Last durch den ADC raus.
Also, der AVR hängt an einem LDO. Dadurch ist VCC < VABT. Da AVCC
maximal VCC + 0,3V sein soll, wird das nichts das ich AVCC direkt an die
Batterie hänge. Oder habe ich die Diskussion mit AVCC jetzt falsch
verstanden?
Die Referenz zu messen und festzustellen, dass der LDO nicht mehr 3,3V
liefert ist eine Möglichkeit um zu erkennen, dass die Batterie langsam
schwächelt, ich würde aber gerne durchgehen wissen welche Spannung die
Batterie hat und nicht erst wenn sie langsam gegen Ende geht.
Ich habe schon öfter von Spannungsteiler in MOhme bereich mit
nachgeschaltetem Pufferkondensator gehört.
Grob über den Daumen gepeilt würde ich mit zwei 470k als Spannungsteiler
und einer 100nF Diode nach einer Millisekunde den PCINT durch
entnommenen Akku haben. Ich muss mal schauen wie weit in der Zeit die
Spannung über den Pufferkondensatoren abgefallen ist und ob dann noch
sicheres Schreiben in den EEPROM möglich ist. Da der ADC S/H Kondensator
mit 14pF angegeben ist, könnte ich sicherlich auch noch bisal unter die
100nF gehen. Aber irgendwann ist der Spannungsteiler so hochohmig/die
Kapazität so klein, dass der ADC mehr Antenne als anders ist. Ich werde
dahingehend mal bisal experimentieren.
Stefan schrieb:> Also, der AVR hängt an einem LDO. Dadurch ist VCC < VABT. Da AVCC> maximal VCC + 0,3V sein soll, wird das nichts das ich AVCC direkt an die> Batterie hänge.
richtig,
Stefan schrieb:> ich würde aber gerne durchgehen wissen welche Spannung die> Batterie hat und nicht erst wenn sie langsam gegen Ende geht.
OK
Stefan schrieb:> Ich habe schon öfter von Spannungsteiler in MOhme bereich mit> nachgeschaltetem Pufferkondensator gehört.
ich nicht, jedenfalls nicht so......
was gehen könnte, eine abgewandelte Schaltung von dem hier:
http://www.mikrocontroller.net/articles/Datei:Schaltplan_transistortester.png
Dein Spannungsteiler im Bereich Summe 10k-20k setzt die maximale
Meßspannung (?) unter die Referenzspannung (? -> 1,1V oder 2,56V)
angenommen Vbat max. 5,5V (3x Mignon oder Micro Alkaline je 1,7V
maximal, so meine Messungen mit frischen Zellen)
Uref 1,1V gibt einen Teiler von 5,5 zu 1,1 = 1/5
der obere R hat also 4/5 der unter R 1/5 Summe 20k gibt oben 16k unten
4k
oder eben passende nahe dran -> 16k und 3,9k
dieser Teiler kommt an Transistor T3 Collector
Der Teiler wird angeschaltet nicht vom Taster S1 sondern vom µC mit T1,
die LED kann entfallen, überbrückt werden.
Wie hier glaubhaft versichert wurde liegt der Strom so unter 20nA wenn
off ist.
http://www.mikrocontroller.net/articles/AVR-Transistortester
Stromverbrauch im ausgeschalteten Zustand: < 20 nA
nur das eben nicht der ganze AVR damit eingeschaltet wird, hier nur der
Spannungsteiler.
Stefan schrieb:> Oder habe ich die Diskussion mit AVCC jetzt falsch> verstanden?
weiss ich nicht, wäre noch eine Möglichkeit den Strom am AVCC
abzuschalten durch einen Port, ob das noch was zusätzlich bringt, bzw.
das lohnt weiss ich nicht, die Theorie meint ja bringt evtl. noch wenige
µA denn wenn gerade nicht gemessen werden soll und auch keine A Ports
gebraucht werden warum AVCC versorgen.
>denn wenn gerade nicht gemessen werden soll und auch keine A Ports>gebraucht werden warum AVCC versorgen.
Deshalb:
The ADC has a separate analog supply voltage pin, AVCC. AVCC must not
differ more than ±0.3 V from VCC.
AVCC ist nicht optional.
holger schrieb:> Deshalb:>> The ADC has a separate analog supply voltage pin, AVCC. AVCC must not> differ more than ±0.3 V from VCC.>> AVCC ist nicht optional.
was willst du aussagen?
Wer glaubt denn das AVCC aus einem Port um mehr als 0,3V von VCC
abweicht wenn on?
Ich wüsste nicht das ein Port 0,3V weniger als VCC liefert ohne Last,
wer hat das schon mal gemessen, wo an welchem AVR?
Prüfe ich gerne Montag mit einem 6,5-stelligen Voltmeter nach.
Joachim B. schrieb:> Wer glaubt denn das AVCC aus einem Port um mehr als 0,3V von VCC> abweicht wenn on?
Die Frage stellt sich nicht bei "on", sondern bei "off"!
Konrad S. schrieb:> Die Frage stellt sich nicht bei "on", sondern bei "off"!
wenn es nicht benutzt wird?
sehe ich nicht so, aber gut, ich weiss es nicht, du vielleicht? dann
schreib mehr darüber, so diffuse Halbsätze helfen ja auch nicht weiter.
@Joachim B.
Das wäre wieder der geschaltete Spannungsteiler den ich oben schon
erwähnt habe, nur mit PNP statt PMOS. Das würde mir aber wieder die
Batterieentnahmeerkennung versauen.
In irgend einem englischsprachigen Forum gab es mal eine recht lange und
interessante Diskussion zu den hochohmigen Spannungsteilern mit
Pufferkondensator. Was ich da so rausgelesen habe muss es sehr
zuverlässig und genau sein, da es ja quasi einen Tiefpass darstellt.
Hm. Vielleicht ist mein Beitrag
Beitrag "Re: Batterie messen in low power Design" ja überlesen worden.
Dort habe ich die Brown-Out-Erkennung genannt.
Mag auch sein, dass er nicht relevant ist - allerdings kann ich darauf
keine Hinweise erkennen. Die Erkennung der Batterieentnahme spielt ja
immer noch eine Rolle.
Stefan schrieb:> Das wäre wieder der geschaltete Spannungsteiler den ich oben schon> erwähnt habe, nur mit PNP statt PMOS. Das würde mir aber wieder die> Batterieentnahmeerkennung versauen.
wegen der Last beim Messen? oder wie belieben?
verstehe ich grad nicht, 1x pro Stunde 250µA (5V/20000 Ohm) für 50ms zu
entnehmen ist ein Problem?
Stefan schrieb:> In irgend einem englischsprachigen Forum gab es mal eine recht lange und> interessante Diskussion zu den hochohmigen Spannungsteilern mit> Pufferkondensator. Was ich da so rausgelesen habe muss es sehr> zuverlässig und genau sein, da es ja quasi einen Tiefpass darstellt.
OK wenn Tau bekannt ist kann man es ja versuchen, nur hängt der eben
immer dran ist halt ne Abwägung zwischen Dauer und Messzeit.
Bitflüsterer schrieb:> Dort habe ich die Brown-Out-Erkennung genannt.
nur dann ist es vielleicht zu spät?
ich denke er will vorher informiert werden wenn die Spannung kritisch
wird.
AVCC abzuschalten oder nicht zu belegen macht keinen Sinn. Zum einen
verlangt das Datenblatt da eine Spannung im Bereich VCC +-0,3 V und zum
anderen dürfte man dadurch auch nichts gewinnen. Teile wie den ADC, die
interne Ref. usw. kann man auch ganz regulär intern abschalten. Auch
wenn AVCC offen ist, darf die Spannung an den Eingängen nicht höher
werden, denn die internen Dioden in Richtung VCC/AVCC sind parasitäre
Pfade über das Substrat. Die verschwinden nicht einfach.
Die Probleme die man bekommen kann, wenn AVCC nicht angeschlossen ist,
sind Fehler beim Brown-out-Detektor, und wenn es ganz dumm kommt ggf.
auch ein Latchup beim einschalten. Auch ein erhöhter Stromverbrauch ist
möglich, weil intern ggf. undefinierte Pegel auftreten - weniger wird es
eher nicht.
Der Teiler darf schon recht hochohmig sein. Man muss aber ggf. mit etwas
Offset durch Leckströme rechnen. Solange man nicht bei hohen
Temperaturen ist, sollte das aber in Grenzen bleiben. Eine Abschrimung
gegen Störungen wird man wohl schon brauchen.
Ein schnelles Sinken der Spannung (etwa weil die Akkus entnommen werden)
kann man ggf. über einen Kapazitiven Teiler erkennen. Also nicht nur
einen Kondensator nach Masse nutzen, sondern auch einen zum Akku. Dann
reagiert der Teiler trotz hoher Widerstände auch auf schnelle
Änderungen.
Stefan schrieb:> ich würde aber gerne durchgehen wissen welche Spannung die> Batterie hat und nicht erst wenn sie langsam gegen Ende geht.
Ja, das bekommst du auf die Art natürlich nicht gebacken. Für diesen
"Luxus" wirst du wohl einen gewissen Preis zahlen müssen, z.B. den
P-MOSFET und zwei Pins.
Stefan schrieb:> Batterieentnahmeerkennung
... da war noch die Möglichkeit, jeden Slot im Batteriehalter mit einer
(Schottky-)Diode zu versehen. Dann kannst du einen Akku nach dem anderen
austauschen, ohne die Stromversorgung zu unterbrechen. Bei insgesamt nur
drei Zellen wird das allerdings etwas eng mit der Spannung: zwei weit
entladene Zellen minus Spannungsverlust durch eine Diode.
Joachim B. schrieb:> Bitflüsterer schrieb:>> Dort habe ich die Brown-Out-Erkennung genannt.>> nur dann ist es vielleicht zu spät?
Das ist möglich. Worauf stützt sich Deine Vermutung? Habe ich da etwas
überlesen?
> ich denke er will vorher informiert werden wenn die Spannung kritisch> wird.
Mit einem Kondensator könnte man Vcc noch recht lange puffern, so dass
Zeit für einige Aktionen bleibt. Ist das bedacht und ich habe es nur
überlesen?
Hallo Stefan,
ich habe jetzt nicht alle Beiträge hier gelesen, trotzdem mein
Vorschlag.
Nimm einen dynamischen Spannungsteiler. Das Bild zeigt die Schaltung mit
einer 2,7V Zenerdiode. Die Spannung am Messpin ist damit um 2,7V kleiner
als die Batteriespannung, sofern an PX.Y Low ansteht. Wird PX.Y auf High
geschaltet, fließt kein Strom mehr, da die Flußspannung der Diode nicht
erreicht wird. Nachteilig ist die Temperaturdrift der Diode, aber sie
ist so gering (Siehe Datenblatt), daß sie bei der Messung einer
Versorgungsspannung keine Rolle spielt.
Ist keine geeignete Zenerdiode verfügbar, geht es auch mit drei, in
Serie geschalteten Silizium Dioden (z.B: 1N4148), daran fallen ca 2V ab.
Die drei Dioden haben allerdings drei Temperaturdriften, welche sich
addieren (3 x 2mV/°C).
Und falls Geld keine Rolle spielt (da ohnehin keines vorhanden), kannst
du auch ein 2,5V Referenzelement einsetzen. Dann gibt es kaum
Temperaturdrift.
Je nach benötigter Genauigkeit, kannst du dir eine Möglichkeit
aussuchen. Gemeinsam ist allen Lösungen, Strom fließt nur, wenn der
Spannungsteiler eingeschaltet wird.
Viel Erfolg. Tom
Bitflüsterer schrieb:> Joachim B. schrieb:>> Bitflüsterer schrieb:>>> Dort habe ich die Brown-Out-Erkennung genannt.>>>> nur dann ist es vielleicht zu spät?>> Das ist möglich. Worauf stützt sich Deine Vermutung? Habe ich da etwas> überlesen?
oder ich falsch verstanden:
Stefan schrieb:> Das würde mir aber wieder die> Batterieentnahmeerkennung versauen.
ich verstand Batterieentladeerkennung......
Die Idee hat was:
Konrad S. schrieb:> ... da war noch die Möglichkeit, jeden Slot im Batteriehalter mit einer> (Schottky-)Diode zu versehen. Dann kannst du einen Akku nach dem anderen> austauschen, ohne die Stromversorgung zu unterbrechen.
Joachim B. schrieb:> Die Idee hat was:
Ist zwar nicht meine Idee, aber ich hab' sie mir gemerkt und bei einem
Gerät mit vier NiMH-Zellen auch schon mal eingebaut. Ja, hat was!
Andererseits rechnet "niemand" damit und nimmt gewohnheitsmäßig erst
alle Zellen raus und setzt dann erst die geladenen Zellen ein. Die
Software braucht also ggf. immer noch Sicherheitsmechanismen gegen
Black-Out.
Der BOD macht genau eines, das ist den uC in einen definierten Zustand
zu setzen wenn die Spannung unter ein gestimmtes Level absinkt. Und er
Zustand ist Reset. Das ist also nichts mehr mit noch schnell Daten in
den EEPROM schreiben.
Der Bod an sich läuft auch schon, nur eben zum sicheren Abschalten wenn
die Batterien den Geist aufgeben.
Die Schaltung über eine Zener ist sinnlos, da durch Leckströme die
Spannung auch wieder auf VBAT ansteigen wird, wenn die Unterseite des
Spannungsteilers abgeschaltet wird. Und auf ein Kampf zwischen den
Leckströmen der Zener und den der Dioden der Pins habe ich keine Lust...
Im Moment scheint es wirklich auf den hochohmigen Teiler und ein
Kondensator dazu hinaus zu laufen. Es ist die sicherste Methode, die
zusätzlich alles an einem Pin abwickelt.
Ich habe vorhin ein bisschen experimentiert (2x 470k, 100nF) und die
Messergebnisse sind wirklich hervorragend, auch bei mehreren aufeinander
folgenden Messungen. Es gibt zwar einen absoluten Fehler, aber der
bleibt immer gleich, insofern schreibe ich den der internen Referenz zu.
Ob und in wie weit der Puffer reicht um noch in den EEPROM zu schreiben
nach dem ein PCINT erkannt wurde muss ich noch schauen. Sollte aber
jemand während der Phase des maximalen Strombedarfs eine Batterie
entnehmen, bricht es mir halt das Genick, aber einen Tod muss man ja
sterben.
> Der BOD macht genau eines, das ist den uC in einen definierten> Zustand zu setzen wenn die Spannung unter ein gestimmtes Level> absinkt. Und er Zustand ist Reset. Das ist also nichts mehr> mit noch schnell Daten in den EEPROM schreiben.
Tja. Hübsch. Da habe ich mich falsch ausgedrückt. Sorry. Dann verstehe
ich auch den Mangel an Begeisterung. :-)
Ich meinte so eine oder eine ähnliche Schaltung wie hier:
http://www.mikrocontroller.net/articles/Speicher#EEPROM_Schreibzugriffe_minimieren
Hallo Stefan,
du ziehst den Querstrom eines Spannungsteilers (im mA/µA-Bereich) dem
Leckstrom einer Diode (im pA-Bereich) vor?
Nun es soll jeder nach seiner Fason glücklich werden!
Viel Erfolg. Tom
Bitflüsterer schrieb:> Tja. Hübsch. Da habe ich mich falsch ausgedrückt. Sorry. Dann verstehe> ich auch den Mangel an Begeisterung. :-)>> Ich meinte so eine oder eine ähnliche Schaltung wie hier:> http://www.mikrocontroller.net/articles/Speicher#EEPROM_Schreibzugriffe_minimieren
Naja, genau das mache ich ja im Moment. Ein Spannunsgteiler der vor dem
LDO hängt und einen ADC Pin versorgt, der in den Ruhephasen als normaler
Eingang mit Pin Change Interrupt geschaltet ist.
Nur habe ich halt einen sehr hochohmigen Spannungsteiler den ich per
Kondensator bisschen puffere. Fällt VBAT weg wird der Kondensator über
den Widerstand nach Masse entladen und nach ca. 2 x tao meldet sich der
PCINT.
Meine Schwierigkeit ist gerade ein Kompromiss zwischen Widerstand, und
Kapazitäten zum Puffern von VCC bzw. des Spannungsteilers zu finden,
damit noch genügend Energie übrig ist, wenn der PCINT anschlägt, um noch
ins EEPROM zu schreiben einerseits und andererseits dem ADC eine gute
Spannungsquelle zu liefern.
Stefan schrieb:> Meine Schwierigkeit ist gerade ein Kompromiss zwischen Widerstand, und> Kapazitäten zum Puffern von VCC
nun endlich verstehe ich mal was du willst......................
war das ne schwere Geburt, an keiner Stelle hattest du vorher
beschrieben was dein Ziel ist, ist schon ärgerlich.
Ich sehe deine Schwierigkeit eher in Schaltungsbeschreibung,
du willst die VCC solange puffern das wenn die Versorgung wegbricht du
noch Daten ins EEPROM schreiben kannst und redest die ganze Zeit von
Spannungsteiler an ADC in und entladen der Batterie.
Logisch entlädt ein dauerhafter Spannnungsteiler die Batterie.
Logisch darf der nicht zu groß werden wegen Fehlmessungen.
Ich grübel die ganze Zeit wie ein Kondensator das am ADC verhindern
soll, aber von dem hast du nie geschrieben, das blieb dein Geheimnis bis
eben.
Der ADC ist im mittel recht hochohmig. Wenn dauernd gemessen wird,
irgendwas im Bereich 1 MOhm, bei seltener Messung in der Größenordung
100 M. Eine niedrige Impedanz wird nur für kurze Zeiten zum Laden des
S&H Kondensators von etwa 15 pF benötigt.
Ein Kondensator von 15 nF am ADC Eingang reicht aus damit die Spannung
beim laden des S&H Kondensators nur um etwa 1 LSB einbricht. Bis zur
nächsten Messung ist dann Zeit zum nachladen. Ohne den Kondensator muss
die Quelle relativ niederohmig ( < etwa 20 K) sein um die 15 pF in z.B.
10 µs zu laden. Mit Kondensator darf es dann auch 10-1000 mal mehr sein
- vor allem wenn der ADC nicht schnell mehrfach misst.
Stefan schrieb:> Bitflüsterer schrieb:> Meine Schwierigkeit ist gerade ein Kompromiss zwischen Widerstand, und> Kapazitäten zum Puffern von VCC bzw. des Spannungsteilers zu finden,> damit noch genügend Energie übrig ist, wenn der PCINT anschlägt, um noch> ins EEPROM zu schreiben einerseits und andererseits dem ADC eine gute> Spannungsquelle zu liefern.
Dann habe ich evtl. Dein Ziel immer noch nicht verstanden:
Wozu brauchst Du einen Kompromiss? Das sind doch zwei verschiedene
Kondensatoren, hätte ich jetzt gedacht. Der Spannungsteiler kommt
parallel zu R3 aus der von mir verlinkten Schaltung und daran ein
weiterer Kondensator, der für den ADC puffert. Den Teiler kannst Du, wie
gewünscht abschalten. Die Teile beeinflussen sich auch nicht, oder doch?
Also was ich suche ist im Eingangspost sehr klar beschrieben.
Eine stromsparende Schaltung um die Batterispannung zu messen und das
Einbrechen durch herausnehmen der Batterie zu detektieren.
Die einzig brauchbare Lösung die aufgekommen ist, ist ein hochohmiger
Spannungsteiler, der per Kondensator gepuffert wird.
Da diese Lösung den Spannungseinbruch nicht sofort signalisiert, sondern
verzögert, da der Kondensator entladen werden muss, kommt das neue
Problem dazu, dass die Stützkondensatoren für den uC so groß
dimensioniert werden müssen, dass sie in dieser Zeit nicht so weit
entladen werden, dass ein Schreiben ins EEPROM nicht mehr sicher möglich
ist.
Da hier irgendwie viele Leute entweder Sachen übersehen oder falsch
verstehen und ich meine Lösung habe, würde ich die Diskussion für
beendet erklären und möchte mich herzlich bei allen für die Hilfe
bedanken.
Stefan schrieb:> Also was ich suche ist im Eingangspost sehr klar beschrieben.
nö
Stefan schrieb:> Die einzig brauchbare Lösung die aufgekommen ist, ist ein hochohmiger> Spannungsteiler, der per Kondensator gepuffert wird.
die zwei passen nicht zusammen,
bitte wer puffert Spannungsteiler? (ich will abnehmen und du kaufst
weniger zu essen)
fürs nächste Mal, du pufferst den µC damit der noch Saft für seine
Aufgaben hat und nicht den Spannungsteiler, soviel Verständnis sollte
schon sein, aber egal:
Stefan schrieb:> würde ich die Diskussion für> beendet erklären
Joachim B. schrieb:> Stefan schrieb:> Also was ich suche ist im Eingangspost sehr klar beschrieben.>> nö
Dann würde ich empfehlen den Eingangspost noch mal zu lesen.
> Stefan schrieb:> Die einzig brauchbare Lösung die aufgekommen ist, ist ein hochohmiger> Spannungsteiler, der per Kondensator gepuffert wird.>> die zwei passen nicht zusammen,> bitte wer puffert Spannungsteiler? (ich will abnehmen und du kaufst> weniger zu essen)
Alles über 500k bis 1M an Widerstand an einem Pin macht den zu einer
besseren Antenne. Der, der keine Lust hat Radio auf dem Pin zu hören
puffert ihn. Zusätzlich gibt es an die Impedanz der Spannungsquelle für
einen ADC Eingang gewisse Anforderungen. Der, der diese trotz einer
hochohmigen Spannungsquelle einhalten will, Puffert ihn.
> fürs nächste Mal, du pufferst den µC damit der noch Saft für seine> Aufgaben hat und nicht den Spannungsteiler, soviel Verständnis sollte> schon sein, aber egal:
Bitte noch mal aufmerksam lesen, was wie mit einem Kondensator gepuffert
wird. 1. der Spannungsteiler und 2. die Versorgungsspannung des UC, nur
ist da ein Tradeoff zu machen zwischen den beiden.
@ Stefan
Ich denke Du schmeisst uns hier zu früh, jedenfalls aber aus dem
falschen Grund die Flinte vor die Füsse.
Es ist absolut unklar, inwiefern zwischen dem Kondensator am
Spannungsteiler und dem Kondensator zur Pufferung ein Konflikt bestehen
soll. Das habe ich oben schon geschrieben und darauf hast Du nicht
geantwortet. Wenn Du das denkst, irrst Du Dich. Die Diode verhindert ja
gerade, dass der Spannungsteiler davon irgendwas mitbekommt. Der
Spannungsteiler sieht die tatsächliche momentane Spannung von der
Batterie.
So klar war und ist Deine Erklärung durchaus nicht, dass sie Deinen
Unmut rechtfertigt.
Anderer Ansatz:
Alle drei Akkus entladen sich gleichmässig.
Also nur die Spannung einer Zelle überwachen und gut ist.
Kein Spannungsteiler nötig.
Nur für die Batterieentnahme musst Du noch eine Lösung finden.
Der ist gar nicht so schlecht. Wenn man nun noch vorschreibt, daß die
gemessene Zelle immer zuerst rausgenommen wird, klappts auch easy mit
dem Abspeichern.
Stefan schrieb:> Dann würde ich empfehlen den Eingangspost noch mal zu lesen.
wie oft soll ich das lesen?
es bleibt falsch beschrieben, puffern tust du den µC damit er nach
Wegfall der Batterie noch was erledigen kann, basta
Stefan schrieb:> Alles über 500k bis 1M an Widerstand an einem Pin macht den zu einer> besseren Antenne. Der, der keine Lust hat Radio auf dem Pin zu hören> puffert ihn.
da wird nix gepuffert sondern gefiltert
puffern und filtern sind 2 Dinge, die du nie unterschieden hast was aber
für das Verständnis leichter rüberkommt.
Woher soll ich ohne Schaltbild mit purer Prosa wissen wovon du
schreibst?
Aber da du eh alles besser weisst benötigst du ja keine weitere Hilfe,
jedenfalls von mir.
Hallo,
ich habe keinen Unmut. Nur finde ich es nicht schön wenn jemand sich die
Schaltung nicht vorstellen kann, anstatt dann aber nach einem Schaltbild
zu fragen eher unfreundliche Äußerungen tätigt. Da ich meine Lösung zu
dem Zeitpunkt hatte, bestand für mich kein Grund den Thread weiter zu
betreiben.
Da hier aber scheinbar mehrere die gleiche Frage haben, bzw. die Lösung
verstehen möchten, erkläre ich es gerne und versuche auf die Fragen
einzugehen.
1
.--------------------------------------.
2
| |
3
| .-.
4
| | |R1
5
| | |
6
| .-----------. '-'
7
| D1 | | |
8
o---->|----o----|VCC ADC|----o-----o
9
| | | | | |
10
--- C1--- | | C2--- .-.
11
- --- | | --- | |R2
12
| | | | | | |
13
| | | AVR | | '-'
14
| | | | | |
15
| | | | '--o--'
16
| | | | |
17
| | | | ===
18
o----------o----|GND | GND
19
| | |
20
=== '-----------'
21
GND
Das ist die gedachte Schaltung. D1 soll hier der Einfachheit halber eine
Diode als auch den LDO darstellen.
R1/R2 sind ein Spannungsteiler mit in Summe ~1MOhm was den Ruhestrom auf
erträgliche ~4,5uA bringt und die Spannung nicht über VCC steigen lässt.
Dadurch wird die Impedanz an dem Pin jedoch so hoch, dass er als Antenne
dient. C2 filtert dies.
Zusätzlich sollte die Impedanz für eine AD Wandlung laut Datenblatt
nicht über 10kOhm liegen, was hier deutlich überschritten wird. C2
spielt also gleichzeitig Spannungspuffer für die Spannung über R2
(@Joachim B. du hast recht es geht hier um einen Filter, aber eben
primär auch um einen Puffer*).
Das ganze geht nach meinen Versuchen gestern sehr gut.
Nund zur zweiten Funktion.
Wird die Batterie entnommen versorgt C1 den AVR für eine gewisse Zeit
weiter. Die Spannung über R1/R2 bricht zwar sofort ein, nicht jedoch
über R2. R2 entlädt C2 "langsam". Da der AVR im Schlafmodus ist und der
ADC als Eingang mit PCINT geschaltet ist, wird aber ungefähr 0,2VCC ein
Interrupt ausgelöst. 0,2VCC sind PI mal Daumen nach 2 tao
(http://de.wikipedia.org/wiki/Zeitkonstante) erreicht. Innerhalb dieser
Zeit darf die Spannung in C1 nicht so weit abgefallen sein, dass ein
sicheres Schreiben in den EEPROM nicht mehr möglich ist.
Daher ist jetzt ein Kompromiss zwischen der Entladezeit von C2
(möglichst kurz -> kleiner C) und der Pufferfunktion von C2 (möglichst
gut -> großer C) in Abhängigkeit von C1 zu machen.
Bei weiteren Fragen gerne schreiben.
PS: Ich habe einen festen Batterihalter, daher geht das einlöten von
Dioden nur schwer, zusätzlich wären die knapp 2V bei zwei leeren Zellen
auch ziemlich knapp. Und die Überwachung nur einer Zelle ist damit auch
nicht möglich.
Sorry, schneller geschrieben als gedacht:
"wird ab ungefähr 0,2VCC ein Interrupt ausgelöst"
"darf die Spannung über C1 nicht so weit abgefallen sein" oder ""darf
die Energie in C1 nicht so weit abgefallen sein
Das Problem mit der langsamen Reaktion kann man umgehen, wenn man auch
parallel zu R1 noch einen Kondensator hat. Da mit kann man den Teiler
Frequenzunabhängig machen, oder wenn man will auch schnelle Änderungen
noch betonen.
Zur Detektion im Schlafmodus sollte man allerdings nicht den PCInt
nutzen. Der digitale Eingang ist nicht besonders genau, und braucht an
der Grenze recht viel Strom (wollte immer schon mal nachmessen wie
viel). Besser ist es da den analogen Komparator zu nutzen. Den kann man
auch auf jeden ADC Pin umlenken - als Vergleich dient dann die interne
Ref. - die allerdings auch etwas Strom braucht.
Ob das mit der Detektion dann auch gut funktioniert, hängt davon ab wie
schnell die Spannung vor dem LDO einbricht. Vor dem LDO braucht man in
der Regel auch einen Kondensator von 100nF - 10 µF. Je nach LDO kann da
ggf. auch noch ein Leckstrom zurückfließen, so dass die Spannung ggf.
gar nicht so schnell zusammenbricht.
Als Notlösung ggf. ein (ggf. Reed) Kontakt am Deckel des Batteriefachs.
Da hat man dann reichlich Zeit, noch bevor die Akkus überhaupt raus
sind.
Naja zum Glück passiert hier nichts Schlimmes, wenn in der Nähe ein
Handy funkt und die Interrupts auslöst aber generell verstehe ich hier
den Kampf mit den uA nicht. Wenn es Primärzellen wären, klar aber bei
Akkus, die sowieso alle paar Monate geladen werden müssen? Ansonsten
gute Lösung.
Stefan schrieb:> Daher ist jetzt ein Kompromiss zwischen der Entladezeit von C2> (möglichst kurz -> kleiner C) und der Pufferfunktion von C2
C2 muss nur ausreichend puffern um vom Sample&Hold-Kondensator im ADC
bei Beginn der Messung nicht übergebührlich belastet zu werden.
Ansonsten ist der ADC-Eingang extrem(!) hochohmig, es ist nur der
Sample&Hold der geladen werden will. Eventuell (ungetestet) wird selbst
das kein Problem mehr wenn Du nicht zwischen den Messungen den ADC-Muxer
immer wieder woanders hin schaltest. Probier mal den C2 kleiner zu
machen und schau wie die Messungen werden (Rauschen, etc).
Lurchi schrieb:> Das Problem mit der langsamen Reaktion kann man umgehen, wenn man> auch> parallel zu R1 noch einen Kondensator hat. Da mit kann man den Teiler> Frequenzunabhängig machen, oder wenn man will auch schnelle Änderungen> noch betonen.
Bingo!
Schalte den C2 nicht nach GND sondern nach VBat!
Ich hatte immer noch einen Satz aus dem ersten Posting im Kopf, das die
Low-Side geschaltet wird. Daher meinte ich natürlich, dass der
Spannungsteiler, bzw. nach der letzten Schaltung, der Kondensator mit
dem unteren R von Gnd getrennt wird. Klar fliessen dann immer noch ein
paar uA, aber so dachte ich halt.
Lurchi schrieb:> Das Problem mit der langsamen Reaktion kann man umgehen, wenn man auch> parallel zu R1 noch einen Kondensator hat.
Das ist ein Denkfehler: wenn die Batterie entnommen wird ist ein
Kondensator parallel zu R1 wirkungslos. (da der Eingang hochohmig wird).
Stefan schrieb:> Zusätzlich sollte die Impedanz für eine AD Wandlung laut Datenblatt> nicht über 10kOhm liegen, was hier deutlich überschritten wird.
Die Forderung 10kOhm kommt nicht nur wegen der Sample-Kapazität sondern
vor allem auch wegen dem maximalen Leckstrom des ADC-Pins von 1uA.
1uA * 1 Meg Eingangsimpedanz = 1V Messfehler.
Da hilft der Kondensator leider nicht dagegen.
Ich gebe zu: bei Raumtemperatur wird man in der Regel 1-2
Größenordnungen unterhalb des maximalen Leckstroms liegen. Aber der
Einsatztemperaturbereich fehlt noch als Angabe. (Genauso wie garantierte
Leckstrom-Werte bei Raumtemperatur).
Für die Spannungsmessung könnte man auch einen N-Kanal FET im
Spannungsteiler verwenden (bei reduziertem Messbereich). Siehe
Batteriewächter
Für die Batteriewechsel-Erkennung habe ich leider keine Lösung.
Gruß Anja
Konrad S. schrieb:> Wenn D1 für eine Diode und einen LDO steht, dann wird es mit drei> NiMH-Zellen und 3.3V für VCC ganz schön eng werden.
war mein erster Gedanke, Entladeschußspannung sollte bei 2,7V gesetzt
werden, das klappt nicht mit >8MHz
Anja schrieb:> Das ist ein Denkfehler: wenn die Batterie entnommen wird ist ein> Kondensator parallel zu R1 wirkungslos. (da der Eingang hochohmig wird).
dafür wird ja VCC gepuffert mit einem ausreichenden C um dem MC seine
letzten Aufgaben machen zu lassen -> Daten ins EEPROM schreiben was erst
viel zu spät im Thread benannt wurde.
Anja schrieb:> 1uA * 1 Meg Eingangsimpedanz = 1V Messfehler.
das tut ja nicht weh wenn er nur den Wegfall der Spannung feststellen
will, schlimmer finde ich die Dimensionierung, der C am Spannungsteiler
verhindert ja auch die schnelle Detektierung weil er die letzte
aufgeladene Spannung länger hält.
Bernd K. schrieb:> Schalte den C2 nicht nach GND sondern nach VBat!
wäre ne Möglichkeit um schneller VCC runter festzustellen, müsste
probiert oder gerechnet werden.
Bitflüsterer schrieb:> Ich hatte immer noch einen Satz aus dem ersten Posting im Kopf, das die> Low-Side geschaltet wird.
ne hi side Schaltung war schon richtig und dachte ich auch nur da hilft
es nicht alle Minute zu schauen, nimmt einer dazwischen die Batterie
raus ist Essig. Auch das fehlte die ganze Zeit im Thread was getan
werden soll.
Stefan schrieb:> Also was ich suche ist im Eingangspost sehr klar beschrieben.> Eine stromsparende Schaltung um die Batterispannung zu messen und das> Einbrechen durch herausnehmen der Batterie zu detektieren.
wo steht im Eingangspost das der AVR genau aus dieser Batterie gespeist
wird? ich lese nur:
Stefan schrieb:> ich würde gerne mit dem ADC eines AVR die Batteriespannung messen. Die> Batteriespannung liegt über VCC (max. 1,5V).
aber egal, was übrig bleibt ist:
Stefan schrieb:> Schwierigkeit zwei ist, dass ein abfallen der Spannung auf 0V (entnehmen> der Batterie) einen Interrupt auslösen soll.
und das ist doch simpel:
Stefan schrieb:> Da der AVR im Schlafmodus ist und der> ADC als Eingang mit PCINT geschaltet ist, wird aber ungefähr 0,2VCC ein> Interrupt ausgelöst. 0,2VCC sind PI mal Daumen nach 2 tao> (http://de.wikipedia.org/wiki/Zeitkonstante) erreicht.
OK damit fällt Komperator raus, der müsste ja nicht bei 0,2 VCC
ansprechen.
Also Kondi an +VCC und diesen Impuls schneller rüberbringen an PCINT
Kondi nach GND würde ja eher verzögern weil der durch die hochohmigen R
sich nicht entladen kann, evtl. können alle R entfallen, du willst ja
nur einen fetten negativen Impuls von VCC wenn eine Zelle entnommen
wird.
Diode und Puffer C dahinter zur Versorgung für den µC muss aber bleiben.
@Joachim B.
Könntest du folgendes mal in ein Schaltbild fassen?
>Also Kondi an +VCC und diesen Impuls schneller rüberbringen an PCINT>Kondi nach GND würde ja eher verzögern weil der durch die hochohmigen R>sich nicht entladen kann, evtl. können alle R entfallen, du willst ja>nur einen fetten negativen Impuls von VCC wenn eine Zelle entnommen>wird.
@Anja
Danke für den Hinweis mit dem Leckstrom.
Bei dem Preis macht es keinen Sinn irgend was zu frickeln:
http://www.dx.com/s/lson+probes
Habe selber verschiedenen in Gebrauch und bis jetzt keine Probleme.
Stefan schrieb:> @Joachim B.> Könntest du folgendes mal in ein Schaltbild fassen?
OK hab ich wegen Pause und sogar mit Oszi Bild
links, Aufnahme vom C R - Glied (gespeist vom Generator)
oberste 2 Linien Channel 1 Spannung bricht weg
gelb gedehnt auf µs, weiss gemerkt ms
unterste Linien, Channe 2 Triggerimpuls für PCINT
türkis gedehnt auf µs, weiss gemerkt ms
wenn die Überhöhung stört kann sie mit Z-Diode D3 abgeschnitten werden
oder mit einer weiteren Diode nach C2 abgeleitet werden, aber die
Energie eines 10nF hier dürfte keinen AVR killen.
man sieht aber schön wie das Differenzierglied den negativen Impuls
transportiert und der ist im µs Bereich so lang das der AVR aufwachen
sollte, die ms zum Puffern der VCC obliegt dir ja.
Stefan schrieb:> Keine Spannungsmessung, und an einem Generator der aktiv low> treibt mag> das gehen, eine entnommene Batterie ist jedoch HiZ.
probiere es aus......
notfalls bau das Batteriefach um das ein Schalter auf low zieht, oder
hatten wir das schon?
so ganz klar ist mir dein Plan immer noch nicht
AVR im Tiefschlaf, da kann er sich nicht selber wecken um ab und an was
sinnvolles zu machen.
Er läuft mit den Timern weiter? dann ist der Stromverbrauch nicht
minimiert und da soll es auf µA ankommen?
ich kapiers nicht.
Nimm es mir bitte nicht übel, wenn ich es jetzt so direkt sage, aber ich
würde dich bitten zu dem Thread nicht weiter beizutragen.
Deine Antworten waren bis jetzt wenig hilfreich bis kontraproduktiv.
Danke.