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.
Ich würde mal sagen im Forum PC-Programmierung wirst du da nicht fündig.
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?
Doch PC Proogrammierung passt schon. Ein einfacher Ansatz.. Alle Kombinationen, welche etwa hinkommen durchprobieren.
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...
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.
> 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
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 ?
:
Bearbeitet durch User
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?
:
Bearbeitet durch User
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.