Forum: PC-Programmierung RF Sysnthesizer PLL Optimierung


von Jonas G. (Gast)


Lesenswert?

Ich möchte einen Algorithmus für einen MAX2871 Synthesechip schreiben, 
welcher die die optimale Kombination von 3 Parameters N, M, und FRAC 
berechnen. Wie man an N kommt ist mit recht klar. Ich habe nun den Rest, 
den ich durch FRAC/M berechnen muss. Suche also einen Alorithmus, der 
mir die beste Kombination aus FRAC/M berechnet, damit der Fehler 
möglichst klein wird.

von MaWin (Gast)


Lesenswert?

Ich würde mal sagen im Forum PC-Programmierung wirst du da nicht fündig.

von Jonas G. (Gast)


Lesenswert?

MaWin schrieb:
> Ich würde mal sagen im Forum PC-Programmierung wirst du da nicht
> fündig.

Das ist eher ein Programmierproblem. Könnte den Thread dann jemand 
verschieben bitte?

von Purzel H. (hacky)


Lesenswert?

Doch PC Proogrammierung passt schon. Ein einfacher Ansatz.. Alle 
Kombinationen, welche etwa hinkommen durchprobieren.

von Bernd (Gast)


Lesenswert?

Jonas G. schrieb:
> Suche also einen Alorithmus, der
> mir die beste Kombination aus FRAC/M berechnet, damit der Fehler
> möglichst klein wird.
Im Zweifelsfall 'brute force' und nach Fehler sortieren. Bzw. neue 
Kombination nur nehmen, wenn der Fehler kleiner ist, als bei der bisher 
besten Kombi...

von Purzel H. (hacky)


Lesenswert?

Man kann's auch etwas aufblaehen ... Monte Carlo.

von Mario H. (rf-messkopf) Benutzerseite


Lesenswert?

Jonas G. schrieb:
> optimale Kombination von 3 Parameters N, M, und FRAC berechnen

Für eine Fraktional-N-PLL? Dann heißt das Stichwort größter gemeinsamer 
Teiler (gcd) und Euklidischer Algorithmus. Ich hatte das hier mal für 
einen LMX2582 Implementiert:

https://www.mariohellmich.de/projects/sig-gen-ii/sig-gen-ii.html

Den Source-Code gibt es hier:

https://www.mariohellmich.de/projects/sig-gen-ii/files/sig-gen-ii_docu.zip

Schau mal unter 
/sig-gen-ii_docu/Firmware/Signalgenerator-Mk-II/system_operation.c in 
den Zeilen 154 bis 161, und sieh Dir die Funktion gcd() ab Zeile 66 an.

von Purzel H. (hacky)


Lesenswert?

> https://www.mariohellmich.de/projects/sig-gen-ii

Sehr cooles Projekt. Erst habe ich mich ueber die extensive Filterung 
der Speisungen zu den Analogen Chips gewundert, bis ich gesehen habe, 
dass eine Menge Schaltregler verbaut wurden. Die Werte der Spurs sind ja 
super wie sie so gezeigt werden.

Fuer erhoehte Anforderungen waeren Ultra Low Noise Wandler moeglich.
Der LTC3119 zeigt grad in einem einzelnem Bild 30mVpp bei leichter Last.

Ich verwende gerne den LT1777, welcher allerdings nur 700mA bringt. Resp 
den LT1683, wenn ich Trafos wickeln mag.

Dann gibt es noch schnelle, dh high PSRR, ultra low noise LDO's wie den 
ADP7104.
https://www.analog.com/en/parametricsearch/11536#/

: Bearbeitet durch User
von Mario H. (rf-messkopf) Benutzerseite


Lesenswert?

Purzel H. schrieb:
> Die Werte der Spurs sind ja super wie sie so gezeigt werden.

Ja, die Messungen passen schon. Das einzige Problem, was bei dem Design 
in der Hinsicht besteht, ist, dass die Oberwellenfilter für die 
niedrigeren Frequenzbereiche (Band 1 bis 3, oder so) bei 3 oder 4 GHz 
wieder leicht durchlässig werden, und der LMX2582 durchaus Oberwellen 
bis in den Bereich liefert. Das liegt daran, dass bei mehreren GHz die 
Kondensatoren nach Masse in den Filtern in der Impedanz wieder merklich 
ansteigen. Das könnte man noch verbessern, wenn man diese durch 
Parallelschaltungen von zwei kleineren Kondensatoren ersetzt. Meist 
stört das aber wenig.

Ansonsten hat man natürlich prinzipbedingt die Integer Boundary Spurs 
wenn die PLL im Fraktional-N-Modus läuft.

Ich habe eine verbesserte Version der Schaltung entworfen, mit einem 
DDS-Synthesizer als Referenz für den LMX2582, so dass dieser immer im 
Integer-N-Modus laufen kann, um die Boundary Spurs loszuwerden. Ebenso 
kann man mit der DDS den Frqeuenzbereich nach unten erweitern. 
Zusätzlich soll noch ein ARM Cortex auf das Board, der schnell genug 
ist, um die Frequenz schnell zu ändern. Und ein ausreichend großes 
EEPROM, so dass man alle Stufen des Abschwächers separat kalibrieren 
kann.

Leider zieht sich das alles ewig hin, da man momentan vieles nicht 
lieferbar ist, und ich keine Lust habe, das Design für ein Hobbyprojekt 
ständig nach Marktlage zu ändern.

von Purzel H. (hacky)


Lesenswert?

Ja, das macht Sinn. Geht in die Richtung der ERA Synth, deren guenstiges 
Modell (375$ 6.4GHz) hat zwei Loops, die Besseren haben 3 Loops (1700$ 
15GHz & 2250$ 20Gz).
https://erainstruments.com/

Die Frequenz kann man nur so schnell aendern wie die Loops nachregeln 
koennen. Welche Geschwindigkeit waere denn angedacht ?

: Bearbeitet durch User
von W.S. (Gast)


Lesenswert?

Jonas G. schrieb:
> Suche also einen Alorithmus, der
> mir die beste Kombination aus FRAC/M berechnet, damit der Fehler
> möglichst klein wird.

Hach, irgendwie kommt mir das bekannt vor. Zum einen ist es ein 
mathematisches Problem, zum anderen gibt es elektronische Probleme 
speziell beim Jitter, die bei bestimmten Kombinationen sich stärker 
bemerbar machen als sonst, und wo man abwägen muß, worauf man größeren 
Wert legt. Also die gewünschte Frequenz im Mittel möglichst genau 
treffen oder den Jitter so klein halten, daß er nicht zu sehr stört. 
Dazu gab's mal einige längere Artikel (m.W. von AD), an die ich mich 
noch erinnere. Hab's aber leider nicht parat.

W.S.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Mit fractional-n möchte ich auch mal spielen, das habe ich noch nicht 
probiert. Das Stichwort Euklidscher Algorithmus sieht interessant aus.
https://de.wikipedia.org/wiki/Euklidischer_Algorithmus

Kommt auch darauf an, wie groß die Zahl der Einstellmöglichkeiten ist. 
Eventuell kann man eine Tabelle erzeugen, auch unter Berücksichtigung 
des Jitters. Oder nur teilweise mit Tabelle arbeiten, und den groben 
Bereich rechnerisch?

: Bearbeitet durch User
von Mario H. (rf-messkopf) Benutzerseite


Lesenswert?

Purzel H. schrieb:
> Die Frequenz kann man nur so schnell aendern wie die Loops nachregeln
> koennen. Welche Geschwindigkeit waere denn angedacht ?

Mal schauen, wie schnell ich das bekomme. Die VCO-Kalibrierung im 
LMX2582 kann man wohl auf ca. 20 µs drücken. Bleibt die analoge 
Einschwingzeit aufgrund des Loop-Filters. Zu breit sollte das nicht 
ausfallen, damit das Close-in-Phasenrauschen nicht vom VCO dominiert 
wird und damit schlecht wird. Vielleicht sind 100 bis 200 µs für den 
LMX2582 realistisch, wenn man auf Tricks wie ein variables Loop-Filter 
verzichten will. Das wird dann schnell aufwendig.

Möglich wäre das aber schon, eventuell dann aber mit einem anderen 
PLL-Baustein und externem VCO. Moderne Spektrumanalysatoren können ja 
auch mehrere GHz in 5 ms mit ca. 500 Punkten durchlaufen.

Hinzu kommt noch der Rest (DDS-Einstellzeit, Level-DAC, Einschwingzeit 
der AGC). Ich denke, wenn ich Sweeps mit 1 ms Schrittzeit einigermaßen 
sauber hinbekomme, ist das ausreichend. Und schon etwas besser als das, 
was übliche Signalgeneratoren anbieten. Ein ARM Cortex M4 mit 100 MHz 
packt das auch problemlos.

Christoph db1uq K. schrieb:
> Das Stichwort Euklidscher Algorithmus sieht interessant aus.

Das ist mehr oder weniger das Standardverfahren, um einen Dezimalbruch 
in eine "gemischte Zahl" (d.h. ganze Zahl plus echter Bruch) 
umzuwandeln.

von Mario H. (rf-messkopf) Benutzerseite


Lesenswert?

Christoph db1uq K. schrieb:
> Kommt auch darauf an, wie groß die Zahl der Einstellmöglichkeiten ist.
> Eventuell kann man eine Tabelle erzeugen, auch unter Berücksichtigung
> des Jitters.

Nachtrag: Grundsätzlich werden die Integer Boundary Spurs groß, wenn man 
nahe an ganzzahligen Teilern ist (deshalb heißen sie so). Siehe hier:

https://www.mariohellmich.de/projects/sig-gen-ii/img/integer_frac_5khz.png

Wenn ich das recht im Kopf habe, läuft der VCO bei 1 GHz 
Ausgangsfrequenz bei 4 GHz, d.h. der N-Teiler ist 40. Bei 1,000005 GHz 
macht das dann einen Teiler von 40,0002 (f_PFD ist 100 MHz in diesem 
Fall).

Man bekommt die Spurs sicher auch noch größer, wenn man näher an einen 
ganzzahligen Teiler rückt.

von Purzel H. (hacky)


Lesenswert?

> Also die gewünschte Frequenz im Mittel möglichst genau treffen oder den Jitter 
so klein halten, daß er nicht zu sehr stört.

Ein PLL haellt die Frequenz absolut gegen die Referenz. Da gibt es 
keinen Fehler. Jitter ist die Ungenauigkeit der Nulldurchgaenge. Der 
wird durch die Referenz vorgegeben.

> Nachtrag: Grundsätzlich werden die Integer Boundary Spurs groß, wenn man
nahe an ganzzahligen Teilern ist (deshalb heißen sie so).

Deswegen verwendet man eine DDS als erste oder 2. Stufe. Die kann jede 
Frequenz mit naehzu beliebiger Aufloesung zwischen zB 70 und 140MHz. Der 
nachfolgende PLL multipliziert dann auf GHz hoch und teilt Integer 
runter.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

>Eine PLL haelt die Frequenz absolut gegen die Referenz
Die Referenz ist konstant, aber der andere Teiler wackelt bei einer 
fractional PLL. Das kennt man schon von den alten Vorteilern :10/:11. 
Die PLL bekommt abwechselnd einen etwas zu hohen Istwert und dann einen 
zu niedrigen angeboten und mittelt mit ihrem Schleifentiefpass 
dazwischen aus. Daher kommt der Jitter, vermutlich vor allem wenn sie 
z.B. lange durch 10 und nur kurz durch 11 teilt.

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.