AD9851是美国模拟器件公司采用先进DDS直接数字频率合成技术生产的高集成度产品。AD9851是在AD9850的基础上,做了一些改进以后生成的具有新功能的DDS芯片。当系统时钟为180MHz时,在参考时钟输入端,只需输入30MHz的参考时钟即可。AD9851是由数据输入寄存器、频率/相位寄存器、具有6倍参考时钟倍乘器的DDS芯片、10位的模/数转换器、内部高速比较器这几个部分组成。其中具有6倍参考时钟倍乘器的DDS芯片是由32位相位累加器、正弦函数功能查找表、D/A变换器以及低通滤波器集成到一起。这个高速DDS芯片时钟频率可达180MHz,输出频率可达70MHz,分辨率为0.04Hz 。模块框图如下:
模块电路图如下:
电路主要由两部分电路构成:AD9851核心电路和7阶无源滤波电路。输出信号为两路互补正弦波信号和两路互补方波信号,同时采用SMA射频接口输出;AD9851芯片DDS输
出形式串联或并联用一个短路套在J2插针上选择,方便选择需要的程序实现不同形式输出。
AD9851核心电路参考芯片手册上的应用电路设计。信号由+SV供电,在芯片的电源引脚焊接10uF钽电容和100nF贴片电容,用作电源去耦。系统采用同一块地,保持地的完整性,在信号频率较大时,减小地的阻抗。30MHz的有源晶振电路中,+5 V的供电电源添加二型滤波电路,减少电源对时钟信号的干扰。
AD9851芯片内部的两路DAC是电流输出型的,输出电流可通过电阻R10调节Ⅰout=39.9/R10。本模块电路R10=3.9kΩ ,输出电流Ⅰout=10mA,Ⅰout1和Ⅰout2引脚并接一个100Ω电阻(R3、 R11)到地,所以AD9851的互补正弦波信号输出幅值Vout=Ⅰout×100=1V。可通过更换电阻Rio或电阻R3, R11,得到需要输出的信号电压值。AD9851电流型输出转换成电压后经过7阶无源LC低通滤波,由于做了阻抗匹配,正弦波的最后输出电压为Vout/2=500mV,而方波输出直接串联电阻到射频头,占空比通过电位器RW1调节。
模块实物图:
左上角J1跳帽断开:并行模式(两排都要接)
合上:串行模式(只需使用D7,WCLK,FQUP,REST四个引脚)
左下角J3跳帽断开:输出幅值为I-R外接电位
合上:固定约1V输出
右上角J2跳帽断开:VD_P和VD_N引脚不产生方波
合上:产生方波
右下角两个排针:输出正弦波
左上角电位器:产生可变电位输出,调节方波的占空比(比较器的比较电位,也可通过跳帽选择VINN引脚外部电压控制)
另:本AD9851模块采用30MHz有源晶振,可倍频至180MHz。
右侧输出引脚:
VINP:比较器信号输入
VINN:比较器比较电位
GND:地
OUT:正弦波输出(通过70MHz低通滤波,使输出波形的信噪比更好)
GND:地
VD_N:方波1
VD_P:方波2
接线图(串行模式):
AD9851 | Arduino
————————
GND | GND
D7 | 5
WCLK | 2
FQUP | 3
REST | 4
VCC | VCC
网上只有C51的程序,看了一下程序,其实只要控制各个引脚的电平变化就行了(上个星期的课刚好讲到串行通信),按照C51的程序做简单的移植就可以用了;
程序:
#define ad9851_w_clk 2
#define ad9851_fq_up 3
#define ad9851_rest 4
#define ad9851_bit_data 5
void setup() {
pinMode(ad9851_w_clk, OUTPUT);
pinMode(ad9851_fq_up, OUTPUT);
pinMode(ad9851_rest, OUTPUT);
pinMode(ad9851_bit_data, OUTPUT);
pinMode(13, OUTPUT);
digitalWrite(ad9851_w_clk, 0);
digitalWrite(ad9851_fq_up, 0);
digitalWrite(ad9851_rest, 0);
digitalWrite(ad9851_bit_data, 0);
Serial.begin(9600);
Serial.println("init complete!");
}
void loop() {
ad9851_reset_serial();
ad9851_wr_serial(0x01, 500);
//0x01为开六倍频
//ad9851_wr_serial(0x00, 500);
//0x00为不开六倍频
digitalWrite(13, 0);
delay(500);
digitalWrite(13, 1);
delay(500);
digitalWrite(13, 0);
delay(500);
digitalWrite(13, 1);
delay(500);
ad9851_reset_serial();
ad9851_wr_serial(0x01, 2000);
}
//***************************************************//
// ad9851复位(串口模式) //
//---------------------------------------------------//
void ad9851_reset_serial()
{
digitalWrite(ad9851_w_clk, 0);
digitalWrite(ad9851_fq_up, 0);
//rest信号
digitalWrite(ad9851_rest, 0);
digitalWrite(ad9851_rest, 1);
digitalWrite(ad9851_rest, 0);
//w_clk信号
digitalWrite(ad9851_w_clk, 0);
digitalWrite(ad9851_w_clk, 1);
digitalWrite(ad9851_w_clk, 0);
//fq_up信号
digitalWrite(ad9851_fq_up, 0);
digitalWrite(ad9851_fq_up, 1);
digitalWrite(ad9851_fq_up, 0);
}
//***************************************************//
// 向ad9851中写命令与数据(串口) //
//---------------------------------------------------//
void ad9851_wr_serial(unsigned char w0, double frequence)
{
unsigned char i, w;
long int y;
double x;
int bit_data;
//计算频率的HEX值
x = 4294967295 / 180; //适合180m晶振/180为最终时钟频率(或30m六倍频)
//如果时钟频率不为180MHz,修改该处频率值,单位为MHz
frequence = frequence / 1000000;
frequence = frequence * x;
y = frequence;
//写w4数据
w = (y >>= 0);
for (i = 0; i < 8; i++)
{
bit_data = (w >> i) & 0x01;
digitalWrite(ad9851_bit_data, bit_data);
digitalWrite(ad9851_w_clk, 1);
digitalWrite(ad9851_w_clk, 0);
}
//写w3
w = (y >> 8);
for (i = 0; i < 8; i++)
{
bit_data = (w >> i) & 0x01;
digitalWrite(ad9851_bit_data, bit_data);
digitalWrite(ad9851_w_clk, 1);
digitalWrite(ad9851_w_clk, 0);
}
//w2
w = (y >> 16);
for (i = 0; i < 8; i++)
{
bit_data = (w >> i) & 0x01;
digitalWrite(ad9851_bit_data, bit_data);
digitalWrite(ad9851_w_clk, 1);
digitalWrite(ad9851_w_clk, 0);
}
//w1
w = (y >> 24);
for (i = 0; i < 8; i++)
{
bit_data = (w >> i) & 0x01;
digitalWrite(ad9851_bit_data, bit_data);
digitalWrite(ad9851_w_clk, 1);
digitalWrite(ad9851_w_clk, 0);
}
//w0
w = w0;
for (i = 0; i < 8; i++)
{
bit_data = (w >> i) & 0x01;
digitalWrite(ad9851_bit_data, bit_data);
digitalWrite(ad9851_w_clk, 1);
digitalWrite(ad9851_w_clk, 0);
}
//移入使能
digitalWrite(ad9851_fq_up, 1);
digitalWrite(ad9851_fq_up, 0);
}
并行模式接线太麻烦就不写了XD
以上只是控制输出频率(注意写入顺序,相位控制及倍频控制字w0最后写入)。
关于相位控制字:
芯片的datasheet相位控制部分截取如下:
w0的高5位是信号的相位,2的5次方平分360度;
位2是掉电控制位1有效;
位1写0;
位0是6倍频控制位1有效。
例:
w0 = 0b00001001 = 0x09 //相位设置为11.25度,开启六倍频
w0 = 0b00010001 = 0x0B //相位设置为22.50度,开启六倍频