一、AD9959模塊簡介
AD9959可以執(zhí)行高達(dá)16階的頻率、相位或幅度調(diào)制(FSK、PSK、 ASK)通過將數(shù)據(jù)施加到模式引腳,可執(zhí)行調(diào)制。此外,AD9959 還支持線性頻率、幅度或相位掃描,適合雷達(dá)、儀器儀表等應(yīng)用。 AD9959的串行I/0端口可支持多種配置,提供了極大的靈活性。與 ADI公司以往DDS產(chǎn)品中提供的SPI工作模式類似,串行I/O端C提 供SPI兼容工作模式,四個(gè)數(shù)據(jù)引腳(SDIO_0/SDIO_1/SDIO.2/ SDIO_3)對(duì)應(yīng)串行/0的四種可編程模式,從而提供了靈活性。
性能參數(shù)
- 供電電壓/電流:DC 5V 320mA(max)
- 通訊協(xié)議:SPI串行
- 系統(tǒng)主頻:500MHz
- DCA分辨率位數(shù):10位
- 相位累加器位數(shù):32位
- 輸出信號(hào):正弦波(帶200MHz低通濾波器)
- 輸出通道:4通道(每個(gè)通道都可以獨(dú)立調(diào)節(jié)頻率,幅度,相位)
- 信號(hào)特點(diǎn):耦合輸出(模塊通電容耦合輸出,極低頻率輸出幅度較小,可以直接使用示波器測(cè)量)
- 最高主頻輸出正弦波:1Hz-200MHz
- 輸出幅度:正弦波530mVpp(max),正弦波隨著頻率增加幅度減少
- 輸出高阻:高阻
模塊應(yīng)用
- 多通道信號(hào)源,頻率信號(hào)發(fā)生器,正弦波信號(hào)發(fā)生器,傳感器激勵(lì)
二、AD9959接口圖和功能框圖


每個(gè)DDS通道內(nèi)部結(jié)構(gòu):頻率控制字FTW + 相位累加器 + 相位偏移 + SIN查找表 + 幅度控制 + DAC。
DDS核心模塊作用:
- 相位累加器:每個(gè)時(shí)鐘周期執(zhí)行:Phase = Phase + FTW,F(xiàn)TW越大,相位增長越快,輸出頻率越高。
- 正弦查找表:將相位值轉(zhuǎn)換為:sin(phase)得到數(shù)字正弦信號(hào)。
- 幅度控制:控制輸出信號(hào)振幅。
- DAC:DAC將數(shù)字信號(hào)轉(zhuǎn)換為模擬信號(hào)輸出。AD9959每個(gè)通道都有 獨(dú)立DAC。
三、AD9959串行通訊
AD9959 的串行操作是在寄存器級(jí)別進(jìn)行的,而不是字節(jié)級(jí)別;也就是說,控制器期望訪問寄存器地址中包含的所有字節(jié)??梢允褂?SYNC_I/O 函數(shù)中止 I/O 操作,從而允許訪問部分字節(jié)。此功能可用于僅對(duì)尋址寄存器的一部分進(jìn)行編程。請(qǐng)注意,只有已完成的字節(jié)才會(huì)受到影響。
串行通信周期分為兩個(gè)階段。階段 1 是指令周期,它將指令字節(jié)寫入 AD9959。指令字節(jié)的每一位都在 SCLK 的每個(gè)相應(yīng)上升沿被寫入。指令字節(jié)定義了即將進(jìn)行的數(shù)據(jù)傳輸是寫入操作還是讀取操作。指令字節(jié)包含地址寄存器的串行地址。
I/O 周期的階段 2 包括串行端口控制器和串行端口緩沖區(qū)之間的實(shí)際數(shù)據(jù)傳輸(寫入/讀?。?。在此通信周期階段傳輸?shù)淖止?jié)數(shù)取決于所訪問的寄存器。數(shù)據(jù)傳輸和指令字節(jié)所需的額外 SCLK 上升沿的實(shí)際數(shù)量取決于寄存器中的字節(jié)數(shù)和串行 I/O 操作模式。
例如,訪問寬度為 3 字節(jié)的功能寄存器 1 (FR1) 時(shí),I/O 周期的第二階段需要傳輸 3 個(gè)字節(jié)。在傳輸完每個(gè)指令字節(jié)的所有數(shù)據(jù)字節(jié)后,該寄存器的通信周期即告完成。通信周期完成后,AD9959 串行端口控制器期望下一組 SCLK 上升沿作為下一個(gè)通信周期的指令字節(jié)。所有寫入 AD9959 的數(shù)據(jù)都在 SCLK 上升沿時(shí)被讀取。數(shù)據(jù)在 SCLK 下降沿時(shí)被讀?。▍⒁妶D 43 至圖 49)。圖 41 和圖 42 的時(shí)序規(guī)格在表 25 中描述。
階段 1:
每個(gè)通信周期不需要發(fā)出 I/O 更新指令。I/O 更新指令將數(shù)據(jù)從 I/O 端口緩沖區(qū)傳輸?shù)接行Ъ拇嫫鳌/O 更新指令可以在每個(gè)通信周期發(fā)送,也可以在所有串行操作完成后發(fā)送。但是,數(shù)據(jù)只有在發(fā)送 I/O 更新指令后才會(huì)生效,通道選擇寄存器 (CSR) 中的通道使??能位除外。這些通道使能位不需要 I/O 更新指令即可啟用。
指令字節(jié)描述
指令字節(jié)包含以下信息:
指令字節(jié)(讀/寫)的 D7 位決定指令字節(jié)寫入后是進(jìn)行讀取還是寫入數(shù)據(jù)傳輸。邏輯高電平表示讀取操作,邏輯低電平表示寫入操作。指令字節(jié)的 D4 位到 D0 位決定在通信周期的數(shù)據(jù)傳輸階段訪問哪個(gè)寄存器。內(nèi)部字節(jié)地址由 AD9959 生成。
階段 2:
串行 I/O 操作模式
串行 I/O 端口有四種可編程操作模式:
- 單比特串行 2 線模式(默認(rèn)模式)
- 單比特串行 3 線模式
- 2 比特串行模式
- 4 比特串行模式(SYNC_I/O 不可用)
表 26 顯示了所有六個(gè)串行 I/O 接口引腳的功能,具體取決于所編程的串行 I/O 操作模式。
通道選擇寄存器 CSR[2:1] 中的兩位設(shè)置串行 I/O 操作模式,定義見表 27。
單比特串行(2線和3線)模式
單比特串行模式接口允許對(duì)配置AD9959的所有寄存器進(jìn)行讀/寫訪問。支持MSB優(yōu)先或LSB優(yōu)先的傳輸格式。此外,單比特串行模式接口端口可以配置為單引腳I/O(支持2線接口),也可以配置為兩個(gè)單向輸入/輸出引腳(支持3線接口)。單比特模式允許使用SYNC_I/O函數(shù)。
在單比特串行模式的2線接口操作中,SDIO_0引腳是單路串行數(shù)據(jù)I/O引腳。在單比特串行模式的3線接口操作中,SDIO_0引腳是串行數(shù)據(jù)輸入引腳,SDIO_2引腳是輸出數(shù)據(jù)引腳。無論接口中使用的導(dǎo)線數(shù)量如何,SDIO_3 引腳均配置為輸入,并在單比特串行模式和雙比特串行模式下作為 SYNC_I/O 引腳工作。在此模式下,SDIO_1 引腳未使用(參見表 26)。
雙比特串行模式
雙比特串行模式下的 SPI 端口操作與單比特串行模式下的 SPI 端口操作相同,區(qū)別在于 SCLK 的每個(gè)上升沿會(huì)記錄兩位數(shù)據(jù)。因此,傳輸八位信息僅需四個(gè)時(shí)鐘周期。SDIO_0 引腳包含偶數(shù)位數(shù)據(jù),表示為 D[7:0],SDIO_1 引腳包含奇數(shù)位數(shù)據(jù)。這種奇偶位引腳/數(shù)據(jù)對(duì)齊方式在 MSB 優(yōu)先和 LSB 優(yōu)先兩種格式中均有效(參見圖 44)。
4 位串行模式
4 位串行模式下的 SPI 端口與 1 位串行模式下的 SPI 端口相同,區(qū)別在于 SCLK 的每個(gè)上升沿會(huì)寫入 4 位數(shù)據(jù)。因此,傳輸 8 位信息僅需兩個(gè)時(shí)鐘周期。SDIO_0 和 SDIO_2 引腳包含偶數(shù)位數(shù)據(jù),表示為 D[7:0],其中 SDIO_0 引腳包含半字節(jié)的最低有效位 (LSB)。SDIO_1 和 SDIO_3 引腳包含奇數(shù)位數(shù)據(jù),其中 SDIO_1 引腳包含要訪問的半字節(jié)的最低有效位 (LSB)。
請(qǐng)注意,在將設(shè)備編程為 4 位串行模式時(shí),務(wù)必將 SDIO_3 引腳保持為邏輯 0,直到設(shè)備從 1 位串行模式編程出來為止。否則,可能會(huì)導(dǎo)致串行 I/O 端口控制器亂序。
圖 43 至圖 45 分別展示了各種串行 I/O 模式的寫入時(shí)序圖。圖中同時(shí)顯示了 MSB 優(yōu)先和 LSB 優(yōu)先兩種模式。LSB 優(yōu)先位以括號(hào)標(biāo)出。圖中所示的時(shí)鐘停頓低/高電平特性并非必需,其作用在于表明數(shù)據(jù)(SDIO)的建立時(shí)間必須相對(duì)于 SCLK 的上升沿正確。
圖 46 至圖 49 分別展示了各種串行 I/O 模式的讀取時(shí)序圖。圖中同時(shí)顯示了 MSB 優(yōu)先和 LSB 優(yōu)先兩種模式。LSB 優(yōu)先位以括號(hào)標(biāo)出。圖中所示的時(shí)鐘停頓低/高電平特性并非必需,其作用在于表明數(shù)據(jù)(SDIO)的建立時(shí)間必須相對(duì)于 SCLK 的上升沿正確,以確保指令字節(jié)和緊隨 SCLK 下降沿之后的讀取數(shù)據(jù)的建立時(shí)間。


四、AD9959主要寄存器說明
- 通道選擇寄存器 (CSR) — 地址 0x00:CSR 通過四個(gè)通道使能位的狀態(tài)來決定通道的啟用或禁用狀態(tài)。默認(rèn)情況下,所有四個(gè)通道均啟用。CSR 還決定選擇哪種串行操作模式。此外,CSR 還提供 MSB 優(yōu)先或 LSB 優(yōu)先兩種數(shù)據(jù)格式選擇。

- 功能寄存器 1 (FR1)—地址 0x01:FR1 用于控制芯片的工作模式。

- 通道功能寄存器 (CFR)—地址 0x03

- 信道頻率調(diào)諧字 0 (CFTW0)—地址 0x04 / 通道相位偏移字 0 (CPOW0)—地址 0x05

- 幅度控制寄存器(ACR)—地址0x06

五、AD9959頻率、幅度、相位的轉(zhuǎn)換
計(jì)算增量頻率、增量相位或增量幅度的 RDW 或 FDW 步長的公式如下:
根據(jù) RSRR 或 FSRR 計(jì)算增量時(shí)間的公式為:t = (RSRR) × 1 / SYNC_CLK。
在 500 MSPS 操作(SYNC_CLK = 125 MHz)下,步長之間的最大時(shí)間間隔為 1/125 MHz × 256 = 2.048 μs。最小時(shí)間間隔為 (1/125 MHz) × 1 = 8.0 ns。
六、STM32F103驅(qū)動(dòng)AD9959模塊
準(zhǔn)備工作
STM32F103C8T6開發(fā)板,AD9959模塊,OLED顯示屏,導(dǎo)線若干。
接線說明
| STM32F103C8T6 | AD9959 |
|---|---|
| PA0 | P0 |
| PA1 | P1 |
| PA2 | P2 |
| PA3 | P3 |
| PA4 | SD0 |
| PA5 | SD1 |
| PA6 | SD2 |
| PA7 | SD3 |
| PB0 | CS |
| PB1 | SCK |
| PB10 | UP |
| PB5 | RST |
| PB6 | PDC |
| PB8 | OLED->SCL |
| PB9 | OLED->SDA |
代碼示例
AD9959.c
#include "AD9959.H"
//#include "task_manage.h"
u8 CSR_DATA0[1] = {0x10}; // 開 CH0
u8 CSR_DATA1[1] = {0x20}; // 開 CH1
u8 CSR_DATA2[1] = {0x40}; // 開 CH2
u8 CSR_DATA3[1] = {0x80}; // 開 CH3
u8 FR2_DATA[2] = {0x20,0x00};//default Value = 0x0000
u8 CFR_DATA[3] = {0x00,0x03,0x02};//default Value = 0x000302
u8 CPOW0_DATA[2] = {0x00,0x00};//default Value = 0x0000 @ = POW/2^14*360
u8 LSRR_DATA[2] = {0x00,0x00};//default Value = 0x----
u8 RDW_DATA[4] = {0x00,0x00,0x00,0x00};//default Value = 0x--------
u8 FDW_DATA[4] = {0x00,0x00,0x00,0x00};//default Value = 0x--------
//AD9959初始化
void Init_AD9959(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
u8 FR1_DATA[3] = {0xD0,0x00,0x00};//20倍頻 Charge pump control = 75uA FR1< 23 > -- VCO gain control =0時(shí) system clock below 160 MHz;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE); //PA,PB,PC端口時(shí)鐘使能
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;//初始化管腳PA2.3.4.5.6.7.8.9.10
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; //IO口速度為2MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); //根據(jù)設(shè)定參數(shù)初始化GPIOA
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_10|GPIO_Pin_5|GPIO_Pin_6;//初始化管腳PB0.1.10
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; //IO口速度為2MHz
GPIO_Init(GPIOB, &GPIO_InitStructure); //根據(jù)設(shè)定參數(shù)初始化GPIOB
Intserve(); //IO口初始化
IntReset(); //AD9959復(fù)位
WriteData_AD9959(FR1_ADD,3,FR1_DATA,1);//寫功能寄存器1
WriteData_AD9959(FR2_ADD,2,FR2_DATA,1);
// WriteData_AD9959(CFR_ADD,3,CFR_DATA,1);
// WriteData_AD9959(CPOW0_ADD,2,CPOW0_DATA,0);
// WriteData_AD9959(ACR_ADD,3,ACR_DATA,0);
// WriteData_AD9959(LSRR_ADD,2,LSRR_DATA,0);
// WriteData_AD9959(RDW_ADD,2,RDW_DATA,0);
// WriteData_AD9959(FDW_ADD,4,FDW_DATA,1);
//寫入初始頻率
}
//延時(shí)
void delay1 (u32 length)
{
length = length*12;
while(length--);
}
//IO口初始化
void Intserve(void)
{
AD9959_PWR=0;
CS = 1;
SCLK = 0;
UPDATE = 0;
PS0 = 0;
PS1 = 0;
PS2 = 0;
PS3 = 0;
SDIO0 = 0;
SDIO1 = 0;
SDIO2 = 0;
SDIO3 = 0;
}
//AD9959復(fù)位
void IntReset(void)
{
Reset = 0;
delay1(1);
Reset = 1;
delay1(30);
Reset = 0;
}
//AD9959更新數(shù)據(jù)
void IO_Update(void)
{
UPDATE = 0;
delay1(2);
UPDATE = 1;
delay1(4);
UPDATE = 0;
}
/*--------------------------------------------
函數(shù)功能:控制器通過SPI向AD9959寫數(shù)據(jù)
RegisterAddress: 寄存器地址
NumberofRegisters: 所含字節(jié)數(shù)
*RegisterData: 數(shù)據(jù)起始地址
temp: 是否更新IO寄存器
----------------------------------------------*/
void WriteData_AD9959(u8 RegisterAddress, u8 NumberofRegisters, u8 *RegisterData,u8 temp)
{
u8 ControlValue = 0;
u8 ValueToWrite = 0;
u8 RegisterIndex = 0;
u8 i = 0;
ControlValue = RegisterAddress;
//寫入地址
SCLK = 0;
CS = 0;
for(i=0; i< 8; i++)
{
SCLK = 0;
if(0x80 == (ControlValue & 0x80))
SDIO0= 1;
else
SDIO0= 0;
SCLK = 1;
ControlValue < <= 1;
}
SCLK = 0;
//寫入數(shù)據(jù)
for (RegisterIndex=0; RegisterIndex< NumberofRegisters; RegisterIndex++)
{
ValueToWrite = RegisterData[RegisterIndex];
for (i=0; i< 8; i++)
{
SCLK = 0;
if(0x80 == (ValueToWrite & 0x80))
SDIO0= 1;
else
SDIO0= 0;
SCLK = 1;
ValueToWrite < <= 1;
}
SCLK = 0;
}
if(temp != 0)
IO_Update();
CS = 1;
}
/*---------------------------------------
函數(shù)功能:設(shè)置通道輸出頻率
Channel: 輸出通道
Freq: 輸出頻率
---------------------------------------*/
void Write_frequence(u8 Channel,u32 Freq)
{
u8 CFTW0_DATA[4] ={0x00,0x00,0x00,0x00}; //中間變量
u32 Temp;
Temp=(u32)Freq*8.589934592; //將輸入頻率因子分為四個(gè)字節(jié) 8.589934592=(2^32)/500000000 其中500M=25M*20(倍頻數(shù)可編程)
CFTW0_DATA[3]=(u8)Temp;
CFTW0_DATA[2]=(u8)(Temp > >8);
CFTW0_DATA[1]=(u8)(Temp > >16);
CFTW0_DATA[0]=(u8)(Temp > >24);
if(Channel==0)
{
WriteData_AD9959(CSR_ADD,1,CSR_DATA0,1);//控制寄存器寫入CH0通道
WriteData_AD9959(CFTW0_ADD,4,CFTW0_DATA,1);//CTW0 address 0x04.輸出CH0設(shè)定頻率
}
else if(Channel==1)
{
WriteData_AD9959(CSR_ADD,1,CSR_DATA1,1);//控制寄存器寫入CH1通道
WriteData_AD9959(CFTW0_ADD,4,CFTW0_DATA,1);//CTW0 address 0x04.輸出CH1設(shè)定頻率
}
else if(Channel==2)
{
WriteData_AD9959(CSR_ADD,1,CSR_DATA2,1);//控制寄存器寫入CH2通道
WriteData_AD9959(CFTW0_ADD,4,CFTW0_DATA,1);//CTW0 address 0x04.輸出CH2設(shè)定頻率
}
else if(Channel==3)
{
WriteData_AD9959(CSR_ADD,1,CSR_DATA3,1);//控制寄存器寫入CH3通道
WriteData_AD9959(CFTW0_ADD,4,CFTW0_DATA,1);//CTW0 address 0x04.輸出CH3設(shè)定頻率
}
}
/*---------------------------------------
函數(shù)功能:設(shè)置通道輸出幅度
Channel: 輸出通道
Ampli: 輸出幅度
---------------------------------------*/
void Write_Amplitude(u8 Channel, u16 Ampli)
{
u16 A_temp;//=0x23ff;
u8 ACR_DATA[3] = {0x00,0x00,0x00};//default Value = 0x--0000 Rest = 18.91/Iout
A_temp=Ampli|0x1000;
ACR_DATA[2] = (u8)A_temp; //低位數(shù)據(jù)
ACR_DATA[1] = (u8)(A_temp > >8); //高位數(shù)據(jù)
if(Channel==0)
{
WriteData_AD9959(CSR_ADD,1,CSR_DATA0,1);
WriteData_AD9959(ACR_ADD,3,ACR_DATA,1);
}
else if(Channel==1)
{
WriteData_AD9959(CSR_ADD,1,CSR_DATA1,1);
WriteData_AD9959(ACR_ADD,3,ACR_DATA,1);
}
else if(Channel==2)
{
WriteData_AD9959(CSR_ADD,1,CSR_DATA2,1);
WriteData_AD9959(ACR_ADD,3,ACR_DATA,1);
}
else if(Channel==3)
{
WriteData_AD9959(CSR_ADD,1,CSR_DATA3,1);
WriteData_AD9959(ACR_ADD,3,ACR_DATA,1);
}
}
/*---------------------------------------
函數(shù)功能:設(shè)置通道輸出相位
Channel: 輸出通道
Phase: 輸出相位,范圍:0~16383(對(duì)應(yīng)角度:0°~360°)
---------------------------------------*/
void Write_Phase(u8 Channel,u16 Phase)
{
u16 P_temp=0;
P_temp=(u16)Phase;
CPOW0_DATA[1]=(u8)P_temp;
CPOW0_DATA[0]=(u8)(P_temp > >8);
if(Channel==0)
{
WriteData_AD9959(CSR_ADD,1,CSR_DATA0,1);
WriteData_AD9959(CPOW0_ADD,2,CPOW0_DATA,1);
}
else if(Channel==1)
{
WriteData_AD9959(CSR_ADD,1,CSR_DATA1,1);
WriteData_AD9959(CPOW0_ADD,2,CPOW0_DATA,1);
}
else if(Channel==2)
{
WriteData_AD9959(CSR_ADD,1,CSR_DATA2,1);
WriteData_AD9959(CPOW0_ADD,2,CPOW0_DATA,1);
}
else if(Channel==3)
{
WriteData_AD9959(CSR_ADD,1,CSR_DATA3,1);
WriteData_AD9959(CPOW0_ADD,2,CPOW0_DATA,1);
}
}
main.c
#include "stm32_config.h"
#include "stdio.h"
#include "OLED.h"
#include "AD9959.h"
uint32_t SinFre[5] = {10000,10000,50,50}; //調(diào)頻
uint32_t SinAmp[5] = {1023, 1023, 1023, 1023}; //調(diào)幅,范圍0~1023,對(duì)應(yīng)0~500mVpp左右
uint32_t SinPhr[5] = {0, 4095*2, 4095*3, 4095}; //調(diào)相位,范圍0~16383,對(duì)應(yīng)0~360°
int main(void)
{
MY_NVIC_PriorityGroup_Config(NVIC_PriorityGroup_2); //設(shè)置中斷分組
delay_init(72); //初始化延時(shí)函數(shù)
OLED_Init();
Init_AD9959();
delay_ms(100);
OLED_ShowString(0,0,"CH0: ",16,1);
OLED_ShowString(0,16,"CH1: ",16,1);
OLED_ShowString(0,32,"CH2: ",16,1);
OLED_ShowString(0,48,"CH3: ",16,1);
while(1)
{
Write_frequence(3,SinFre[3]);
Write_frequence(0,SinFre[0]);
Write_frequence(1,SinFre[1]);
Write_frequence(2,SinFre[2]);
Write_Phase(3, SinPhr[3]);
Write_Phase(0, SinPhr[0]);
Write_Phase(1, SinPhr[1]);
Write_Phase(2, SinPhr[2]);
Write_Amplitude(3, SinAmp[3]);
Write_Amplitude(0, SinAmp[0]);
Write_Amplitude(1, SinAmp[1]);
Write_Amplitude(2, SinAmp[2]);
// OLED_ShowNum(35, 0, SinFre[0], 9, 16, 1);
// OLED_ShowNum(35, 16, SinFre[1], 9, 16, 1);
// OLED_ShowNum(35, 32, SinFre[2], 9, 16, 1);
// OLED_ShowNum(35, 48, SinFre[3], 9, 16, 1);
// OLED_ShowString(110,0,"Hz",16,1);
// OLED_ShowString(110,16,"Hz",16,1);
// OLED_ShowString(110,32,"Hz",16,1);
// OLED_ShowString(110,48,"Hz",16,1);
//
// OLED_ShowNum(35, 0, SinAmp[0], 4, 16, 1);
// OLED_ShowNum(35, 16, SinAmp[1], 4, 16, 1);
// OLED_ShowNum(35, 32, SinAmp[2], 4, 16, 1);
// OLED_ShowNum(35, 48, SinAmp[3], 4, 16, 1);
// OLED_ShowString(70,0,"A",16,1);
// OLED_ShowString(70,16,"A",16,1);
// OLED_ShowString(70,32,"A",16,1);
// OLED_ShowString(70,48,"A",16,1);
OLED_ShowNum(35, 0, SinPhr[0], 5, 16, 1);
OLED_ShowNum(35, 16, SinPhr[1], 5, 16, 1);
OLED_ShowNum(35, 32, SinPhr[2], 5, 16, 1);
OLED_ShowNum(35, 48, SinPhr[3], 5, 16, 1);
OLED_ShowString(80,0,"P",16,1);
OLED_ShowString(80,16,"P",16,1);
OLED_ShowString(80,32,"P",16,1);
OLED_ShowString(80,48,"P",16,1);
OLED_Refresh();
}
}
效果展示



七、注意事項(xiàng)與常見問題
注意事項(xiàng)
(1) 模塊電流消耗較大,供電電源需要有一定余量,建議使用5V 1A以上供電。
(2)由于模塊是高精度器件,為了避免不必要的干擾,建議使用線性電源供電。
(3)輸出信號(hào)建議使用SMA轉(zhuǎn)BNC的線直接示波器觀測(cè)效果,接觸不良或劣質(zhì)的線材可能導(dǎo)致信號(hào)衰減或者噪聲過大。
(4) 由于功耗發(fā)熱較大,長時(shí)間工作注意通風(fēng)散熱。
(5) 如需簡單測(cè)試模塊功能,建議搭配本店控制板使用,先給 DDS模塊供電,再給控制板供電即可產(chǎn)生波形,長按中間鍵切換功能。
(6) 配送的代碼僅為配套主控板使用,不提供單片機(jī)教程,額外功能需要自行開發(fā)。
常見問題
Q:AD9959模塊的4個(gè)輸出通道可以設(shè)置成不同的頻率輸出嗎?
A:可以,AD9959模塊的4個(gè)輸出通道的頻率、幅度、相位均可獨(dú)立調(diào)節(jié)。
Q:??斓闹黝l是多少?輸出幅度可以調(diào)節(jié)?
A:模塊的主頻是輸入時(shí)鐘和程序一起決定的,模塊可以外部輸入時(shí)鐘,板載默認(rèn)時(shí)鐘為25MHz,程序控制倍頻為20倍,即默認(rèn)主頻為500MHz,可以通過修改輸入時(shí)鐘和倍頻數(shù)改變主頻,輸入時(shí)鐘必須是在20MHz-30MHz之間。輸出幅度可以通過修改10位幅度寄存器控制輸出幅度。需要自行修改程序哦。
Q:模塊可以實(shí)現(xiàn)掃頻么?可以產(chǎn)生方波信號(hào)嗎?
A:模塊可以實(shí)現(xiàn)掃頻,本店提供的代碼可支持掃頻。需要方波的可以搭配本店高速比較器轉(zhuǎn)換為方波。AD9959只能輸出正弦波信號(hào),4通道的頻率幅度相位都是獨(dú)立和可調(diào)的。
Q:為什么每次設(shè)置完通道間的相位差不是預(yù)設(shè)值,每次都不一樣?
A:這個(gè)是寫寄存器的順序?qū)е碌模葘戭l率寄存器,再寫幅度寄存器,最后寫相位寄存器,這樣相位寄存器的值才是預(yù)設(shè)值。
Q:怎么實(shí)現(xiàn)幅度,相位的調(diào)節(jié)?
A:本店搭配的主控板可以實(shí)現(xiàn)頻率幅度相位的調(diào)節(jié),長按中間鍵切換到調(diào)節(jié)界面和掃頻界面。
審核編輯 黃宇
-
正弦波
+關(guān)注
關(guān)注
11文章
663瀏覽量
59408 -
信號(hào)發(fā)生器
+關(guān)注
關(guān)注
28文章
1737瀏覽量
113702 -
STM32F103
+關(guān)注
關(guān)注
34文章
499瀏覽量
68266 -
AD995
+關(guān)注
關(guān)注
0文章
2瀏覽量
5435
發(fā)布評(píng)論請(qǐng)先 登錄
AD9959:4 通道 500 MSPS DDS 芯片的詳細(xì)解析
AD5930可編程頻率掃描與輸出突發(fā)波形發(fā)生器:功能特性與應(yīng)用解析
可編程頻率掃描波形發(fā)生器AD5932:特性、應(yīng)用與設(shè)計(jì)指南
AD9833:低功耗可編程波形發(fā)生器的卓越之選
可編程的多路脈沖信號(hào)發(fā)生器 高速脈沖信號(hào)發(fā)生器 1hz脈沖信號(hào)發(fā)生器
三角波方波正弦波函數(shù)發(fā)生器 標(biāo)準(zhǔn)信號(hào)發(fā)生器 dds函數(shù)信號(hào)發(fā)生器
基于STM32F103驅(qū)動(dòng)DAC1220 20位/16位DAC數(shù)模轉(zhuǎn)換模塊輸出可調(diào)±10V基準(zhǔn)和三角波信號(hào)
基于STM32F103驅(qū)動(dòng)AD9833模塊 DDS信號(hào)發(fā)生器輸出正弦波/三角波/方波可編程信號(hào)
如何調(diào)節(jié)普源DG5502 Pro信號(hào)發(fā)生器產(chǎn)生正弦波的頻率
基于STM32F103 并行驅(qū)動(dòng)AD9851模塊 DDS函數(shù)信號(hào)發(fā)生器輸出正弦波/方波信號(hào)
普源DG1022Z信號(hào)發(fā)生器正弦波頻率調(diào)節(jié)指南
信號(hào)發(fā)生器產(chǎn)生正弦波的頻率精準(zhǔn)調(diào)節(jié)方法
基于STM32F103驅(qū)動(dòng)SI5351 3通道時(shí)鐘信號(hào)發(fā)生器輸出不同頻率信號(hào)
TI 正弦波發(fā)生器電路
基于STM32F103驅(qū)動(dòng)AD9959模塊 DDS信號(hào)發(fā)生器輸出正弦波可編程信號(hào)
評(píng)論