Hallo,
ich benutze einen STM32F413VGT6, mit einem 8MHz Quarz und PLL, um 72MHz
System/Timertakt zu erzeugen.
Wenn ich nun eine Frequenz um ca. 400kHz erzeuge und ausgeben lasse,
dann driftet diese um 2 bis 4 kHz, ist also nicht sonderlich stabil. Mir
ist klar, dass dies bei niedrigeren Frequenzen stabiler wäre, jedoch:
Ist dies noch im Rahmen? Kann ich den Jitter irgendwie verbessern? Die
Teiler/Multiplikatoren der PLL lauten:
PLL = 8MHz / 4 * 72 / 2;
Für Ideen wäre ich dankbar, ich hätte es gerne etwas genauer. Wenn ihr
spezifische Codeabschnitte braucht teile ich diese gerne. Ein paar
Bitmasken fehlen mir noch im folgenden Code. Gibt es für mehrstellige
Bitfelder gute vordefinierte Masken in der CMSIS?
Nils N. schrieb:> Wenn ich nun eine Frequenz um ca. 400kHz erzeuge und ausgeben lasse,> dann driftet diese um 2 bis 4 kHz, ist also nicht sonderlich stabil.
Lösche alle delay() und nimm einen Timer.
m.n. schrieb:> Nils N. schrieb:>> Wenn ich nun eine Frequenz um ca. 400kHz erzeuge und ausgeben lasse,>> dann driftet diese um 2 bis 4 kHz, ist also nicht sonderlich stabil.>> Lösche alle delay() und nimm einen Timer.
Ach, echt..? ;)...
Natürlich verwende ich einen Hardware Timer mit Output-Compare..
Nils N. schrieb:> Wenn ich nun eine Frequenz um ca. 400kHz erzeuge und ausgeben lasse,> dann driftet diese um 2 bis 4 kHz, ist also nicht sonderlich stabil. Mir
Was soll das "driften" denn eigentlich heißen??? Und was soll der
Abschnitt
mit der Initalisierung des System-Taktes??? Wo ist der "interessante",
nämlich der des angesprochenen Timers???
Wenn man den Verdacht hat, dass die PLL der Übeltäter ist: den MCO
Ausgang nutzen und da einen Frequenzzähler dran klemmen. Oder alternativ
den HSE-Takt direkt als Systemtakt verwenden, ohne PLL, geht doch auch.
(Wobei 1% schon recht übel wäre; wenn es tatsächlich der Systemtakt sein
sollte, hätte ich eher den Oszillator in Verdacht, ungünstiges Layout
oder so.)
Sobald klar ist, ob der Oszillator, der Systemtakt oder eben nur die
Ausgangsfrequenz "instabil" ist, wär' man ja schon ein gutes Stück
weiter?!
Driften bedeutet, dass die Frequenz um +- 4kHz hin und her schwankt.
Der Quarz schlittert auch deutlich, aber auch mit dem internen OSC habe
ich den Jitter. Die Ausgabe des Systemtakt als 72MHz / 4 auf MCO_2 zeigt
eine Frequenz um 18MHz +- 0,08. Auf dem Screenshot sieht man den
Systemtaktausgang und wie das ganze periodisch schwankt, sprich die
Schwebung.
Den Timer konfiguriere ich mit folgenen Zeilen:
1
TIM1->CCMR1|=(0b011<<4);//Ausgang toggeln
2
TIM1->CCER|=TIM_CCER_CC1E;
3
TIM1->BDTR|=TIM_BDTR_MOE;
4
TIM1->ARR=0xffff;
5
TIM1->CR1|=TIM_CR1_CEN;
Mein Quarz hat 18pf Kondensatoren bekommen und an OSC_OUT einen 220 Ohm
Widerstand.
Nils N. schrieb:> Die Ausgabe des Systemtakt als 72MHz / 4 auf MCO_2 zeigt> eine Frequenz um 18MHz +- 0,08.
Die Messung mittels Digital-Oszilloskop ist stark fehler-
behaftet und hat nur sehr geringe Aussagekraft!
Messe mit einem Frequenzzähler oder einem Spektrumanalysator.
Unterscheide klar <Drift> und <Jitter>.
Ok. Mit dieser PLL gebe ich mit einem Hardwaretimer eine 420kHz Frequenz
mit output compare aus. Diese Frequenz schwankt von 418-422kHz in einem
Zeitraum von 40µS. Ist das noch im Rahmen? Ich finde nicht.
Frickelfritze schrieb:> Nils N. schrieb:>> Auf dem Screenshot sieht man>> ... (dumpf) nicht viel.>> Besser wird es mit>> http://www.ko4bb.com/TDS2xxDump/
Ich habe kein RS232 Modul und habe auch nicht vor es zu kaufen, danke.
Ich finde man erkennt genug.
Nils N. schrieb:> Ist das noch im Rahmen? Ich finde nicht.
Hast du es nicht verstanden?
Das Oszilloskop misst praktisch "grafisch" die Periodendauer
und gibt dir die berechnete Frequenz dazu aus. Das ist
verdammt ungenau.
Etwas besser wird es wenn du nur zwei oder drei Perioden
darstellst.
Ich finde, es sieht wie eine Schwebung aus, die durch zeitdiskretes
Abtasten auftritt.
Du könntest das hier mal versuchen:
-stelle die Timebase so ein, dass nur etwa 4 Rechtecksignale
gleichzeitig sichtbar sind.
-Trigger Singleshot
Jetzt löse den Trigger viele Male (größer 20 würde ich sagen) aus und
prüfe jedesmal, ob die Rechtecke zur vorigen Messung unterschiedlich
breit sind und wenn ja, wie groß der Unterschied ist.
Wenn es sich um ein HW-Phänomen handelt, müssten irgendwann mal
Rechteckbreiten vorhanden sein, die merklich von dem erwarteten Wert
abweichen, sowohl nach oben als auch nach unten.
Wenn das nicht der Fall ist, hat dich das Bild deines Tektronix
wahrscheinlich auf die falsche Fährte geführt.
Dieser STM hat auch keine SpreadSpectrum-Funktion soweit ich das in
CubeMX auf die Schnelle gesehen habe, die sowas erklären würde.
Nils N. schrieb:> Der Quarz schlittert auch deutlich,
Ich habe das eben mit dem F103 probiert, allerdings mit HAL, dürfte aber
keine Rolle spielen.
HSE direkt an MCO 8,00066 MHz stabil über Minuten.
Mit HSI bei PLL 64 MHz / 2 habe ich auch genau diese +- 4kHz.
Mit HSE bei PLL 72 MHz / 2 habe ich allerdings konstant 36,0030MHz.
Bist du sicher das er wirklich HSE benutzt und nicht durch einen Fehler
im HSE Zweig wieder auf HSI schaltet?
Gemessen mit DS1054Z.
Frickelfritze schrieb:> Das Oszilloskop misst praktisch "grafisch" die Periodendauer> und gibt dir die berechnete Frequenz dazu aus.
"grafisch" - Was heißt das genau?
> Das ist verdammt ungenau.
Kannst du das belegen oder ist das nur eine Bauchmeinug?
Dein Nick ist nicht gerade vertrauenerweckend.
Verzweifelt an PIC schrieb im Beitrag #5308062:
> Nur mal eine Frage: Auf deinem Oszi steht eine Bandbreite von 60MHz und> du misst ein 72MHz Signal? Stimmt dezent was nicht oder?
Ich mess 18MHz, weil der STM32 mir die 72MHz geteilt durch 4 ausgibt.
Das ist also soweit in Ordnung.
pegel schrieb:> Bist du sicher das er wirklich HSE benutzt und nicht durch einen Fehler> im HSE Zweig wieder auf HSI schaltet?
Dass der HSI ungenau ist und größere Temperaturdrift hat, ok. Aber auch
der sollte nicht so einen Jitter haben.
Felix schrieb:> Dieser STM hat auch keine SpreadSpectrum-Funktion soweit ich das in> CubeMX auf die Schnelle gesehen habe, die sowas erklären würde.
Hat er, ist aber deaktiviert. Zumindest sehe ich das im Datenblatt.
Evtl. hilft hier mal ein analoges Oszilloskop zu verwenden.
Nils N. schrieb:> sprich die> Schwebung.
Welche Schwebung? Eine Schwebung kann es nur zwischen zwei Signalen
geben. Auf dem Bild sieht man erst einmal nur, daß Du die Zeitauflösung
nicht fein genug eingestellt hast.
Wenn Du den Jitter sehen willst, stell das Oszilloskopbild auf ewig
nachleuchten und die Zeitauflösung auf 10 ns.