AD8544差分信号转单端电路设计:从选型到MATLAB仿真验证
最近在做一块传感器采集板电桥输出的差分信号要进MCU的ADC而普通单片机的ADC基本都是单端输入这就必须把差分信号转成单端。翻了一下手头的料刚好有几片AD8544单电源供电、轨到轨输入输出、四路运放正好用一路做差分放大一路做参考电压缓冲顺手再用MATLAB把电路模型搭起来仿真验证了一遍。整套方案从选型、计算到仿真、调试走下来有不少值得记录的地方今天整理出来分享给同样在捣鼓运放的朋友。这个内容适合两类人看一类是刚开始接触运放、对差分转单端电路还比较懵的硬件工程师另一类是已经有电路基础但想在项目里快速确认方案可行性、不想反复打板试错的人。我会把电路设计里的关键计算、AD8544这颗料的选型逻辑、MATLAB仿真模型的搭建方法以及实际调试中踩过的坑都讲清楚。1. 为什么要把差分信号转成单端从传感器说起1.1 差分信号到底解决什么问题传感器输出的差分信号本质上是把有用信号放在两条线的电压差里而不是对地的绝对电压。比如一个典型的惠斯通电桥压力传感器输出就是VP和VN两根线满量程可能只有±10mV甚至更小。这种做法的好处很明显两条线受到的共模干扰比如工频噪声、地电位漂移基本上是一样的相减之后干扰被消掉剩下的是纯正的信号。但这也带来一个现实问题MCU的ADC输入范围通常只有0到参考电压比如0到3.3V它只能测量对地的单端电压。如果直接把VP和VN分别接两个ADC通道做减法不仅占通道还会因为两路采样不同步带来相位误差共模抑制能力也大打折扣。所以工程上普遍的做法是前端用运放把差分信号转成单端信号再加一级偏置把信号抬到ADC能采的范围内。1.2 差分转单端的几种常见路线差分转单端最直接的手段有三个方向集成仪表放大器、差分放大器、以及用普通运放搭差分放大电路。集成仪表放大器比如AD620、INA128内部集成了三个运放和精密电阻网络CMRR高、增益设置简单但成本相对高而且通常需要双电源或者勉强单电源工作静态功耗也不低。差分放大器比如INA132内部集成了匹配好的电阻使用最简单但增益基本都是固定的灵活性差一些。用普通运放搭差分放大电路最大的好处就是便宜、灵活、想怎么改增益就怎么改。缺点是对外部电阻的匹配度要求高电阻不匹配会直接拖垮CMRR。这次选的AD8544走的就是第三条路但是配合高精度电阻实测效果完全够用。2. AD8544选型逻辑以及为什么不用仪表放大器2.1 AD8544是什么水平的一颗运放AD8544是ADI亚德诺的一颗四路CMOS运算放大器单电源2.7V到5.5V供电也可以双电源±1.35V到±2.75V供电。我最看重它的三点第一轨到轨输入和输出。这意味着输入共模范围可以覆盖到电源轨输出也能非常接近电源轨。对于单电源系统来说这几乎决定了信号动态范围能不能用好。比如3.3V供电的系统普通运放输出最多到2.8V左右但AD8544可以拉到3.2V以上ADC满量程利用率高不少。第二单位增益带宽大约1MHz数据手册典型值约985kHz对于传感器信号这种低频应用完全够用。输入偏置电流是pA级别的典型值约1pA不会给高阻抗源带来明显负载误差。第三四路运放封装小、功耗低很适合便携设备。这次项目里四路运放只用两路一路做差分放大一路做参考电压缓冲器剩余两路留作以后扩展或者接成滤波器不用额外再加芯片。2.2 和集成仪表放大器比省在哪、亏在哪我最开始也考虑过直接用仪表放大器但算完账之后放弃了。下面这张表是我实际权衡时的记录对比项AD8544搭差分放大电路集成仪表放大器如AD620物料成本一片1块钱出头电阻几分钱十几块到几十块不等增益灵活性改两个电阻就行改一个电阻也行但范围有限静态功耗每路零点几毫安级别相对偏高电阻匹配要求需要0.1%~1%精度电阻内部已匹配好CMRR稳定CMRR上限受外部电阻匹配限制典型80~90dB以上封装占用四路运放一枚芯片搞定至少一枚芯片加增益电阻结论很直接如果追求极致共模抑制比、又不差钱选集成仪表放大器省心如果做消费级或工业级传感器采集信号源本身性能有限用普通运放配精密电阻完全够用。AD8544这样的四路运放性价比和灵活性是最大的优势尤其是信号链里还需要额外偏置、滤波功能的时候一颗芯片能省不少面积。3. 差分放大电路设计与参数计算3.1 电路结构单运放差分放大经典的差分放大电路结构其实很简单就是反相放大器叠加同相放大器用运放的虚短、虚断特性做到输出只跟两输入之差成正比。四个电阻的接法如下同相输入端VP经过R3接到地R4从输出反馈回同相输入端吗不对应该这样理顺反相输入端VN经过R1接到运放反相输入引脚R2从运放输出端反馈到反相输入引脚同相输入端VP经过R3接到运放同相输入引脚同相输入引脚经过R4接地。这样VN通过R1进入R2做反馈VP通过R3进入R4做接地匹配。当电阻取值满足R1 R3、R2 R4时输出为Vout (R2 / R1) × (VP - VN)也就是说增益只取决于R2/R1的比值与电阻绝对阻值无关。这里有一个特别容易忽略的点差分放大器的输入阻抗并不高。同相输入端的阻抗约等于R3 R4的一半准确说是R3因为同相端经R3到运放输入端再由R4到地反相输入端阻抗约等于R1。如果信号源内阻较高会造成增益误差和共模抑制比下降。因此R1到R4的阻值不能取太大但也不能太小否则会加重信号源负载。一般取10kΩ到100kΩ这个量级比较合适。3.2 增益、共模抑制比与电阻精度的三角关系这四个电阻看起来平平无奇其实整个电路的高频性能和共模抑制能力都压在它们身上。先算增益。在传感器信号是±10mV的情况下ADC参考电压3.3V如果要把信号放大到±1V左右比较合适增益就取100倍即R2/R1 100。比如R1 R3 10kΩR2 R4 1MΩ这样输入阻抗有10kΩ对大多数传感器输出级还能接受。再说共模抑制比CMRR。差分放大电路最理想的假设是四个电阻严格匹配但现实里的电阻都有误差。假设四个电阻的相对失配均为δ比如1%精度的电阻δ0.01那么电路整体CMRR的上限约为CMRR ≈ 20 × log10[(1 R2/R1) / (4δ)]代入实际数值算一下5%精度的普通电阻增益100CMRR ≈ 20 × log10[101 / (4×0.05)] ≈ 34dB1%精度电阻CMRR ≈ 20 × log10[101 / 0.04] ≈ 48dB0.1%精度电阻CMRR ≈ 20 × log10[101 / 0.004] ≈ 68dB这意味着如果传感器信号里混有共模噪声而电阻精度不够那共模噪声根本压不下去。我在项目里选的是0.1%精度薄膜电阻成本稍微高了一点但换来的是将近20dB的CMRR提升非常值得。另一个经验是四个电阻尽量用同一批次、同一种温漂系数的型号温度变化时它们的一致性会好很多。3.3 单电源偏置参考电压怎么取AD8544在单电源下工作输出只能在一端电源和另一端电源之间摆动。如果把输出直接接到ADC在输入为零时输出接近0V负半周的信号就没法表达了。所以单电源差分放大电路必须给输出端叠加一个直流偏置把交流信号抬到ADC量程中间。最常用的办法是用一个电阻分压器生成VCC/2再用运放跟随缓冲后接到差分电路的参考端。AD8544的四路运放正好剩下一路可以做这个跟随器。电路取值上分压电阻通常取两个10kΩ串联搭配一个0.1μF的旁路电容滤波。注意缓冲运放的输出端也需要一个10Ω左右的隔离电阻避免驱动容性负载时产生振荡。电阻分压加跟随器这个做法比直接拿DAC输出做偏置便宜也比直接用稳压管稳定。需要注意分压电阻的精度会影响偏置电压的准确度但对大多数采集系统来说1%精度已经足够如果要求更高可以把分压点接到外部精密基准电压源。4. MATLAB仿真先算准再动手4.1 仿真思路电路参数算完之后我先没有急着打板而是用MATLAB把整个放大链路仿真了一遍。这样做的目的有三个第一验证增益和带宽是否符合预期第二直观看到闭环频响和阶跃响应提前发现可能存在的振铃第三用脚本模拟不同电阻失配下的CMRR变化给电阻选型提供数据支撑。仿真模型不跑复杂的晶体管级Spice而是利用运放的宏观模型直流开环增益A0、单位增益带宽GBW、单极点滚降再加上外部反馈网络构建闭环传递函数。对于一个增益为G0的差分放大电路其噪声增益为NG 1 G0闭环-3dB带宽可以用GBW / NG来近似估算。这个公式在工程上非常实用能快速判断带宽够不够用。4.2 仿真代码下面这段代码是完整的MATLAB脚本在MATLAB R2019b之后的版本上都能直接运行。我直接把参数设置成项目里的实际值R1R310kΩR2R41MΩ增益100倍AD8544的GBW按1MHz估算。%% AD8544 差分信号转单端电路仿真 % 模型理想差分放大 一阶闭环传递函数近似 % 作者按实际项目参数整理可直接改参数复用 clear; clc; close all; % 1. 电路参数 R1 10e3; % 反相输入端电阻 R3 10e3; % 同相输入端电阻 R2 1e6; % 反馈电阻 R4 1e6; % 同相端接地匹配电阻 G0 R2 / R1; % 理想闭环增益 % 2. 运放参数AD8544典型值 GBW 1e6; % 单位增益带宽 约1MHz A0 1e5; % 直流开环增益 约100dB工程近似 % 3. 闭环带宽估算 NG 1 G0; % 噪声增益 f3dB GBW / NG; % 闭环-3dB带宽 fprintf(理想增益: %.1f dB\n, 20*log10(G0)); fprintf(闭环-3dB带宽: %.2f kHz\n, f3dB/1e3); % 4. 构建闭环传递函数一阶近似模型 s tf(s); H G0 / (1 s/(2*pi*f3dB)); % 5. 频响分析 figure; bode(H, {10, 5e6}); grid on; title(AD8544 差分放大电路闭环幅频/相频特性); % 6. 时域阶跃响应 figure; step(H); grid on; title([闭环阶跃响应, -3dB带宽 , num2str(f3dB/1e3, %.1f), kHz]); % 7. 差分正弦输入时域仿真 t 0:1e-7:3e-3; % 仿真时长3ms步长0.1us fin 1e3; % 输入信号频率1kHz vp 0.5*sin(2*pi*fin*t); % 同相端输入 vn -0.5*sin(2*pi*fin*t); % 反相端输入 vd vp - vn; % 差分输入 vo lsim(H, vd, t); % 计算输出 figure; plot(t*1000, vd, --, LineWidth, 1.2); hold on; plot(t*1000, vo, LineWidth, 1.5); xlabel(时间 (ms)); ylabel(电压 (V)); legend(差分输入, 输出, Location, best); title([1 kHz 差分正弦输入, 增益 , num2str(G0)]); grid on; % 8. 电阻失配与CMRR关系工程估算 delta [0.001, 0.005, 0.01, 0.05]; % 电阻相对失配0.1%, 0.5%, 1%, 5% CMRR 20*log10((1 G0) ./ (4*delta)); fprintf(\n电阻失配比例与等效CMRR上限\n); for i 1:length(delta) fprintf(失配 %5.2f%% - CMRR约 %6.1f dB\n, delta(i)*100, CMRR(i)); end4.3 结果怎么看跑完代码之后重点看三张图。第一张波特图低频段增益稳定在100倍40dB到接近10kHz的地方开始衰减-3dB点正好落在代码估算的9.9kHz附近。这说明用GBW/NG估算带宽的方法是可靠的。对于1kHz的传感器信号这个带宽富余量接近10倍相位偏移也很小不会造成明显失真。第二张阶跃响应输出能快速稳定到设定值没有明显的过冲和振荡说明相位裕度足够。如果在这张图里看到输出振荡很久才稳定就要检查是不是负载电容太大或者反馈电阻值过大与输入电容形成了额外的极点。第三张时域波形1kHz差分输入时输出完美复现了输入波形幅值放大100倍。这里要注意实际电路中AD8544的压摆率约0.92V/µs如果输入信号频率或幅值更高输出会以固定斜率爬升造成波形失真。用公式大致算一下最大输出摆幅下的全功率带宽BWp SR / (2π × Vpeak)。比如输出峰值1V时全功率带宽大约为0.92e6 / (2π × 1) ≈ 146kHz远高于我们的信号频率所以不用担心。5. PCB布局与上电调试5.1 布局走线仿真通过之后我画了一块测试板。总结下来差分放大电路的PCB布局比想象中更影响性能尤其是两个地方电阻对称性和反馈路径。四个增益电阻必须尽量靠近运放的输入引脚而且左右两路走线要等长、等宽尽量对称。我之前有一版布局为了走线方便把R1和R2放得很近R3和R4放得比较远结果实测CMRR比仿真差了不少后来重新对称布线才改善。反馈路径也要短。R2从输出端拉回反相输入端的走线不要走太长不要打过孔避免引入寄生电感。同时反馈电阻两端并联一个几pF的小电容可以用来抑制高频噪声但会限制带宽具体要不要加视信号频率而定。电源去耦电容一定不能省。AD8544的每个电源引脚都放一个0.1μF陶瓷电容就近放置到地。如果是单电源供电建议再并联一个10μF的钽电容或者电解电容防止电源线上的低频波动影响参考电压。5.2 调试记录上电调试的时候我遇到了两个印象很深的问题。第一个是输出出现约500kHz的振荡。用示波器看输出波形在信号上叠加了一个高频正弦。我检查了一圈最后发现是参考电压缓冲运放的输出直接接了一条长走线到差分电路参考端走线电容和运放输出阻抗形成了谐振。解决办法是在缓冲输出端串一个10Ω电阻再走线同时在差分运放参考端加一个0.1μF电容到地振荡立刻消失。第二个问题是低电平信号时输出有约20mV的直流偏置。排查下来是输入信号源的输出阻抗不对称导致的。差分源内阻不是零时它在四个电阻上产生的附加压降会破坏原来的平衡。我的处理方法是尽量让信号源两路内阻保持一致并在软件里做一次零点校准把剩余的偏置减掉。还有一个细节很容易踩坑如果传感器输出能力很弱千万不要让R1、R3取值太小否则运放的输入偏置电流虽然只有pA级但信号源要驱动的阻性负载反而会增大导致信号源输出电压被拉低。这个我在第一版用1kΩ电阻时试着测过信号跌幅明显换成10kΩ才恢复正常。6. 常见问题速查与自检清单6.1 问题速查表把这些年做运放电路遇到的问题整理成一张速查表方便以后快速定位故障现象可能原因排查与解决输出振荡反馈路径过长、寄生参数过多、参考端走线电容过大缩短反馈走线串10Ω电阻加0.1μF补偿电容输出偏置过大电阻失配、信号源内阻不对称、运放自身失调电压用0.1%精度电阻匹配源内阻做软件零点校准输出电压到不了满量程供电电压不足、输出非轨到轨、负载过重确认供电电压检查输出负载是否超过了运放驱动能力高频增益不够闭环带宽限制重新评估GBW与噪声增益或降低增益/选更高速运放共模噪声压不住电阻匹配度不够、布线不对称换高精度电阻对称布线必要时用屏蔽线/双绞线输出接近电源轨时失真压摆率受限或输出摆幅越过轨到轨范围降低信号幅值/频率或增加供电电压6.2 几个自检习惯调试差分运放电路我最后养成了三个自检习惯每次都帮我省了不少时间。第一个习惯上电前先用万用表量一遍输入、输出、电源对地有没有短路尤其是AD8544这种四运放引脚间距小焊接时很容易把相邻引脚短路。第二个习惯示波器表笔优先用10×探头档位不要用1×因为1×探头本身的输入电容大概在100pF左右接在放大电路输出端会影响高频相位尤其测振荡问题时会产生误判。第三个习惯每次改完电路参数先在MATLAB仿真脚本里把对应的电阻值改掉跑一遍确认理论值再动手去焊。看起来多花了几分钟实际上避免了大量反复焊接。写在最后差分转单端这个电路原理图很简单四个电阻一个运放但真正让它稳定工作需要理解背后一连串的权衡电阻精度决定CMRR上限闭环带宽取决于噪声增益偏置电压的干净程度直接影响动态范围。我个人的建议是遇到这类信号调理问题不要急着画板先花半小时把参数算清楚再用MATLAB把模型跑一遍最后动手焊效率会高很多。如果你手头也有类似AD8544的轨到轨运放不妨把上面的脚本改改参数跑一下频响和阶跃响应体会一下增益和带宽的取舍关系。这个感受比单纯看公式来得直接得多也能帮你更快建立对运放电路的直觉。
上一篇/下一篇内容由系统自动关联
返回资讯列表 →