电赛总结(四)——波形发生芯片总结之AD9851

一、特性参数

1、180 MHz时钟速率参考时钟具有6倍倍乘器。芯片具有高性能10位DAC和高速滞后比较器

2、+2.7 V至+5.25 V单电源工作

3、正常输出工作频率范围为 0~72MHz ;

4、具有6倍频,所以只要30MHz的时钟供给即可。

 

二、功能管脚图

image

 

三、管脚说明

管脚名称 功能
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原理图

image

 

 

五、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);
}
posted @ 2015-08-21 16:31  Blue Mountain  阅读(5382)  评论(1编辑  收藏  举报