AD9834是一款75 MHz、低功耗DDS器件,能够产生高性能正 弦波和三角波输出。其片内还集成一个比较器,支持产生 方波以用于时钟发生。当供电电压为3 V时,其功耗仅为 20 mW,非常适合对功耗要求严格的应用。

目录

一、核心特性

1. 低功耗与灵活供电

2. 高频性能与高分辨率

3. 优异动态性能

4. 多波形与集成功能

二、硬件电路与引脚接线

1. 引脚功能解析(20 引脚 TSSOP,TOP VIEW)

2. 典型硬件电路(关键部分)

(1)电源去耦与 RSET 配置

(2)DAC 输出电路(正弦 / 三角波)

(3)比较器电路(方波输出)

三 、关键寄存器配置(SPI 写入 16 位帧)

1.控制寄存器关键位(DB15=0,DB14=0)

2.初始化流程

四、示例代码(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.初始化流程
  1. 复位:拉高 RESET 引脚或设置 RESET 位 = 1,避免初始化杂散输出;
  2. 配置控制寄存器:写入 B28(如 1=28 位频率写入)、PIN/SW(如 0 = 软件控制 FSEL/PSEL)等;
  3. 写入频率寄存器:若 B28=1,先写 FREQx 的 14 位 LSB,再写 14 位 MSB;
  4. 写入相位寄存器:配置 PHASEx 的 12 位相位偏移(如 0 = 无偏移);
  5. 释放复位: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 输出杂散信号,配置完成后释放复位,符合初始化流程。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐