Forum: Mikrocontroller und Digitale Elektronik Initialisierung ADF4001/LMX2326 (PLL)


von Julian A. (jul)


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.

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.