Forum: Mikrocontroller und Digitale Elektronik STM32L0 RTC "schnell" kalibrieren


von M. N. (bmbl2)


Lesenswert?

Hallo,

ich habe ein Board designed und mehrfach aufgebaut mit einem STM32L010. 
Ich nutze die interne RTC + externen 32768 kHz LSE.

Ich stelle nun fest, dass die ersten 4 Boards, die ich getestet habe, 
alle eine etwas zu schnelle RTC Clock haben. Die Boards gehen innerhalb 
einer Woche (604800s) zwischen 4 und 10 Sekunden vor, was einer 
Ungenauigkeit von  < 17ppm entspricht. Ich habe ein 20ppm Quarz verbaut. 
Somit erscheinen mir die Werte erstmal plausibel.

Ich habe nun basierend auf diesen Zahlen die RTCs der Boards kalibriert 
(RTC->CALR Register) und warte nun auf das Ergebnis. Da die Boards in 
einer halbwegs geschützten Umbgebung hängen, erwarte ich, ohne große 
Temperaturschwankungen, dass ich die RTC noch einen Tick besser 
hinbekomme.

Mein konkretes Problem damit: Aktuell warte ich eine Woche bzw länger 
und schaue, wie falsch die Uhren gehen. Das mache ich mittels 
python-Skript und NTP synchronisierter Uhr im Rechner ich habe also vom 
PC + UART her noch vielleicht worst case 100 ms Unsicherheit. Ich habe 
noch ca 30 Boards vor mir und möchte diese nicht alle eine Woche liegen 
lassen, sondern die RTC schneller kalibrieren.

Dafür habe ich mir erstmal den internen 512 Hz Takt der RTC nach außen 
gegeben. Ich habe einen Frequenzzähler (HP 5316A). Dieser zeigt mir auch 
eine gemessene Frequenz von knapp über 512 Hz an.
Problem ist: Der Wert, den der Zähler anzeigt (ohne RTC Kalibrierung) 
springt immer mal wieder etwas auf und ab (je nach gating time). Zudem 
kenne ich die absolute Genauigkeit von meinem Zähler nicht. Aktuell 
betreibe ich den Zähler mit externer Referenz, die ich von einem  R&S 
FSP Spectrum Analyzer gewinne. Genauere Angaben zur Genauigkeit habe ich 
aber keine.

Welche Möglichkeiten habe ich, die RTC möglichst gut zu kalibrieren ohne 
lange zu warten? Ein paar Minuten Messzeit wären erträglich.
Ich habe mir überlegt, ob ich mal bei Aliexpress so einen "GPS 
disciplined OCXO mit 10 MHz REF out" probiere. Hat damit jemand schonmal 
Erfahrungen gesammelt?

Ich vermute, der LSE vom STM32L0 jittert und deshalb springt mein 
Frequenzzähler. Dieser zeigt bspw mit 4 Sekunden gate Zeit immer 
512.0105 Hz an. Alle 10 Sekunden springt aber der Wert auf > 513 Hz. 
Weiß jemand, wo das herkommen könnte? Wenn ich die ref Frequenz von 
meinem Oszi messe, komme ich auf ~10 MHz und der Wert springt nicht. Da 
wackelt vielleicht die letzte Nachkommastelle mal.

von Mi N. (msx)


Lesenswert?

M. N. schrieb:
> Welche Möglichkeiten habe ich, die RTC möglichst gut zu kalibrieren ohne
> lange zu warten? Ein paar Minuten Messzeit wären erträglich.

Mit einem RP2040 Pico-Board könntest Du Dir einen einfachen, schnellen 
reziproken Frequenzzähler aufbauen: 
http://mino-elektronik.de/fmeter/fm_software.htm#bsp_RP2040
Im einfachsten Fall reicht das nackte Board mit einer Messrate von 3 
Messungen/s.

von Peter D. (peda)


Lesenswert?

M. N. schrieb:
> Alle 10 Sekunden springt aber der Wert auf > 513 Hz.

Die IO-Pins laufen ja mit dem CPU-Takt. Die Lesezugriffe der 
RTC-Register müssen also mit dem CPU-Takt synchronisiert werden.

von M. N. (bmbl2)


Lesenswert?

Peter D. schrieb:
> Die IO-Pins laufen ja mit dem CPU-Takt. Die Lesezugriffe der
> RTC-Register müssen also mit dem CPU-Takt synchronisiert werden.

Soweit ich das in der Doku von ST sehe, läuft der RTC_OUT auf PC13 
komplett an der restlichen Logik vorbei und wird einfach rausgemuxt. Es 
gibt im Datenblatt sogar einen Hinweis, dass der Pin weniger Strom kann, 
als andere GPIOs, weil die von der Backup/RTC Domain versorgt werden. 
Aber kann natürlich sein, dass die da trotzdem was in den Systemtakt 
einsynchronisiert haben.

Mi N. schrieb:
> Mit einem RP2040 Pico-Board könntest Du Dir einen einfachen, schnellen
> reziproken Frequenzzähler aufbauen:
> http://mino-elektronik.de/fmeter/fm_software.htm#bsp_RP2040
> Im einfachsten Fall reicht das nackte Board mit einer Messrate von 3
> Messungen/s.

Ja könnte ich machen. Das rohe Board hat ansich auch nur 20ppm. Da 
gewinne ich also so erstmal nichts. Aber ich schaue mal, wie genau meine 
10 MHz Referenzen sind und dann baue ich mir vielleicht was.

von Motopick (motopick)


Lesenswert?

So ein HP5316 sollte auch "Vielfach"-Periodendauermessung koennen.
Fuer solche Faelle ist die naemlich da.

Damit misst man dann 10, 100, ... 1 Million Perioden.
Das funktioniert bereits bestens mit 32768 Hz.
Den Kehrwert muss man halt mindestens einmal ausrechnen.
Nach 3 s Messzeit hat man bereits einen aussagekraeftigen Wert.

Einen OCXO kann man auch mit einem AK172 USB-GPS-Stick recht einfach
kalibrieren. Die Blinkperiode von dessen LED, laesst sich auf
die Frequenz des GPS-Empfaengers "locken", und ist in einem weiten
Bereich einstellbar.

Wo du nur Waende siehst, sind eigentlich ueberall Tueren.

von Mi N. (msx)


Lesenswert?

M. N. schrieb:
> Ja könnte ich machen. Das rohe Board hat ansich auch nur 20ppm. Da
> gewinne ich also so erstmal nichts.

Bei mir lagen die Grundabweichungen der eingesetzten Boards < 5 ppm, die 
man mit dem Trimmpoti aber auch reduzieren kann, wenn man mit einem 
externen Referenzsignal abgleicht: 10 MHz oder aber auch 1 PPS von einem 
GPS-Empfänger.
Nachfolgende Schaltungen zeigen, wie dies auch automatisch passieren 
kann.

Erfahrungsgemäß reicht es aus, RTC-Quarze <= 1-3 ppm zu trimmen, da die 
Temperatur sowieso für Schwankungen sorgt. Bei gleichen Bauteilen reicht 
es auch aus, einmalig einen passenden ext. Lastkondensator zu ermitteln. 
Ein Abgleich wird damit entbehrlich.
Solange noch diese blöde Zeitumstellung bleibt, muß man die Uhren eh 
zweimal/Jahr neu stellen.

von Peter D. (peda)


Lesenswert?

Ich mag RTCs mit eingebautem Quarz, da spart man sich den Abgleich.

Z.B. der RX8010 läßt sich auch von älteren Bastlern gut löten, da die 
Beine nicht unterm Chip sind, sondern ganz altmodisch seitlich (SOP-8). 
Über I2C läßt er sich gut ansprechen und kommt mit 160nA aus.

von Peter D. (peda)


Lesenswert?

Mi N. schrieb:
> Solange noch diese blöde Zeitumstellung bleibt, muß man die Uhren eh
> zweimal/Jahr neu stellen.

Die Regel läßt sich doch einfach in Software implementieren.

von M. N. (bmbl2)


Lesenswert?

Mi N. schrieb:
> Solange noch diese blöde Zeitumstellung

Ich find die ganz praktisch :)

Peter D. schrieb:
> Die Regel läßt sich doch einfach in Software implementieren.

Richtig. Der STM hat da ja ganz praktisch auch diese Add 1h / Subtract 
1h Funktion in der RTC, um ohne Takte zu verlieren die Zeit umzustellen.

Ich werde heute Abend mal nochmal etwas mit meinem Frequenzzähler 
spielen und schauen, ob ich da reproduzierbare Zahlen rausbekomme.

von Mi N. (msx)


Lesenswert?

Peter D. schrieb:
> Mi N. schrieb:
>> Solange noch diese blöde Zeitumstellung bleibt, muß man die Uhren eh
>> zweimal/Jahr neu stellen.
>
> Die Regel läßt sich doch einfach in Software implementieren.

Die Heizungssteuerung bei mir hat das und macht das vorausschauend schon 
ca. 14 Tage vorher.
Keine Ahnung, wie ich das abstellen kann :-(

Peter D. schrieb:
> Z.B. der RX8010

Der kostet erheblich mehr als ein Quarz. War er die letzten Jahre auch 
lieferbar?
Wenn das alles egal sein sollte, warum nicht gleich GPS? Braucht 0,0 nA 
Ruhestrom und sucht sich die Zeit beim Einschalten von alleine ;-)

von Mi N. (msx)


Lesenswert?

M. N. schrieb:
> Welche Möglichkeiten habe ich, die RTC möglichst gut zu kalibrieren ohne
> lange zu warten?

Noch eine Überlegung: Am STM eine externe Referenzfrequenz anlegen und 
ihn den Korrekturwert selber errechnen lassen.

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.