AIGC标识 嵌入式 DDS 进阶:AD9833 从芯片手册到驱动实现,SPI 通信与频率计算详解

AD9833 是由 Analog Devices 公司生产的一款低功耗数字波形发生器(DDS)芯片。它专为需要精确频率和相位控制的应用而设计,能够生成正弦波、三角波和方波,AD9833 常用于如信号源、测试设备等。

1.PNG

它具有如下特性:

  • 频率和相位编程​:
    • 频率范围​:0 MHz 到 12.5 MHz
    • 相位编程​:提供相位控制,允许对信号进行精确的相位调整
  • 功耗​:在 3 V 电源下,功耗仅为 20 mW
  • 分辨率​:
    • 使用 28 位频率寄存器,提供高达 0.1 Hz 的频率分辨率(以 25 MHz 参考时钟为基准)
    • 以 1 MHz 参考时钟时,能够提供 0.004 Hz 的频率分辨率
  • 输出波形​:支持正弦波、三角波和方波输出
  • 电源要求​:工作电源电压范围:2.3 V 到 5.5 V
  • 接口​:采用 3 线 SPI 接口进行通信,支持高达 40 MHz 的时钟速度,兼容 DSP 和微控制器标准
  • 功率管理​:具有功率关闭功能(SLEEP),可以关闭未使用的部分以节省功耗,例如,当生成时钟输出时可以关闭 DAC 部分

1.AD9833 的基本结构

AD9833 基本结构如下图所示:

2.png

其中:

  • 频率寄存器(FREQ0 REG 和 FREQ1 REG)​:用于设置产生输出信号的频率
  • 相位寄存器(PHASE1 和 PHASE0)​:用于生成相位信号
  • 多路复用器(PHASE ​​​MUX和 FREQ MUX)​:用于选择频率寄存器和相位寄存器的输出
  • 相位累加器​:利用一个 28 位的数字累加器,随着时间持续累加频率控制数据(FREQ0 REG 和 FREQ1 REG)
  • 波形存储表​:存储生成波形所需的数值
  • DAC数模转换器​:10 位 DAC 用于将数字信号转换为模拟信号输出
  • 电源管理单元(REGULATOR 和 ON-BOARD REFERENCE)​:包含电压调节器和内部参考电压(2.5V)
  • 幅度寄存器(FULL-SCALE CONTROL)​:用于调整输出信号的幅度
  • ​串行接口​控制寄存器(​​SERIAL INTERFACE​ AND CONTROL LOGIC)​:提供串行接口和控制逻辑,用于配置和控制芯片的各种功能

2.AD9833 的电气参数

AD9833 的电气参数如下:

3.png

其中,电气参数可分为以下四部分:

  • 信号输出相关参数​:AD9833 使用的 DAC 为 10 位,最大采样率为 25 百万次每秒,输出电压最大值为 0.65 V,最小值为 38 mV,输出电压受温度变化影响,其温度系数为 200 ppm/°C;线性误差度包括 ±1.0 LSB 的积分非线性误差和 ±0.5 LSB 的差分非线性误差
  • DDS 信号发生相关参数​:信噪比为 55 至 60 dB,总谐波失真在-66 至 -56 dBc 之间,无杂散动态范围 SFDR 中宽带范围内为 -60 dBc,窄带范围(±200 kHz)内为 -78 dBc
  • SPI通信相关参数​:输入高电压和低电压随电源电压不同而变化,输入高电压(VINH)范围为 1.7 V 到 2.8 V,输入低电压(VINL)范围为 0.5 V 到 0.8 V,最大输入电流 IINH/IINL 为 10 mA,输入电容为 3 pF
  • 供电相关参数​:输入供电电压为 2.3 V 到 5.5 V,工作电流为 4.5 mA 到 5.5 mA,在低功耗睡眠模式下,DAC 关闭,MCLK 运行,工作电流降至 0.5 mA

3.AD9833 的引脚和 SPI 通信参数

3.1 AD9833 引脚说明

AD9833 的引脚如下图所示:

4.png

引脚编号和功能如下表所示:

5.png

3.2 AD9833 的 SPI 通信电气参数和流程

SPI 时序特性如下表所示:

6.png

各个参数含义如下:

7.png

SPI 时序图如下:

8.png

这里,我们首先讲解一下四个信号和时序参数:

  • 主时钟信号​:MCLK 是输入到 AD9833 芯片的主时钟信号,定义了系统的操作速度;MCLK 的周期 t1 最低为 40ns,表示 MCLK 的频率最高可达 25MHz,而高电平持续时间 t2 和低电平持续时间 t3 至少为 16ns
  • 串行时钟信号​:SCLK 是串行时钟信号,控制数据的采样和传输,每个 SCLK 周期对应 SDATA 线上一个数据位的传输,SCLK 的一个完整周期 t4 最低为 25ns,即 SPI 通信最高频率可达 25MHz,SCLK 信号高电平 t5 和低电平 t6 的最小持续时间为 10ns
  • 帧同步信号​:FSYNC 是帧同步信号,用于标记数据帧的开始,FSYNC 信号的下降沿到第一个 SCLK 下降沿的最小建立时间 t7 至少为 5ns,FSYNC 的上升沿到最后一个 SCLK 下降沿的保持时间 t8 最小为 10ns,最大为 SCLK 周期 t4 - 5 ns
  • 串行数据线​:SDATA 是串行数据线,用于传输数据位,数据从稳定状态到 SCLK 下降沿的最小建立时间 t9 至少为 5ns,数据从 SCLK 下降沿到状态改变的最小保持时间 t10 至少为 3ns,SCLK 高电平到 FSYNC 下降沿的建立时间 t11 至少为 5ns

这里,AD9833 与主机采用三线 SPI 通信,其通信流程可以概括为:

  1. 通信开始:
    1. 主设备开始传输数据时,将 FSYNC 拉低,启用通信,此时 AD9833 准备接收数据。
    2. 主设备产生 SCLK 时钟信号,用于控制数据传输的时序
  2. 数据传输:
    1. 在 FSYNC 被拉低后,AD9833 的输入移位寄存器开始接收数据,SCLK 的每个下降沿都触发 SDATA 线上一个数据位的传输
    2. 数据的传输是串行进行的,总共需要 16 个 SCLK 周期来传输一个完整的数据包
  3. 数据保持与传输结束:
    1. 在完成 16 位数据的传输后,FSYNC 信号可以被拉高,标志着一次数据传输的结束
    2. 如果有多个数据包要连续传输,可以保持 FSYNC 为低电平,连续传输多个 16 位数据,只有在最后一个数据包的第 16 个 SCLK 下降沿后,FSYNC 才会被拉高
    3. 每次加载新数据后,AD9833 需要等待 7-8 个 MCLK 周期,输出波形才会产生相应的变化

需要注意的是,该芯片的 SPI 通信模式采用 CPOL = 0, CPHA = 1,即 SPI Mode 1(模式 1),并且 FSYNC(帧同步)不像标准 SPI 片选(CS)那样一直保持低电平,而是 在每帧数据传输前短暂拉低,SCLK 只有在 FSYNC 低电平后才开始传输数据,不像标准 SPI 那样可连续时钟运行,其协议更像是 I²S、TDM、或某些 DSP 设备特有的 SPI 变种。

简单来说,就是我们在每次写入数据前,需要手动拉高 SCLK,再将片选引脚拉低,才开始通信。

4.AD9833 的控制

4.1 AD9833 控制寄存器

AD9833 包含一个 16 位控制寄存器,用于设置芯片的工作模式。

9.png

控制寄存器中包括控制标志位和控制位,当用户需要更改控制寄存器的内容时,必须先将寄存器的 D15 和 D14 这两个高位都设置为 0。

控制寄存器的各个控制数据位(bit)定义如下:

10.png

简单来说,各个位含义如下:

  • D13 (B28)​:控制频率寄存器的写入方式
    • 当 B28 = 1 时,频率寄存器需要两次连续写入操作来完成整个 28 位的频率字
    • 当 B28 = 0 时,可以分别写入高 14 位(MSB)或低 14 位(LSB)
  • D12 (HLB)​:用于选择写入频率寄存器的高 14 位或低 14 位,B28 = 0 时有效
  • D11 (FSELECT)​:选择用于相位累加器的频率寄存器,0 选择 FREQ0,1 选择 FREQ1
  • D10 (PSELECT)​:选择用于相位累加器输出的相位寄存器,0 选择 PHASE0,1 选择 PHASE1
  • D8 (RESET)​:复位内部寄存器为 0,输出模拟信号为中间值;RESET = 0 时,开始生成输出信号
  • D7 (SLEEP1)​:当 SLEEP1 = 1 时,内部 MCLK 时钟禁用,DAC 输出保持当前值
  • D6 (SLEEP12)​:当 SLEEP12 = 1 时,关闭芯片上的 DAC
  • D5 (OPBITEN)​:与 D1 (MODE)配合使用,控制 VOUT 引脚输出,当 OPBITEN = 1 时,DAC 输出不再连接到 VOUT 引脚,而是连接到 DAC 数据的 MSB 或 MSB/2,D3 (DIV2)位决定是 MSB 还是 MSB/2 输出
  • D3​ (DIV2)​:配合 D5 (OPBITEN)使用
    • 当 DIV2 = 1 时,MSB 直接输出到 VOUT 引脚
    • 当 DIV2 = 0 时,MSB/2 输出
  • D1 (MODE)​:与 OPBITEN 配合使用,控制 VOUT 引脚输出
    • 当 MODE = 1 时,绕过 SIN ROM,输出三角波
    • 当 MODE = 0 时,通过 SIN ROM 将相位信息转换为幅度信息,输出正弦波信号

每次写数据时,都是从写控制寄存器器开始,每次写的 16 位数据的高两位用以决定所写的寄存器。控制 AD9833 的初始化工作流程可以概括为:

11.png

  1. 上电复位​:在上电时,将 RESET 位设置为 1,并确保频率、相位和控制寄存器中的数据为已知值
  2. 配置寄存器​:根据需要设置控制寄存器中的各个位,配置完成控制寄存器后(控制标志位设置为‘00’),再配置其他寄存器以选择适当的输出模式(正弦波、三角波或方波),并配置频率和相位寄存器(控制标志位设置为其他值)
  3. 开始输出​:清除 RESET 位,开始输出信号

4.2 AD9833 频率和相位寄存器

AD9833 内部包含两个频率寄存器和两个相位寄存器,用于控制输出信号的频率和相位:

  1. 频率寄存器:
    1. FREQ0 (28 位): FSELECT 位为 0 时,FREQ0 寄存器决定输出信号的频率,输出频率与 MCLK 频率成比例
    2. FREQ1 (28 位): FSELECT 位为 1 时,FREQ1 寄存器决定输出信号的频率,输出频率与 MCLK 频率成比例
  2. 相位寄存器:
    1. PHASE0 (12 位): PSELECT 位为 0 时,PHASE0 寄存器的内容将添加到相位累加器的输出中,决定输出信号的相位偏移
    2. PHASE1 (12 位): PSELECT 位为 1 时,PHASE1 寄存器的内容将添加到相位累加器的输出中,决定输出信号的相位偏移

频率寄存器和相位寄存器写入流程如下:

12.PNG

在写入频率寄存器时,我们可以选择 14 位数据写入模式或 28 位数据写入模式,频率寄存器写入模式可以通过写入控制寄存器设置 B28 (D13)数据位和 HLB (D12)数据位来选择,接着写入频率值;接着我们需要写入相位寄存器,先通过写入控制寄存器设置的 D15,数据位和 D14 数据位表明将数据写入相位寄存器,接着设置 D13 数据位选择要写入的相位寄存器(PHASE0 或 PHASE1),然后向其中写入相位值。

4.2.1 频率寄存器的写入

频率寄存器存储 28 位的二进制数据,决定输出信号的频率。频率计算公式如下:

$$
f_{\text{OUT}} = \frac{f_{\text{MCLK}}}{2^{28}} \times \text{FREQREG}
$$

其中,FREQREG 是所选频率寄存器中的值,fMCLK 是时钟频率,fOUT 是输出信号的频率。

由于频率寄存器为 28 位宽,而 SPI 接口一次只能传输 16 位数据,因此写入一个频率寄存器时需要进行两次写入操作。当需要修改整个频率寄存器的内容时,控制字的 B28 位(D13)应设置为 1,这样可以在两次写操作中完成频率寄存器的全部 28 位写入。

写入顺序如下:

  1. 第一步: 传输频率寄存器的低 14 位数据
  2. 第二步: 传输频率寄存器的高 14 位数据

如果只需更新部分数据,可以选择更新 14 个 MSB 或 14 个 LSB。此时,需要将控制字 B28 位(D13)应设置为 0,28 位频率寄存器用作两个 14 位寄存器,其中一个包含 14 个 MSB,另一个则包含 14 个 LSB;在需要粗调频率时,修改 14 个 MSB,在细调频率时,修改 14 个 LSB。

在控制字中,D15 和 D14 用于指定要写入的频率寄存器:

  • ​D15 = 0, D14 = 1:​写入 FREQ0 寄存器,选择修改 14 个 MSB 数据位
  • ​D15 = 1, D14 = 0:​写入 FREQ1 寄存器,选择修改 14 个 LSB 数据位

13.png

4.2.2 相位寄存器的写入

相位寄存器决定输出信号的相位偏移,其计算公式如下:

$$
{相位偏移} = \frac{2\pi}{4096} \times \text{PHASEREG}
$$

其中,PHASEREG 是所选相位寄存器中的值,输出信号的相位将被相应地偏移。

相位寄存器为 12 位宽,写入时控制字的 D15 和 D14 必须都设置为 1。D13 位决定要写入的相位寄存器:

  • ​D13 = 0:​写入 PHASE0 寄存器
  • ​D13 = 1:​写入 PHASE1 寄存器

4.3 AD9833 睡眠功能和低功耗寄存器

AD9833 芯片的睡眠功能(SLEEP Function)可以通过设置控制寄存器中的特定位来实现对内部时钟和 DAC 的部分或全部关闭,以最小化功耗。睡眠功能可以通过 SLEEP1 和 SLEEP12 两个控制位进行配置,它们的组合决定了芯片中哪些部分将被关闭或保持活动状态。

9c351514-e124-45b2-98cf-db99e2f453f8.png

频率寄存器数据位

当 DAC 关闭时(SLEEP1 = 0、SLEEP12 = 1),AD9833 内部的 DAC 会被关闭,这种模式适用于只需输出 DAC 数据的最高有效位(MSB)的情况。

当内部时钟将被禁用时(SLEEP1 = 1、SLEEP12 = 0),NCO(数控振荡器)停止了相位累加,DAC 的输出将保持在当前值。但此时仍可以写入新的频率、相位和控制字到寄存器中,也可以通过控制位更改选定的频率和相位寄存器。当 SLEEP1 位被重新设置为 0 后,MCLK(主时钟)将被重新启用,之前对寄存器的更改将在经过一定的延迟后在输出中反映出来。

4.4 AD9833 输出模式

AD9833 的输出引脚(VOUT)可以提供多种类型的信号输出,包括 DAC 数据的最高有效位(MSB)、正弦波输出或三角波输出,这些输出模式的选择由控制寄存器中的 OPBITEN(D5 位)、MODE(D1 位)和 DIV2(D3 位)来决定。

14.png

在使用 AD9833 输出波形时,需要注意以下两点:

  • 输出波形幅度:输出正弦波和三角波时波形幅度为 38mV~650mV,输出方波时幅度最大为 3.3V,当我们需要波形幅度更大的正弦波和三角波时,需要借助运算放大器来增强幅度,我们可以在放大电路中加入数字电位器来调节幅度
  • 输出波形频率:AD9833 的输出波形频率最高可达 12.5MHz,这个数值的来源与奈奎斯特采样定律有关,AD9833 的输入时钟频率最高为 25MHz,根据奈奎斯特采样定律,为了能够准确地还原一个信号,采样频率必须是信号最高频率的两倍;也就是说,输出波形的每个周期内至少需要 2 个采样点,因此,最高输出频率为输入时钟频率的一半,即 12.5MHz;当我们在放大电路中加入数字电位器来调节幅度时,需要特别注意数字电位器的带宽,数字电位器的带宽决定了它在不同频率下对信号的响应能力,当输出信号的频率较高时,如果数字电位器的带宽不足,信号的高频分量会受到抑制,导致波形的幅度大幅减小,常见的数字电位器如 AD5260、X9C103、AD5292 等,带宽均在 1 MHz 左右;如果你需要处理高达 10 MHz 的信号,可以使用高频可变增益放大器 (VGA),例如 AD8367,它是一款集成了增益控制的高频放大器,带宽高达 500 MHz,可以替代传统数字电位器来调节信号幅度
4.4.1 方波输出/DAC 数据的最高有效位(MSB)

当控制寄存器中的 OPBITEN 位(D5 位)设置为 1 时,DAC 数据的最高有效位(MSB)将被输出到 VOUT 引脚上。这种输出通常用作粗略的时钟源,因为 MSB 输出的是方波信号。用户还可以通过控制寄存器中的 DIV2 位(D3 位)来决定这个方波信号的频率是否需要除以二输出。

4.4.1 正弦波输出

AD9833 的 SIN ROM 模块将频率寄存器和相位寄存器中的相位信息转换为幅度信息,从而在 VOUT 引脚输出正弦波信号。要在 VOUT 引脚上输出正弦波信号,需要将控制寄存器中的 MODE 位(D1 位)设置为 0,同时将 OPBITEN 位(D5 位)设置为 0。

4.4.1 三角波输出

要实现三角波输出,需要将控制寄存器中的 MODE 位(D1 位)设置为 1,此时会绕过 SIN ROM 模块,NCO(数控振荡器)的截断数字输出将直接发送到 DAC,这时 VOUT 引脚的输出不再是正弦波,而是一个 10 位的线性三角波信号。

需要注意的是,无论选择哪种输出模式,SLEEP12 位(控制DAC的电源状态)必须设置为 0,确保 DAC 处于启用状态,以便信号能够正确输出到 VOUT 引脚。

posted @ 2026-09-03 12:18  FreakStudio  阅读(20)  评论(0)    收藏  举报