Forum: Mikrocontroller und Digitale Elektronik Spannungsmessung an Knopfzelle


von Nachmacher (Gast)


Lesenswert?

Hallo,
ich plane gerade gedanklich ein paar Features eines neuen Projektes mit 
einem STM32 (obwohl der der Typ egal ist, da wohl eine Prinzipfrage): 
Ich will bei einem CAN-Knoten die RTC-Knopfzelle in regelmäßigen 
Abständen auf ihre Spannung prüfen und bei unterschreiten eine Nachricht 
an einen anderen Knoten senden, damit rechtzeitig ein Batterietausch 
erfolgen kann. Wie aber messe ich die absolute Spannung mit dem ADC? 
Einen unbekannten Widerstand mit dem ADC zu bestimmen ist ja selbst bei 
unbekannter und unterschiedlicher AREF kein Problem. Aber wenn ich z.B. 
3.0 V absolut messen will, ist mir da bisher nur eine genaue externe 
Referenzspannungsquelle für AREF oder eine individuelle Kalibrierung der 
angeblich ziemlich stabilen internen AREF eingefallen. Beides ja bei 
einem Prototypen problemlos machbar, nur frage ich mich, ob es nicht 
auch eleganter geht.

von Uwe .. (uwegw)


Lesenswert?

Überleg dir doch erstmal, welche Genauigkeit wirklich nötig ist, und 
dann schau mal, ob das mit der internen Referenz noch machbar wäre...

von Lutz (Gast)


Lesenswert?

Für eine RTC (sofern wirklich nur die davon gespeist werden soll) würde 
ich mal 0.05 Volt (50 mV) als ausreichende Genauigkeit vermuten. Neu 
haben die ja so ca. 3.3 V; "statische" Spannung im µA-Bereich sollte sie 
wohl bei 3 V auch noch bringen. Die werden ja durch den geringen 
Entladestrom auch nicht flott leer.
Außerdem könnte man ja die frische Zelle mit der (bei den meisten µC's 
angeblich ziemlich Temperatur- und Versorgungsspannungskonstanten) 
internen Referenz messen und den Wert als Bezugswert hinterlegen (die 
Zelle mit dem Multimeter natürlich auch vorher messen, um Umrechnen zu 
können. Gut, das ist dann ja aber schon wieder das erwähnte, ungewollte, 
Kalibrieren ...

von holger (Gast)


Lesenswert?

>Wie aber messe ich die absolute Spannung mit dem ADC?

Rechnen? Oder kannst du das auch nicht?

von Lutz (Gast)


Lesenswert?

holger schrieb:
>>Wie aber messe ich die absolute Spannung mit dem ADC?
>
> Rechnen? Oder kannst du das auch nicht?

Denk erst mal genau über das Problem nach, bevor Du sowas absonderst. 
Aber moment mal: Brauchst Du ja gar nicht; es steht ja sogar da. Deshalb 
noch mal extra für Dich: Der ADC macht einen relativen Vergleich 
zwischen der zu messenden Spannung und der Referenzspannung. Bleibt die 
Meßspannung gleich (hier z.B. 3V) und die Referenzspannung wird 
verändert, ändert sich der Meßwert des ADC.

von Nachmacher (Gast)


Lesenswert?

holger schrieb:
>>Wie aber messe ich die absolute Spannung mit dem ADC?
>
> Rechnen? Oder kannst du das auch nicht?

Rechnen? Mein Gott, bin ich doof. Ein Rechenkünstler. Na endlich. Meine 
Rettung.
Der ADC hat 10 bit und einen Wert von 907. Berechne bitte mal für mich, 
wieviel Volt meine Knopfzelle hat?

Wenn du das hast der nächste Level: Das Schiff ist 30 m lang und der 
Mast ist 17 m hoch. Berechne mal für mich: Wie alt ist der Kapitän?

von H.R. (Gast)


Lesenswert?

Nachmacher schrieb:
> Der ADC hat 10 bit und einen Wert von 907. Berechne bitte mal für mich,
> wieviel Volt meine Knopfzelle hat?

Kein Thema : U = 907/1024 * URef

von Nachmacher (Gast)


Lesenswert?

Schon klar, und welchen Wert hat URef?
=> Steht im Datenblatt; Lesen kannst du also auch nicht. Entweder du 
legst interne Aref an (Wert steht auch im Datenblatt oder du kalbrierst 
diese) oder du legst bekannte externe Aref an.

Lesen geht ganz gut. Aber da steht, daß interne Aref 1,2 V sind. Also zu 
klein für 3,3 V. Müßte also Spannungsteiler nehmen (und wieder diese 
furchtbare Rechnerei machen). Der Spannungsteiler würde über die Zeit 
die Batterie aber mehr leernuckeln als die RTC selbst. Und wie genau ist 
eine externe Referenzspannung?
Aber das ist mir bekannt und steht alles schon im Startpost. Die Frage 
war, ob es eine elegantere Lösung gibt.
=> Vergib mir, ich war unaufmerksam ...

von H.R. (Gast)


Lesenswert?

Nachmacher schrieb:
> Schon klar, und welchen Wert hat URef?
> => Steht im Datenblatt; Lesen kannst du also auch nicht.

Hm, ganz schön kecker Schreibstil für den Probleminhaber!


> Entweder du
> legst interne Aref an (Wert steht auch im Datenblatt oder du kalbrierst
> diese) oder du legst bekannte externe Aref an.
>
> Lesen geht ganz gut. Aber da steht, daß interne Aref 1,2 V sind. Also zu
> klein für 3,3 V. Müßte also Spannungsteiler nehmen (und wieder diese
> furchtbare Rechnerei machen).

Ja, ja, die Rechnerei ist in der Tat furchtbar (aber durchaus 
fruchtbar). Lege doch den Fußpunkt des Spannungsteilers auf einen GPIO 
und schalte diesen zum Messen auf "0", in der übrigen Zeit auf High-Z.

> Der Spannungsteiler würde über die Zeit
> die Batterie aber mehr leernuckeln als die RTC selbst.

nö, s.o.

> Und wie genau ist eine externe Referenzspannung?

Frage des Aufwandes. Externe REF für ne' RTC-Batteriemessung???


> Aber das ist mir bekannt und steht alles schon im Startpost. Die Frage
> war, ob es eine elegantere Lösung gibt.

Warum die hohe Genaugikeit? Uref = Vcc würde für mein Empfinden mehr als 
ausreichend sein.


> => Vergib mir, ich war unaufmerksam ...

von Bernd R. (Firma: Promaxx.net) (bigwumpus)


Lesenswert?

H.R. schrieb:
> Nachmacher schrieb:
>> Schon klar, und welchen Wert hat URef?
>> => Steht im Datenblatt; Lesen kannst du also auch nicht.
>
> Hm, ganz schön kecker Schreibstil für den Probleminhaber!

JA !


>> Aber das ist mir bekannt und steht alles schon im Startpost. Die Frage
>> war, ob es eine elegantere Lösung gibt.
>
> Warum die hohe Genaugikeit? Uref = Vcc würde für mein Empfinden mehr als
> ausreichend sein.

Annahme:

VCC bleibt während der Messung konstant - sollte sicher bei Dir passen.

Der ADC kann die interne Ref mit VCC vergleichen (meiner kann es)
und der ADC kann auch die unbekannte Meßspannung mit VCC vergleichen.
Etwas Mathe (Dreisatz) später kürzt sich VCC aus der Gleichung und man 
kennt die zu messende Spannung.

Damit ist dann die Bedingung "elegant" erfüllt.

Prost.

von Jakob L. (jakob)


Lesenswert?

Nachmacher schrieb:
> Der Spannungsteiler würde über die Zeit
> die Batterie aber mehr leernuckeln als die RTC selbst.

Wenn man die Betriebsspannung des µC messen will, dann kann man den 
Spannungsteiler einfach ein einem unbenutzten IO-Pin anschliessen und 
nur für die Messung kurz anschalten.

> Und wie genau ist
> eine externe Referenzspannung?

Die billigen haben keine besonders hohe absolute Genauigkeit (genauso 
wie die in µC integrierten). Allerdings ist die Stabilität über Zeit und 
Temperaturänderungen schon recht gut, so dass man nach einmaliger 
Kalibrierung mit einer bekannten Spannung recht genau messen kann.

Ein weiteres Problem ist, dass die Spannung bei einigen Batterietypen 
(insbesondere Zink-Kohle Batterien und Lithium-Knopfzellen) sehr lange 
nahezu konstant bleibt und sich nur der Innenwiderstand ändert. Wenn die 
Spannung bei geringem Strom erst einmal spürbar sinkt, dann kann die 
Batterie relativ schnell ganz leer sein. Eventuell ist es daher 
sinnvoller, die Batterie zur Messung kurz zu belasten und den 
Unterschied zwischen Leerlaufspannung und Spannung unter Last zu messen.

von Lutz (Gast)


Lesenswert?

Bernd Rüter schrieb:
> Annahme:
> VCC bleibt während der Messung konstant - sollte sicher bei Dir passen.
Läßt sich problemlos einrichten.
> Der ADC kann die interne Ref mit VCC vergleichen (meiner kann es)
Du meinst, wenn VCC als Referenzspannung genutzt wird und mit VRef 
verbunden wird? Dann ja.
> und der ADC kann auch die unbekannte Meßspannung mit VCC vergleichen.
> Etwas Mathe (Dreisatz) später kürzt sich VCC aus der Gleichung und man
> kennt die zu messende Spannung.
Stimmt. Der absolute Wert der zu messenden Spannung hängt aber immer 
noch von der Kenntnis und Genauigkeit der internen URef ab; er wird ja 
auch nur als relativer Zahlenwert (x/y * interne URef) angegeben. Aber 
man kann mit dieser Methode eine interne URef nehmen, die kleiner als 
die zu messende Spannung ist. Kostet zwar einen ADC-Pin, aber gute Idee.

Bernd Rüter schrieb:
> Damit ist dann die Bedingung "elegant" erfüllt.
Würde ich auch so sehen. Einen Wert in dem ganzen Geflecht muß man 
kennen, sonst kann man auch die am Anfang genannte Eleganz bei der 
Widerstandsbestimmung nicht haben (nur das da statt der bekannten URef 
ein Widerstand bekannt sein muß).

Jakob Lell schrieb:
> Eventuell ist es daher
> sinnvoller, die Batterie zur Messung kurz zu belasten und den
> Unterschied zwischen Leerlaufspannung und Spannung unter Last zu messen.
Unabhängig von der Machbarkeit: So ein Test würde der Batterie 
vermutlich jedes mal etliche Wochen ihrer Lebensdauer rauben.

von Bernd R. (Firma: Promaxx.net) (bigwumpus)


Lesenswert?

Lutz schrieb:
> Bernd Rüter schrieb:
>> Annahme:
>> VCC bleibt während der Messung konstant - sollte sicher bei Dir passen.
> Läßt sich problemlos einrichten.
>> Der ADC kann die interne Ref mit VCC vergleichen (meiner kann es)
> Du meinst, wenn VCC als Referenzspannung genutzt wird und mit VRef
> verbunden wird? Dann ja.
>> und der ADC kann auch die unbekannte Meßspannung mit VCC vergleichen.
>> Etwas Mathe (Dreisatz) später kürzt sich VCC aus der Gleichung und man
>> kennt die zu messende Spannung.
> Stimmt. Der absolute Wert der zu messenden Spannung hängt aber immer
> noch von der Kenntnis und Genauigkeit der internen URef ab; er wird ja
> auch nur als relativer Zahlenwert (x/y * interne URef) angegeben. Aber
> man kann mit dieser Methode eine interne URef nehmen, die kleiner als
> die zu messende Spannung ist. Kostet zwar einen ADC-Pin, aber gute Idee.

Ich kenne jetzt nicht den Aufbau des verwendeten uCs. Ich arbeite hier 
mit PICs und da gibt es (nicht so ganz alte) Modelle, wo ich den 
Multiplexer des ADCs auf eine interne Referenz schalten kann. Also kein 
Pin und nix...

Welche Genauigkeit willst Du denn realistisch erreichen ?

Weisst Du denn schon, bei welcher Spannung die Knopfzelle "leer wird" ?

Das ist doch alles grobe Schätzung und von allen Einflüssen abhängig. Da 
reicht die erreichbare Genauigkeit sicher aus.

von Jakob L. (jakob)


Lesenswert?

Lutz schrieb:
> Unabhängig von der Machbarkeit: So ein Test würde der Batterie
> vermutlich jedes mal etliche Wochen ihrer Lebensdauer rauben.

Nein. Für eine CR2032 sollten ca. 10 mA Last völlig ausreichen. Wenn man 
dann pro Tag eine Sekunde lang misst, kommt man insgesamt auf knapp über 
1 mAh pro Jahr. Das fällt im Vergleich zu der Kapazität (ca. 200 mAh) 
der Knopfzelle nicht ins Gewicht.

von Lutz (Gast)


Lesenswert?

> Kostet zwar einen ADC-Pin, aber gute Idee.
>
> Ich kenne jetzt nicht den Aufbau des verwendeten uCs. Ich arbeite hier
> mit PICs und da gibt es (nicht so ganz alte) Modelle, wo ich den
> Multiplexer des ADCs auf eine interne Referenz schalten kann. Also kein
> Pin und nix...

Stimmt, war ein Gedankenfehler. Mit der Genauigkeit für diesen 
Anwendungsfall auch.

>> Unabhängig von der Machbarkeit: So ein Test würde der Batterie
>> vermutlich jedes mal etliche Wochen ihrer Lebensdauer rauben.
>
> Nein. Für eine CR2032 sollten ca. 10 mA Last völlig ausreichen. Wenn man
> dann pro Tag eine Sekunde lang misst, kommt man insgesamt auf knapp über
> 1 mAh pro Jahr. Das fällt im Vergleich zu der Kapazität (ca. 200 mAh)
> der Knopfzelle nicht ins Gewicht.

Mit Fakten sieht das in der Tat so aus. Dann braucht man aber 
wahrscheinlich 2 Pins mehr: Einen zum Schalten und einen zum Messen am 
belasteten Spannungsteiler. Aber das ist ja auch kein Problem.

von -Gast_XIV (Gast)


Lesenswert?

Nachmacher schrieb:
> Ich will bei einem CAN-Knoten die RTC-Knopfzelle in regelmäßigen
> Abständen auf ihre Spannung prüfen und bei unterschreiten eine Nachricht
> an einen anderen Knoten senden, damit rechtzeitig ein Batterietausch
> erfolgen kann.

Kannst du nicht einfach einen Uhrenvergleich machen? Wenn die RTC 
anfängt nachzulaufen ist es zeit für einen Wechsel.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Nachmacher schrieb:

> Ich will bei einem CAN-Knoten die RTC-Knopfzelle in regelmäßigen
> Abständen auf ihre Spannung prüfen und bei unterschreiten eine Nachricht
> an einen anderen Knoten senden, damit rechtzeitig ein Batterietausch
> erfolgen kann.

Bei einer CR2032 an einem DS1307 würde ich einfach die Nachricht nach 10 
Jahren verschicken. Die Zeit ist leicht messbar, das Ding hat ja eine 
RTC ;-)

Gruß,

Frank

von Nachmacher (Gast)


Lesenswert?

Ihr habt mich überzeugt; das ganze ist gar nicht so schlimm wie ich 
dachte (zumindest in diesem konkreten Fall).

-Gast_XIV schrieb:
> Kannst du nicht einfach einen Uhrenvergleich machen? Wenn die RTC
> anfängt nachzulaufen ist es zeit für einen Wechsel.

Frank M. schrieb:
> Bei einer CR2032 an einem DS1307 würde ich einfach die Nachricht nach 10
> Jahren verschicken. Die Zeit ist leicht messbar, das Ding hat ja eine
> RTC ;-)

Das dann aber doch nicht, da die Selbe Batterie ja auch die 
Backupregister bei Stromunterbrechung puffert. Außerdem will ich ja 
präventiv tätig werden; sonst brauche ich ja gar keine Überwachung da 
ich ja schon merken würde, wenn etwas nicht stimmt ...
Als reine Zeitbasis wäre eine separate RTC im CAN-Netz, gerade bei der 
Betrachtung der "Features" der STM32-RTC, wohl doch gar nicht so 
schlecht.

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
Noch kein Account? Hier anmelden.