AD9517 Internal VCO

Hello,

I am moving away from my ZedBoard with the AD9467 FMC card and towards my custom board. I just got the board up and running and am attempting to change my source code to make the AD9517 use the internal VCO instead of the external oscillator that I was using on the FMC card. From what I have found on the forums, this requires only changing the AD9517_cfg file to disable the refs and enable the vco. I am getting an output and I can read and write to registers, so I believe the chip is working, but the clock output is basically sputtering as if the PLL is not locked.

Here is my config data

struct ad9517_platform_data ad9517_pdata_lpc =
{
  /* PLL Reference */
  0, // ref_1_freq
  0, // ref_2_freq
  0, // diff_ref_en
  0, // ref_1_power_on
  0, // ref_2_power_on
  0, // ref_sel_pin_en
  0, // ref_sel_pin
  0, // ref_2_en


  0, // ext_clk_freq
  1500000000, // int_vco_freq
  1, // vco_clk_sel
  1, // power_down_vco_clk
  "ad9517-lpc" // name[16]
};


and in my initialization function:

xil_printf("AD9517 Setup: 0x%02x\n\r", ad9517_setup(SPI_DEVICE_ID, 1));
xil_printf("AD9517 CHIP ID: 0x%02x\n\r", ad9517_read(AD9517_REG_PART_ID));


xil_printf("AD9517 Power Mode: 0x%02x\n\r", ad9517_power_mode(6, 0));
xil_printf("AD9517 Power Mode: 0x%02x\n\r", ad9517_power_mode(7, 0));


xil_printf("AD9517 Frequency: 0x%02x\n\r", ad9517_frequency(6, 250000000));
xil_printf("AD9517 Frequency: 0x%02x\n\r", ad9517_frequency(7, 250000000));

xil_printf("AD9517 Update: 0x%02x\n\r\n\r", ad9517_update());

I tried to copy the initialization routine from the datasheet, but I dont think I was correct and looking through the AD9517 source files, I think most of the required registers are being written to. My AD9467 FMC board was running great with the oscillator, but I needed to do away with it for various reasons.

Any help would be appreciated.

-Joe

  • An update:

    I took a 250MHz clock from my FPGA and piped it over to REF1 because I didnt have anything on REF1 or REF2 and my understanding is that this chip needs some sort of ref to the PLL. Now am playing with the config file and trying to get it to 250MHZ output.

    struct ad9517_platform_data ad9517_pdata_lpc =

    {

      250000000, // ref_1_freq

      0, // ref_2_freq

      0, // diff_ref_en

      1, // ref_1_power_on

      0, // ref_2_power_on

      0, // ref_sel_pin_en

      0, // ref_sel_pin

      0, // ref_2_en

      0, // ext_clk_freq

      1500000000, // int_vco_freq

      1, // vco_clk_sel

      0, // power_down_vco_clk

      "ad9517-lpc" // name[16]

    };

  • Has anyone successfully used this chip with the internal VCO and a ref on REF1? I literally cannot get this chip to do anything besides squawk out a random pulse train. Please help.

    -Joe

  • Hi orenderj,

    I also want to use the ad9517 in that way, but i haven't made it work.

    makon

  • 0
    •  Analog Employees 
    on Jan 6, 2016 7:45 PM

    Hi Joesph,

    > Has anyone successfully used this chip with the internal VCO

    > and a ref on REF1? I literally cannot get this chip to do anything

    > besides squawk out a random pulse train. Please help.

    There should be no issue with this, and I'm trying to understand why it's not working.

    First, you must be sure that the loop filter that you're using is correct. Can you post a screen shot of the loop filter connection from the CP to the LF pins? The default loop filter on the AD9517 has a somewhat narrow frequency range of operation. Also, please let me know the desired Fin, Fout, etc. If I understand correctly, you have a 3.3V CMOS clock on REF1. Right?

    Next, you should ensure that you're reading and writing to the part fine, and it appears that you're doing that already, Just to be sure, you can program one of the three status pins (REFMON, LD, or STATUS) to static high and probe the external pins. (You'll need to write R0x232=0x01 to have the values take effect.)

    After doing that, here are the steps in order to bring up the PLL:

    1. Program the desired values, ensuring that R0x018<0> =0b

         a. Program the dividers

         b. Turn on the PLL and set Icp in Register 0x010.

         c. Power up the input reference receivers

         d. Change the internal mux to select the internal VCO. (Should be R0x1E1, I think)

         e. Issue an IO_UPDATE (R0x232=0x01)

    2. Apply an input ref clock.

    3. Calibrate the VCO by setting R0x018<0>=1b, and issue an IO_UPDATE (R0x232=0x01)

    If you change the settings and need to re-calibrate, you'll need to clear R0x018<0>, IO_UPDATE, set R0x018<0>, and perform a final IO_UPDATE.

    Note that R0x01D must be 0x00 during VCO calibration.

    - Paul Kern

  • 0
    •  Analog Employees 
    on Aug 2, 2018 3:10 PM
    This question has been assumed as answered either offline via email or with a multi-part answer. This question has now been closed out. If you have an inquiry related to this topic please post a new question in the applicable product forum.

    Thank you,
    EZ Admin