ADF4350 VCO+PLL Breakout Board

I’m a software radio freak. When I first heard about the Analog Devices ADF4350, a PLL+VCO that can tune between 137.5 and 4400 MHz, I was obsessed with getting one and building it into my projects. Naturally, the first step was to build it into a breakout board and get to know the chip. So I loaded up EAGLE, cranked out a design, and sent it through Laen’s four-layer PCB order. I’ve since soldered up two of these boards, and they’ve both worked wonderfully.

Analog Devices ADF4350 VCO+PLL breakout board

If you want one for yourself, you can find my breakout board in my “in-development” GitHub repo, filed under “radio/circuit-board/adf4350-breakout”. Enjoy!

40 thoughts on “ADF4350 VCO+PLL Breakout Board”

  1. @anabar: Thanks. I am using my Bus Pirate to do the SPI configuration of the ADF4350. I have Python code that will write the registers in the correct order. I use the ADF4350 register tool (Windows application) from Analog Devices to compute register values, then I put them into the Python code. It would be fairly simple to modify my code to assume a certain reference frequency and configuration, and have the code calculate the appropriate PLL settings. I can post the code to my GitHub repository if you’re interested in building on it.

  2. Cool! thanks for the upload. I’ll let you know how it goes — planning on using the ADF4350 to make a robust upconverter.

  3. @cmgrisp: Hmmm, for an upconverter, you might also want to have a look at these Linear, RMFD, and Skyworks parts:

    • LTC6946-3: Integer-N VCO+PLL
    • RF205x, RFFC207x, RFFC507x: Fractional-N VCO+PLL+mixer(s)
    • SKY73134-11: Integer-N VCO+PLL

    Do you think an Integer-N PLL would work for your upconverter? How precisely in frequency do you need to place the unconverted image?

  4. @jboone: thanks for the suggustions! I dont necessarily need the high precision of the fractional, but I do need the wide bandwidth. Also, I’m looking to the ADF4351 so that I can get down to 35MHz on the low side. TI has a part which meets my widebandwidth requirment, and is an integer/fractional PLL. Check out: http://www.ti.com/lit/ds/symlink/trf3765.pdf. It has an up bandwidth of 4.8GHz, vs the ADF4350/51 which is around 4.4GHz.

  5. @cmgrisp: The TRF3765 looks to be a very nice part. The four outputs would be great for driving front-ends that serve different bands — especially since you can power down each output individually.

    Making use of 4.8GHz (or even 4.4GHz) on standard two- or four-layer FR-4 fiberglass will be a challenge, I think. Are you planning to integrate an entire front-end next to the VCO+PLL, or send the PLL output off the PLL PCB, to a front-end board?

  6. @jboone: Ah, very good point. I might give it a shot having it next to the VCO+PLL, but alas, you are right, I’m going to have to think about maybe sending it off board in the final spin. In your experience, whats the upper freq limit for 2 or 4 layer FR4 if I wanted the entire front end on one board?

  7. @cmgrisp: Heh, it all depends… First, I wouldn’t dare trying to design a 4GHz RF design on a two-layer board — it’s just not practical if you want good performance and reliability. For four layers, it depends on your layer stack. The four-layer service I use (Laen’s DorkbotPDX PCB order) has a stack-up of approximately 10 mils between the outer and inner layers, and about 40 mils for the center core (joining the top and bottom layer pairs together). It depends on how sensitive your design is, and how much loss you can afford between devices. If your VCO+PLL is pumping out +10dBm at 4GHz and your mixer requires +0dBm input, you’ll probably do fine sending that signal across a few inches of PCB. But at a distance of inches, 4GHz is well into transmission line territory, so you’ll have to get your trace widths right given your PCB material “Er” and trace-to-ground distance.

    I’d spend as much time as possible staring at reference designs for high-frequency mixers and PLL+VCOs. They’re usually done on four- or six-layer FR4. A lot can be learned from observing things that are clearly intentional (“Why are there a billion vias between ground layers here?”) and trying to understand them.

    I’d also start small, building each component as a separate PCB project. Sending 4GHz off-board isn’t too big a deal if you’re careful, keep the traces short, get your transmission line impedance right, and are willing to accept a few dB loss. There’s a LOT of learning you can do with a board that’s a bit lossy but otherwise works just fine. Then, when you have the design nailed, you can tackle integrating it with other components on the same board.

    I’d be happy to review your schematic/board as you go, if you’d like. I don’t claim to be an experienced RF engineer, but RF is kinda an obsession of mine, and I’ve developed enough intuition and understanding to build successful 3GHz boards.

  8. Hi Jboone.

    I was wondering if you posted the code to program the registers on your repository because I’m trying to do it on PLL LTC6946 and for me it will be a very good example to star with my code.

    Thanks.

  9. Looks very interesting. Do you have an extra boards for sale? I have been thinking of using the ADF4351 as an LO for the UHFSDR. Do you have any measured data on your phase noise?

  10. @Eric Haskell: I think I have two bare PCBs laying around. Are you interested in bare boards (can you solder QFNs and 0402s)? Or are you hoping for assembled boards?

  11. @Luis Felipe: At the moment, I only have Python code for the ADF4350. It controls a Bus Pirate configured for SPI mode. Would that be useful to you? I’m sure the register sets are quite different between the ADF4350 and the LTC6946, so you’d have quite a bit of work to do supporting the different register configuration.

  12. @Luis Here’s are some code snippets showing how I do it on a PIC18F with C. I’ve just collected the main parts from a bunch of different functions for brevity, so don’t expect to be able to compile it on its own.


    unsigned char adrf_init[32] = {
    0x00, 0x00, 0x00, 0x00, // cr0-cr3: FRAC
    0x01, // cr4: reserved
    0x00, // cr5: 5-bit, R divider enable
    0x78, 0x00, // cr6 - cr7: N
    0x00, // cr8: reserved
    0x70, // cr9: charge pump current
    0x01, // cr10: reference frequency control
    0x00, // cr11: reserved
    0x18, // cr12: PLL power up
    0x08, // cr13: reserved
    0x00, // cr14: lock detector control 2
    0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, // cr15-22: reserved
    0x70, // cr23: lock detector control 1
    0x38, // cr24: autocalibration
    0x53, // cr25: autocalibration timer
    0x00, // cr26: reserved
    0x00, // cr27: LOMON output
    0x0a, // cr28: LOMON selection
    0x41, // cr29: Demodulation power and filter selection
    0x00 // cr30: VGA
    };

    int delay;

    // Configure SPI interface
    SSP1STAT = 0b00000000; // SMP=0, CKE=0
    SSP1CON1 = 0b00110000; // SSPEN=1, CKP=1

    // Enable power and wait for supplies to settle
    adrf_power_en();
    for (delay = 65000; delay; delay--);

    // Enable SPI mode
    PORTA |= 0b00111100; // CS off (high)
    PORTA ^= 0b00111100; // CS on
    PORTA ^= 0b00111100; // CS off
    PORTA ^= 0b00111100; // CS on
    PORTA ^= 0b00111100; // CS off
    PORTA ^= 0b00111100; // CS on
    PORTA ^= 0b00111100; // CS off (high)

    void init_adrf(char channel) {
    int num;
    char buf[4];

    // Initialise ADRF6850
    for (num = 30; num >= 0; num--) {
    cputs("Write:");
    itoa(buf,num,16);
    cputs(buf);
    putch('=');
    itoa(buf,adrf_init[num],16);
    cputs(buf);
    cputs("\r\n");
    adrf_write(num, adrf_init[num], channel); // the configuration value
    }

    // Wait for PLL to lock (260 us)

    // Enable VGA
    adrf_write(0x1e, 0x01, channel);

    // Enable LOMON
    adrf_write(0x1b, 0x07, channel);
    }

    void adrf_write(unsigned char reg, char value, char channel) {
    char readbyte;

    adrf_cs_en(channel);

    SSP1BUF = ADRF_WRITE; // Write
    while (!SSP1STATbits.BF);
    readbyte = SSP1BUF;

    SSP1BUF = reg; // to register num
    while (!SSP1STATbits.BF);
    readbyte = SSP1BUF;

    SSP1BUF = value; // the configuration value
    while (!SSP1STATbits.BF);
    readbyte = SSP1BUF;

    adrf_cs_dis(channel);

    }

  13. Oops, I didn’t read the post title and assumed that I was commenting on the article about the ADRF6850! Well, hopefully the general ideas will still help you or someone else to configure any of these chips that require a large number of registers to be set all at once.

  14. @Jboone: Yes, I think I can handle that. I have not done 0402 before but have no issue with 0603. I already have A Bus Pirate (not used yet). Please send me a email at eric_haskell((At))hotmail… Thanks. -Eric

  15. @Eric Haskell: I put a scan of the phase noise measurements in the repository. My recollection was good: at a carrier frequency of 1GHz, phase noise is about -60dBc below 1kHz, -85dBc at 10kHz, -90dBc at 100kHz. Carrier was apparently at -3.9dBm. Compared to the datasheet graphs, my phase noise is 33dBc worse at 1k, 17dBc worse at 10kHz, and 23dBc worse at 100kHz. I imagine a lot of that is due to the $3 reference oscillator I’m using.

  16. I’ve been playing with a similar board. I’m getting loads of odd harmonics. I also noticed that the output signal is not a sine wave but a square wave. Do you have the same problem?

  17. @ncoesel: The square wave is expected, especially if you’re using output dividers to get lower LO frequencies. Are you using the VCO/PLL to drive a quadrature modulator/demodulator or mixer? Most mod/demod/mixer ICs I’ve seen operate with (or even require) a square wave input, and use differential LO inputs, which helps with some of the harmonics. Take a look at this application note, which discusses two different quad-demods and how their different designs impact LO harmonics sensitivity: http://www.analog.com/en/circuits-from-the-lab/CN0245/vc.html

  18. I was afraid of that. I intend to use my board as a general purpose wideband RF generator. I guess for most measurements the harmonics are not an issue but it would be nicer if they where not there.

  19. @ Jboone: an odd request: can you upload your eagle library called ‘capacitor.’ I’m deep in routing land and want to update the silkscreen on the actual library part use for all the capacitors in your schematic. Otherwise I have to delete them all and replace with a new capacitor, which will cause me to have to drag, drop and reroute … not fun. thanks :)

  20. @Jboone: The board arrived today. Nice work! I saw your PN plots posted. I was expecting better based on the data sheet. John Miles program is very nice but making PN measurements can be difficult. I am excited to build it and look myself. – Eric

  21. @cmgrisp: I’m sending it by e-mail, as I’m not sure all the capacitors in the library are usable. I don’t want somebody grabbing my library and then finding out I screwed up the footprint they used. I wish EAGLE would allow me to maintain separate device, package, and symbol files, or something a bit more granular than a monolithic, binary mass of data…

  22. hi , Jboone,
    Your pcb with ADF4350 is very interesting… Do you have one/two extra boards assembled and popoulated of all components for sale? I have been thinking of using the ADF4351 as an LO my homebrew Scalar Network Analyzer…
    Regards and thank’s in advance per the aswer…
    Luis

  23. Hi Luis,

    I have only one board assembled at the moment. It does not have a microcontroller on it, but can be controlled via a Bus Pirate or microcontroller connected to the pin header. I would like to do a revision of the board that has a simple USB microcontroller onboard (probably an NXP ARM Cortex-M0 or M3), so I can use it without having to hook it up to other hardware first. But it will probably be a couple of months before I finish that project. How soon do you want to have an LO board?

    In the meantime, you might want to look at Windfreak Technologies. Their ADF4350 board looks like a good design at a reasonable price.

    Free free to e-mail me at info@sharebrained.com, if you want to talk more.

  24. hello im interesting on your pcb for adf4251 pll vco
    if you heave one piece for sale will be great

    thak you de s52e vojko

  25. @vojko: Thanks for your interest. I looked up the ADF4251, and it’s apparently obsolete. But from what I can tell, it’s not pin-compatible with the ADF4350. So my board design would not work for you. In any case, the board design (in EAGLE 5) can be found in one of my GitHub repositories.

  26. @vojko: If you’re interested in the ADF4351, then yes, I believe my board would work for you. I have only tested it with the ADF4350, but I understand the two are pin-compatible. I do not have any extra boards at the moment. You could have my board fabricated by a board house or OSH Park (only $10 a square inch for three copies of the board).

    Given the interest I’ve seen in this board, I am considering designing an enhanced version with an integrated ARM microcontroller. But I’m very busy with other things right now, so it will probably be months before I get to that project.

  27. hello im can also resolder the adf 4350 with 4351 for test with my procesor how much do you want for your board and im wiil send thru pay pal or with post thank you

    vojko

  28. hello no im can also resolder pcb with new adf4351 if you sold me pcb or for the first im can test with my procesor it is in working kondition
    if you send me thru e- mail your acount im wiil pay thrue paypal

    regards vojko

  29. Hello Sir, I am m doing signal generator using the ADF 4350 for my BE project Sir will u tell me How should i start????? Please sir help me out please give me details on my mail id pargepooja18@gmail.com

  30. hello how can i modulate adf4360 , i mean how can i transmit voice or data with it because it only send out fix pll frequency

    thanks in advance

Comments are closed.