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.
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 ...
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.
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?
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
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 ...
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 ...
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.
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.
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.
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.
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.
> 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.
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.
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
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.