ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

AD8544运放差分转单端电路设计与MATLAB仿真验证

AD8544运放差分转单端电路设计与MATLAB仿真验证 差分信号转单端这件事说简单也简单一个运放加四颗电阻就能跑说难也难难在你得同时把共模抑制、增益误差、噪声和ADC输入匹配这几件事都照顾到。我最近在做一个传感器前端的小项目传感器输出是差分信号后级ADC只吃单端输入中间就得靠运放来做转换。选来选去用了AD8544这颗四通道轨到轨CMOS运放配合MATLAB做了一轮仿真验证实测下来效果挺稳。这篇就把整个设计过程拆开讲清楚包括为什么选差分转单端而不是直接单端放大、AD8544这颗片子适合什么场景、电阻怎么配、MATLAB仿真代码怎么写、实测中遇到哪些坑。1. 差分信号转单端到底在解决什么问题1.1 差分信号的优势与后级单端ADC的矛盾差分信号在传感器和信号链前端非常常见原因很直接两根线一起走外界耦合进来的共模噪声在接收端做差之后就抵消掉了。像应变片电桥、霍尔传感器、电流采样电阻两端、雷达中频输出这些场景天然就是差分输出。差分传输还有一个好处是动态范围翻倍同样供电电压下差分摆幅是单端的两倍等效信噪比能多出6dB。但问题在于很多MCU内置的ADC或者外置低速ADC都是单端输入。你不可能为了一个差分传感器就换一颗全差分ADC成本上不划算。这时候就需要在中间加一级差分转单端电路把差分信号变成以某个参考电平为中心的单端信号再送给ADC采样。这里有个容易混淆的点差分转单端不是简单地把负端接地。如果你直接把差分负端接地、正端接运放同相端那共模噪声一点没抑制差分信号的优势全丢了。正确的做法是用一个差分放大器结构让运放同时看到正负两端的差值输出只跟差值有关跟共模无关。1.2 三种常见实现方案的取舍实际工程里差分转单端有三条路可走。第一条是用集成差分放大器比如INA系列或者AD8xxx系列外围电阻集成在里面匹配度高但价格贵、增益固定或者需要外接电阻。第二条是用全差分运放加变压器或者巴伦适合高频场景但低频和直流就无能为力了。第三条就是用普通运放搭四电阻差分放大器成本最低、灵活性最高缺点是电阻匹配要求高CMRR直接受电阻精度限制。我这次选的是第三条路原因有三个一是信号带宽不高传感器输出有效带宽在10kHz以内普通运放完全够用二是需要直流耦合传感器有直流偏置变压器方案直接排除三是成本敏感四电阻方案BOM成本能控制在两块钱以内。AD8544正好是四通道一颗片子能同时处理两路差分信号还能留两路做滤波或者缓冲布局上很省事。1.3 AD8544这颗片子的定位与关键参数AD8544是ADI的一款四通道CMOS轨到轨输入输出运放单电源供电范围2.7V到5.5V增益带宽积1MHz压摆率0.92V/μs输入偏置电流典型值1pA输入失调电压典型值1mV。这几个参数决定了它的适用边界。1MHz的增益带宽积意味着如果你做10倍增益闭环带宽只有100kHz做100倍增益就只剩10kHz。所以AD8544适合低频、中等增益的场景不适合宽带放大。1pA的偏置电流是CMOS输入级的典型优势配合高阻传感器比如兆欧级电桥时不会引入额外误差。1mV的失调电压在12位ADC系统里对应约1LSB的误差5V满量程时1LSB约1.22mV基本可以接受但如果做16位以上系统就需要考虑调零或者选更低失调的型号。轨到轨输入输出这个特性很关键。单电源5V供电时输入共模范围能到0V和5V附近输出也能摆到接近0V和5V这样ADC的0到5V输入范围能被充分利用不会浪费动态范围。相比之下很多老运放输入共模范围离电源轨还有1.5V以上单电源低压场景根本没法用。2. 四电阻差分放大器的增益与共模抑制推导2.1 电路拓扑与输出电压公式经典的四电阻差分放大器结构是这样的运放同相端接一个分压网络R3接差分正输入R4接参考电平反相端接R1接差分负输入和反馈电阻R2接输出。当R1R3且R2R4时电路就是一个标准差分放大器。输出电压公式为Vout (R2/R1) × (Vp - Vn) Vref其中Vp是差分正输入Vn是差分负输入Vref是加到R4那端的参考电平。如果R4那端接地Vref就是0输出就是纯差分信号乘以增益。如果R4那端接一个2.5V参考输出就以2.5V为中心摆动适合单电源ADC采样。这个公式成立的前提是电阻严格匹配。一旦R1/R2和R3/R4的比例不一致共模信号就会泄漏到输出CMRR急剧下降。这是四电阻方案最大的痛点也是后面要重点处理的地方。2.2 电阻失配对CMRR的影响量化假设电阻有1%的误差最坏情况下CMRR能掉到多少这里有个近似公式CMRR ≈ (1 R2/R1) / (4 × 电阻容差)如果增益是10倍R2/R110电阻容差1%那CMRR ≈ 11 / 0.04 275约48.8dB。如果容差降到0.1%CMRR能到68.8dB。如果容差是0.01%CMRR能到88.8dB。这个数字很说明问题。用普通1%精度的电阻CMRR只有不到50dB意味着共模噪声只能被抑制300倍左右。如果传感器共模上有1V的工频干扰输出端会残留约3.6mV的干扰在12位ADC上就是3个LSB的跳动对于精密测量来说是不能接受的。所以四电阻方案要么用0.1%精度的电阻成本上升但可控要么用集成电阻网络匹配度能到0.01%要么在PCB布局上做文章比如用同一批次电阻、对称布局、加微调电位器。我这次用的是0.1%精度的0805贴片电阻实测CMRR在65dB左右满足12位系统的需求。2.3 参考电平的选取与单电源偏置设计单电源供电时运放输出不能低于0V也不能高于VCC所以差分信号必须被抬升到一个中间电平上通常是VCC/2。这样正负摆幅都有空间不会削顶。参考电平的获取有两种方式。一种是用电阻分压从VCC取一半加一个电容滤波。这种方式简单但输出阻抗高受负载影响大而且分压电阻的噪声会直接进入信号链。另一种是用专门的基准芯片比如REF5025输出2.5V精度高、噪声低、输出阻抗小但多一颗芯片多一份成本。我这次用的是分压加缓冲的方案用两颗10k电阻从5V分压得到2.5V再用AD8544剩下的一个通道做电压跟随器输出低阻抗的2.5V参考。这样既省了基准芯片的钱又保证了参考电平的驱动能力。分压电阻上并联一个10μF和一个100nF电容把噪声滤掉。这里有个细节要注意电压跟随器的输出直接接到R4那端但R4和R3构成的分压网络会从跟随器输出抽取电流。如果跟随器输出阻抗不够低参考电平会被拉偏。AD8544在5V供电下输出阻抗在闭环时只有几毫欧带10k级别的负载完全没问题。3. AD8544外围电路参数计算与选型3.1 增益电阻的取值与噪声权衡增益设定为10倍差分输入范围是±200mV输出摆幅±2V加上2.5V偏置后输出在0.5V到4.5V之间正好落在ADC的0到5V输入范围内留了0.5V余量。电阻取值要考虑几个因素。阻值太小运放输出要驱动大电流增加功耗和失真阻值太大电阻热噪声增加而且运放输入偏置电流在电阻上产生的误差电压也会变大。AD8544偏置电流只有1pA即使电阻取到1M误差也只有1μV可以忽略。但热噪声是白噪声电阻越大噪声越大。热噪声公式是Vn √(4kTRB)其中k是玻尔兹曼常数T是绝对温度R是电阻值B是带宽。假设带宽10kHzR取10k噪声约1.3μVR取100k噪声约4μV。对于12位系统1LSB是1.22mV这点噪声完全不是问题。所以电阻取值主要看功耗和运放驱动能力。我最终选R1R310kR2R4100k增益10倍。这个组合下运放输出电流最大约(4.5V-2.5V)/100k20μA非常轻松。电阻功耗也很小10k上最大压降200mV功耗4μW完全不用考虑。3.2 反馈电容与带宽限制反馈电阻R2上并联一个小电容Cf和R2构成低通滤波器截止频率f 1/(2πR2Cf)。这个电容有两个作用一是限制高频噪声防止ADC采样时混叠二是补偿运放输入电容引起的相位裕度下降防止振荡。AD8544的输入电容典型值约3pF加上PCB走线电容约2pF总共5pF。这个电容和R1、R3并联会在环路里引入一个极点。如果反馈电容不够大环路相位裕度会下降阶跃响应出现振铃。经验公式是Cf ≥ 2 × Cin × (R1/R2)这里Cin5pFR1/R20.1算出来Cf ≥ 1pF。实际取10pF截止频率f 1/(2π×100k×10p) 159kHz远高于信号带宽10kHz不会影响有用信号同时把高频噪声压下去了。这里有个坑如果Cf取太大比如100pF截止频率降到16kHz虽然还是高于10kHz但相位裕度会变得很大响应变慢。如果Cf取太小比如1pF和PCB寄生电容一个量级实际值不可控可能起不到补偿作用。10pF是个比较稳妥的中间值。3.3 电源去耦与PCB布局要点AD8544是四通道运放电源引脚在芯片中间去耦电容要尽量靠近引脚。我用了两颗100nF的0402电容分别放在VCC和GND引脚旁边距离不超过2mm。另外在电源入口处放了一颗10μF的钽电容做低频储能。PCB布局上差分输入的两根线要等长、靠近、同层走最好用地线包起来。反馈电阻R2和R1要靠近运放反相输入端走线尽量短减少寄生电容。参考电平的走线要远离高频信号避免耦合。还有一个容易忽略的点AD8544是CMOS输入输入阻抗极高对静电很敏感。焊接时要用防静电烙铁调试时不要用手直接摸输入引脚。我有个同事就是因为手摸了一下输入脚运放输入级击穿输出直接饱和到电源轨查了半天才发现是静电打坏了。4. MATLAB仿真验证与代码实现4.1 差分放大器传递函数的建模思路MATLAB仿真不是为了替代实际电路而是为了在焊板子之前验证参数选得对不对。我建的是一个行为级模型不考虑运放的频率响应和压摆率只验证电阻网络和增益、共模抑制的关系。模型的核心是理想运放加电阻网络。用传递函数表示的话差分放大器的输出是Vout(s) [R2/(R1R2)] × [1 R3/R4] × Vp(s) - (R2/R1) × Vn(s) Vref当R1R3、R2R4时简化为Vout (R2/R1)(Vp-Vn) Vref。如果电阻不匹配比如R1有误差ΔR1那共模增益就不再是零可以算出CMRR。仿真时我扫了三组电阻容差0%、0.1%、1%分别看输出端的共模残留。结果和理论计算吻合0.1%容差下CMRR约66dB1%容差下约48dB。这个结果直接决定了我要用0.1%精度的电阻。4.2 完整MATLAB仿真代码与注释下面是我实际用的仿真代码可以直接复制到MATLAB里跑。代码分三部分参数定义、传递函数构建、频域和时域仿真。% 差分转单端放大器仿真 % AD8544 四电阻网络 clear; clc; close all; %% 1. 参数定义 R1 10e3; % 反相端输入电阻 R2 100e3; % 反馈电阻 R3 10e3; % 同相端输入电阻 R4 100e3; % 同相端参考电阻 Vref 2.5; % 参考电平 Vcc 5; % 供电电压 % 电阻容差扫描 tolerance [0, 0.001, 0.01]; % 0%, 0.1%, 1% colors {b, r, g}; %% 2. 频域仿真共模抑制比 f logspace(0, 5, 1000); % 1Hz到100kHz w 2*pi*f; figure(1); for i 1:length(tolerance) tol tolerance(i); % 最坏情况R1偏大R2偏小R3偏小R4偏大 R1e R1 * (1 tol); R2e R2 * (1 - tol); R3e R3 * (1 - tol); R4e R4 * (1 tol); % 差模增益 Adm R2e / R1e; % 共模增益近似 Acm (R2e/(R1eR2e)) * (1 R3e/R4e) - R2e/R1e; % 共模抑制比 CMRR 20*log10(abs(Adm / Acm)); % 画图 semilogx(f, CMRR*ones(size(f)), colors{i}, LineWidth, 1.5); hold on; fprintf(容差 %.1f%%: 差模增益%.2f, CMRR%.1f dB\n, ... tol*100, Adm, CMRR); end grid on; xlabel(频率 (Hz)); ylabel(CMRR (dB)); title(不同电阻容差下的共模抑制比); legend(0%, 0.1%, 1%, Location, best); %% 3. 时域仿真差分信号转单端 fs 1e6; % 采样率1MHz t 0:1/fs:0.01; % 10ms时长 f_sig 1e3; % 信号频率1kHz % 差分信号正负端反相共模2.5V Vcm 2.5; Vdiff 0.2; % 差分幅度200mV Vp Vcm Vdiff/2 * sin(2*pi*f_sig*t); Vn Vcm - Vdiff/2 * sin(2*pi*f_sig*t); % 加入共模干扰50Hz工频幅度1V Vcm_noise 1.0 * sin(2*pi*50*t); Vp_noise Vp Vcm_noise; Vn_noise Vn Vcm_noise; % 理想输出 Vout_ideal (R2/R1) * (Vp - Vn) Vref; % 实际输出考虑0.1%容差 tol 0.001; R1e R1 * (1 tol); R2e R2 * (1 - tol); R3e R3 * (1 - tol); R4e R4 * (1 tol); Vout_real (R2e/R1e) * Vn_noise * (-1) ... (R2e/(R1eR2e)) * (1 R3e/R4e) * Vp_noise ... Vref * (R2e/(R1eR2e)) * (1 R3e/R4e); figure(2); subplot(3,1,1); plot(t*1000, Vp_noise, b, t*1000, Vn_noise, r); xlabel(时间 (ms)); ylabel(电压 (V)); title(差分输入含1V共模干扰); legend(Vp, Vn); grid on; subplot(3,1,2); plot(t*1000, Vout_ideal, b); xlabel(时间 (ms)); ylabel(电压 (V)); title(理想单端输出); grid on; subplot(3,1,3); plot(t*1000, Vout_real, r); xlabel(时间 (ms)); ylabel(电压 (V)); title(实际输出0.1%电阻容差); grid on; %% 4. 误差分析 error Vout_real - Vout_ideal; fprintf(\n最大误差: %.2f mV\n, max(abs(error))*1000); fprintf(误差占满量程比例: %.4f%%\n, max(abs(error))/Vcc*100);跑完这段代码你会看到三张图。第一张是CMRR随容差变化的柱状对比第二张是时域波形第三张是误差曲线。0.1%容差下最大误差约2mV占5V满量程的0.04%对12位ADC来说不到2个LSB可以接受。4.3 仿真结果解读与实测对比仿真里我特意加了1V的50Hz共模干扰模拟工业现场的工频耦合。理想情况下输出应该完全看不到50Hz成分实际0.1%容差下输出端残留约1.5mV的50Hz纹波。这个残留量在示波器上勉强能看到但ADC采样后做数字滤波可以进一步压下去。实测结果和仿真有偏差主要来自三个方面。一是运放本身的CMRR有限AD8544的CMRR典型值80dB比电阻失配限制的66dB要好所以电阻是瓶颈。二是PCB寄生参数实际走线电容和电阻焊盘电容会让高频响应和仿真不一样。三是电源噪声仿真里电源是理想的实际5V电源上有几十毫伏的开关纹波会通过运放电源抑制比耦合到输出。实测CMRR约62dB比仿真低4dB主要就是电源和布局的影响。这个差距在可接受范围内说明仿真模型基本靠谱。5. 实测中踩过的坑与排查过程5.1 输出直流偏置偏离2.5V的问题第一版板子焊好之后上电测输出发现直流偏置不是2.5V而是2.8V偏了300mV。这个偏差远超电阻容差和运放失调能解释的范围肯定有问题。排查过程是这样的。先测参考电平用万用表量电压跟随器输出是2.5V没错。再测运放同相端电压发现是2.52V也正常。然后测反相端电压应该是2.5V实际是2.48V。两端差40mV但输出偏了300mV说明增益不止10倍或者有额外电流流入反馈网络。后来发现是反馈电阻R2焊错了焊成了1M而不是100k。1M和10k组合增益是100倍输入失调电压1mV被放大100倍就是100mV加上偏置网络的误差总共300mV就对上了。换回100k之后偏置回到2.5V附近偏差在10mV以内。这个坑提醒我焊完板子第一件事不是上电测波形而是先用万用表量一遍关键节点的直流电压确认静态工作点正常。静态工作点不对后面所有测量都是白搭。5.2 高频自激振荡的定位与消除第二版板子改了布局把反馈电阻靠近运放放置结果上电后用示波器看输出发现叠加了约5MHz的正弦振荡幅度200mV。这是典型的运放自激。自激的原因通常是环路相位裕度不足。AD8544的增益带宽积1MHz闭环增益10倍时带宽100kHz理论上5MHz处环路增益已经远小于1不应该振荡。但实际电路中输出端到输入端的寄生电容比如示波器探头电容、PCB走线电容会在高频形成反馈通路加上运放输出阻抗和负载电容构成的极点相位裕度就没了。解决办法是在反馈电阻上并联电容Cf。我先试了10pF振荡幅度降到50mV还有残留。加到22pF振荡完全消失。但22pF对应的截止频率是72kHz对10kHz信号有轻微衰减。最后折中取15pF截止频率106kHz振荡抑制到10mV以下信号衰减不到0.5%。这里有个经验调试自激时先用大电容比如100pF确认振荡能压下去再逐步减小到刚好不振荡的值留一倍余量。不要一上来就试小电容可能反复振荡浪费时间。5.3 共模干扰残留超标的整改第三版板子CMRR实测只有55dB比预期的62dB差了不少。用频谱分析仪看输出50Hz和150Hz的工频谐波很明显。排查发现两个问题。一是差分输入的两根线没有等长正端比负端长了8mm在50Hz下相位差可以忽略但在高频段会引入相位失配降低CMRR。二是参考电平的走线从差分输入下方穿过耦合了共模干扰。整改措施重新布线差分对严格等长误差控制在1mm以内参考电平走线改到板子另一侧用地线隔离在差分输入前端加一颗共模扼流圈对50Hz阻抗很小对高频共模噪声阻抗很大。整改后CMRR回到61dB基本达到设计目标。6. 从仿真到量产的设计检查清单6.1 电阻选型与匹配的实操建议电阻选型不是越贵越好要看系统需求。12位ADC系统CMRR要求60dB以上0.1%精度电阻足够。16位系统CMRR要求80dB以上要么用0.01%电阻要么用集成电阻网络要么做数字校准。买电阻时要注意温度系数。普通厚膜电阻温漂100ppm/°C四颗电阻如果温漂不一致温度变化时CMRR会漂移。薄膜电阻温漂25ppm/°C匹配更好。如果工作温度范围宽建议用薄膜电阻或者排阻同一基板上四颗电阻温漂一致性好。排阻是个好选择比如4×10k的排阻四颗电阻在同一硅片上匹配度能到0.01%温漂一致。缺点是阻值固定增益不能灵活调整。如果增益需要可调可以用排阻加微调电位器但电位器本身温漂大会引入新的失配。6.2 运放选型的边界条件复核AD8544适合低频、中等增益、单电源、成本敏感的场景。如果信号带宽超过100kHz或者增益超过100倍就要考虑更高增益带宽积的运放比如AD8604GBW8MHz或者OPA4340GBW5.5MHz。如果系统对失调电压要求高比如16位以上AD8544的1mV失调就不够了要选失调在100μV以下的型号比如OPA333失调10μV或者AD8638失调5μV。但这些型号价格会贵不少要权衡。如果传感器输出阻抗很高比如兆欧级要关注运放输入偏置电流。AD8544的1pA偏置电流在1M电阻上产生1μV误差可以忽略。但如果用双极型运放偏置电流可能到nA级在1M电阻上就是mV级误差直接吃掉精度。6.3 量产测试与校准的落地方法小批量生产时每块板子都要测CMRR和增益。测试方法很简单输入端加一个已知的共模信号比如1V直流或者50Hz交流测输出端的残留算出CMRR。增益测试就是加已知差分信号测输出幅度。如果发现CMRR不达标先检查电阻焊接有没有虚焊、错焊再检查PCB布局有没有明显问题。如果都正常但CMRR还是低可能是运放本身的问题换一颗试试。对于高精度系统可以在出厂前做一次数字校准。给输入端加两个已知的差分电压记录ADC读数算出实际增益和偏置把校准系数存到MCU的Flash里。这样即使模拟电路有偏差数字端也能修正回来。校准点的选择要覆盖整个输入范围至少取三个点负满量程、零点、正满量程。我个人在实际操作中的体会是差分转单端这个电路看起来简单但每一个电阻、每一个电容、每一根走线都会影响最终性能。仿真能帮你把大方向定下来但真正的功夫在PCB布局和调试上。AD8544这颗片子性价比很高只要把电阻匹配和电源去耦做好12位系统的精度完全能hold住。如果你也在做类似的项目建议先用MATLAB把参数扫一遍心里有数了再动手焊板子能省不少返工的时间。
返回列表