Servus!
laut Datenblatt brauchen die STM32L031, L051, L071,... einen externen
32768Hz-Takt mit maximal 10 ns rise/fall time. Das ist doch
vollkommen krank und unbenutzbar. Wenn da ein Quarz angeschlossen wird,
muss der Eingang ja mit 10 us zurechtkommen. Die Eingangskapazität ist
angeblich 0.6pF(!) obwohl die Oszillator-Pins ja auch als normale GPIO
benutzt werden können - die wiederum eine Hysterese haben sollten.
Das fischelt doch ein wenig? Was verstehe ich hier nicht?
Weil man hier ja immer erklären soll, was man eigentlich vor hat: Das
soll ein Wecker werden, da wäre die interne RTC ganz praktisch. Ein
32kHz-Quarz mit 2 Cs am LSE ist mir von der Platine her zu
schwierig/hochohmig (siehe z.B. [1] oder AN2867). Ein externer
Oszillator wie OM-7604-C7, ASH7K,... liefert aber mit 50...100ns zu(?)
lasche Flanken.
Also werde ich eine externe RTC verwenden oder wie? Oder vielleicht
einen STM32L4? Bei denen steht nämlich im Datenblatt nichts von
LSE-Anstiegszeiten, aber die gibt's nicht im Hand-lötbaren Gehäuse :(
[1] Beitrag "Richtige Quarzbeschaltung von RTC an STM Controllern"
eagle user schrieb:> laut Datenblatt brauchen die STM32L031, L051, L071,... einen externen> 32768Hz-Takt mit maximal 10 ns rise/fall time.
Mit anderen Worten: Da ist kein Schmidt-Trigger am Eingang, und das
Signal muss innerhalb kürzester Zeit von 0 nach 1 gehen - sonst gibts
böse Glitches. Das gilt aber nur wenn extern ein Rechteck als Takt
anliegt.
Zwei Seiten weiter im DB sehen wir dann einen normalen Quarz, da ist
dann offenbar eine etwas abgeänderte Schaltung aktiv - was wegen des
eher analogen Quarzsignals ohnehin nötig ist.
Funktioniert auf jeden Fall mit Quarz. Ich habe das mit einem Bluepill
Board ausprobiert. Die Genauigkeit in unkalibriertem Zustand entspricht
einer gewöhnlichen Uhr für Consumer im Low-Cost Segment.
Du musst aber die externen Pins am Modul entfernen, die zum Quarz
führen.
Ich habe hier ein ähnliches Projekt: Bei mir funktionieren sowohl der
Quarz als auch das externe Quarz Modul problemlos am STM32l031.
Hier übrigens mein Init-Code:
https://github.com/olikraus/u8g2/blob/master/sys/arm/stm32l031x6/clock/main.c#L462
Ich prüfe hier zunächst ob ein externes Taktmodul anliegt. Wenn nicht,
dann versucht der Code den Quarz zu aktivieren.
Was ich übrigens am RTC des STM32L0 sehr schätze, sind die beiden TAMP
Eingänge. An den TAMP Eingängen hängen die beiden Taster für den
Benutzer, der damit den STM32L0 aus dem Deep Sleep Mode aufwecken kann.
Der STM32L0 befindet sich 99% der Zeit im Deep Sleep, so dass der Wecker
(XC9142, STM32L0, 128x64 OLED, Buzzer) seit 140 Tagen läuft: Die
Spannung (2x AA) ist in dieser Zeit von 3,2 auf 2,8 Volt gesunken (OLED
und Buzzer 1x pro Tag aktiv).
Oliver
Stefan U. schrieb:> Funktioniert auf jeden Fall mit Quarz. Ich habe das mit einem Bluepill> Board ausprobiert. Die Genauigkeit in unkalibriertem Zustand entspricht> einer gewöhnlichen Uhr für Consumer im Low-Cost Segment.
Wie gesagt, 32kHz-Quarze bzw. das Layout dafür sind mir zu kompliziert.
> Du musst aber die externen Pins am Modul entfernen, die zum Quarz> führen.
???
Aber es kommt noch viel schlimmer. Die Reference Manuals für die
STM32L0x1 und L0x2 sagen:
1
External source (LSE bypass)
2
In this mode, an external clock source must be provided. It can have a
3
frequency of up to 1 MHz. This mode is selected by setting the LSEBYP
4
and LSEON bits in the RCC_CSR (see Section 7.3.1). The external clock
5
signal (square, sinus or triangle) with ~50% duty cycle has to drive
6
the OSC32_IN pin while the OSC32_OUT pin should be left Hi-Z.
Sinus oder Dreieck mit 10ns, alles klar :(
Ich könnte den LSE als Oszillator laufen lassen, aber ohne Quarz, und
stattdessen externe 32kHz einspeisen. Das scheint mir sicherer zu sein
und sollte entweder gut oder garnicht funktionieren.
u8g2 schrieb:
> Ich habe hier ein ähnliches Projekt: Bei mir funktionieren sowohl der> Quarz als auch das externe Quarz Modul problemlos am STM32l031.> Hier übrigens mein Init-Code:
Danke, aber es ist ja ein Hardware-Problem. Wenn der Takt nicht sauber
ist, rettet mich keine Software. Was für ein Quarz Modul und was für
eine Platine verwendest du denn, wahrscheinlich eine eigene?
> Du musst aber die externen Pins am Modul entfernen, die zum Quarz> führen.
???
Will sagen: Wenn du ein Mikrocontroller Modul verwendest, wo man den
32kHz Quarz auflöten kann, und diese Pins auch auf externe Stiftleisten
herausgeführt sind, dann musst du die Stifte entfernen. Sie stören sonst
die Schwingung.
Vielleicht wird das klar, wenn du dieses Bild siehst:
http://stefanfrings.de/stm32/STM32F103C8T6_board.png
eagle user schrieb:> Danke, aber es ist ja ein Hardware-Problem. Wenn der Takt nicht sauber> ist, rettet mich keine Software. Was für ein Quarz Modul und was für> eine Platine verwendest du denn, wahrscheinlich eine eigene?
Bei dem Quarz Modul handelt es sich um folgendes (vom Distributor
kopiert):
Manufacturer Part No:SG-3030JC 32.7680KB3:ROHS
Manufacturer: Epson Timing
Description: Standard Clock Oscillators 32.768KHz 1.5-5.5V 5+/-23ppm
-40C +85C
Wie gesagt, bei mir haben sowohl das genannte Modul als auch ein
Standard-Quarz mit 32,768KHz und den üblichen Kondensatoren problemlos
funktioniert (Adapterplatine mit freier Verdrahtung, siehe Anhang).
Ich glaube wenn ich das Datenblatt ebenso gründlich gelesen hätte, wäre
ich heute noch am grübeln, ob das klappt. Tatsächlich scheint mir der
STM32L0 recht robust zu sein und so ziemlich alles was irgendwie nach
Takt ausschaut zu akzeptieren.
Grüße,
Oliver
Stefan U. schrieb:> Will sagen: Wenn du ein Mikrocontroller Modul verwendest, wo man den> 32kHz Quarz auflöten kann, und diese Pins auch auf externe Stiftleisten> herausgeführt sind, dann musst du die Stifte entfernen.
Danke, dann ist das klar (Module gibt's ja ganz verschiedene).
"Modul" ist ein gutes Stichwort: kennt evt. jemand eins mit einem
STM32L4xxC drauf? 'C' deshalb, weil 48 Pins leicht reichen und es sonst
so groß wird.
u8g2 schrieb:> Manufacturer Part No:SG-3030JC 32.7680KB3:ROHS
und
> STM32L031
witzig, das war auch meine erste Wahl. Da gibt es ca. 800 verschiedene
STM32 und knapp 200 verschiedene 32kHz-Oszillatoren, aber für einen
Wecker verwendet "jeder" diese beiden :)
Jeder? Nein, Quarze werden völlig überbewertet!
Für den Systemtakt nimmt man schon lange den internen Oszillator, warum
nicht auch für die Uhr? Spart Strom, Platz und EMV-Stress.
1
LSI oscillator frequency drift:
2
STM32L031: 0°C to 85°C -10% - 4%
3
STM32L433: -40°C to 125°C 29.5 - 34kHz
jeweils bei VDD = 1.62 to 3.6V, aber in Wirklichkeit habe ich geregelte
3.3V (TPS70933 FTW!). Gegen den statischen Frequenzfehler helfen
Prescaler plus "Smooth Calibration". Der Abgleich passiert bei einer
bekannten Temperatur und im Betrieb wird die Temperatur kaum mehr als 3
bis 5 Grad abweichen.
Der Frequenzfehler dürfte also unter 1% bleiben, das wären während einer
Nacht weniger als 5 Minuten Weckzeit-Fehler -- soviel Zeit muss sein!
eagle user schrieb:> Für den Systemtakt nimmt man schon lange den internen Oszillator
Man?
Nee, du und diejenigen, die du kennst. Mach mal nen stabilen USB-VCP
o.ä. mit nem unstabilisierten internen RC-Takt...
W.S.
u8g2 schrieb:> der damit den STM32L0 aus dem Deep Sleep Mode aufwecken kann.
Dafür reicht doch der EXTI auch, oder nicht?
Zumindest hat das bei mir im Stop-Mode wunderbarst funktioniert und
sowas wie Temper hab ich nicht benötigt.
Der EXTI ist ja so schön, weil man fast jeden GPIO als Wakeup-Source
verwenden kann. An einem GPIO hatte ich einen Taster, am anderen quasi
USB-5V zum Aufwecken, sobald USB angesteckt wird. Da lohnen sich die
5V-toleranten Pins schon ;-)
Der Temper-GPIO ist eh elektrisch seltsam - vermeide ich immer zu
verwenden ;-)
eagle user schrieb:> Sinus oder Dreieck mit 10ns, alles klar :(> Ich könnte den LSE als Oszillator laufen lassen, aber ohne Quarz, und> stattdessen externe 32kHz einspeisen. Das scheint mir sicherer zu sein> und sollte entweder gut oder garnicht funktionieren.
Ähm, du verrennst dich ja ganz schön ... Mach es einfach so, wie alle
anderen, dann wird's schon funktionieren - pragmatischer Ansatz.
Btw, bei mir ist es ein STM32L162 und kein STM32L031 (oder so)^^
> Sinus oder Dreieck mit 10ns, alles klar :(
Schau Dir das Diagramm "Figure 21. Low-speed external clock source AC
timing diagram" im Datenblatt an, sowie die Tabelle direkt darüber.
VLESH ist >= 0,7*VDD
VLESL ist <= 0,3*VDD
Der Bereich dazwischen sind die im Diagramm genannten 100%. Der Bereich
zwischen 10% und 90% muss innerhalb von 10ns durchlaufen werden. Das
sind bei 3,3V Versorgungsspannung konkret
Untere Schwelle = 0,3*3,3V*1,1 = 1,089V
Obere Schwelle = 0,7*3,3V*0,9 = 2,079V
Eine Halbwelle eines symmetrischen 32,768kHz Signals dauert ca. 30µs.
Wenn der Pegel den Bereich von 0 bis 3,3V abdeckt, entfällt etwa ein
drittel von Spannung und Zeit auf den Bereich, der maximal 10ns dauern
darf. Ein Drittel von 30µs sind 10µs. Da liegen wir also im Faktor 1000
daneben.
Nach dieser Überschlagsrechnung brauche ich auch gar nicht über ein
Sinus Signal nachdenken, das würde auch nie im Leben passen.
Also muss das externe Taktsignal wohl zwangsläufig ein Rechteck-Signal
sein. Und zwar ein schön steiles.
Man sollte aber auch zur Kenntnis nehmen, dass diese Anforderungen nur
gelten, wenn man den Pin als Eingang für eine externe Taktquelle
verwendet. Wenn man ihn als Oszillator verwendet, gelten diese
Anforderungen nicht.
Einige Absätze weiter unten stehen die Bedingungen für "Low-speed
external clock generated from a crystal/ceramic resonator". Und dort
werden keine Anforderungen an die Flankensteilheit genannt.
Wenn du da also ein externes Sinus Signal anlegen möchtest, würde ich
den Eingang einfach als Oszillator konfigurieren und dann
zweckentfremden.
W.S. schrieb:> Mach mal nen stabilen USB-VCP> o.ä. mit nem unstabilisierten internen RC-Takt...
ich dachte, dafür gibt's das Clock Recovery System.
Mampf F. schrieb:> Ich hab zuletzt den ABS07-120-32.768KHZ-T ( Farnell: 2467864 ) mit zwei> 2pF Cs verwendet> Ansonsten kann ich die die Oscillator Design Guide für STM8 und STM32> empfehlen.
Nachdem ich den zweimal gelesen habe, weiß ich, dass Quarzozillatoren
nichts für mich sind.
Mampf F. schrieb:> u8g2 schrieb:>> der damit den STM32L0 aus dem Deep Sleep Mode aufwecken kann.>> Dafür reicht doch der EXTI auch, oder nicht?
Der EXTI reagiert ungefiltert auf Flanken, die Tamper-Eingänge haben
digitale Filter.
Mampf F. schrieb:> Ähm, du verrennst dich ja ganz schön ... Mach es einfach so, wie alle> anderen, dann wird's schon funktionieren - pragmatischer Ansatz.
Wahrscheinlich, aber wenn nicht, gibt es extrem hässliche Fehler...
> Btw, bei mir ist es ein STM32L162 und kein STM32L031 (oder so)^^
Egal, der LSE hat die gleichen Daten.
Stefan U. schrieb:> Eine Halbwelle eines symmetrischen 32,768kHz Signals dauert ca. 30µs.> Wenn der Pegel den Bereich von 0 bis 3,3V abdeckt, entfällt etwa ein> drittel von Spannung und Zeit auf den Bereich, der maximal 10ns dauern> darf. Ein Drittel von 30µs sind 10µs. Da liegen wir also im Faktor 1000> daneben.>> Nach dieser Überschlagsrechnung brauche ich auch gar nicht über ein> Sinus Signal nachdenken, das würde auch nie im Leben passen.
Drum lasse ich mich nicht darauf ein, auch wenn das Reference Manual das
Gegenteil behauptet. ST kommt mit diesen Eingängen nicht gut klar; aus
den Errata zum L051:
1
The external clock selected in LSE bypass mode to drive
2
the OSC32_IN pin is no more effective in Standby mode.
3
No workaround available.
und beim HSE des L031:
1
Schmitt trigger hysteresis disabled on PH0 and PH1 inputs
2
When an I/O port is configured as an input, the Schmitt trigger input
3
should be activated. However, the Schmitt trigger hysteresis feature
4
is deactivated on PH0 and PH1, thus preventing them to filter noise
5
during I/O switching. Only LQFP48 package is impacted.
6
Workaround: None.
> Wenn du da also ein externes Sinus Signal anlegen möchtest,> würde ich den Eingang einfach als Oszillator konfigurieren> und dann zweckentfremden.
Sag' ich ja, das ist mein Plan B.
Aber Quarz-freie Uhren sind viel spannender :)
eagle user schrieb:> Mampf F. schrieb:>> Ähm, du verrennst dich ja ganz schön ... Mach es einfach so, wie alle>> anderen, dann wird's schon funktionieren - pragmatischer Ansatz.>> Wahrscheinlich, aber wenn nicht, gibt es extrem hässliche Fehler...
Pedant, geh mal Risiken ein ???
Bestimmt sitzt du nur zuhause und traust dich nicht raus, weil es könnte
dir ja was passieren xD
Ist nicht ernst gemeint :D
> Wegen den parasitären Kapazitäten der Leitungen?
Da bin ich unsicher. Die können eigentlich gar nicht so hoch sein - auf
Lochraster.
Aber das haben hier zwei Leute geschrieben und ein paar Monate später
hatte auch ich völlig falsche Schwing-Frequenz, solange die Pins dran
waren.
Stefan U. schrieb:>> Wegen den parasitären Kapazitäten der Leitungen?>> Da bin ich unsicher. Die können eigentlich gar nicht so hoch sein - auf> Lochraster.>> Aber das haben hier zwei Leute geschrieben und ein paar Monate später> hatte auch ich völlig falsche Schwing-Frequenz, solange die Pins dran> waren.
Genau solche Überraschungen erwarte ich bei so hochohmigen Schaltungen.
Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
Groß- und Kleinschreibung verwenden
Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang