做信号源方案选型的时候,我第一反应总会先看DDS芯片。AD9833这颗料在低功耗、小封装、可编程波形发生器里算是很经典的入门选择,很多做阻抗分析、频率扫描、传感器激励信号源的朋友都用过。不过这颗芯片有个不太被人提前告知的特点:它在输出中低频正弦波时确实很干净,但频率一旦推高,比如到2MHz以上,波形质量就开始肉眼可见地变差。这篇内容我打算把自己实际测试AD9833高频输出信号质量的记录、指标拆解、劣化原因和改善手段完整整理一遍,给正在用或者准备用这颗料的人一个参考。
1. 重新认识AD9833的输出能力
1.1 DDS基础原理回顾
AD9833是ADI推出的一款低功耗可编程波形发生器,内部结构是典型的DDS(直接数字频率合成)架构:一个28位相位累加器、一个波形查找表(ROM),以及一个10位DAC。工作方式很简单,你通过SPI接口把频率控制字写入芯片内部的频率寄存器,芯片会按照系统时钟频率MCLK不断累加相位,然后把这个相位映射成正弦波幅度值,再经过DAC输出模拟信号。
这套架构的好处很多:频率切换速度快(微秒级)、频率分辨率高(28位相位累加器,在25MHz时钟下理论频率分辨率能做到0.1Hz以下)、相位连续可调。坏处也很明显,它本质上是“数字合成”出来的波形,采样点数有限,输出信号必然包含量化噪声、采样保持带来的频谱镜像,以及DAC非线性的谐波失真。这些都是高频段信号质量变差的根源。
1.2 高频在DDS语境下的真实含义
很多人看到“AD9833最高支持25MHz主频,输出频率为MCLK/2即12.5MHz”,就以为它能输出12.5MHz的高质量正弦波。这个理解有问题。DDS输出信号的“质量”和输出频率与主频之间的比值关系巨大,并不是说主频25MHz就一定能输出什么像样的12.5MHz正弦波。
这里有个关键概念:Nyquist采样定理。AD9833内部的DAC在每个MCLK周期输出一个幅度值,相当于以25MHz的采样率重构你想要的波形。当你要输出1MHz正弦波时,每个周期有25个采样点;当你要输出10MHz正弦波时,每个周期只剩2.5个采样点;接近12.5MHz时,一个周期只有2个采样点,波形重构的精度急剧下降。你会发现高频输出时波形看起来像三角波甚至锯齿波,正弦度很差,这不是芯片坏了,是DDS原理上的固有限制。
实际使用中,不要被“最高12.5MHz”误导。在这个输出频率下,波形质量距离“可用”差得远,通常只适合做频率存在性检测,不能做精密测量。我的经验是,AD9833输出2MHz以下的正弦波,信号质量还能接受;超过5MHz,就必须认真考虑滤波和信号调理电路,否则后续电路性能都会被拖累。
1.3 官方指标与实测表现的差距
翻开AD9833的数据手册,最核心的几个动态指标大概是这样:无杂散动态范围(SFDR)典型值在50-60dBc(取决于输出频率和滤波情况);信纳比(SINAD)不算特别突出;DAC是10位分辨率,输出正弦波的幅度量化噪声理论信噪比大约在60dB左右。这些指标看起来还行,但要注意它们都是在特定测试条件下测出来的,比如配合特定滤波器、特定PCB布局、特定参考电压源。
实际使用时,如果你直接用一个简单的STC或STM32的SPI引脚飞线连接AD9833的评估板,电源用LDO直接从USB取电,输出端口不加任何滤波,那你能测到的高频段SFDR可能只有30-40dBc。距离手册值差了20dB以上。这个差距不是芯片不行,而是你绕过了手册里所有“理想条件”。我在前面做过的几版电路都有这个问题,飞线越长、电源越脏、地平面越不完整,高频信号质量就越差。
2. 高频信号质量,到底该看哪些指标
要评价“信号质量”,不能只说“波形好不好看”。做工程的人得把主观感受翻译成客观可测的指标。对于AD9833这类DDS输出的正弦波,我一般会重点看这五个指标。
2.1 频域指标:SFDR与THD
SFDR(无杂散动态范围)是衡量频谱纯度的老牌指标,它定义是:在指定频率范围内,基波信号幅度与最大杂散信号(不包括基波和谐波)幅度之间的差值,单位dBc。简单理解:你的主信号强度比最大的“多余信号”大多少dB。SFDR越高越好,意味着频谱越干净。AD9833在输出低频信号时SFDR能做到接近60dBc,但在高频段,第一镜像频率、谐波和其他杂散会窜出来,SFDR会明显下降。这类杂散不是你加上一个简单的低通滤波就能完全滤掉的,因为有些杂散频率比基波高不了多少,滤波器设计起来很头疼。
THD(总谐波失真)也很重要,它关注的是基波整数倍频率处的能量占比。AD9833的10位DAC的非线性会导致明显的二次、三次谐波。谐波分量在频谱图上呈现为基波频率整数倍处的尖峰,比如输出2MHz基波,4MHz、6MHz处可能各有-40dBc左右的谐波。THD失真在高频段尤为明显,因为DAC的非线性误差在高摆率的情况下会被放大。
2.2 时域指标:相位噪声与抖动
很多人测DDS信号只看幅度,不看相位,这容易漏掉关键问题。DDS输出信号的相位噪声来源包括系统时钟的相位噪声、DAC采样时钟的抖动、数字噪声对相位累加器的调制。AD9833内部时钟通常来自外部有源晶振或MCU的时钟输出,晶振质量直接决定了输出信号的相位噪声。
在频谱仪上观察相位噪声的方法:把SPAN调小到基波频率的几倍,分辨率带宽RBW设到100Hz甚至更低,观察基波峰值两侧的噪声裙。如果相位噪声严重,你会看到基波两侧有“草堆”而不是干净地落在底噪声上。对锁相放大、精密测量等应用来说,相位噪声直接决定系统动态范围,影响很大。
时域抖动(jitter)则是相位噪声的时域表现:信号过零点的时间位置不稳定。在数字通信、ADC采样时钟等应用中,抖动会影响系统时序裕量。AD9833作为信号源时输出抖动一般不是重点,但如果它的时钟信号同时驱动ADC,那就要把抖动当回事。
2.3 幅度参数:平坦度与稳定度
幅度平坦度描述的是输出幅度随频率变化的情况。AD9833的输出幅度理论上是固定的(由参考电压和DAC满量程决定),但实际上高频输出时,DAC输出阻抗变化、PCB走线寄生电容、输出放大器带宽限制等因素都会导致幅度随频率升高而滚降。实测中,1MHz输出可能还有580mVpp,到10MHz可能衰减到400mVpp不到。这个滚降如果不做补偿,测试得到的“频率响应曲线”就是错的。
另外还有幅度稳定度:长时间工作输出幅度的漂移。这个指标主要受温度影响,AD9833内部DAC有个特性,温度升高时满量程电流会有一定漂移,如果外部参考电压源本身温漂也大,那么整个输出幅度就会随着开机时间慢慢变。做设备标定时需要注意。
2.4 与高速接口信号完整性的横向类比
提一个有意思的现象:很多人做Type-C接口的高速信号调试,会遇到传输速度上不去的难题。这时用到的最核心评估手段也是眼图、抖动、串扰、回波损耗、插入损耗这些信号完整性指标。本质上,Type-C高速信号关注的是数字信号在传输过程中的失真,而AD9833高频输出关注的是模拟正弦波在合成与传输过程中的失真,两者底层逻辑相通:信号的幅度失真、相位失真、噪声叠加,决定了最终的信号质量能否满足接收端要求。比如USB 3.2 Gen2的10Gbps速率对应大约5GHz的Nyquist频率,此时PCB走线损耗、过孔残桩、连接器串扰对信号的影响,和AD9833在接近Nyquist频率输出时波形坍缩、杂散增大的现象是一个道理。理解了一个,另一个也就能触类旁通。
3. AD9833信号在高频段劣化的根源
3.1 采样点太少导致的重构波形坍缩
前面提到,DDS输出本质上是一个“离散时间到连续时间”的重构过程。每个MCLK周期输出一个幅度点,重构正弦波需要的不是“满足Nyquist最低要求”就行,而是越多采样点波形越细致。工程上有个经验值:想要输出波形还能看,每个周期至少要有16-32个点;想要波形比较干净(SFDR较高),至少需要64个点以上。AD9833在25MHz主频下,按32个点/周期计算,输出频率上限大约是25MHz/32≈781kHz。超过这个频率,输出波形就开始出现明显的台阶效应和折线感,这在时域波形上表现为“楼梯”,在频域上表现为高频镜像和基波附近杂散。
这个现象是DDS架构的物理定律,不是换一颗高级芯片就能跳过(更高级的DDS主频更高,等效采样点数更多,但原理依旧)。所以AD9833高频段信号质量劣化的第一条原因,就是“喂给DAC的采样点数量严重不足”。
3.2 10位DAC的量化噪声与非线性
AD9833内置的DAC是10位电流舵型结构,满量程电流由外部电阻设定。10位分辨率意味着输出幅度被量化成1024个台阶,理想情况下信噪比约为6.02×10+1.76≈62dB。这是理想量化噪声的极限,实际还要叠加DAC的非线性误差(INL、DNL),以及温度漂移。在低频输出时,量化噪声均匀分布在奈奎斯特带内,可以在后级用低通滤波器把它滤除大部分;高频输出时,量化噪声被调制到基波附近,甚至产生“杂散泡”,滤波器对接近基波的杂散无能为力,因此SFDR下降很明显。
我实测过一颗AD9833,用高分辨率频谱仪看10MHz输出时的频谱,基波旁边大约50kHz和100kHz处有两个很明显的杂散峰,幅度大约-45dBc左右。这种杂散就是DAC非线性和相位截断的综合产物,不是随便滤波能处理的。
3.3 相位截断杂散:DDS特有的“幽灵峰”
相位截断杂散是DDS芯片最常被人忽略的问题。AD9833的相位累加器是28位,但ROM查找表的地址位通常只有12位(配合10位DAC输出幅度值),这意味着相位累加器输出的低16位会被直接丢弃。这个截断操作在输出频率不是MCLK整数倍分频关系时,会周期性地产生相位误差,这个误差信号经过SIN映射后会在输出频谱里产生一系列杂散峰。
这些杂散峰的位置通常位于与基波呈特定间隔的地方:f_spur = |m × f_out ± n × (f_MCLK / 2^N)|,其中N是相位累加器位数(28),m/n是整数。简单理解,它们不一定落在谐波位置,而是落在基波附近,很难用固定频率的滤波器滤除。这也是为什么很多人在示波器上看AD9833输出波形“还好”,拿到频谱仪上一看就“见鬼了”的原因。做高频信号源时,这块必须心里有数。
3.4 板级因素:电源、地平面、布局与串扰
芯片自身的非理想因素之外,更多的信号质量劣化其实来自电路板级实现。AD9833的模拟电源(AVDD)和数字电源(DVDD)如果共用一个LDO输出,数字电路翻转噪声会通过电源网络耦合到模拟输出端。很多低成本设计里,DVDD没有做磁珠隔离,这时输出波形上容易看到严重的毛刺,尤其是在DAC输出过零点的瞬间。
地平面也是大问题。如果AD9833下面没有完整的地平面,模拟地和数字地没有合理分割并单点连接,地弹噪声会直接叠加在输出信号上。我在一版两层板上测过,地平面被走线切断的部分对应的输出信号噪声底会高至少10dB。另一个容易被忽视的是SPI信号串扰,SCLK和MOSI线如果长距离平行于模拟输出走线,高频数字跳变会通过互感耦合到输出端,表现出来就是输出信号上叠加了与SPI时钟同步的“数字尖刺”。
4. 实操:AD9833高频信号质量评测与改善案例
4.1 搭建一套靠谱的测试环境
评估信号质量,测试环境本身必须可靠,否则你会把测试系统的问题归咎于芯片。我搭的一套评测最小系统包含几部分:一块AD9833模块(某宝几块钱的模块就能用,但需要飞线改造成本低),一个5V转3.3V的低噪声LDO(我用的是AMS1117-3.3,有条件换LT1763或TPS7A4901会更好),一个50Ω阻抗匹配的输出端口,以及一台频谱仪(最低支持到1GHz带宽即可)和一台带宽不低于100MHz的示波器。
这里有一个容易翻车的事情:示波器探头直接点测AD9833输出时,探头本身的高频寄生效应(约10-15pF电容)会拉低高频响应,让高频波形“看起来更差”。建议用50Ω同轴线直连示波器50Ω档,并在输出端串联一个匹配电阻到示波器端再接50Ω负载,这样测量更准确。低频时探头影响不明显,几MHz以上差别就很大了。
4.2 SPI配置代码与频率设置
AD9833的SPI配置是16位字操作,每次写入频率寄存器或者控制寄存器都需要先拉低FSYNC,再送16个时钟的SCLK数据,然后拉高FSYNC。下面是基于STM32 HAL库的配置代码示例,演示如何输出1MHz和10MHz正弦波。
// 选择AD9833内部时钟25MHz,设置输出正弦波 #define F_MCLK 25000000.0f void AD9833_Write(uint16_t data) { HAL_GPIO_WritePin(FSYNC_GPIO_Port, FSYNC_Pin, GPIO_PIN_RESET); // 传输16位数据,高位在前 for (int i = 15; i >= 0; i--) { HAL_GPIO_WritePin(SCLK_GPIO_Port, SCLK_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(SDATA_GPIO_Port, SDATA_Pin, (data >> i) & 0x01); HAL_GPIO_WritePin(SCLK_GPIO_Port, SCLK_Pin, GPIO_PIN_SET); } HAL_GPIO_WritePin(FSYNC_GPIO_Port, FSYNC_Pin, GPIO_PIN_SET); } void AD9833_SetFrequency(float freq) { uint32_t freq_word = (uint32_t)((freq * 268435456.0f) / F_MCLK); // 2^28 AD9833_Write(0x2100); // 复位,选择频率寄存器0,输出正弦波 uint16_t low14 = (uint16_t)(freq_word & 0x3FFF); uint16_t high14 = (uint16_t)((freq_word >> 14) & 0x3FFF); AD9833_Write((uint16_t)(0x4000 | low14)); // 写入频率寄存器0低14位 AD9833_Write((uint16_t)(0x4000 | high14)); // 写入频率寄存器0高14位 AD9833_Write(0x2000); // 退出复位,开始输出 }写入频率控制字的计算公式里,268435456就是2的28次方,这个值决定了AD9833的频率分辨率:25MHz主频下,每个LSB对应的频率增量约为0.093Hz。写入低14位和高14位各一次,是为了把28位相位累加器数据分两次塞进14位宽度的寄存器里,这一步必须按顺序操作。
4.3 实测记录:不同频率下的表现
我在25MHz主频下分别配置输出100kHz、1MHz、5MHz、10MHz的正弦波,记录示波器波形和频谱仪扫描结果。
100kHz输出时,示波器上正弦波非常干净,看不到量化台阶,频谱仪上基波与最近杂散的差值大约58dBc,谐波在-50dBc左右。
1MHz输出时,每个周期约25个采样点,示波器上已经能隐约看到台阶痕迹,但视觉上影响不大,SFDR大约降到52dBc,二次谐波约-45dBc,此时不加滤波也基本可用。
5MHz输出时,每个周期只有5个采样点,波形已经明显折线化,不再是光滑正弦。频谱仪上基波附近出现了若干杂散峰,SFDR掉到38dBc,谐波也有-35dBc左右。这个状态下接放大器,输出信号会包含大量高频分量,不利于后续电路精确工作。
10MHz输出时,每个周期只剩2.5个采样点,示波器上已经分不清是正弦还是三角波。频谱仪上基波幅度比1MHz时低约3dB,并且高次谐波幅度与基波差距缩小到25dBc以内,SFDR进一步恶化到32dBc左右,相位噪声裙也很明显。这个频段如果你还靠“看波形”判断信号质量,很容易高估它的性能,必须用频谱仪检查。
4.4 改善措施:从板级到系统级
针对高频段信号质量差的问题,我尝试过几套改善方案,并分别记录效果。
第一项是输出端加椭圆低通滤波器。在AD9833输出端加一个截止频率略高于目标输出频率的七阶椭圆低通(可以用LC实现或者专门找现成的滤波器模块),能把高频镜像和谐波抑制掉20dB以上。注意滤波器截止频率不能设得太低,否则基波本身也会被衰减,一般设在目标频率的1.2-1.5倍。
第二项是电源方案改造。把DVDD和AVDD用磁珠隔离,并在每个电源引脚就近放置0.1uF和10uF去耦电容。实测这个改动把输出噪声底改善了约8dB,高频段相位噪声也有明显改善。这是成本最低、收益最高的改善手段,强烈建议任何AD9833设计都做。
第三项是PCB布局优化。尽量避免SPI信号线穿过DAC输出走线下方或旁边,给DAC输出走线做50Ω阻抗控制(虽然几十MHz频率下阻抗匹配不像射频那么严格,但统一走线宽度、保证地平面完整还是很有帮助)。有条件的话,给AD9833单独铺一个模拟地岛,再在模块接地单点汇聚。
第四项是输出端加跟随器/放大器。AD9833直接输出驱动能力很弱,如果后级接的负载阻抗较低,输出幅度很容易被拉低,进而导致后续电路信噪比下降。我一般在输出端加一级高输入阻抗、低输出阻抗的运算放大器(比如AD8065或OPA838),这样负载效应降到最低,高频增益和幅度也能保持稳定。需要注意运放的带宽至少要为输出频率的5-10倍,否则运放自身会成为新的瓶颈。
5. 常见问题与排查技巧实录
下面这些问题是AD9833使用过程中最容易遇到的,我按照“现象-原因-排查方法-解决手段”的格式整理一下,方便直接对照。
| 问题现象 | 可能原因 | 排查方法 | 解决手段 |
|---|---|---|---|
| 高频输出幅度明显低于预期 | DAC输出驱动能力不足,负载阻抗过低;输出走线寄生电容过大 | 用高阻探头或直接断开负载测量;用网络分析仪测走线S21 | 输出端加缓冲放大器;缩短走线,加粗输出线 |
| 输出波形上有密集毛刺,与SPI时钟同步 | SPI数字信号串扰到模拟输出;电源去耦不良 | 用示波器观察毛刺间隔是否等于SCLK周期;断开SPI输入看毛刺是否消失 | SCLK/MOSI走线远离模拟输出;增加磁珠隔离模拟数字电源;加屏蔽 |
| 频谱上基波旁边出现一些规律杂散峰,不随频率移动 | 相位截断杂散;DAC非线性产生的调制产物 | 改变频率步进观察杂散间隔是否按2^28分频关系变化 | 进入“无截断模式”不可实现,只能后续窄带滤波;调整主频使杂散移出关注频带 |
| SFDR比手册差20dB以上 | 测试条件不理想:缺滤波器、电源脏、地环路 | 用干净的独立电源+屏蔽壳测试;检查测试环境 | 加输出滤波器;优化电源与地平面;测试线改同轴 |
| 写入频率寄存器后无输出 | SPI时序错误;FSYNC拉低时间不足;复位未退出 | 用示波器检查SPI波形;确认写入顺序;确认复位位操作 | 按AN-1070应用笔记检查时序;减少SPI速率;确保写控制字顺序正确 |
| 输出直流偏置异常 | 参考电压引脚电容过大或过小;DAC输出负载不平衡 | 测量VREF引脚电压,对比手册参考值;断开负载测静态电平 | 调整参考电压去耦电容到0.1uF;输出端加隔直电容或调整负载平衡 |
排查这一类问题,我有一条很重要的实操经验:先用频谱仪、后看示波器。示波器能看波形大体形态,但很多信号质量问题(微小杂散、相位噪声、谐波谱线)在示波器上是看不出来的,只有频谱仪能给出可量化的判断。如果没有频谱仪,至少要会用示波器的FFT功能看频谱,虽然动态范围有限,但也能看到一些明显杂散。
还有一条经验是:别一开始就怀疑芯片坏了。AD9833这块芯片的失效模式很少,绝大多数“波形不对”问题都出在外围电路和测试方法上。我遇到过好几次用户反馈“AD9833输出异常”,最后查出来要么是SPI速率太快导致写入失败,要么是电源纹波太大,要么是示波器探头电容把波形拉变形。先把外围因素排除干净,再考虑芯片本身的问题。
6. 如果想要更高的频率和更好的质量,可以这样扩展
AD9833的天花板就在那里,25MHz主频决定了它的高频输出质量不会太理想。如果你的项目需要更高频率、更好频谱纯度,有几个方向可以考虑。
一是把系统时钟提上去。AD9833最高支持25MHz MCLK,但实际应用中如果使用更高精度的外部晶振并把MCLK倍频(芯片没有内部PLL,所以这需要外部时钟源支持),并不会改善“采样点数不足”的问题,因为主频上限固定了。这条路走不通。
二是换更高性能的DDS芯片。ADI家有AD9834(频率可到37.5MHz,带比较器和DAC),或者AD9910(主频1GHz,输出频率可到400MHz),AD9912(带14位DAC和低相位噪声模式)。这些芯片在频率上限和动态范围上都远好于AD9833,当然价格也更贵,代码复杂度也更高。如果项目预算允许、对信号质量有硬要求,直接换芯片比在AD9833外围绕圈省事得多。
三是采用PLL倍频+DDS组合方案。用AD9833产生频率较低但相位噪声较好的扫频信号,然后通过PLL锁相环把它倍频到目标高频段。这种方案可以解决DDS高频输出杂散大的问题,代价是电路复杂度增加、锁定时间变长,适合对频率切换速度要求不高的应用。
四是单纯加强信号调理。在AD9833输出端做带通滤波、自动增益控制(AGC)、驱动放大,可以适当提高可用信号质量,但本质上无法突破DAC位数和采样点数的物理限制。这个方案适合“已经用了AD9833、只能当作信号源架构的固定输入”的场合。
我的建议是:如果只在几百kHz到MHz级别的低速信号源场景下使用,AD9833完全够用,不需要折腾;如果必须用到5MHz以上,优先考虑AD9910或AD9834方案。成本差异虽然存在,但换来的是信号质量的本质提升,这比在电路板上反复调试滤波、布线更值得投入。
7. 实测之后的一些心得
做了一轮完整的AD9833高频信号质量测试后,我最大的体会是:DDS芯片的评估千万不能只看芯片本身的数据手册,一定要结合“实际PCB环境+输出频率范围+负载特性”来判断。AD9833在低频段确实对得起价格和封装,但高频段的种种劣化是设计和架构决定的,不要指望通过软件或简单滤波完全弥补。另一个收获是,测试方法本身对结论影响很大,用示波器探头点测和用50Ω同轴线测量同一片板子,结果可能差出十几个dB。做任何信号评测前,先确认你的测量手段是可信的。这个思路不仅适用于AD9833,也适用于几乎所有高速信号质量分析场景。