AnsweredAssumed Answered

Help Programming the ADF4350

Question asked by BobK8668 on May 31, 2013
Latest reply on Jun 6, 2013 by BobK8668

I am a firmware engineer, and have only basic RF PLL knowledge. I am under a deadline to drive an ADF4350 chip, and although the numbers provided by the AD4350 register tool will operate the ADF4350 correctly, I must calculate the register values. Some of the terms are a bit "magic" to me, and I was wondering if someone could shed some light on the problem.


I am using a PIC DSP to communicate with the ADF4350 through a SPI bus. The CE, LE, clock and data are all working correctly, since values provided by the A/D tool give correct output frequencies.

I merely want to step the 4350's output frequency between 400 mHz (min), and 2.5 GHz (max) in steps of 100kHz.. The step (sweep) can run between two arbitrary frequencies in this band (for example 550.3 mhz to 1.1 GHz).


I hace a function in my code which will set a specific frquency (User_Freq), and I plan to accomplish the sweep with repeated calls to this function, each containing a progressive frequency increment.


i.e WriteADFRegisters(550.3e6);




   the current calculation sets the wrong frequencies. It is:


     Range the frequencies into groups to assign Div (as named in the ADF4350 register tool).


     range                                               Div


     400 mHz to 550 mHz                         8

     550.1 mHz to 1100 mHz                    4

    1100.1 mHz to 2200 mHz                   2

    2200.1 mHz to 2500 mHz                   1


    MOD is constant at 1

    Fref is a constant 25 mHz

    The prescaler is set to 8/9

    The feedback signal is set to "Fundamental"

   PFD = Fref = 25 mHz



    Next, calculate the VCO frequency

    Fvco = Div * User_Freq


   Divide Fvco by the reference frequency (This is 25 mHz)


   X = Fvco/Fref


   this yields  (Integer.Remainder)


  Truncate this to obtain INT (the whole number value). This becomes INT in the ADF registers.


Next, use the "Remainder "(the fractional part) to calculate FRAC:

  FRAC =  (Remainder * Fref) / (Fref * MOD)


FRAC, INT, MOD and Div are loaded into the ADF4350 registers R0, R1, and R4


R2 remains constant at 0x4E42, and R3 remains constant at 0x4B3.


When I use this function to set a frequency of 1.0 GHz, the ADF4350 generates appriximately 473 mHz.


Can someone tell me if the register calculations are wrong ?

Should there be changes in R2 or R3 (they remain constant in the ADF Register tool as I go through the range)?      

It could be a code error, but I have verified it carefully.


Thanks for any help BobK8668