Initialisierung ADF4001/LMX2326 (PLL)

OP #3935370
Lesenswert?
• ▲
▼
Hallo zusammen,

ich versuche derzeit den ADF4001 (PLL) zu initialisieren, allerdings 
bisher "fast" erfolglos.
Es gibt laut Datenblatt mehrere Varianten, wie die PLL initialisiert 
werden kann:

1. Initialisation Latch Method
2. CE Pin Method
3. Counter Reset Method

Gehe ich nach der "CE Pin Method" vor, lockt sich die PLL auch sofort 
auf mein Referenzsignal.
Die beiden anderen Methoden scheinen nicht zu funktionieren, was im 
Klartext heißt, die am Loopfilterausgang gemessene Kontrollspannung des 
VCOs ist 0 und ändert sich auch nicht. Während die Kontrollspannung in 
eingerastetem Zustand um die 2-2.5V beträgt.
Warum ich trotz einem eigentlich zufriedenstellenden Ergebnis immer noch 
versuche die PLL mit einer anderen Methode zu initialisieren ist der 
folgende Grund:

Der VCO, den ich auf mein Referenzsignal einrasten lasse, ist samt einer 
weiteren PLL (LMX2326) auf einem anderen Board untergebracht, wo ich 
nicht die Möglichkeit habe den CE des LMX2326 low bzw. high zu setzen, 
da CE direkt an der Versorgungsspannung hängt. Es kommen also nur die 
beiden anderen Initialisierungsmethoden in Frage.
Die Initialisierungsmethoden des LMX2326 sind die gleichen wie die des 
ADF4001.
Deshalb bin ich bis jetzt davon ausgegangen (was vielleicht auch ein 
Fehler sein könnte), dass beide PLLs sich bei der Initialisierung gleich 
verhalten, aber ich will eine falsche Konfiguration so gut es geht 
ausschließen, bevor ich mich auf weitere Fehlersuche mache, denn das 
weitere Problem was ich habe ist, dass ich während des Betriebs kaum bis 
gar nicht überprüfen kann, was der LMX2326 macht. Deshalb kam ich 
überhaupt erst auf die Idee, die "Counter Reset Method" und die 
"Initialisation Latch Method" vorerst am ADF4001 auszuprobieren.
Leider ohne Erfolg.

Ich weiß mir absolut keinen Rat mehr, da ich alles was mir in den Sinn 
kam und sinnig erschien schon ausprobiert habe. Zumal das Vorgehen in 
beiden Datenblättern auch eigentlich eindeutig ist, aber irgendwo muss 
ich einen Fehler gemacht haben.

Ich habe die entsprechenden Zeilen aus meinem Code kopiert, wobei ich 
allerdings nur die "Initialisation Latch Method" implementiert habe. Mir 
würde es auch vollkommen reichen wenn die funktionieren würde.

1
/* ADF4001 */
2
#define ADF_CE 3
3
#define ADF_SCLK 4
4
#define ADF_SDATA 5
5
#define ADF_LE 6
6
#define ADF_MUXOUT 7
7
/* width of shift register */
8
#define ADF_SRW (21-1)
9
/* control bits */
10
#define ADF_C1 0
11
#define ADF_C2 1
12

13
/* reference counter = 1, antibacklashwidth = 6ns */ 
14
uint32_t ADF_R_Counter = 0b00000000000000001000000000000001;
15
uint16_t ADF_N_Counter = 1;
16
uint32_t ADF_Init_Latch = 0b00000000000000110111111000100100;
17

18
uint32_t temp_data;
19

20
void SPI_Write_ADF(uint32_t latch_data_adf)
21
{
22
  PORTA = (0 << ADF_LE);
23
  
24
  for(int i = 0; i <= ADF_SRW; i++)
25
  {
26
    PORTA &= ~(1 << ADF_SCLK);
27
    
28
    /* MSB first (bit 21)*/
29
    if(latch_data_adf & 0x100000)
30
    {
31
      PORTA |= (1 << ADF_SDATA);
32
    }
33
    else
34
    {
35
      PORTA &= ~(1 << ADF_SDATA);
36
    }
37
    PORTA |= (1 << ADF_SCLK);
38
    
39
    /* shift left */
40
    latch_data_adf = latch_data_adf << 1;    
41
  }  
42
  PORTA = (1 << ADF_LE);  
43
}
44

45
void Configure_ADF(void)
46
{  
47
  /* write to initialization latch; shift 2 times, because the first 2 bits are the conrol bits */  
48
  temp_data = ADF_Init_Latch << 2;
49
  /* set control bits */
50
  temp_data |= (1 << ADF_C1) | (1 << ADF_C2);
51
  SPI_Write_ADF(temp_data);
52
  
53
  /* write to R-counter */
54
  temp_data = ADF_R_Counter << 2;
55
  SPI_Write_ADF(temp_data);
56
  
57
  /* write to N-counter; shift 8 bit, because db2 - db7 are unused */
58
  temp_data = ADF_N_Counter << 8;
59
  temp_data |= (1 << ADF_C1);
60
  SPI_Write_ADF(temp_data);  
61
}

Datenblatt ADF4001 (S. 13):
http://www.analog.com/static/imported-files/data_sheets/ADF4001.pdf

Datenblatt LMX2326 (S. 15):
http://www.ti.com/lit/gpn/lmx2326

Danke für alle Antworten schon mal im Voraus.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.