wjlht 发表于 2017-1-16 23:04:21

用arduino开发锁相环电路芯片ADF4351,做35M-----4.4G信号发生器

本帖最后由 wjlht 于 2018-11-26 14:41 编辑

ADF4351是很实用的锁相环芯片,淘宝上有现成的电路板,100多一点,也可以自己买一块ADF4351芯片,自己再加几个外界电路就可以了,芯片一块28元,自己diy还是比较经济划算。我为了省事,买了一块,控制板用arduino。ADF4351锁相环芯片自带压控振荡器VCO,这点很方便,省得再单独做VCO,ADF4351输出频率35M-4.4G,可以说相当宽,业余爱好者可以用它做信号发生器,只需要对芯片的6个寄存器进行设置,就可以输出想要的频率,非常方便。笔者针对ADF4351的特点,做了arduino的库,贡献给大家。其实很简单,就是一个软spi接口,高位优先。想要输出不同的频率,只要参照ADF4351中文手册设置寄存器相应的值就可以了。
线路连接:
arduino                              ADF4351板
3.3v------------------------------3.3v
GND------------------------------GND
8----------------------------------CLK
9-----------------------------------DATA
10----------------------------------LE

程序如下,其中需要用到EF_ADF4351库,已附在后面。

#include <EF_ADF4351.h>
EF_ADF4351 adf4351(8,9,10);

void setup() {


adf4351.init();


//1000M信号输出
adf4351.WriteRegister(0x00580005);
adf4351.WriteRegister(0x00AC803C);
adf4351.WriteRegister(0x000004B3);
adf4351.WriteRegister(0x00004E42);
adf4351.WriteRegister(0x08008011);
adf4351.WriteRegister(0x00500000);
//125M信号输出
adf4351.WriteRegister(0x00580005);
adf4351.WriteRegister(0x00DC803C);
adf4351.WriteRegister(0x000004B3);
adf4351.WriteRegister(0x00004E42);
adf4351.WriteRegister(0x08008011);
adf4351.WriteRegister(0x00500000);

//62.5M信号输出
adf4351.WriteRegister(0x00580005);
adf4351.WriteRegister(0x00EC803C);
adf4351.WriteRegister(0x000004B3);
adf4351.WriteRegister(0x00004E42);
adf4351.WriteRegister(0x08008011);
adf4351.WriteRegister(0x00500000);


//200M信号输出
adf4351.WriteRegister(0x00580005);
adf4351.WriteRegister(0x00CC803C);
adf4351.WriteRegister(0x000004B3);
adf4351.WriteRegister(0x00004E42);
adf4351.WriteRegister(0x08008011);
adf4351.WriteRegister(0x00400000);

}

void loop() {
// put your main code here, to run repeatedly:

}

Arduino_Levi 发表于 2017-1-18 14:56:45

   怎么没有图片 ?
加上液晶屏幕或者数码管就更好了!直接按键输出频率,然后就输出,就可以成为简单的信号发生器了!:)

wjlht 发表于 2020-2-25 10:58:21

又重复运行了这个程序,adf4351电路板最好单独供电,否则因为3.3V电源问题导致不能正常工作,既不能频率锁定。下面是正常工作的图。设置了100M信号输出,5个寄存器的设置如下:
//100M信号输出
adf4351.WriteRegister(0x00580005);
adf4351.WriteRegister(0x00DC803C);
adf4351.WriteRegister(0x000004B3);
adf4351.WriteRegister(0x00004E42);
adf4351.WriteRegister(0x08008011);
adf4351.WriteRegister(0x00400000);



然后用示波器来观察100M波形,效果还不错。示波器虽然是带宽是150M(购买时120M免费升级到150),通常惯例是示波器的带宽是所测信号的3-5倍,但是实际上我用150M的示波器测量100M的正弦波,效果也还可以,估计就是信号衰减较大,测出的电压峰值不一定准。从示波器上看,ADF4351电路板输出的100M信号比较干净,无杂波。

wjlht 发表于 2020-2-25 11:07:42

    电路板只要能使用SPI的都可以,这里是用arduino,简单方便。
页: [1]
查看完整版本: 用arduino开发锁相环电路芯片ADF4351,做35M-----4.4G信号发生器