Forum: Mikrocontroller und Digitale Elektronik STM32G4 - Quarz schwingt nicht


von Terence S. (takeshi)


Angehängte Dateien:

Lesenswert?

Ich muss vorweg sagen, es ist das erste Mal, dass ich einen 
ST-Mikrocontroller programmiere, vorher habe ich nur mit TI-Controllern 
gearbeitet.

Problem: Habe mit einem Oszilloskop am Quarz gemessen, der schwingt 
nicht. Woran kann das liegen?

Hardware:
Ich habe eine Platine mit dem Controller STM32G474VET6 aufgebaut. Als 
Quarz habe ich den XRCGB24M000FAN00R0 (24 MHz) gewählt. Parallel gegen 
GND hängt jeweils ein Kondensator mit 6 pF. Der Quarz ist angeschlossen 
an den Pins 12 und 13 (PF0 OSC IN, PF1 OSC OUT).

Software:
In CubeMX sind die beiden Pins als "RCC_OSC_IN" und "RCC_OSC_OUT" 
konfiguriert.
Unter "System Core -> RCC" wird mir ein Ausrufezeichen angezeigt, 
allerdings weil "LSCO Clock Output" nicht auswählbar ist, da PA2 
anderweitig belegt ist, aber die Option möchte ich auch gar nicht 
nutzen. Gebe ich PA2 frei, ist die Warnung weg, aber es ändert sich 
nichts.
Die Konfiguration in "Clock Configuration" ist dem angehängten Bild zu 
entnehmen.

Nun hätte ich erwartet, dass damit alles Nötige eingestellt ist, aber 
scheinbar ist dem nicht so. Kann mir jemand sagen, was hier fehlt? 
Vielen Dank.

Edit: Ach ja, der Controller läuft aber trotzdem, weshalb ich davon 
ausgehe, er verwendet als Rückfalllösung wieder den internen Takt.

: Bearbeitet durch User
von A. B. (Gast)


Lesenswert?

Der Tastkopf kann (muss nicht, aber ...) den Oszillator zu stark 
belasten, so dass er halt nicht mehr schwingt.

Die Einstellungen per HAL können fehlerhaft sein (wär' nicht das erste 
Mal, dass CubeMX da einen Bug hat).

Alles etwas Herumgestochere im Nebel ...
Zuverlässige Diagose geht wohl nur, indem man mittels Debugger in RCC_CR 
nachsieht, insbesondere HSERDY ist da wichtig. Aber auch die anderen 
Bits und die weiteren Register, RCC_CFGR, RCC_PLLCFGR sollte man Bit für 
Bit anhand RM kontrollieren.

Andere Möglichkeit: MCO passend konfigurieren und da mit Oszi 
kontrollieren. Das gibt aber halt nur "geht" oder "geht nicht" ...

von Terence S. (takeshi)


Angehängte Dateien:

Lesenswert?

Besten Dank für die Antwort. Ein Screenshot mit den Registern ist 
angehängt.

Sind die Register irgendwo dokumentiert? Bisher konnte ich kein Dokument 
bei ST finden, in dem irgendein Register beschrieben wird. Hab das 
Gefühl man wird dazu genötigt nur die HAL-Bibliotheken zu nutzen und man 
soll bloß nicht in Kontakt mit Registern kommen.

Für mich erscheinen die Werte widersprüchlich. PLLSYSRDY ist auf 0, aber 
PLLSYSON ist auf 1. Da HSERDY und HSEON beide auf 1 sind, gehe ich davon 
aus, alles ist in Ordnung. Sehe ich das richtig? Um herauszufinden, ob 
der Quarz beim Messen aufhört zu schwingen, habe ich testweise den 
Tastkopf die ganze Zeit an OSC_OUT gelassen, den Controller 
programmiert, es kam nie eine Schwingung, die beiden Register sind aber 
trotzdem auf 1 gesetzt.
Die Register sagen "alles in Ordnung", das Oszilloskop das Gegenteil.

Ich könnte natürlich versuchen zu testen, ob der interne oder der 
externe Takt genutzt wird. Da kenne ich als Möglichkeit eine PWM zu 
erzeugen und bei starker Temperaturänderung (Kältespray) gucken, ob die 
Flanke wegläuft. Das werde ich wohl auch so machen, wenn sich sonst 
nichts weiter auftut.

von Christopher J. (christopher_j23)


Lesenswert?

Terence S. schrieb:
> Sind die Register irgendwo dokumentiert? Bisher konnte ich kein Dokument
> bei ST finden, in dem irgendein Register beschrieben wird.

Die Registerbeschreibungen finden sich bei ST - im Gegensatz etwa zu TI 
- nicht im "datasheet", sondern im "reference manual".

A. B. schrieb:
> MCO passend konfigurieren und da mit Oszi kontrollieren.

Würde ich auch empfehlen.

von Irgend W. (Firma: egal) (irgendwer)


Lesenswert?

Christopher J. schrieb:
> Terence S. schrieb:
>> Sind die Register irgendwo dokumentiert? Bisher konnte ich kein Dokument
>> bei ST finden, in dem irgendein Register beschrieben wird.
>
> Die Registerbeschreibungen finden sich bei ST - im Gegensatz etwa zu TI
> - nicht im "datasheet", sondern im "reference manual".
>

Sind "nur" 2127 Seiten auf denen jedes Bit beschrieben ist:-)

https://www.st.com/en/microcontrollers-microprocessors/stm32g474ve.html#documentation

Und die anderen gut 100 Dokumente mit weiteren Tausenden von Seiten dort 
sollte man wenigstens von den Überschriften her mal gesehen haben und 
wenn man mit den jeweiligen Themen zu tun hat durchaus mal reinschauen.

von Der müde Joe (Gast)


Lesenswert?

Ich denke, "HSE" muss erst noch eingeschaltet werden. Der ist noch 
ausgegraut.

von neuer PIC Freund (Gast)


Lesenswert?

Bei über 150MHz: R1MODE auch bedient? (1.28V anstatt 1.2V)

von A. B. (Gast)


Lesenswert?

Dass HSE ausgegraut ist, ist normal, wichtig ist, dass "Input Frequency" 
blau ist. Zugegeben etwas irritierend ...

Aber sonst sehen die PLL-Register (Teiler etc.) richtig aus, nur dass SW 
(und damit auch SWS) auf '01' stehen, d. h. HSI16 als Systemtakt.
Anscheinend wird nie versucht, auf PLL-Takt umzuschalten, denn SW ist ja 
auf 01, vermutlich weil PLLRDY auf 0 ist/bleibt.
Allerdings widersprechen sich HSERDY = 1, PLLON = 1 und PLLRDY = 0 
irgendwie.
Wenn PLL richtig konfiguriert, eingeschaltet und HSERDY = 1 ist, müsste 
eigentlich PLLRDY auf 1 gehen. Es sei denn, HSE ist weit außerhalb des 
erwarteten Bereichs (d. h. die PLL rastet deshalb nicht ein).

Da fallen mir nur zwei mögliche Ursachen ein:
1) Hardware-Defekt, sei es Quarz defekt oder ungeeignet, Layout-Fehler, 
Lötstellen ... Da empfiehlt sich ein Blick in AN2867.
2) Voltage-Scaling, zwar sagt das RM, dass die PLL direkt von VDD 
versorgt wird (Fig. 12) und damit unabhängig von VOS sein sollte, aber 
Table 50 passt nicht dazu oder ist zumindest mißverständlich.

von Messknecht (Gast)


Lesenswert?

Fragt hier niemand nach der Messmethode?

- Welches Oszilloskop? Kann das überhaupt diese ("hohe")
Frequenz darstellen?

- Messaufbau, Bezugsmasse ...

- ein 24 MHz Ausgangssignal hat keine Rechteckform von
3.3V Amplitude, da muss man sich mit deutlich weniger
zufrieden geben und seine Einstellungen (Empfindlichkeit,
Triggerschwelle ...) entsprechend anpassen.

Am OSC_IN Pin darf man natürlich nicht unbedingt ein Signal
erwarten, an OSC_OUT sollte dagegen der interne Treiber einen
ausreichenden Pegel auch für Messungen liefern.

Terence S. schrieb:
> Habe mit einem Oszilloskop am Quarz gemessen

Wenn man die Fähigkeiten des TO nicht kennt bzw dieser nichts
zur Messung schreibt darf bei diesen Aspekten schon mal
gezweifelt werden.

von Jim M. (turboj)


Lesenswert?

Messknecht schrieb:
> n OSC_OUT sollte dagegen der interne Treiber einen
> ausreichenden Pegel auch für Messungen liefern.

Blöd nur das die Kapazität des Tastkopfes die Schaltung total verstimmt. 
Daher ist eine Messung nicht vernünftig druchführbar.

Deshalb hat der µC i.d.R. einen extra Clock Ausgang. Da liegt dann aber 
nicht der Sinus vom Quarz dran sondern ein Rechteck.

Insbesondere hat der OP auch die Lastkapazitäten verdammt klein gewählt 
- ich komme auf eher so 9 oder 10pF für C311 und C312. Bei 6pF muss der 
Quarz nicht mehr zuverlässig anlaufen IMHO.

von FWSM (Gast)


Lesenswert?

Hallo,
in der Quarz-Beschreibung steht "Betriebsmodus : Erste Harmonische", was 
auf einen Oberwellen-Quarz hindeutet. Ist meines Wissens für ST mit der 
Standard-Beschaltung nicht geeignet - die ist für Grundwellen-Quarze.

von Stefan F. (Gast)


Lesenswert?

FWSM schrieb:
> Ist meines Wissens für ST mit der
> Standard-Beschaltung nicht geeignet - die ist für Grundwellen-Quarze.

Dieser Punkt interessiert mich. Die Schaltung von ST befindet sich ja 
auch in den AVR Mikrocontrollern.

Worin unterscheidet sich dieser einfache Oszillator von denen für 
Oberwellen?

Und: Kann man nicht theoretisch jeden Quarz auf einer Oberwelle 
schwingen lassen?

Beitrag #6611927 wurde vom Autor gelöscht.
von FWSM (Gast)


Lesenswert?

Du musst alles ausser der gewünschten Oberwelle herausfiltern. Meist mit 
Schwingkreis, seltener mit Saugkreis.

Schau mal bei Beitrag "Wie Quarz auf die 5.te Oberwelle zwingen"

von Georg (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Kann man nicht theoretisch jeden Quarz auf einer Oberwelle
> schwingen lassen?

Dazu muss man dafür sorgen, dass für die Grundwelle die 
Rückkopplungsbedingung nicht erfüllt ist, das geht i.d.R. nicht mit der 
einfachen Beschaltung mit 2 Kapazitäten wie bei µControllern üblich. 
Siehe auch FWSM.

Georg

von Eslor (Gast)


Lesenswert?

>Blöd nur das die Kapazität des Tastkopfes die Schaltung total verstimmt.
>Daher ist eine Messung nicht vernünftig druchführbar.
Es reicht üblicherweise, den Tastkopf in die Nähe zu bringen. Eine 
Aussage über Amplitude kann man dann nicht machen, aber ob er schwingt 
und die Frequenz sieht man dann sehr genau.

von Messknecht (Gast)


Lesenswert?

Jim M. schrieb:
> Blöd nur das die Kapazität des Tastkopfes die Schaltung total verstimmt.
> Daher ist eine Messung nicht vernünftig druchführbar.

Käse.

Ein Nachweis der Schwingung ist auf jeden Fall mit Tastkopf
möglich, es muss die Frequenz ja nicht aufs Hz genau stimmen.

Der Frequenzversatz durch zusätzliche Belastung ist ein paar
ppm und das stört beim Nachweis der Schwingung überhaupt nicht.

von Terence S. (takeshi)


Angehängte Dateien:

Lesenswert?

Erst einmal vielen Dank für die zahlreichen und auch hilfreichen 
Antworten.

Christopher J. schrieb:
> Die Registerbeschreibungen finden sich bei ST - im Gegensatz etwa zu TI
> - nicht im "datasheet", sondern im "reference manual".

Jetzt fühle ich mich ein wenig dämlich. GENAU das habe ich ewig gesucht 
und ... scheinbar auch schon einmal gefunden, denn es lag schon auf der 
Festplatte. Oh Mann, was war denn da mit mir los?
Das ist eigentlich sogar sehr ähnlich zu den TI-Dokumenten, da gibt es 
neben dem Datasheet auch ein großes Dokument wie dieses, früher für 
jedes Modul ein eigenes Dokument.
Danke, jetzt kann ich mich endlich richtig mit dem Controller 
auseinandersetzen.

neuer PIC Freund schrieb im Beitrag #6611744:
> Bei über 150MHz: R1MODE auch bedient? (1.28V anstatt 1.2V)

Nein, das war mir neu, habe's aber im Manual gefunden. Der Einfachheit 
halber ist SYSCLK nun auf 120 MHz gestellt, keine Änderung. Aber guter 
Hinweis, das muss ich später natürlich beachten.

A. B. schrieb:
> 1) Hardware-Defekt, sei es Quarz defekt oder ungeeignet, Layout-Fehler,
> Lötstellen ... Da empfiehlt sich ein Blick in AN2867.

Das AN2867 hatte ich mir vorher schon angesehen, das sollte alles 
passen. Als Referenz habe ich zudem noch ST-Boards herangezogen. 
Layout-Fehler habe ich geprüft, die Anschlüsse am Quarz passen. Anbei 
auch noch einmal das Layout, Raster ist auf 0,5 mm eingestellt.
Den Quarz werde ich nachher mal tauschen.

Messknecht schrieb:
> Fragt hier niemand nach der Messmethode?
>
> - Welches Oszilloskop? Kann das überhaupt diese ("hohe")
> Frequenz darstellen?
>
> - Messaufbau, Bezugsmasse ...

Das Oszilloskop ist ein Siglent SDS 1104X-E (100 MHz), Tastkopf ist ein 
Testec MF 312 (250 MHz). Hielt ich nicht für Relevant, welches Oszi das 
genau ist.
Zur Messmethode und Bezugsmasse habe ich ein Bild angehängt.

Messknecht schrieb:
> Wenn man die Fähigkeiten des TO nicht kennt [...]
> darf bei diesen Aspekten schon mal gezweifelt werden.

Das stimmt natürlich.

Messknecht schrieb:
> Ein Nachweis der Schwingung ist auf jeden Fall mit Tastkopf
> möglich, es muss die Frequenz ja nicht aufs Hz genau stimmen.
>
> Der Frequenzversatz durch zusätzliche Belastung ist ein paar
> ppm und das stört beim Nachweis der Schwingung überhaupt nicht.

Danke, das war bisher auch mein Stand und zeigte sich in der Praxis 
bisher auch immer.

von Terence S. (takeshi)


Lesenswert?

=== Quarz schwingt! ===

Habe ihn getauscht, nun geht's. Periodendauer liegt rund 42 ns, passt.
Das ist mir auch noch nicht passiert. Der trivialste Fehler war es. Hat 
mich aber trotzdem an anderer Stelle auch weitergebracht, danke.

von Messknecht (Gast)


Lesenswert?

Terence S. schrieb:
> Habe ihn getauscht, nun geht's.

Wird wohl ein Lötfehler bzw. Lötproblem gewesen sein. Kann
mir nicht vorstellen dass der Quarz selbst kaputt ist.
Vielleich noch ein kleines Toleranzproblem oder eventuell
mag auch dies (in Verbindung mit Toleranzen) zutreffen:

Jim M. schrieb:
> Insbesondere hat der OP auch die Lastkapazitäten verdammt klein gewählt

von Messknecht (Gast)


Lesenswert?

Terence S. schrieb:
> Hielt ich nicht für Relevant, welches Oszi das genau ist.

Das ist halt dann relevant wenn das Oszilloskop bei weitem
nicht die Bandbreite hat um die gewünschte Frequenz
nachzuweisen. Und wenn die Daten im Thread zunächst nicht
zur Verfügung stehen muss man auch daran mal zweifeln. Man
jat ja schon Pferde vor der Apotheke kotzen sehen ....

Terence S. schrieb:
> Das stimmt natürlich.

Dank für nicht vorhandene Beratungsresistenz.

von Christopher J. (christopher_j23)


Lesenswert?

Terence S. schrieb:
> === Quarz schwingt! ===
> Habe ihn getauscht, nun geht's.

Das ist doch schonmal viel Wert ;)

Wenn du mit CubeMX/HAL arbeiten willst empfehle ich dir unbedingt noch 
das "stm32g4 hal user manual". Ohne das hat man meiner Meinung nach fast 
keine Chance aus den HAL-Funktionen schlau zu werden, selbst dann nicht 
wenn man das reference manual auswendig kennt.

von Stefan F. (Gast)


Lesenswert?

Ich würde sogar sagen, dass beide manuals zusammen verwendet werden 
sollten. Gilt für alle STM32 Serien.

von Terence S. (takeshi)


Lesenswert?

Messknecht schrieb:
> Wird wohl ein Lötfehler bzw. Lötproblem gewesen sein.

Gut getippt, ein Pad ist tatsächlich nicht verzinnt. Der wurde 
nachträglich aufgelötet und das mit nicht wirklich passendem Werkzeug.

Christopher J. schrieb:
> Wenn du mit CubeMX/HAL arbeiten willst [...]

Langfristig nicht, ich habe auf diese extreme Abstraktion eigentlich 
keine Lust, daher bin ich sehr froh endlich eine vernünftige 
Dokumentation an der Hand zu haben. Vorerst werde ich aber wohl mit HAL 
arbeiten und hoffen, dass es erst mal reicht, da ich jetzt einmal ein 
wenig drin bin. Werde aber bei Bedarf da mal reinschauen.

Nun noch mal zur Lastkapazität, denn das wurde ja wirklich häufig 
thematisiert.
Messknecht schrieb:
> Vielleich noch ein kleines Toleranzproblem oder eventuell
> mag auch dies (in Verbindung mit Toleranzen) zutreffen:
>
> Jim M. schrieb:
>> Insbesondere hat der OP auch die Lastkapazitäten verdammt klein gewählt

Im Datenblatt des Quarzes steht, dass die Lastkapazität 6 pF groß sein 
soll. In AN2867 ist die parasitäre Kapazität für die Eingänge nicht 
einzeln angegeben, aber da wird als Summe für die Kapazität der Eingänge 
und die des Layouts 5 pF angenommen. Den Wert habe ich übernommen. Meine 
beiden 6-pF-Kapazitäten ergeben zusammen 3 pF, sind insgesamt mit denen 
des Layouts und der Eingänge 8 pF, also schon 2 pF zu viel. Nur fand ich 
es albern da 2 pF aufzulöten, also habe ich was zwischen 2 und 10 pF 
genommen, nämlich 6 und habe drauf gehofft, dass entweder a) das Layout 
weniger kapazitiv ist als angenommen oder b) es einfach egal ist, da es 
auf die Genauigkeit der Frequenz hier sowieso nicht so ankommt.
Aber habe ich da irgendwo einen Denkfehler, dass es wirklich mehr sein 
sollten als die verwendeten 6 pF?

Und noch eine andere Frage. Ich habe erst im Nachhinein in CubeMX 
gesehen, dass die PLL am Eingang maximal 16 MHz verträgt, ich muss die 
24 MHz also erst herunterteilen. Sehe ich das richtig, dass es da besser 
wäre gleich mit 16 MHz reinzugehen und nicht mit mehr, wenn es um 
Genauigkeit geht? Habe mich mit der Wahl von Quarzen jetzt noch nie so 
unglaublich ausgiebig beschäftigt.

: Bearbeitet durch User
von Messknecht (Gast)


Lesenswert?

Terence S. schrieb:
> Sehe ich das richtig, dass es da besser
> wäre gleich mit 16 MHz reinzugehen und nicht mit mehr, wenn es um
> Genauigkeit geht?

Mit der Genauigkeit hat das erst mal nichts zu tun, aber eine
niedrigere Ausgangsfrequenz ist natürlich schaltungstechnisch
leichter zu handhaben (du hast das aber sehr gut im Layout
gemacht). Sonst gibt es keine Vorzüge - eine gelockte PLL ist
immer frequenzgenau. Nur haben niedrige HSE Frequenzen den
Nachteil die PLL für die hohen Takte mehr jittern zu lassen
was für manche Anwendungen von Bedeutung ist. Auch bestimmt
in gewissen Grenzen der HSE die maximal erreichbare Takt-
frequenz für den Core. Einfach mal mit dem CubeMX Clock
Tool spielen ....

Die meisten Designs die ich kenne verwenden wohl einen Quarz
von 8 MHz - gefühlsmässig vielleicht eine günstige Wahl und
ein guter Kompromiss um möglichst viele verschiedene Takt-
konfigurationen abzudecken.

von Terence S. (takeshi)


Lesenswert?

Messknecht schrieb:
> Nur haben niedrige HSE Frequenzen den
> Nachteil die PLL für die hohen Takte mehr jittern zu lassen
> was für manche Anwendungen von Bedeutung ist.

Das dachte ich auch, und da ich die Frequenz erst herunterteilen muss 
(PLLM) und natürlich nur ganzzahlige Teiler möglich sind, lande ich bei 
12 MHz Eingangsfrequenz (24 MHz /2) statt möglichen 16 MHz. Daraus 
schloss ich, entweder 16 MHz verwenden, oder aber gleich 32 MHz, was mir 
jedoch keinen Vorteil brächte, nur Nachteile, also gleich 16 MHz.

Gut, das ist hierbei nicht kriegsentscheidend, aber beim nächsten Mal 
kann ich mir den schnelleren Quarz sparen. Danke für die Einschätzung.

von Stefan F. (Gast)


Lesenswert?

Terence S. schrieb:
> Aber habe ich da irgendwo einen Denkfehler

Ich denke nicht. Der geringe Kapazitätswert ist dennoch ungewöhnlich, 
die meisten Quarze brauchen deutlich mehr. Aber dafür kannst du ja 
nichts.

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.