一、特性参数
1、180 MHz时钟速率参考时钟具有6倍倍乘器。芯片具有高性能10位DAC和高速滞后比较器
2、+2.7 V至+5.25 V单电源工作
3、正常输出工作频率范围为 0~72MHz ;
4、具有6倍频,所以只要30MHz的时钟供给即可。
二、功能管脚图
三、管脚说明
管脚名称 | 功能 |
D0–D7 | 8位数据输入. 数据端口,用于装载32位的频率控制字和8位相位控制字。 D7为最高位,D0=最低位 D7, 25引脚, 也作为40位控制字串行输入引脚 |
PGND |
6倍参考时钟倍乘器地 |
PVcc |
6倍参考时钟倍乘器电源 |
W-CLK | 字装入信号,上升沿有效 |
FQ-UD |
频率更新控制信号,时钟上升沿确认输入数据有效 |
FREFCLOCK | 外部参考时钟输入,脉冲序列可直接或间接地加到6倍参考时钟倍乘器上。在直接方式中,输入频率即是系统时钟;在6倍参考时钟倍乘器方式,系统时钟为倍乘器输出 |
AGND | 模拟地 |
AVDD |
模拟电源(+5V) |
DGND |
数字地 |
DVDD |
数字电源(+5V) |
RSET |
DAC外部参考电阻连接端 |
VOUTN | 内部比较器负向输出端 |
VOUTP | 内部比较器正向输出端 |
VINN | 内部比较器的负向输入端 |
VINP |
内部比较器的正向输入端 |
DACBP |
DAC旁路连接端 |
IOUTB |
“互补”DAC输出 |
IOUT |
内部DAC输出端 |
RESET |
复位端。低电平清除DDS累加器和相位延迟器为0Hz和0 相位,同时置数据输入为串行模式以及禁止6倍参考时钟倍乘器工作 |
四、外围电路PCB原理图
五、STM32F103驱动程序
#ifndef __AD9851_H
#define __AD9851_H #include "stm32f10x.h"
#include "gpio.h" #define ad9851_Clk Pin10
#define ad9851_FQ_UD Pin11
#define ad9851_Rst Pin12
#define ad9851_D0 Pin2
#define ad9851_D1 Pin3
#define ad9851_D2 Pin4
#define ad9851_D3 Pin5
#define ad9851_D4 Pin6
#define ad9851_D5 Pin7
#define ad9851_D6 Pin8
#define ad9851_D7 Pin9 void ad9851_write_dds(unsigned long dds); void ad9851_init(void); void ad9851_writefrq(unsigned long freq); #endif /* __DAC_H */
#include "ad9851.h"
#include "pbdata.h"
#include "math.h" unsigned char phase_word = 0x00; //相位控制字,使用低五位
unsigned char power_down = 0x00; //低功耗模式
unsigned char mult = 0x01; //六倍频开关
unsigned char ww[5] = {0x09,0x0E,0x38,0xE3,0xBE};
unsigned long freq,set_value; void ad9851_init(void)
{
set_out(GPIOG,ad9851_Clk | ad9851_FQ_UD | ad9851_Rst | ad9851_D0 | ad9851_D1 | ad9851_D2 | ad9851_D3 | ad9851_D4 | ad9851_D5 |ad9851_D6 | ad9851_D7 );
set_outH(GPIOG,ad9851_Rst);
delay_ms(10);
set_outL(GPIOG,ad9851_Rst);
delay_ms(10);
} void ad9851_write_dds(unsigned long dds)
{
unsigned char i;
ww[0] = (phase_word << 3) | power_down << 2 | mult;
ww[1] = (dds >> 24) & 0xff;
ww[2] = (dds >> 16) & 0xff;
ww[3] = (dds >> 8) & 0xff;
ww[4] = dds & 0xff; set_outL(GPIOG,ad9851_FQ_UD); for(i=0;i<5;i++)
{
set_outL(GPIOG,ad9851_Clk); set_outH(GPIOG,ww[i] << 2);
set_outL(GPIOG,((~ww[i]) << 2) & 0x3fc);
delay_us(10);
set_outH(GPIOG,ad9851_Clk);
delay_us(10);
} set_outH(GPIOG,ad9851_FQ_UD);
delay_us(10);
set_outL(GPIOG,ad9851_FQ_UD);
} void ad9851_writefrq(unsigned long freq)
{
unsigned long dds;
dds = freq;
ad9851_write_dds(dds);
}