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.
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?
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...
> 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#/
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.
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 ?
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.
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?
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.
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.
> 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.
>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.