Hallo Leute, ich bin gerade dabei einen ADF4351 Synthesizer in Betrieb zu nehmen. Der Schaltplan ist dem Anhang zu entnehmen. Der Schleifenfilter wurde über SIMPLL berechnet. Das Layout ist vielleicht nicht 100% gelungen (da es ja doch ein HF Bauteil ist und somit sicher einiges an Verbesserung gemacht werden kann) sollte aber ausreichend sein um zumindest ein Signal generieren zu können. Vorsichtshalber befindet sich es aber auch im Anhang. Ich bin auf folgenden Thread gestoßen: Beitrag "ADF 4350 Frequenz-Synthesizer" Ich hab diesen Thread durchgefrostet und leider auch keinen Hinweiß auf mein Problem gefunden. Mein Problem: Wenn ich den ADF4351 mit Folgenden Registerinhalten beschreibe und mir dabei den N Divider Output auf den MUX Pin lege bekomme ich da nur Spikes. Dadurch klarerweise auch kein Lockdetect. Am Ausgang ergibt sich dabei ein etwa 70MHz Signal (4400MHz/64=68,75MHZ). Ist zwar etwas zu hoch aber zu erwarten, da ich am VThune eine Spannung von 3V abgreifen kann. Die Spikes kommen mit einem Abstand von 2µs was meiner fPFD entspricht, aber sind halt leider nur Spikes (siehe Anhang). Wenn ich mir den RCounter Ausgang über den MUX Pin anzeigen lasse bekomme ich das Richtige Ergebnis. Versorgungsspannung hat einen leichten Rippel von 20mVpp, kann der Fehler daran liegen? Oder habe ich einfach nur einen Fehler in der Registerbeschreibung? Fällt jemanden ein Fehler auf? Spannend finde ich die Tatsache das der Fehler offensichtlich beim Frequenzteiler liegt, da an dessen Ausgang kein richtiges Signal anliegt. Registerinhalt: reg[0]=(4480<<INTEGERVALUEpos)|(0<<FRACTIONALVALUEpos); reg[1]=(25<<MODpos) | (1<<PRESCALERpos); reg[2]=(NDIVIDERo<<MUXOUTpos) | (1<<RDIVpos) | (10<<RCOUNTERpos) | (0xF<<CHARGEPUMPCURRENTpos) | (1<<PDPOLARITY); reg[3]=(0<<CLKDIVMODEpos) | (200<<CLOCKDEVIDERpos); reg[4]=(6<<RFDEVIDERSELECTpos) | (5<<BANDSELECTCLOCKDIVIDERpos) | (0<<MTLDpos) | (1<<AUXOUTPUTENABLEpos) | (3<<AUXOUTPUTPOWERpos) | (1<<RFOUTPUTENABLEpos) | (0<<OUTPUTPOWERpos); reg[5]=REG5DEFAULT|(0b11<<LDPINMODEpos); was soviel heißt wie: r0=0x8c00000 r1=0x80000c8 r2=0x11029e40 r3=0x640 r4=0x6051e0 r5=0xc30000 Fällt jemanden noch eine andere Fehlerquelle ein? Ich bin über jegliche Hilfe Dankbar! LG Stephan
Stephan Hochmüller schrieb: > Ausgang ergibt sich dabei ein etwa 70MHz Signal (4400MHz/64=68,75MHZ). > Ist zwar etwas zu hoch aber zu erwarten, da ich am VThune eine Spannung > von 3V abgreifen kann. Die Spikes kommen mit einem Abstand von 2µs was > meiner fPFD entspricht, aber sind halt leider nur Spikes (siehe Anhang). Ich habe bereits mit einigen ADFxxxx gearbeitet, und soweit ich mich erinnere ist das was du misst schlichtweg korrekt. Das heisst wenn du den RF Teiler richtig eingestellt hast und die Frequenz nachweisen kannst die du erwartest hast du alles richtig gemacht. Das bedeuted aber auch dass du nicht erwarten kannst dass ein herunter geteiltes Signal mit Tastverhältnis 1:1 herauskommen muss. Die Pulse die du nachweist müssen höchstens so lang sein wie die halbe Periodendauer deines RF Einganssignals. Und das genügt auch um den Phasendetektor korrekt zu steuern. Der braucht nämlich nur die Länge der Durchlaufzeit der internen Gatter um die Phasendetektor Flipflops zu resetten. Genau genommen eigentlich nur die positive Clock Flanke. Du kannst ja einfach mal am RF Eingang eine quarzgenaue Frequenz einspeisen, dann wirst du auch die genau heruntergeteile Frequenz am Multiplexer Ausgang nachweisen können (um den Setup deines Teilers zu überprüfen). Falls deine Schleife nicht lockt hast du ein anderes Problem. Krass falsche Steilheit des VCOs für die Schleifenberechnung angenommen, oder eine falsche Polarität des Phasendetektors (die ja umschaltbar ist) um zwei offensichtliche Beispiele zu nennen.
Bei Pin 29, REFIN, solltest du auf jeden Fall sicherstellen dass der Eingang DC entkoppelt ist damit er sich selbst korrekt biasen kann. Siehe dazu auch das Schaltbild im Datenblatt auf Seite 25, Figure 34.
Stephan Hochmüller schrieb: > Fällt jemanden noch eine andere Fehlerquelle ein? Noch eine Stolperstelle: der Phasendetektor kann nicht unter allen Umständen die 70 MHz die du dir vielleicht wünschst. Aus dem Datenblatt ----------------------------------------- Phase Detector Frequency (max.) 32 MHz Fractional-N 45 MHz Integer-N (band select enabled) 90 MHz Integer-N (band select disabled) ----------------------------------------- Man bekommt zwar aus dem Mux Ausgang was heraus aber das garantiert nicht die Funktionsfähigkeit des Phasendetektors für diese Frequenz. Ich habe mir nicht die Mühe gemacht und alle deine Register- Settings überprüft, und das werde ich auch nicht machen ....
Das Teil ist jedes Mal eine Qual, bis es läuft. ;P Zu hohe PFD-Frequenz klingt nach einem guten Ansatz. Ripple auf der Versorgungsspannung hat andere Auswirkungen, ich glaube nicht, dass es daran liegt.
Bei irgendsoeinem integriertem PLL+VCO-Ding (sorry, mein Alzheimer...) war es so, dass der MUXOUT bei einigen Quellen nur mit Pullup (~100R) funktioniert hat. Hat mich auch einiges an Nerven gekostet. So ein Verhalten ist zwar aus der ADF-Beschreibung nicht ersichtlich, aber schnell auszuprobieren.
:
Bearbeitet durch User
Du hast doch überall AC-Kopplung mit nur 1nF. Miss mal direkt mit einer 10:1 Probe an dem 50Ohm Widerstand.
:
Bearbeitet durch User
Hallo Stephan, ich habe noch Probleme mit den Schleifenfilter - PLL Phase-Loop-Filter. Wie sind bei deinem Ansatz: * die Frequenz des PFD ? * sind die Ausgangsteiler DIVIDER, Teil deiner PLL Phase-Loop-Filter ? * welche Parameter (Frequenzen) wurden zur Berechnung verwendet ? * Welcher Frequenzbereich soll generiert werden ? und * wie hoch ist der Strom für das Phase-Loop-Filter ? Ich verwende zwei ADF4350 über ein Mischerkonzept mit ZF ~ 250kHz.
Vielen Danke für die vielen Hinweiße! Ich bin gerade dabei allen nachzugehen, und sie hier parallel zu dokumentieren. Dabei kann ich gleich mit dem letzten Kommentar anfangen. Ich muss mich entschuldigen, ich habe oben sicher zu wenig Information angegeben. Zu den offenen Punkten: Uwe S. schrieb: > * die Frequenz des PFD ? > * sind die Ausgangsteiler DIVIDER, Teil deiner PLL Phase-Loop-Filter ? > * welche Parameter (Frequenzen) wurden zur Berechnung verwendet ? > * Welcher Frequenzbereich soll generiert werden ? und > * wie hoch ist der Strom für das Phase-Loop-Filter ? Die PFD Frequenz sollte bei 500kHz liegen. Ich habe als Referenzsignal ein 10MHz CMOS Signal aus einem Zynq7000. Verwende den Internen Frequenzteiler (um 50% duty cycle zu erzielen um eventuell mal das CSR Feature zu nützen) und einen Teilungsfaktor am R Counter von 10. Dies ergibt am MUX Ausgang gemessene 500kHz. Die Ausgangsteiler sind Teil der PLL und auf 64 eingestellt. Ziel wäre es einmal ein Ausgangssignal von 35MHz zu generieren, deshalb 64. Die Berechnung kommt wie folgt zustande: FRF=35MHz FPFD=500kHz RF Divider = 64 MOD = 25 FRAC=0 INT = FRF/(FPFD/RF Divider) = 4480 Im Grunde sollte der ADF4351 als LO für ein Mischerkonzept arbeiten. Also prinzipiell über einen weiten Frequenzbereich bis 2,4GHz. Der Filter wurde für einen Strom mit 5mA berechnet. Doch um ehrlich zu sein, versteh ich diesen Wert nicht ganz. Was sagt der aus? Liegt der Fehler vielleicht da? Der Filter ist lauf SimPLL für 5mA ausgelegt. Aber wo fließt dieser Strom? Der kann unmöglich über den Filter fließen. Oder ist das der Maximalwert den die Charge Pump liefern kann für den Fall einer Steilen Flanke an den C's`? @Arduinoquäler: Danke für den Tipp mit dem Tastverhältnis! Macht auf alle fälle Sinn, aber der N Counter richtig arbeiten würde, müssten die Spikes am Ausgang einen Pegel von mindestens VCC besitzen. Ich glaube da eher das da im Chip ein Kopplung von R Counter vorhanden ist. Zum RFin eingang, ich habe mir darüber auch schon den Kopf zerbrochen, da mir das auch aufgefallen ist, und in meinem Design definitiv ein DC Anteil vorhanden ist, habe aber dann folgende Beschreibung zum Pin im Datenblatt gefunden:
1 | Reference Input: This CMOS input has a nominal threshold of AVDD/2 and a dc equivalent input resistance of 100 kΩ. This input can be driven from a TTL or CMOS crystal oscillator, or it can be ac-coupled. |
Ich habe das so interpretiert das ich sowohl ausgekoppelte Signale als auch CMOS/TTL Signale mit Gleichanteil verwenden kann. Sehe ich das falsch? @Arduinoquäler: @Sven B.: Da die PFD Frequenz nur bei 500kHz liegt kann es das wohl nicht sein. Der Band Select Clock Divider hat einen wert von 5 was 100kHz bedeutet und somit auch unter den spezifizierten 125kHz Maximum liegt. @Georg A.: Habe leider gerade nicht die Möglichkeit das zu machen, werde das aber morgen ausprobieren. @Helmut S.: 1nF sollte reichen, 1/(100Ohm*1nF)=10MHz. Das vorhandene Ausgangssignal (Amplitude) ist auch in Ordnung, nur die Frequenz stimmt nicht. Da ich am N Counter Ausgang kein richtiges Signal (FRF/(Int*FRAC/MOD) habe denke ich noch immer das ich da was Falsch mache. Ich habe die Einstellung des Clock Divider Mode noch nicht ganz verstanden. Im Moment verwende ich 0 -> disable click divider. Das klingt ein wenig so als ob der N Counter damit ausgeschalten ist. Habe aber auch schon die Einstellung 10->active phase resync versucht anzuwenden. Diese hatte das Selbe Ergebnis. Selbst wenn ich dabei die tsync falsch eingestellt hätte, und somit der lockdetect nicht einrastet, müsste am N Counter Ausgang ja trotzdem das "falsche" Signal anliegen oder? Vielen Dank LG Stephan
Danke Stephan, für dein Angabe, ich hatte auch schon ein wenig mit den Daten aus deinem ersten Beitrag gerechnet. Kennst Du schon ADIsimPLL V3.60.10 ? # https://form.analog.com/Form_Pages/RFComms/ADISimPll.aspx # http://www.analog.com/media/en/training-seminars/tutorials/adisimpll.pdf Damit kämpfe ich noch an den PLL Phase-Loop-Filter herum.
Hallo Stephan, Hier ist noch mal das Blockschaltbild des ADF4351 mit etwas Farbe. Man kann den RF Divider in den Regelkreis des PFD legen oder nicht. Wenn man ihn verwendet, dann kann man bei allen Ausgabefrequenzen die selbe Frequenzschrittweite (fSTEP), bedingt durch MOD, nutzen. Anderenfalls wird sie (fSTEP) um den um den Teiler RF Divider vermindert.
Hallo Uwe S., Ja diese Software ist mir bekannt, ich habe damit meinen Filter berechnet. Es gibt sogar die Erweiterung, welche die Registerwerte berechnet: http://www.analog.com/media/en/evaluation-boards-kits/evaluation-software/ADF435x_v4_3_5.zip leider klappt es aber damit auch nicht. Mit dem RF Divider hast du recht. Dieser und der VCO funktionieren auch offensichtlich. Das Problem liegt offenbar im N Counter. Da an dessen Ausgang kein Signal anliegt, obwohl am RF Ausgang ein Messbares Signal zu erkennen ist.
Hallo Stephan, Du betreibst den ADF4351 ja im faktalen Modus. Wusstest Du, dass man für alle (MOD,FRAC) Paare den GGT bilden muss und daraus neu Werte für den ADF4351 berechnet ? Pseudo Code:
1 | WENN (FRAC > 0) |
2 | ggt = GGT(FRAC, MOD) |
3 | FRAC' = FRAC /ggt |
4 | MOD' = MOD /ggt |
5 | SONST
|
6 | FRAC' = 0 |
7 | MOD' = 1 |
8 | END
|
Register 2 LDF = 0 an DB8, also LDFvalue = (0<<8) Wie beschreibst Du denn die Register, in der Reihenfolge R5 bis R0 ? Man sollte "DOUBLE BUFFER" an DB13 auf 1 setzen, dann werden die Frequenz relevanten Änderungen auf einmal ins System "geschrieben". Register 3 (200<<CLOCKDEVIDERpos) Abschnitt "PHASE RESYNC", wenn man von 400µs = 400*10⁻⁶ ausgeht, dann ergibt sich für CLK_DIV_VALUE: t_SYNC = CLK_DIV_VALUE × MOD × t_PFD <=> CLK_DIV_VALUE = t_SYNC /MOD /t_PFD mit t_PFD = 1/ fPFD = 500*10⁻³ folgt: CLK_DIV_VALUE = t_SYNC /MOD *fPFD = 400*10⁻⁶ /25 *500*10³ CLK_DIV_VALUE = 400 *500 /25 *10⁻³ = 8 Pseudo Code:
1 | FUNC gcd( a : word, b : word ) : word |
2 | var h : word |
3 | |
4 | when (a = 0) |
5 | return 0 |
6 | end
|
7 | |
8 | when ( b > a ) |
9 | b = b mod a |
10 | end
|
11 | |
12 | while ( b ) /* b <> 0 */ |
13 | h = a mod b |
14 | a = b |
15 | b = h |
16 | end
|
17 | |
18 | return a |
19 | END
|
:
Bearbeitet durch User
Wenn du mir deine Quarz-Frequenz sagst, kann ich dir mit meiner sicher funktionierenden Software mal einen Satz Register generieren. Vielleicht hilft das bei der Fehlersuche. Evtl. willst du auch mal ein zweites Board aufbauen und vergleichen? Der Baustein ist fies zu verlöten.
:
Bearbeitet durch User
Hallo Leute, @ Uwe S.: Danke das ist schon mal sehr nützlich! Das kann ich dann gleich in der weiteren Implementierung verwenden. @ Sven B.: RFin wär bei 10 MHz. Ich habe es jetzt geschafft das ding zum locken zu bringen. Doch verstehe ich nicht warum. Ich habe das FEEDBACK SELECT Bit in Register 4 auf 1(Fundamental) geschrieben. Was in der Berechnung den RF DIVIDER raus nehmen sollte. z.B.: FEEDBACK SELECT = 0 (DIVIDED) HFout = (INT+(frac/mod))*FPFD/RFDIVIDER mit dieser Formel funktioniert es NICHT. FEEDBACK SELECT =1 (Fundamental) Mit gleicher Formel funktioniert es! WARUM? da müsste es ja lauten: HFout=(INT+frac/mod))*fPFD? Habe ich einen Denkfehler? LG Stephan.
Hatte mit dem Teil auch mal einige Probleme, bis ich das CSR-Bit im Register 3 entdeckt habe. Sobald das gesetzt war, hat die PLL ohne Probleme gelockt.
Hallo Stephan, bitte schau mal in das Blockschaltbild, da habe ich den Part doch farblich abgesetzt. Und einmal schrieb ich, dass der RF_DIVIDER mal innerhalb, mal außerhalb der PLL Phase-Loop-Filter sitzen kann. So ergaben sich auch zwei Formel für die Ausgabefrequenz, bzw. die Werte für INT, FRAC bei gegebenen RFin, fPFD und MOD. Zeige doch bitte deinen gesamten Code, wenn Du nicht auf meine Fragen eingehen möchtest. Wie gesagt ich habe zwei von den ADF4350 im Einsatz und das schwierigste sind die PLL Phase-Loop-Filter, bis die mal zum locken der PLL führen. Noch ein Tipp, verwende mal den LD Ausgang als Digital Lockdetect über eine LED mit Vorwiderstand nach Masse, so sieht man schnell, wenn die PLL gelockt hat. Bitte auch die entsprechenden Configbits setzen..
Hallo Uwe S. Uwe S. schrieb: > bitte schau mal in das Blockschaltbild, da habe ich den Part doch > farblich abgesetzt. > > Und einmal schrieb ich, dass der RF_DIVIDER mal innerhalb, mal außerhalb > der PLL Phase-Loop-Filter sitzen kann. > > So ergaben sich auch zwei Formel für die Ausgabefrequenz, bzw. die Werte > für > INT, FRAC bei gegebenen RFin, fPFD und MOD. Das ist mir alles klar! Ich habe es auch überprüft als du den Thread geschrieben hast. Nur ist genau hier mein Denkfehler gesessen. Jetzt hab ich es endlich verstanden. Der RF_DIVIDER wird im INT wert mit eingerechnet wenn dieser im PLL Kreis ist. Eigentlich logisch... Danke auf alle fälle für die Hilfe! Ich werde meine Files noch fertigstellen und dann hier hochladen. LG Stephan
Hallo Leute, soweit ist alles fertig. Vielleicht kann jemand was damit anfangen. Lg Stephan
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.