1. 项目背景:ADC前面为什么要放一个全差分放大器
写这篇的起因,是我前阵子做的一块18位数据采集板卡,在“单端转差分”这个环节折腾了很久。采集端用了一颗TI的18位SAR ADC(ADS8881),输入是真正意义上的差分输入:它有两个引脚IN+和IN-,最终转换结果是这两个引脚的电压差。而前端传感器出来的是很普通的单端信号,参考地是系统地。如果直接把单端信号送去ADC,会有一堆麻烦事:
- 单端信号的参考点和ADC的采样参考点之间存在地弹,直接影响信噪比;
- 单端信号只能用到ADC一半的动态范围,白白浪费分辨率;
- SAR ADC采样保持电容的充放电毛刺会直接打回信号源,造成串扰和恢复时间问题。
当时我找了一圈,最适合的解决方案就是一个芯片同时搞定“放大、转差分、电平搬移”,这就是全差分放大器,圈内常叫FDA(Fully Differential Amplifier)。它的基本结构是:一个输入端或差分输入对,外加一个互补输出对,OUT+和OUT-围绕一个共模电压对称摆动。TI的THS4551是我认为这个位置非常合适的一颗:输入电压噪声低到3.3nV/√Hz,带宽150MHz,2.7V到5.4V单电源供电,轨到轨输出,还有专门的VOCM共模控制引脚。
最终做出来的完整信号链是:
传感器 → 前级增益 → THS4551(单端转差分 + 增益 + 电平搬移) → 一阶RC滤波 → ADS8881。
这篇东西适合谁看?如果你在搞高精度数据采集、电化学检测、振动分析、医疗信号处理,或者单纯想把一款精密SAR ADC驱动好,这篇给出了从原理、计算到焊接、调试的完整过程。我会重点写清楚每一步的关键决策:为什么这样取值、为什么要加这个电容、为什么FFT里出现了谐波、怎么排查。把这套思路搞明白,换任何一颗FDA和ADC,你都能自己把电路设计出来。
1.1 全差分放大器到底比普通运放“全”在哪里
一个普通运放大家都很熟:两个输入、一个输出、一个反馈网络,输入差和输出电压之间的关系由外围电阻决定。FDA表面上看只是多了个反相输出,但内部结构其实多了一层环路。
普通运放只有一个“差分环路”,控制的是输出电压。FDA内部有两个环路:一个是差分误差环路,控制的是“OUT+减OUT-”的差分电压;另一个是共模环路,控制的是“OUT+加OUT-的平均值”,让这个平均值精确等于VOCM引脚给的电压。
这个区别带来的好处是巨大的。你不需要额外设计一个把输出偏置到VREF/2的电路,也不需要再接一级反相器去生成反相信号。FDA自己就把输出对撑开了:VOCM引脚设置的是两个输出的中轴,差分输出围着这个中轴对称摆动。
举个例子:VOCM接2.5V,链路增益为2的情况下,输入+1V时,OUT+=3.5V,OUT-=1.5V,差分电压正好是2V;输入-1V时两个输出互换。这个特性对ADC特别友好,因为大部分精密SAR ADC都要求输入共模电压在VREF/2附近,而FDA天生就擅长干这个。
1.2 为什么最终选THS4551
备选方案当时看过不少,THS4509这类高速FDA流量也很大。但真正把规格书翻完之后,我发现对1MSPS这一档的精密SAR ADC来说,真的不需要几百MHz带宽的放大器。带宽越高,带进来的噪声带宽也越大,简单的输出RC滤波都压不住,反而得不偿失。
THS4551更关键的是各项指标很均衡:
| 参数 | 典型值 | 我的理解 |
|---|---|---|
| 供电范围 | 2.7V ~ 5.4V | 5V单电源正好配5V基准 |
| 小信号带宽 | 150MHz | 对1MSPS采样绰绰有余 |
| 压摆率 | 220V/μs左右 | 大信号满摆幅恢复没压力 |
| 输入电压噪声 | 3.3nV/√Hz | 在精密SAR链路里算很低 |
| 输出类型 | 轨到轨输出 | 头尾不容易削波 |
| 静态电流 | 1.35mA左右 | 低功耗,便携设备也扛得住 |
它的同门产品THS4561在噪声和部分精度指标上更强,如果追求极限性能可以换那颗。我这次用THS4551,看中的是它在“低功耗、中等带宽、低噪声”之间的平衡,加上官方手册和评估板方案很多,照着抄不容易翻车。开头先声明一点:下面所有参数我都按当时手册里的典型值来写的,现在如果要画板,请务必去官网下载最新版数据手册核对,芯片版本偶尔会更新。
2. 全差分放大电路的核心设计:增益电阻与共模电压
2.1 单端转差分的基本电路拓扑
标准的THS4551单端转差分电路长这样:
- 输入信号VIN经过RG_top接到放大器的同相输入端;
- 放大器的反相输入端经过RG_bottom接到GND;
- OUT-通过一个反馈电阻RF回到同相输入端;
- OUT+通过另一个RF回到反相输入端;
- VOCM引脚接VREF/2。
第一次画原理图的人看到这个结构容易懵:为什么OUT-的反馈要接回同相输入端?这不是正反馈吗?其实仔细看,OUT+接到反相输入端是负反馈,OUT-接到同相输入端同样是负反馈。两个环路都是负反馈,FDA才能正常闭环工作。如果你在原理图里把两个反馈电阻接错位置,电路直接就变成比较器了,输出不会稳定在一个工作点上。
还有一点很多人容易忽略:单端转差分时,两个输入端的“地”并不是真正的交流地。当RF=2kΩ、RG=1kΩ、VOCM=2.5V时,FDA两个输入节点的静态电压大约在0.83V附近,不是0V。这个电压是由RG和RF的分压关系决定的,意味着前级信号源必须能扛住一定的直流偏置电流。实际使用中,前级最好是一个低输出阻抗的运放,不要直接挂高阻传感器进去,否则这个直流偏置会明显拉偏信号源工作点。
2.2 增益公式推导与取值
理想FDA在单端输入条件下,差分输出电压的公式是:
VOUT,diff = VOUT+ - VOUT- = (RF / RG) × VIN
注意这里不是2倍。很多人第一次接触FDA的时候会误算成增益2倍,然后怎么对仿真都对不上。实际每个输出端的摆幅只有差分输出的一半:
OUT+ = VOCM + (RF / (2 × RG)) × VIN
OUT- = VOCM - (RF / (2 × RG)) × VIN
推导逻辑其实很简单:假设两个输入端通过负反馈“虚拟短路”,令VIN+ = VIN- = Vx,分别对上支路和下支路列电流方程,最后消掉Vx就能得到上面的结果。想验证的话,把输入接一个直流电压,用万用表量两个输出的对地电压,再算一下差值,10秒就能对上公式。
我这次项目里,传感器满幅输出是±1V,ADC基准VREF=5V,全差分输入范围是±VREF也就是±5V。为了让信号在ADC量程内留出余量,我选择把满幅输入对应的差分输出设定为±2V,这样RF/RG=2。实际电阻取值是:
- RG = 1kΩ
- RF = 2kΩ
为什么不用更小的电阻?电阻越小热噪声越小是没错,但反馈网络给FDA输入端带来的负载也更重,功耗会上升。为什么不用更大的?因为电阻热噪声按根号R增长,2kΩ在常温下就有大约5.8nV/√Hz的热噪声密度,已经和THS4551自身的电压噪声同一量级,再往上加电阻明显吃亏。在ADC驱动这个场景里,1kΩ到4kΩ是日常最常见的取值区间,这个区间兼顾了噪声、功耗和稳定性。
还有个大坑是电阻精度。两个RF之间、两个RG之间的失配会直接导致二次谐波失真,因为差分输出对不对称以后,偶次谐波没法在差分端对冲掉。对18位分辨率这个级别,我强烈建议用0.1%精度、低温漂的薄膜电阻,省下的调试时间远远超过多花的几毛钱。
2.3 输入共模电压怎么验算
前面公式里的Vx,就是FDA输入端子的共模电压。完整表达式是:
Vx = [RG / (RF + RG)] × [VOCM + (RF / (2 × RG)) × VIN]
代入RF=2kΩ、RG=1kΩ、VOCM=2.5V之后:
Vx = (1/3) × (2.5 + VIN)
当VIN=+1V时,Vx≈1.17V;当VIN=-1V时,Vx≈0.5V。THS4551在5V单电源下的输入共模范围大约是从地以下一点到比正电源低1.2V左右,0.5V到1.17V完全落在安全区内。
这一步大家一定要自己算一遍。很多FDA的输入级并不是轨到轨输入,输入共模超出范围后不会像削波那样立刻被看出来,而是表现为ADC输出的FFT里出现谐波毛刺。你排查了半天,以为运放带宽不够,实际上只是输入共模超限了。把公式摆出来算一遍,5分钟就能排除这个因素。
2.4 VOCM引脚的接法
VOCM是共模电压的控制口,最佳做法是低阻抗驱动。我系统里本来就有2.5V基准,于是用一个精密基准源(REF5025)直接输出,加0.1μF旁路电容后接到VOCM引脚。如果你的系统里已经有一个准确的VREF/2电压,可以直接用,但必须保证源阻抗足够低。
千万不要图省事,直接用两颗10kΩ电阻从VREF分压出2.5V接VOCM,哪怕你再并联一个1μF电容也不行。我在实测中遇到过VOCM引脚自身会吸走不小的电流,如果驱动源阻抗高,这个电流会在分压电阻上产生压降,把共模电压拉偏,最终表现是OUT+和OUT-不再关于中点对称,ADC输出出现直流失调。我第一版就是这么干的,后来改成基准缓冲输出才恢复正常。这个坑很多人都会踩一次,写出来希望大家直接绕开。
3. ADC驱动实战:输出滤波与接口设计
3.1 输出端为什么要加RC滤波
THS4551输出到ADC输入之间,我加了一组串联电阻加并联电容的RC网络。这个网络承担三个作用:
- 抗混叠:把带外噪声和干扰先压掉一部分,减少折回到基带的杂散成分;
- 隔离采样毛刺:SAR ADC在采样瞬间,内部采样电容会瞬间从输入端抽取电荷,没有这个电阻的话,电荷会直接打在FDA输出级上,造成很长的恢复时间;
- 提供一个本地储能电容:采样瞬间的电压跌落被大幅度减小,让ADC前端看起来更像一个稳定的电压源。
电阻Rfilt我第一版用了20Ω,电容Cfilt用了1nF,这样一阶截止频率是:
fc = 1 / (2 × π × Rfilt × Cfilt) = 1 / (2 × π × 20 × 1nF) ≈ 7.96MHz
这个频率对1MSPS采样率来说足够用,同时也能把放大器的高频噪声削掉一些,不影响20kHz以内的目标信号。
这里有两个必须注意的点。第一,Cfilt不能直接并在FDA输出脚上,必须先串电阻。FDA这类宽带运放直接驱动大容性负载,环路相位裕度会掉得很厉害,容易振铃。串一个10到20Ω的电阻后,放大器看到的负载被隔离了。第二,Cfilt的材质很重要,高精度场合尽量选C0G/NP0,别用X7R。X7R的电容值会随直流偏置电压变化,在18位分辨率面前,这个电压系数带来的误差完全不可忽略。
3.2 采样建立时间的定量估算
针对ADS8881来说,1MSPS采样率下的采集时间大约是296ns。信号必须在这个时间内稳定到1/2 LSB以内,否则采样结果会出现误差。一阶系统建立到1/2 LSB所需的时间常数数量是:
t_settle = ln(2^19) × τ ≈ 13.2τ
如果Rfilt=20Ω、Cfilt=1nF,那么τ=20ns,13.2τ算下来是264ns,和296ns离得非常近。实际板子上还有布局寄生、芯片参数偏差,余量就很不充裕。所以我后来把Rfilt降到了10Ω,τ变成10ns,建立时间只需要132ns,一下就稳了。
但Rfilt太小会削弱抗混叠作用,所以要权衡。如果你做的是100kSPS级别的低速采集,RC可以取得大很多,把噪声压得更狠;如果采样率上到2MSPS甚至更高,Rfilt可能还要再往下压,甚至要换成更复杂的二阶滤波结构。每个采样率都有对应的最优RC区间,建议每次改参数都重新按这个公式算一遍,不要无脑照抄参考设计。
3.3 SAR ADC参考电压与输入范围的配合
驱动ADC不只是把信号怼到引脚上就行,参考电压同样是整个链路的一部分。ADS8881的VREF决定满幅范围,VREF和驱动级的VOCM必须匹配。最常见的是VREF=5V、VOCM=2.5V;如果VREF用3.0V,VOCM就要改成1.5V,否则信号共模位置和ADC的模拟输入范围对不上,同样会出现失真或削波。
还有一个容易忽视的细节:VREF引脚在转换过程中会周期性地抽取电流,属于动态负载。给VREF的旁路电容要足够大,我实际用的是10μF电容紧贴VREF引脚,再并联一个0.1μF陶瓷电容。如果用的是REF5050这类精密基准,输出端同样要并上这一大一小两个电容,基准拾取到噪声会直接反映到ADC转换结果上。
3.4 电源和布局的几条硬规矩
电源设计上,我的顺序是“LDO → 大电容 → 小电容 → 芯片电源引脚”。模拟电源用了一颗低压差LDO输出5V,THS4551的电源引脚旁边先放10μF大电容,再放0.1μF陶瓷电容,两个都要尽量贴近芯片。FDA和ADC的电源建议分开走,不要在一整块板子里共享一条细长走线,否则数字部分的地弹很容易灌进模拟供电。
PCB布局我给自己定了几条硬规矩:
- 反馈电阻RF和RG要贴着THS4551输入引脚放,走线越短越好;
- 输出到RC到ADC的路径按“从源到漏”顺序一字排开,不要来回绕;
- VOCM引脚旁边放0.1μF电容并接地;
- 模拟区域下方铺完整地平面,不在信号路径下走数字线;
- ADC的数字输出线,包括SDO、SCLK这些,不要和模拟输入并行或贴太近。
这些都是几十块板子调下来总结的笨办法,看着朴素,但每一条都在实战里救过我。
4. 完整实操:从BOM到上电测试
4.1 元器件清单
先给一份可以直接照着买的第一版BOM。所有电阻电容都是0603封装,方便手工焊接,也方便后续微调。
| 序号 | 元件 | 推荐型号/规格 | 数量 | 备注 |
|---|---|---|---|---|
| 1 | 全差分放大器 | THS4551IDGKR | 1 | 也可用RGTR封装 |
| 2 | 反馈电阻 | 2kΩ 0.1% 0603 | 2 | 低温漂薄膜电阻 |
| 3 | 增益电阻 | 1kΩ 0.1% 0603 | 2 | 同上 |
| 4 | 输出串阻 | 10Ω 1% 0603 | 2 | 可换成20Ω对比测试 |
| 5 | 输出滤波电容 | 1nF C0G 0603 | 2 | 不要用X7R |
| 6 | 电源旁路电容 | 0.1μF X7R 0402 | 4 | 每个电源脚一个 |
| 7 | 电源大电容 | 10μF X7R 0805 | 1 | 近电源入口 |
| 8 | VOCM旁路电容 | 0.1μF X7R 0402 | 1 | 紧贴VOCM脚 |
| 9 | 2.5V基准 | REF5025 | 1 | 用于VOCM |
| 10 | ADC | ADS8881 | 1 | 18bit/1MSPS |
如果你手里没有ADS8881,换成ADS8885(400kSPS)或者ADS9110(2MSPS)也完全可以,驱动思路一样。
4.2 焊接与装配顺序
焊接顺序我强烈建议按模块分步走:先电源部分和基准,再放大器,再反馈网络,最后是RC滤波和ADC。每焊完一个模块就上电测一次,不要一次性全焊完再通电。一次性焊完再上电的痛,经历过的人都懂:出了问题根本不知道是电源问题、焊接问题还是原理错误,排查效率极低。
比如焊完电源和基准之后,先不焊FDA,直接上电测量各点电压:5V、2.5V都在,再焊下一级。这个方法看起来慢,实际上帮你省掉大量定位问题的时间。焊完反馈网络后,不接信号,先量两个输出是不是都在2.5V附件。发现不对马上停下检查,比全部焊完发现输出歪了再倒查要快得多。
4.3 上电实测步骤
上电后我的测试顺序是这样的:
- 输入端悬空或接地,用万用表量OUT+和OUT-,理想情况下都是2.5V左右,差分0V。如果两个输出差得明显,先查VOCM引脚电压和两个反馈电阻有没有虚焊。
- 信号发生器输出1kHz、峰峰值约1.6V的正弦波接入输入端。示波器两个探头分别看OUT+和OUT-,两者应该互为反相、围绕2.5V对称。
- 示波器用A-B差分模式看ADC输入端的差分信号,检查有没有振铃、台阶或者不对称。这时候看到明显交越失真,多半是输入共模超限或者增益电阻不匹配。
- 把差分输出接到ADS8881,用SPI读取转换码,数据导出到PC做FFT分析。
在1kHz、满幅约80%的输入条件下,我实际测到的信号链无杂散动态范围(SFDR)大约在90到100dB之间,有效位数折合15.5到16.5bit。这个结果和THS4551手册展示的性能基本吻合,说明链路里没有额外引入严重失真。想逼近18位的极限,需要更窄的滤波带宽、更低噪声的基准,甚至换THS4561这类更新器件,那是另一个优化方向了。
4.4 从“能跑”到“跑好”的几处微调
第一版能正常出数之后,我又做了几处小改动,每一处都对应一个实际问题:
- 输出串阻从20Ω改成10Ω:建立时间余量更足,低频FFT没有明显恶化;
- ADC的VREF引脚外加10μF大电容:转换结果的码跳动明显减小;
- VOCM引脚和地之间补0.1μF电容:两个输出的对称性更好了;
- 输出滤波电容从X7R换成C0G:高次谐波有一点改善,频谱更干净。
这些都是很小的改动,不涉及原理变化,但对最终效果的影响非常直接。
5. 常见问题与排查实录
5.1 问题速查表
整理了一张排查表,遇到问题先按表过一遍,大部分能定位。
| 现象 | 可能原因 | 排查/解决方法 |
|---|---|---|
| 两个输出直流都不在VOCM附近 | VOCM引脚悬空或驱动阻抗高;RF/RG虚焊 | 先量VOCM引脚电压,确认在2.5V;补焊反馈电阻 |
| 输出正弦波削波 | 输出摆幅超过轨到轨范围;VOCM设置不对 | 减小增益或输入幅度;确认VOCM等于VREF/2 |
| 二次谐波明显 | 反馈电阻失配;源阻抗不平衡;输入共模超限 | 换0.1%电阻;平衡源阻抗;按公式验算输入共模 |
| 输出有振铃或自激 | 容性负载过大;探头电容加载;布局不紧凑 | 加10Ω串联电阻;换低电容探头;缩短反馈走线 |
| ADC输出噪声偏大 | RC带宽太宽;电源去耦不足;VREF动态电阻太高 | 降低RC截止频率;加强电源去耦;加大VREF电容 |
| 直流失调随温度漂移 | 电阻温漂、放大器失调温漂 | 换低温漂电阻;检查供电是否过热;必要时软件校准 |
5.2 我踩过的两个典型坑
第一个坑是VOCM分压电阻压降,前面提过。我最早图省事,用两个10kΩ电阻从5V基准分压出2.5V直接接VOCM,结果OUT+和OUT-一个偏2.35V、一个偏2.65V。原因就是VOCM引脚的吸收电流在10kΩ阻抗上产生了不小的压降。换成基准缓冲器驱动后,对称性立刻恢复。这个案例很典型:看起来“电路没问题”,但器件的非理想特性直接毁掉了共模精度。
第二个坑是示波器探头造成的假振铃。有一次我在100mV/div档位看到输出高频振铃,怀疑RC参数不对,排查了一下午。后来偶然把探头换成10x,再在探头尖端串了一个1kΩ电阻去测,振铃消失了。示波器探头本身有十几pF的电容,直接加载到高速输出脚上会造成严重的振铃误判。这也是为什么我不建议用面包板搭这类高频精密电路,面包板的寄生电容和接触电阻太随意,测出来的波形你根本不知道它来源于电路还是来源于面包板本身。
5.3 判断链路是否健康的小技巧
分享一个判断“问题出在模拟驱动级还是ADC”的技巧:把ADC输入短接,也就是让差分信号为0,采集足够多的点,然后算这些码值的标准差。这个值就是零输入噪声,它代表整个链路的底噪水平。如果零输入噪声已经超过几个LSB,说明链路噪声过大,后面再怎么调增益也没用,因为有效位数已经被底噪卡死了。反过来,如果零输入噪声很低,但加入信号后谐波很大,那问题基本就在驱动级的线性度或者共模设置上。这个办法简单粗暴,但定位效率极高。
6. 一些调试心得
这套THS4551全差分ADC驱动电路,我前前后后做了三轮迭代。最大的体会是:芯片本身的性能确实重要,但整个链路最后能跑出多少有效位数,更多取决于外围细节——电阻精度、VOCM驱动方式、RC取值、布局寄生,每一个环节都在“吃掉”LSB。芯片选对了只是起点,把反馈网络和界面电路做实才是关键。
如果你想复刻,建议第一版严格按文中的参数搭,先把链路跑通,再根据自己信号链的需求去调整增益和RC。换不同的ADC只需要重新计算RC截止频率和VOCM电压,整体设计思路完全通用。这个板子后续也能扩展成精密数据采集前端,或者加一级多通道选通做成小型采集模块。每次改版,记得把测试数据和修改记录留下来,这些数据在你下一次设计时比什么参考设计都有用。