電賽總結(四)——波形發生芯片總結之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);
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM