1. 开篇为什么要在LTSpice里区分差模和共模用LTSpice做AC扫描这件事本身不难选难的是怎么让仿真结果对应到实际电路里的真实诉求。尤其在电源、信号链、通信接口这些方向差模和共模几乎是每天都在打交道的一对概念。差模是我们要的信号本身共模则往往是干扰或偏置的产物二者的频率特性和增益特性常常是设计验证的重点。很多人习惯直接搭电路随便跑个AC曲线看到结果却分不清哪条是差模增益哪条是共模增益最后只能靠猜。我最早接触LTSpice AC扫描用来分析差模共模是在调试一款运放输入级的共模抑制比CMRR时留下的习惯。当时手边没有网分也没有昂贵的差分探头却在LTSpice里搭了个简单差分对用AC分析跑通了共模增益和差模增益的完整曲线。从那以后只要涉及差分结构、共模噪声抑制、电流检测电路我都会先开LTSpice把AC曲线拉出来结合扫描结果反推电路参数是否合理。这个过程看似基础但里面的门道不少尤其是激励怎么给、测量点怎么取、结果怎么解读每步都有坑。这篇博文就专门聊LTSpice的AC扫描如何用于差模和共模的分析。内容包括基本概念、测量电路的建模思路、仿真参数设置、曲线解读以及我踩过的坑。无论你是做电源的、做传感器调理的还是做接口保护的都能在这套方法里找到一个可直接套用的模板。我会尽量把每一步都写清楚让完全没接触过AC分析的人也能复现出同样结果。2. 先搞清楚差模共模的本质再谈怎么测2.1 共模和差模其实是“观察口径”很多人一开始搞混差模和共模是因为把这两个词当成物理存在的两种信号。实际上差模和共模只是对同一组导线或同一对端子上电压状态的两种观察视角。拿一对信号线来说设A点的电压是VAB点的电压是VB那么差模电压Vdm VA - VB共模电压Vcm (VA VB) / 2反过来从差模共模反推两个端点电压就是VA Vcm Vdm/2VB Vcm - Vdm/2。这是最最基本的变换关系也是后续所有分析的基石。所谓差模信号是让两条线之间产生压差的成分而共模信号是让两条线同时相对于参考地变化的部分。这个变换在电路分析中有个非常重要的作用它能帮我们把一个双端系统拆成两个独立的一端口网络来分析只要系统是线性的。差模激励下看的是差模增益共模激励下看的是共模增益而最终输出端的差模电压往往是两个分量各自贡献的叠加。这在AC扫描中尤其方便因为交流小信号分析本身就是线性分析完全符合叠加原理的前提。2.2 为什么CMRR那么依赖AC响应共模抑制比CMRR的定义是差模增益与共模增益之比通常用分贝表示。理想情况下一个差分放大器只放大差模信号对共模信号完全无感也就是共模增益为0CMRR无穷大。但实际电路总会有不对称有寄生电容有偏置电阻的误差这些都会造成共模信号在输出端产生残余分量。低频时候CMRR主要受电阻匹配、运放本身的直流共模抑制能力影响一上高频寄生电容和运放内部极点的作用开始显现共模增益会抬头CMRR就明显恶化。这恰恰是AC扫描能发挥价值的地方——它能在几十赫兹到几百兆赫兹的频率范围内一次性把差模增益和共模增益的频响都画出来让CMRR随频率的变化一目了然。只用直流分析或者手算根本得不到这样直观的结论。2.3 LTSpice AC扫描和时域仿真有什么不一样LTSpice里的AC分析本质是小信号线性频域分析。它先求直流工作点把非线性元件在直流工作点附近线性化然后对电路施加不同频率的正弦小信号激励计算每个频率点上的复数增益。整个过程不需要真正做瞬态迭代速度快、精度高特别适合看放大器频响、滤波器特性、环路稳定性这些场景。理解这一点对差模共模分析特别重要。因为AC分析是线性的它天然符合叠加定理所以我们可以在一种激励形式下单独提取差模响应在另一种激励形式下单独提取共模响应。如果换成瞬态仿真你得来回切换信号源还得等波形稳定处理起来麻烦得多。当然AC分析也有代价它看不到大信号非线性效应也看不到饱和、压摆率限制等问题这些问题得另开瞬态仿真去验证。但就频率特性分析而言AC扫描绝对是首选工具。3. LTSpice里创造差模和共模激励的方法做差模共模AC分析第一步要解决的是怎么把激励信号构造出来。我试过三种办法各有利弊按场景选就行。3.1 方法一用两个独立源手动组合最基本的做法是放置两个交流电压源分别接到差分输入端子的两个节点然后手动设置两个源的幅值和相位。差模激励下两个源设置成幅度相同、相位相反。比如VA源设置为AC幅度1相位180度即-1VB源设置为AC幅度1相位0度。共模激励下两个源设置成幅度相同、相位也相同比如VA和VB都是AC幅度1相位0。这个方法手动搭建很直观适合快速验证。但它有个毛病你得在两种激励之间来回改参数改的时候容易忘掉其中一个源造成测量口径不一致。我第一次做CMRR的AC扫描就吃过这个亏改完差模曲线忘了改回共模源跑出来的共模曲线其实还是差模激励下的结果白白浪费了半个下午。3.2 方法二用行为源B1自动计算如果做的是一对端口的抽象模型不需要真的画一对输入引脚可以更优雅地用一个行为电压源直接构造激励表达式。比如把VA设成V10.5*sin(2*pi*1k*time)这种做法在瞬态下有用但AC分析下不好这么干因为AC分析是在每个频率点上单独解的。更合理的做法是在AC扫描里用一个交流源V1作为激励基础然后用两个受控源将共模或差模分量分别映射到对应的输入引脚上。例如用E元件做减法或加法运算E1的输出等于V()和V(-)的平均值E2的输出等于两者之差。这样切换到不同模式时只要改变源的定义不需要动结构。3.3 方法三直接利用LTSpice的AC幅度/相位参数这是我现在最推荐的方式。在LTSpice的独立电压源设置里有一个“AC Amplitude”和“AC Phase”字段这个字段是专门给AC分析用的。在差模/共模分析中我们可以充分利用AC Phase参数差模激励VA设为AC Amplitude1, AC Phase0VB设为AC Amplitude1, AC Phase180。这样实际对应的就是VA 1ej0VB -1ej0两者的差为2共模为0。共模激励VA和VB都设为AC Amplitude1, AC Phase0。这样差模为0共模为1。用这个方法电路的物理结构完全不用动需要测哪种模只需批量改一下源的参数。最关键的是相位选项允许我们不用负幅值来表达反相习惯上更容易看懂。我在实际项目中一直用这个办法配合LTSpice的.step指令还能一步跑出“差模响应”和“共模响应”两组曲线。3.4 一个更高级的思路用叠加直接算CMRR如果你不满足于只看到差模增益和共模增益两条曲线还想直接得到CMRR曲线可以用受控源来计算。具体做法是先画出包含E元件的差分放大器模型然后定义两个输出节点。比如用一个压控电压源E1输出差模增益结果E1以两个输入端电压之差作为控制输入增益系数为Ad。再用一个E2以共模输入作为控制输入增益为Ac。然后在输出端用E3把两者做除法——不过LTSpice的AC分析本身不做除法测量需要用波形运算功能或.meas指令来实现。实际跑出来的CMRR可以直接在波形窗口里输入V(out_dm)/V(out_cm)得到。我自己的习惯是整个电路图里只保留一套激励源和一套测量节点通过.step参数来切换差模/共模激励。这样既保留了波形窗口里能同时看到两组响应的便利又避免了重复画两张图带来的维护负担。后面在讲仿真配置时我会给出具体的指令写法。4. AC扫描指令设置与参数选择的细节4.1 AC扫描命令的基本语法LTSpice的AC扫描是通过在原理图上放置一个.ac指令来控制的。放置方法是点击菜单“Edit”–“SPICE Directive”或者直接快捷键“S”输入类似下面的命令.ac dec 100 10 100Meg这条命令的意思是以十倍频程为步长单位每十倍频程取100个点扫描范围从10Hz到100MHz。LTSpice支持三类扫描方式线性lin、倍频程oct和十倍频程dec。对于宽频带的差模共模分析我用得最多的是dec因为频率覆盖范围大高频多一些低频少一些也能跑得足够细。如果只关心很窄的频段比如开关电源的100k到1M用lin扫描均匀性更好。在实际操作中每十倍频程的点数设多少合适我的建议是看你要留多细的毛刺。如果是简单的一阶二阶RC网络20~50个点/十倍频程已经够了如果是高阶滤波器或者有多个谐振峰的电路建议100个点/十倍频程不然峰值幅度会被低估。这个原则对差模共模分析同样适用尤其是共模增益曲线里的高频尖峰稍不注意就会因为步长太粗而漏掉。4.2 扫描范围怎么选扫描范围的设置要结合被分析电路的频率范围来定不是越宽越好太宽了反而会在低频段浪费计算资源高频段又可能因为模型精度问题出现虚假曲线。我的习惯是先看电路的工作频带再做延伸。如果是运放差分放大电路工作频带一般在几Hz到几MHzAC扫描范围取1Hz到10MHz或者20MHz就够了。如果是EMI滤波器或共模电感模型频率要覆盖开关谐波的高次分量通常取10Hz到30MHz必要时扩展到100MHz。如果是在分析高速接口或射频前端差分结构那就直接从100kHz附近扫到3GHz左右但要注意LTSpice里寄生参数和运放模型的有效范围超出模型标称频率的结果基本没参考价值。对于差模共模对比分析我强烈建议两次扫描用完全相同的频率范围和步长否则两条曲线放在一起对比时视觉上的差异可能只是采样密度造成的假象。这一点看似微不足道但真的能误导判断。4.3 直流工作点问题AC分析的第一步是求直流工作点。直流工作点不对后面所有频域结果都是空中楼阁。做差模共模仿真时最常犯的错误是输入端没有直流路径或者直流偏置点处于模棱两可状态。具体来说如果一个节点只通过电容连接到地或者连接到一个浮空电压源LTSpice在求直流工作点时可能报错“singular matrix”或者给出一堆奇怪的初值。解决办法是给源加直流偏置或者在输入节点与地之间放置一个高阻值电阻比如1MΩ。在很多仿真模板里我习惯在输入偏置上放一个R100Meg的大电阻只为建立直流工作点对交流特性影响可以忽略。另外注意AC信号源的直流电平设置。LTSpice中电压源的“DC offset”和“AC Amplitude”是两回事。AC Amplitude只影响AC分析的激励幅度DC offset只影响直流工作点。做AC分析时把DC offset设成实际电路的工作共模电压即可AC Amplitude设成1V或1mV取决于你要不要看增益倍数。我通常设成1V这样输出曲线直接就是增益值不用再做归一化。4.4 步进仿真step让差模共模一次跑完LTSpice的.step指令配合AC扫描可以在一次仿真里跑完多个参数组合。这对差模共模分析非常实用——把差模和共模定义为同一个参数的两个值一次跑完然后波形窗口里用颜色区分即可。实现方式是先在原理图中定义一个参数mode然后用条件表达式设置源的AC相移。例如.param mode1 .step param mode list 1 2源VA的AC Phase设为0源VB的AC Phase设为if(mode1,0,180)。这样mode1时两个源同相是共模激励mode2时两个源反相是差模激励。跑完AC分析后波形图上会同时出现两条对应曲线。这种写法的好处不言而喻一次操作就能得到完整的数据集不用中途改电路、换配置避免了漏改或改错的隐患。5. 一个完整的差模共模AC分析仿真案例5.1 电路模型说明为了把前面这些理论落到实处我搭一个经典的长尾差分放大电路做演示。这个结构虽然是教科书级的但它的差模共模特性非常典型适合用来展示AC扫描的分析技巧。电路结构如下输入端V1接信号源VA输入端V1-接信号源VB。两个输入各串一个10kΩ电阻到运放或差分对管的输入端。运放或三极管对的输出端和反相端通过反馈电阻连接构成典型的差分放大。尾电流源用理想电流源I12mA替代或者用一个到负电源的大电阻模拟长尾。在实际LTSpice操作中为了快速验证我会用一个理想化的运算放大器宏模型比如LTC1050或LT1490都行代替分立三极管对。这样做的好处是模型收敛快结果也更容易解释坏处是宏模型把管级细节屏蔽了如果你要分析的是三极管失配造成的CMRR恶化就得老实搭全分立电路。5.2 激励源的设置细节以模式切换法为例。在原理图里放两个电压源VA节点名VinADC offset设为0AC Amplitude设为1AC Phase设为{phase}。VB节点名VinBDC offset设为0AC Amplitude设为1AC Phase设为{phase2}。然后放置SPICE指令.param phase0 .param phase20 .step param mode list 1 2同时在VB源里把phase2定义为if(mode2,180,0)。这样mode1时两个源同相系统响应等效于共模激励mode2时两个源反相系统响应等效于差模激励。有一点要注意AC Phase这个参数的单位是度还是弧度LTSpice默认是度。用180表示反相即相位差一半周期这在交流相量分析里是合理的。但是如果后续用.meas提取相位曲线要留意相位输出的模二差180度跳变可能会被显示成“-180”不影响最终结果但看起来会有点迷惑。5.3 仿真命令和输出测量我完整的仿真指令通常长这样.ac dec 100 10 10Meg .step param mode list 1 2 .meas AC diff_gain MAX mag(V(out))-mag(V(in_dm)) .meas AC common_gain MAX mag(V(out))-mag(V(in_cm))当然.meas语句里直接用电压相量做加减也可以比如测量差模输入电压.meas AC input_dm MAX mag(V(VinA)-V(VinB))然后用波形窗口直接观察输出曲线。如果是想得到CMRR的频率特性曲线最简单的方式是在波形窗口添加一个自定义表达式V(out_dm)/V(out_cm)前提是输出端有两个节点分别代表差模输出和共模输出。如果只有一个输出节点那就需要分开两次仿真或者分别记录两组AC曲线数据再用外部计算工具合成CMRR曲线。我用过的简化办法是直接看两条增益曲线之间的距离因为都是dB刻度差模增益曲线减去共模增益曲线的纵坐标差就是CMRR。5.4 结果曲线应该长什么样正常情况下的仿真结果有比较明显的特征低频时差模增益曲线接近于理论计算值。假设反馈电阻是10k、输入电阻也是10k同相端接地那差模增益约等于-1倍即0dB左右相位为180度。共模增益曲线在低频时通常很低理想运放模型下趋近于负无穷dB实际的宏模型会有一个有限值比如-80dB到-120dB。频率升高后两条曲线的趋势会发生变化。差模增益通常会在某个频率点出现滚降共模增益则可能因为运放内部不对称性或输入电容耦合而抬升两条曲线逐渐靠近CMRR随之下降。如果电路中存在共模电感或输入滤波器共模增益曲线可能会出现谐振峰这是大多数EMI问题的根源。每次看到这样的仿真结果我建议都要反问几个问题滚降点是否和设计目标一致共模增益的抬升点是不是落在了关注的频段如果CMRR在工作频段内不够高是输入电容失配导致的还是反馈电阻失配导致的这些问题在波形上都有蛛丝马迹AC扫描的价值就是把它们放大成看得见的曲线。6. 常见问题与排查技巧实录6.1 仿真不收敛或报错singular matrix这是新手最常碰到的问题现象是点击Run之后LTSpice弹出“singular matrix”或“Matrix is singular”的错误提示节点电压一团糟。主要原因通常是节点没有直流通路或者存在一个悬空的电容支路。解决办法有三个在浮空节点和地之间加一个大电阻比如1MΩ或10MΩ。检查所有电压源是否设置了合理的DC值确认没有直接把两个理想电压源直接并联。把理想电流源换成带并联电阻的等效模型或者设定“Start external DC supply voltages at 0”选项以帮助收敛。在差模共模分析中输入端的直流路径尤其值得注意。如果输入端是经过电容耦合进来的别忘了在电容后面加一个偏置电阻。否则AC分析的第一步求直流工作点就会失败后面的频域曲线全都没有意义。6.2 扫描结果低频段有奇怪振荡或尖峰有些电路的AC曲线在非常低的频率比如0.1Hz以下会出现一个巨大的峰看起来像是滤波器谐振实际上是直流工作点周围的数值噪声或者仿真模型的低频极点导致的不是真实电路的频响特性。遇到这种情况我的建议是把扫描起始频率设在实际关心的最低频率之上。比如做电源EMI仿真10Hz起步就够了没必要从1mHz开始。如果非要看极低频可以先检查一下仿真模型里是否有极低频的极点比如一些真实的运放宏模型里会包含漂移补偿环路。6.3 差模共模曲线混在一起看不出区别如果你跑出来的两条曲线几乎完全重合先别急着怀疑电路问题。大概率是你设置的激励没有真正区分开差模和共模。最常见的原因是AC Phase设置无效或者.step没有正确改变参数值。我建议在跑完仿真后先确认一下输入节点处的幅度相位关系。具体做法把探针放在VA和VB节点上查看AC分析频率为1kHz时的电压值。如果差模模式下两个节点的幅度相同、相位相差180度说明激励正确如果相位一样说明step参数没生效。另外还有一个容易忽略的点如果电路本身完全对称共模输出理论上应该是0在波形图上表现为一条接近负无穷的直线。这时候不要认为仿真出错了它反映的其实是理想对称结构的特性。尝试人为在某一侧加入微小失配比如把一个10k电阻改成10.001k共模增益就会显现出来。这个操作反而是分析失配影响的好方法。6.4 步长或扫描范围不当导致峰值被低估当我怀疑共模增益曲线里某个谐振峰被低估时通常会做一次单独的高分辨率窄带扫描。比如先用宽范围粗扫定位峰的大概位置再把扫描范围缩小到峰附近一个倍频程范围内每倍频程点数增加到500或者1000然后对比两次结果的峰高。这种操作看似浪费计算资源但在共模分析里非常必要。因为共模谐振往往是高Q值的采样点稍微稀疏一点峰值就被“漏”过去了。我做过一个小型测试同一个LC并联谐振电路50点/十倍频程跑出来的峰值幅度是9.2dB200点/十倍频程跑出来是12.8dB差了3.6dB。这个误差足以让人对共模噪声风险产生完全错误的判断。6.5 波形窗口直接用表达式画CMRR如果你不想重新跑仿真但已经拿到了差模增益曲线和共模增益曲线可以在LTSpice的波形窗口里直接输入表达式来运算。只要波形窗口处于活动状态点击左侧的“Add Trace”输入类似如下的表达式V(out_dm)-V(out_cm)这里的前提是out_dm和out_cm是电路中实际存在的节点。如果只有一个输出节点那就不用表达式了直接测量两条曲线的dB差即可。因为LTSpice显示的是dB刻度时纵轴相减就是分贝差正好等于CMRR。这些操作在很多人看来不起眼但做差模共模分析时测量口径的一致性和曲线的清晰表达确实能节省大量时间也更容易把仿真发现变成设计优化方向。7. 个人实操经验与扩展建议我对LTSpice的最大感受是它不会替你想清楚“要测什么”但只要你明确目标它就能给你非常可靠的数据。AC扫描差模共模分析这个场景尤其如此成败的关键其实在电路建模和激励设计而不在软件本身。我建议第一次尝试这套流程的朋友先把案例里的简单差分电路完整复现一遍熟记.step配合AC Phase的用法然后再根据自己的项目换成实际电路。一旦掌握了这个方法后续无论是分析电流检测放大器的CMRR、共模电感的插入损耗还是评估前端滤波器的对称性都能照搬到对应场景里。还有一个我一直在用的扩展技巧把AC分析和蒙特卡洛参数扫描结合起来。用LTSpice的.step配合mc(param, tol)函数设置电阻容差可以快速评估电阻失配对共模抑制的影响。这样做出来的曲线族比单一标称值仿真更能真实反映量产成品的CMRR分布范围。当然蒙特卡洛AC扫描会明显增加仿真时间建议先用固定值跑通主线确认电路结构没问题后再上容差分析。最后分享一个值得养成的习惯每次仿真结束都要顺手检查一下直流工作点和频率扫描范围是否合理确认输入激励的相位关系没有因为后期修改电路而失效。我在项目中吃过不止一次这种亏——明明只是微调了一下反馈电阻却忘了检查激励设置结果带着错误的差模共模数据去开评审会尴尬程度可想而知。