Forum: Mikrocontroller und Digitale Elektronik Überwachung der RTC Pufferbatterie


von Chris S. (chris606)


Lesenswert?

Hallo zusammen,

ich habe zwei Fragen bezüglich RTC und Pufferbatterie, Akku, GoldCap. 
Wobei die Art des Energiespeichers erstmal zweitrangig für mich ist.

Gehen wir mal von einer normalen CR2032 Batterie als Puffer aus.

1.
Ich würde gerne den Benutzer auf einen bevorstehenden Batteriewechsel 
hinweisen, bevor die Funktion des RTC's durch eine leere Batterie 
beeinträchtigt ist. Ich müsste also z.B. über einen ADC zyklisch die 
Batteriespannung messen.
Oder gibt es RTC Bausteine die diese Funktion schon integriert haben?

2.
Gehen wir davon aus die Batterie ist leer und ich habe keine 
Spannungsüberwachung der Batterie oder der Benutzer ignoriert die 
Meldung. Wie stelle ich (bzw. der Mikrocontroller) fest dass die Uhrzeit 
nicht mehr stimmt?

Gruß
Christian

von oszi40 (Gast)


Lesenswert?

3. z.B. NTP https://de.wikipedia.org/wiki/Network_Time_Protocol
Wird die Differenz zu groß, könnte man das dem User melden?

von Sebastian R. (sebastian_r569)


Lesenswert?

Chris S. schrieb:
> Gehen wir davon aus die Batterie ist leer und ich habe keine
> Spannungsüberwachung der Batterie oder der Benutzer ignoriert die
> Meldung. Wie stelle ich (bzw. der Mikrocontroller) fest dass die Uhrzeit
> nicht mehr stimmt?

Wenn du keinen ZUgang zum Internet hast, blieben eigentlich nur 2 RTCs 
und die Hoffnung, dass beide nicht genau gleichzeitig ausfallen

von Stefan F. (Gast)


Lesenswert?

Sebastian R. schrieb:
> Wenn du keinen ZUgang zum Internet hast, blieben eigentlich nur 2 RTCs
> und die Hoffnung, dass beide nicht genau gleichzeitig ausfallen

Zwei unterschiedlich große Batterien erzwingen könnte dabei hilfreich 
sein.

Schön ist, dass bei der Methode nicht mehr vorab schwache Batterien 
erkannt werden müssen. Die eine Uhr meldet, wenn ihre Batterie leer ist. 
Die andere liefert dann die Zeit.

Beim STM32F103 wird die Uhr auf 00000 gesetzt und bleibt (bis zum 
ausdrücklichen Start-Signal per Software) stehen, wenn die Batterie leer 
ist.

von m.n. (Gast)


Lesenswert?

Chris S. schrieb:
> Gehen wir davon aus die Batterie ist leer und ich habe keine
> Spannungsüberwachung der Batterie oder der Benutzer ignoriert die
> Meldung. Wie stelle ich (bzw. der Mikrocontroller) fest dass die Uhrzeit
> nicht mehr stimmt?

Ganz einfach. Der Benutzer muß beim Einschalten 3 x die exakte Zeit 
eingeben. Max. Abweichung 10 ms.
So stimmt die Uhrrzeit immer.
Macht er bei der Eingabe einen Fehler, wird das Gerät gesperrt und muß 
zum Hersteller geschickt werden.

Alternative: Wenn die genaue Uhrzeit benötigt wird, kann man auch ein 
GPS-Modul verwenden.

von Hermann Kokoschka (Gast)


Lesenswert?

Viele externe RTC-Bausteine haben eine interne Erkennung der 
Pufferbatterie bzw. deren Low-Zustand sowie Data-Corruption. Das ist 
meist ein Bit innerhalb der Uhrzeitdaten, die Du per SPI/I2C ausliest.

von Georg (Gast)


Lesenswert?

Hermann Kokoschka schrieb:
> Viele externe RTC-Bausteine haben eine interne Erkennung der
> Pufferbatterie bzw. deren Low-Zustand sowie Data-Corruption

Richtig, ausserdem gibt es fast immer auch einen universellen 
batteriegestützten Datenspeicher, und da kann man ein paar Bytes mit 
Prüfsumme ablegen.

Georg

von Gerd E. (robberknight)


Lesenswert?

Chris S. schrieb:
> Ich würde gerne den Benutzer auf einen bevorstehenden Batteriewechsel
> hinweisen, bevor die Funktion des RTC's durch eine leere Batterie
> beeinträchtigt ist.

Ja, gute Idee.

> Ich müsste also z.B. über einen ADC zyklisch die
> Batteriespannung messen.

Leider nicht ganz so einfach. Du musst bedenken:

1. der angeschlossene ADC oder Spannungsteiler etc. darf nicht die 
Batterie mit der Zeit leersaugen. Gute RTCs ziehen nur 3-stellige 
Nanoamperes. Schon alleine der angeschlossene ADC wird oft mehr ziehen, 
ein Spannungsteiler erst recht.

Du brauchst also irgendeinen Analogschalter, FET oder ähnliches mit dem 
Du wirklich gut abschalten kannst, gleichzeitig aber auch die Messung 
nicht zu stark verfälschst.

Wenn Du die in einem Mikrocontroller integrierte RTC-Einheit verwendest 
und keinen separaten Baustein, dann gibt es manche Modelle mit internem 
Analogschalter zum ADC. Du kannst dann also direkt vom Mikrocontroller 
aus messen ohne einen externen Analogschalter zu brauchen. Z.B. bei 
manchen STM32 geht das.

2. Du musst unter Belastung messen. Die CR2032 sinken mit dem Alter kaum 
in der Leerlaufspannung, es erhöht sich der Innenwiderstand. Du musst 
also die Batterie für 1-2 Sekunden z.B. mit 1 kOhm belasten und danach 
messen. Also den Belastungswiderstand per FET zuschalten. Das dann z.B. 
1x pro Tag oder 1x pro Woche.

> 2.
> Gehen wir davon aus die Batterie ist leer und ich habe keine
> Spannungsüberwachung der Batterie oder der Benutzer ignoriert die
> Meldung. Wie stelle ich (bzw. der Mikrocontroller) fest dass die Uhrzeit
> nicht mehr stimmt?

Sehr viele RTC-Bausteine haben ein paar Bytes gepuffertes RAM. Da kannst 
Du ein Token reinschreiben und das kontrollieren. Oder es gibt direkt 
ein Fail-Flag.

von Hermann Kokoschka (Gast)


Lesenswert?

Gerd E. schrieb:
> Sehr viele RTC-Bausteine haben ein paar Bytes gepuffertes RAM. Da kannst
> Du ein Token reinschreiben und das kontrollieren. Oder es gibt direkt
> ein Fail-Flag.

...wie bereits mehrfach erwähnt...

von m.n. (Gast)


Lesenswert?

Gerd E. schrieb:
> Du musst
> also die Batterie für 1-2 Sekunden z.B. mit 1 kOhm belasten und danach
> messen. Also den Belastungswiderstand per FET zuschalten. Das dann z.B.
> 1x pro Tag oder 1x pro Woche.

Meines Erachtens viel zu viel Aufwand für eine 20 Cent CR2032.
Alle fünf Jahre die Batterie zu wechseln, wäre einfacher und 
hinreichend.
Den Benutzer zu irgendetwas zu zwingen, ginge nur mit nervenden 
Warnmeldungen.

Übrigens: mit Sicherheit festzustellen, ob die Uhr nicht mehr "stimmt", 
geht nur, wenn man eine Referenzzeit zur Verfügung hat.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Angehängte Dateien:

Lesenswert?

Chris S. schrieb:
> Oder gibt es RTC Bausteine die diese Funktion schon integriert haben?
Weil sich diese Frage aber so gut wie jeder stellt, kannst du dir die 
naheliegende Antwort schon selber denken.

Anbei mal ein Bit namens BLF im Statusregister des PCF8523.
Datenblätter anderer RTC sind bei Google leicht zu finden...

von Bauform B. (bauformb)


Lesenswert?

Die Idee Token mit Prüfsumme im RAM gefällt mir gar nicht. Der 
Oszillator reagiert doch viel empfindlicher als statisches RAM auf zu 
niedrige Spannung.

Ein RTC-Chip braucht einen echten Brown Out Komparator. Oberhalb der 
Schaltschwelle muss alles einwandfrei funktionieren und unterhalb wird 
ein Flag gesetzt. Es gibt RTC-Chips mit "Oscillator Stop Flag". Wenn das 
wirklich nur ein Monoflop ist, muss man sich darauf verlassen, dass der 
Oszillator gleich ganz aussetzt und nicht ein paar Tage lang zu langsam 
schwingt. Das ist doch eher unwahrscheinlich.

von Frank K. (fchk)


Lesenswert?

Chris S. schrieb:

> Gehen wir davon aus die Batterie ist leer und ich habe keine
> Spannungsüberwachung der Batterie oder der Benutzer ignoriert die
> Meldung. Wie stelle ich (bzw. der Mikrocontroller) fest dass die Uhrzeit
> nicht mehr stimmt?

1. Feststellen, ob die Uhr läuft und die Sekunden hochzählen.
2. Feststellen, ob das Datum plausibel ist und nicht auf dem 
Einschaltwert steht.
3. Beim Systemstart Zeitstempel in das Uhren-RAM (jede RTC hat zumindest 
ein paar Bytes) zusammen mit Prüfsumme schreiben. Wenn die Prüfsumme 
beim nächsten Start nicht stimmt oder die aktuelle Zeit kleiner gleich 
der gespeicherten Zeit ist, dann stimmt was nicht.

Ohne weitere Hardwareunterstützung wirst Du nicht viel mehr machen 
können.

fchk

von Chris S. (chris606)


Lesenswert?

Vielen herzlichen Dank für die zahlreichen Antworten!

Ich hab mich nun für den PCF8523 entschieden.
Die Batterie überwache ich mit dem BLF Bit.

Nun mal zum Zweitrangigen, ist es möglich die Batterie durch einen 
Doppelschichtkondensator zu ersetzen?
Wenn ich mit dem PCF8523, einem 1F Kondensator mit 5V Ladespannung 
rechne komme ich auf ca. 303 Tage:

Berechnung für RTC PCF8523 mit 5V Ladung und 1F Kondensator:
VCbackupend = 1.0 V
VCbackupstart = 5 V
IRTC = 150 nA
C = 1 F
tbackup = 1 F x (5 V - 1.0 V) / 150 nA = 26666666 s = 303 Tage

Ist das realistisch??? Oder spare ich mir den ganzen Aufwand und nutze 
eine CR2032 und bin auf der sicheren Seite?

von Stefan F. (Gast)


Lesenswert?

Chris S. schrieb:
> ist es möglich die Batterie durch einen
> Doppelschichtkondensator zu ersetzen?

Ich denke schon. Ob deine Rechnung so hin kommt, weiß ich nicht. Es gibt 
ja noch Leckströme und die hängen stark von Temperatur, Spannung und der 
Luft ab.

Insofern würde ich lieber die übliche CR2032 nehmen.

von Bauform B. (bauformb)


Lesenswert?

Chris S. schrieb:
> VCbackupend = 1.0 V
> VCbackupstart = 5 V
> IRTC = 150 nA
> Ist das realistisch?

Fast. Die 150nA sind nur der typische Wert und der gilt nur, wenn die 
Batterieüberwachung abgeschaltet wird. Dann muss man die Umschaltung 
extern machen:
1
When the battery switch-over function is disabled, the PCF8523
2
works only with the power supply VDD and the battery low detection
3
function is disabled. VBAT must be put to VDD.
Vergleich mal diese Power Management Funktionen mit denen vom PCF2129, 
da gibt es ein Bild mit der Stromaufnahme abhängig vom PM Mode (hinter 
den Characteriscs). Danach wäre PM = 0b101 optimal mit nicht einmal dem 
doppelten Strom trotz interner Umschaltung.

Mit Battery Management ist VCbackupend angeblich 1.8V statt 1.0V. Muss 
ich das glauben? Aber falls es stimmt...

Es gibt nur wenige EDLC, die überhaupt 5V vertragen und je höher die 
Spannung, umso kürzer die Lebensdauer. Außerdem kostet es mehr als eine 
Diode, den Kondensator aus 5V auf 5V aufzuladen.

In der Summe also eher 2 Wochen als 1 Jahr :(
Aber nach 2 Wochen Stromausfall interessiert sich niemand mehr für die 
Uhrzeit. Deshalb stimme ich für den Kondensator. Ein guter hält mehr als 
10 Jahre, wenn man ihn nur auf 0.5 bis 0.7xNennspannung auflädt und er 
nicht heiß wird. Mein Favorit ist z.Zt. die PHVL Familie von Eaton.

Chris S. schrieb:
> Die Batterie überwache ich mit dem BLF Bit.

Noch ein Vorteil des Kondensators, der braucht das nicht. Und man muss 
den Benutzer nicht nerven, er kann ja sowieso nichts wechseln.
Was uns wieder zur ursprünglichen Frage bringt: Dieser PCF8823 hat im 
SECONDS Register ein Bit namens OS mit einer eindeutigen Aussage:
OS = 0: clock integrity is guaranteed.

: Bearbeitet durch User
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.