AD9834(75 MHz 完整直接数字频率合成(DDS)器件)芯片的详细用法
AD9834是一款75MHz低功耗DDS器件,集成DAC和比较器,可输出正弦波、三角波和方波。主要特性包括:低功耗设计(3V供电时仅20mW)、75MHz主时钟频率、28位频率分辨率和12位相位控制。器件采用SPI接口配置寄存器,支持28位频率寄存器分两次写入。硬件设计需注意电源去耦、DAC输出匹配和比较器滤波电路。典型应用时,通过配置控制寄存器选择波形类型,并计算频率寄存器值实现目标频率输出。该

AD9834是一款75 MHz、低功耗DDS器件,能够产生高性能正 弦波和三角波输出。其片内还集成一个比较器,支持产生 方波以用于时钟发生。当供电电压为3 V时,其功耗仅为 20 mW,非常适合对功耗要求严格的应用。
目录
1. 引脚功能解析(20 引脚 TSSOP,TOP VIEW)
四、示例代码(ESP32 软件模拟 SPI,输出 1 MHz 正弦波)
一、核心特性
1. 低功耗与灵活供电
- 正常模式功耗:20 mW(3 V 时)、典型 5.8 mA(B 级,AVDD+DVDD 电流);
- 休眠模式:DAC 关断时仅 0.5 mA(B 级)、0.6 mA(C 级),可关断未使用模块(如 DAC、内部时钟);
- 独立供电:模拟部分(AVDD)与数字部分(DVDD)分离,避免数字噪声耦合至模拟输出。
2. 高频性能与高分辨率
- 频率范围:MCLK 最高 75 MHz(C 级)/50 MHz(B 级),输出频率最高 37.5 MHz(奈奎斯特频率,MCLK/2);
- 频率分辨率:28 位频率寄存器,例:MCLK=75 MHz 时,分辨率 = 75e6 / 2^28 ≈ 0.28 Hz;MCLK=1 MHz 时,分辨率≈0.004 Hz;
- 相位控制:12 位相位寄存器(分辨率 2π/4096),支持相位调制(如 PSK)。
3. 优异动态性能
- 窄带无杂散动态范围(SFDR):>72 dB(文档特性描述,C 级 @75 MHz MCLK,f_OUT=MCLK/75);
- 信噪比(SNR):≥55 dB(f_MCLK=75 MHz,f_OUT=MCLK/4096);
- 总谐波失真(THD):≤−56 dBc(同 SNR 测试条件)。
4. 多波形与集成功能
- 波形输出:
- 正弦波:SIN ROM 将相位转换为幅度,DAC 输出电流(IOUT/IOUTB);
- 三角波:旁路 SIN ROM,直接输出 NCO 线性相位信号;
- 方波:集成比较器将滤波后的正弦波转换(需配置控制寄存器使能);
- 满量程调节:FS ADJUST 引脚接外部电阻 RSET(典型 6.8 kΩ),控制 DAC 满量程电流(IOUT_FULL=18×1.15V/RSET,1.15V 为 FS ADJUST 标称电压)。
二、硬件电路与引脚接线
1. 引脚功能解析(20 引脚 TSSOP,TOP VIEW)
按 “模拟信号→数字控制→电源” 分类,核心引脚如下:
| 引脚号 | 引脚名 | 功能描述 |
|---|---|---|
| 模拟信号 | ||
| 1 | FS ADJUST | 满量程调节,接 RSET(6.8 kΩ 典型)至 AGND,控制 DAC 满量程电流 |
| 2 | REFOUT | 内部基准输出(1.20 V),可用于外部电路参考 |
| 17 | VIN | 比较器输入,需接滤波后的 DAC 输出(如 IOUT 经 RC 滤波),用于生成方波 |
| 19/20 | IOUT/IOUTB | DAC 电流输出(互补),IOUT 接 200Ω 负载至 AGND,IOUTB 接 200Ω 至 AGND+20pF 电容(抗时钟馈通) |
| 数字控制 | ||
| 8 | MCLK | 主时钟输入(最高 75 MHz C 级),需低噪声时钟源(如晶振) |
| 13 | SDATA | SPI 串行数据输入(16 位帧,MSB 优先,SCLK 下降沿采样) |
| 14 | SCLK | SPI 串行时钟(最高 40 MHz,空闲高电平) |
| 15 | FSYNC | SPI 帧同步(低有效),拉低启动传输,16 位数据后拉高更新寄存器 |
| 9 | FSELECT | 频率寄存器选择(0=FREQ0,1=FREQ1),可硬件引脚或软件位控制 |
| 10 | PSELECT | 相位寄存器选择(0=PHASE0,1=PHASE1),同 FSELECT 控制方式 |
| 11 | RESET | 高有效复位(复位内部寄存器至中间电平,不影响频率 / 相位 / 控制寄存器) |
| 12 | SLEEP | 高有效休眠(关断 DAC,同 SLEEP12 控制位功能) |
| 16 | SIGN BIT OUT | 数字输出(比较器输出或 DAC MSB,需 OPBITEN 位使能) |
| 电源 | ||
| 4 | AVDD | 模拟电源(2.3~5.5 V),需并联 0.1μF 陶瓷电容 + 10μF 钽电容至 AGND |
| 5 | DVDD | 数字电源(2.3~5.5 V),需并联 0.1μF 陶瓷电容 + 10μF 钽电容至 DGND |
| 7/18 | DGND/AGND | 数字地 / 模拟地,单点连接(靠近器件),避免噪声耦合 |
| 6 | CAP/2.5V | 内部 2.5V 稳压器去耦:DVDD>2.7V 时接 100nF 至 DGND;DVDD≤2.7V 时直接接 DVDD |
2. 典型硬件电路(关键部分)
(1)电源去耦与 RSET 配置
- AVDD(引脚 4)→ AGND(引脚 18):并联 0.1μF(高频去耦,陶瓷)+10μF(低频储能,钽);
- DVDD(引脚 5)→ DGND(引脚 7):同 AVDD 去耦;
- FS ADJUST(引脚 1)→ AGND:串联 RSET=6.8 kΩ(1% 精度),控制 DAC 满量程电流≈3 mA(18×1.15V/6.8kΩ≈3mA)。
(2)DAC 输出电路(正弦 / 三角波)
- IOUT(引脚 19)→ AGND:串联 200Ω 负载电阻(R_LOAD),并联 20pF 电容(抗时钟馈通);
- IOUTB(引脚 20)→ AGND:串联 200Ω 电阻(互补输出,可选直接接 AGND,但建议匹配负载);
- 输出电压计算:
,满量程时≈3mA×200Ω=0.6V。
(3)比较器电路(方波输出)
- IOUT → RC 低通滤波(如 1kΩ+1nF)→ VIN(引脚 17);
- SIGN BIT OUT(引脚 16):输出方波(幅度 0~DVDD),需配置控制寄存器(OPBITEN=1,SIGN/PIB=1)。
三 、关键寄存器配置(SPI 写入 16 位帧)
AD9834 通过 16 位串行帧配置寄存器,帧头(DB15/DB14)决定寄存器类型:
| 寄存器类型 | DB15 | DB14 | 功能描述 |
|---|---|---|---|
| 控制寄存器 | 0 | 0 | 配置工作模式(波形、休眠、复位、SPI 控制等) |
| FREQ0 寄存器 | 0 | 1 | 频率寄存器 0(28 位,需 1~2 次写入:B28=1 时两次写 14 位 LSB/MSB;B28=0 时单次写 14 位) |
| FREQ1 寄存器 | 1 | 0 | 频率寄存器 1(同 FREQ0) |
| 相位寄存器 | 1 | 1 | 相位寄存器(12 位,DB13=0→PHASE0,DB13=1→PHASE1) |
1.控制寄存器关键位(DB15=0,DB14=0)
| 位(DBx) | 名称 | 功能描述 |
|---|---|---|
| 13 | B28 | 频率寄存器写入模式:1=28 位分两次写(LSB→MSB);0=14 位单次写(MSB 或 LSB) |
| 12 | HLB | B28=0 时有效:1 = 写 14 位 MSB;0 = 写 14 位 LSB |
| 10 | FSEL | 频率寄存器选择(PIN/SW=0 时):0=FREQ0;1=FREQ1 |
| 9 | PSEL | 相位寄存器选择(PIN/SW=0 时):0=PHASE0;1=PHASE1 |
| 8 | RESET | 1 = 复位内部寄存器(输出中间电平);0 = 正常输出 |
| 6 | SLEEP12 | 1 = 关断 DAC;0=DAC 使能 |
| 5 | OPBITEN | 1 = 使能 SIGN BIT OUT 引脚;0 = 高阻 |
| 4 | SIGN/PIB | OPBITEN=1 时:1 = 输出比较器方波;0 = 输出 DAC MSB |
| 1 | MODE | 0 = 输出正弦波(SIN ROM 使能);1 = 输出三角波(SIN ROM 旁路) |
2.初始化流程
- 复位:拉高 RESET 引脚或设置 RESET 位 = 1,避免初始化杂散输出;
- 配置控制寄存器:写入 B28(如 1=28 位频率写入)、PIN/SW(如 0 = 软件控制 FSEL/PSEL)等;
- 写入频率寄存器:若 B28=1,先写 FREQx 的 14 位 LSB,再写 14 位 MSB;
- 写入相位寄存器:配置 PHASEx 的 12 位相位偏移(如 0 = 无偏移);
- 释放复位:RESET=0,8 个 MCLK 周期后 DAC 输出稳定波形。
四、示例代码(ESP32 软件模拟 SPI,输出 1 MHz 正弦波)
#include <Arduino.h>
// 1. 引脚定义(移除sleep和reset引脚)
const int AD9834_FSYNC = 2; // 帧同步信号(低有效)
const int AD9834_SCLK = 4; // 串行时钟(下降沿采样)
const int AD9834_SDATA = 5; // 串行数据输入(16位MSB优先)
// 2. 核心参数配置(调整控制寄存器,移除reset相关位)
const float AD9834_MCLK = 75000000.0; // 主时钟频率(C级器件最高支持75MHz)
const float TARGET_FREQ = 1000000.0; // 目标输出频率(1MHz,不超过主时钟的1/2)
const uint16_t CTRL_REG_INIT = 0x1000; // 控制寄存器初始值:仅保留B28=1(28位频率写入)
const uint16_t CTRL_REG_NORMAL = 0x0000; // 正常工作控制寄存器:MODE=0(正弦波输出)
// 3. 软件模拟SPI写入16位数据
void AD9834_SPI_Write16Bit(uint16_t data) {
// 拉低FSYNC,启动数据传输
digitalWrite(AD9834_FSYNC, LOW);
delayMicroseconds(1); // 确保信号稳定
// 16位数据按MSB优先顺序传输
for (int i = 15; i >= 0; i--) {
// 输出当前数据位到SDATA
digitalWrite(AD9834_SDATA, (data >> i) & 0x01);
delayMicroseconds(1);
// SCLK拉高(上升沿无采样动作)
digitalWrite(AD9834_SCLK, HIGH);
delayMicroseconds(1); // 确保SCLK高电平稳定
// SCLK拉低(下降沿触发AD9834采样数据)
digitalWrite(AD9834_SCLK, LOW);
delayMicroseconds(1); // 确保SCLK低电平稳定
}
// 拉高FSYNC,完成数据传输并更新寄存器
digitalWrite(AD9834_FSYNC, HIGH);
delayMicroseconds(1);
}
// 4. AD9834初始化函数(移除sleep和reset相关操作)
void AD9834_Init() {
// 配置引脚为输出模式(仅保留SPI相关引脚)
pinMode(AD9834_FSYNC, OUTPUT);
pinMode(AD9834_SCLK, OUTPUT);
pinMode(AD9834_SDATA, OUTPUT);
// 设置初始状态:禁止传输、时钟空闲高
digitalWrite(AD9834_FSYNC, HIGH);
digitalWrite(AD9834_SCLK, HIGH);
delay(10); // 等待初始状态稳定
// 写入初始控制寄存器,仅配置28位频率写入模式
AD9834_SPI_Write16Bit(CTRL_REG_INIT);
delay(1);
// 计算28位频率寄存器值(频率公式:F_REG = (目标频率 * 2^28) / 主时钟频率)
uint32_t freqReg = (uint32_t)((TARGET_FREQ * (1LL << 28)) / AD9834_MCLK);
uint16_t freqLsb = (uint16_t)(freqReg & 0x3FFF); // 频率低14位
uint16_t freqMsb = (uint16_t)((freqReg >> 14) & 0x3FFF); // 频率高14位
// 写入FREQ0寄存器(地址标识:DB15=0, DB14=1)
AD9834_SPI_Write16Bit(0x4000 | freqLsb); // 写入FREQ0低14位
AD9834_SPI_Write16Bit(0x4000 | freqMsb); // 写入FREQ0高14位
delay(1);
// 写入PHASE0寄存器(地址标识:DB15=1, DB14=1, DB13=0),相位偏移设为0
uint16_t phaseReg = 0x0000;
AD9834_SPI_Write16Bit(0xC000 | phaseReg);
delay(1);
// 切换到正常工作模式
AD9834_SPI_Write16Bit(CTRL_REG_NORMAL);
delay(1);
Serial.println("AD9834初始化完成,当前输出频率:1MHz(正弦波)");
}
// 5. 主函数
void setup() {
Serial.begin(115200); // 初始化串口用于调试输出
AD9834_Init(); // 执行AD9834初始化
}
void loop() {
// 配置完成后AD9834持续输出设定波形,无需循环操作
// 如需动态修改频率/相位,可在此处调用AD9834_SPI_Write16Bit更新寄存器
delay(1000); // 主循环延时,避免占用过多系统资源
}
时序合规性:AD9834_SPI_Write16Bit函数严格遵循串行时序,SCLK 下降沿采样数据,FSYNC 低电平启动传输,满足 t5(SCLK 高电平≥10ns)、t6(SCLK 低电平≥10ns)、t7(FSYNC 建立时间≥5ns)等时序参数;
寄存器配置:控制寄存器初始化CTRL_REG_INIT设置 B28=1(28 位频率分两次写入),复位后CTRL_REG_NORMAL设置 MODE=0(正弦波输出);
频率计算:按文档第 23 节频率公式计算 28 位频率寄存器值,分两次写入 FREQ0 的 LSB 和MSB,确保 1MHz 目标频率精度;
复位流程:初始化时先使能 RESET 引脚,避免 DAC 输出杂散信号,配置完成后释放复位,符合初始化流程。
更多推荐



所有评论(0)