1. 差模和共模到底在测什么,为什么LTSpice的AC扫描是首选工具
做电源、做接口、做模拟前端的人,早晚都会撞上这两个词:差模和共模。搞不清它们,滤波电感选型会翻车,运放电路稳定性分析会拿不到正确结果,甚至连CAN总线收发器的共模输入范围这种基础参数都可能踩雷。我先用最直白的话把这两个概念捋一遍,再说为什么在LTSpice里用AC扫描指令来分析它们是最顺手的方式。
差模信号,本质上是两根线之间“有用”的信号。比如差分线上的数据、扬声器两端的音频、桥式传感器的输出,都是一根线相对于另一根线的电压差。它关心的是“两条线之间的电压”,目标是尽量完整地传输、放大和处理。共模信号则是两根线相对于共同参考点(通常是地)的电压,它的特点是两根线上同时出现、大小和方向完全一致。共模分量一般不是我们想传递的信息,更多是外界干扰、地电位漂移或者驱动电路自身缺陷带来的“寄生血压”,需要用电路结构去抑制它。
在工程上有一个极其常见的误区:很多人以为只要测一条线的频谱,就能知道整个链路的抗干扰能力。实际上,差模和共模在电路里走的路径完全不同,器件对它们的响应也截然不同。最典型的就是共模电感,两个绕组绕在同一个磁芯上,差模电流在两半磁芯中产生的磁通方向相反、互相抵消,所以差模阻抗很低;而共模电流产生的磁通方向相同、相互叠加,电感量对共模呈现得很大。不分别测算这两条路径,你根本没法判断这个电感在你的电源入口到底有没有用。
LTSpice里的AC扫描(.ac指令)属于小信号频域分析。它把电路在某个直流工作点上做线性化,然后以正弦小信号扫过一段频率范围,输出各节点的幅频/相频响应。这正是测差模和共模的绝配场景:因为差模和共模本质上就是不同激励方式下的频域传输特性,而AC分析天然就在频域里工作。你不需要造一个很复杂的时域干扰源,不需要等瞬态收敛,只要把激励源的AC属性设对,就能一次性看到从10Hz到100MHz甚至更高的响应曲线。
提示:LTSpice的AC扫描是基于线性化模型的,它不能处理大幅度信号下的非线性失真,它告诉你的是“在这个工作点附近,微小扰动怎么传输”。用来测阻抗、增益、滤波特性、CMRR这类参数,结果非常可靠,但不要指望它模拟压摆率限制或谐波失真。
2. 在LTSpice里搭出差模和共模的“测试环境”
2.1 核心是信号源的两个隐藏字段:AC Amplitude和AC Phase
很多LTSpice入门用户最先接触的是瞬态分析(.tran),那时候电压源里填的直流电压和SINE参数都很好理解。切到AC分析,很多人一头雾水:明明设置了正弦电压,为什么AC扫描结果是一条平线?答案很简单——AC分析看的不是你填的那个SINE信号,而是电压源属性里专门的AC Amplitude和AC Phase两个字段。
什么叫做AC Amplitude?它的含义是“在这个交流小信号分析中,该源注入的复数相量幅度”。AC Phase则是该相量的初始相位。时域波形部分对AC分析没有任何影响,甚至你可以在时域部分留空,只要AC字段填了值,.ac指令就能正常工作。这是新手最容易卡住的一关,我在这里多强调一遍:AC扫描只认AC字段,不认SINE字段。
具体的操作路径是这样:放置一个voltage源,右键单击它,在“Advanced”选项卡里能看到AC Amplitude和AC Phase两个输入框。默认情况下AC Amplitude是空的,必须手动填入数值,否则相当于这个源在AC分析里不存在。仿真跑完没曲线,八成就是漏了这一步。
2.2 差模激励:两个源相位相反,幅度各半
要做一个纯差模测试,原则是在两根信号线之间建立电压差,并且让它们对地的共模分量为零。LTSpice里最常用的做法是用两个电压源:
- 源V1:正端接信号线A,负端接地。AC Amplitude设为0.5,AC Phase设为0。
- 源V2:正端接信号线B,负端接地。AC Amplitude设为0.5,AC Phase设为180。
这样对A线来说,对地信号是0.5∠0°;对B线来说,对地信号是0.5∠180°。两条线之间的差模电压V(A)-V(B)就是0.5 - (-0.5) = 1∠0°,是一个完整的单位差模激励。而两线对地的共模分量(0.5 + (-0.5)) / 2 = 0,非常干净。
用相位180°而不是直接把AC Amplitude填成负数,是为了让原理图上的属性更直观可读,也方便后续检查。当然,你把AC Amplitude填成0.5和-0.5也能达到一样的效果,LTSpice会自动把负幅度理解为180°相移。
2.3 共模激励:两个源完全同相
共模测试就要反过来,让两个信号线对地呈现完全一样的电压。做法是:
- 源V1:接信号线A,AC Amplitude为1,AC Phase为0。
- 源V2:接信号线B,AC Amplitude也是1,AC Phase也是0。
这时V(A)和V(B)都是1∠0°,两线之间的差模电压为0,而线对地的共模电压就是1。如果你要算电路的共模增益,直接把输出节点电压V(out)除以V(in)(也就是1)就行,数学上特别省事。
值得多说一句,如果你是用在真实电路板上测试,给共模注入信号通常是通过一个隔离变压器或者直接用电容耦合到线束上;但是在LTSpice里做仿真,直接让两个源同相就是最标准的共模激励模型。别嫌它“太理想”,AC仿真本来就该从最理想的激励开始,先验证理论,再考虑寄生参数。
2.4 差模/共模激励方式速查表
| 测试目标 | V1设置(线A对地) | V2设置(线B对地) | 电路产生的差模分量 | 电路产生的共模分量 |
|---|---|---|---|---|
| 纯差模激励 | AC=0.5, Phase=0 | AC=0.5, Phase=180 | 1∠0° | 0 |
| 纯共模激励 | AC=1, Phase=0 | AC=1, Phase=0 | 0 | 1∠0° |
| 两线同时激励 | AC=1, Phase=0 | AC=0.5, Phase=90 | 幅度和相位的叠加 | 不为零 |
第三行用于做混合模式分析,比如测一个差分滤波器对非平衡干扰的响应。多数时候你用前两行就够了。
3. 实操案例一:用AC扫描测共模电感的差模阻抗和共模阻抗
3.1 为什么阻抗曲线能反映共模电感的真实性能
共模电感在电源输入端、CAN总线、RS-485等场景里几乎无处不在。它有两个绕组,本质上是一个双绕组变压器结构。理想情况下,差模电流产生的磁通在磁芯里抵消,所以差模阻抗基本来自于绕组电阻和漏感;共模电流产生的磁通则叠加,表现为一个很大的电感量,对共模干扰形成高阻抗。
但是理想归理想,实际器件有漏感、分布电容、磁芯损耗,阻抗-频率曲线会呈现一个先升后降的形状:低频段电感感抗主导,阻抗随频率上升;到了某个频率,分布电容和感抗发生并联谐振,阻抗达到峰值;再往上,容性占主导,阻抗开始下降。如果只用直流电阻或者某个单点频率的电感量来衡量共模电感,很容易被参数表骗过去。
利用LTSpice的AC扫描,把被测电感放到一个简单的两端口网络里,注入单位交流激励,直接测量阻抗随频率变化的曲线。这个方法不需要仪器,不需要搭实际测试治具,原理上和网络分析仪测阻抗的思路是一模一样的。
3.2 直接建模:两个耦合电感搭出共模电感
在LTSpice里,共模电感可以用两个电感配合K耦合系数来建模。先放置两个电感L1和L2,设置电感量,例如都是1mH。然后用K语句把它们耦合起来:在原理图上放置一个“SPICE Directive”文本,写上:
K1 L1 L2 1
这表示L1和L2的耦合系数为1(理想全耦合)。如果要模拟真实器件漏感,把K1改成0.98甚至0.95。绕组的直流电阻可以通过电感的Rser属性设置,一般设置为几十毫欧到几百毫欧,这样低频段曲线更真实。
放置元件的时候,L1接在输入端口两条线的一侧,L2接在输出端口的对应位置,两个绕组的同名端要标清楚:共模电感的两个绕组的同名端通常在磁芯绕制时处于对角位置,但在仿真里只需要保证K耦合的方向关系正确,同名端用一个点标记即可。
3.3 分别搭两套测试电路
测差模阻抗时,把信号源V1接在L1的输入端和地之间,V2接在L2输入端和地之间,按上面说的差模激励方式设置:V1是AC 0.5∠0°,V2是AC 0.5∠180°。测量电流时用一个0V电压源作为电流探针串联在输入端,或者直接测量信号源流出的电流。
如果不想用两个源,还有一个更简便的方法:把两个输入端短接,输出端也短接,然后把一个交流电流源接到输入和输出之间。不过这种方法会改变电路拓扑,和真实差模测试有一定差异,我更推荐双源法,因为它和实际测试条件一致。
测共模阻抗时,把V1和V2都设为AC 1∠0°,同样接入两条输入线。这样两条线上的信号完全同相,等效于对地注入共模信号。测出的输入阻抗就是共模阻抗。
3.4 测量阻抗的两种读数方法
方法一:直接测量I(V1)。在AC仿真结束后,添加一个表达式V(in)/I(V1),就能画出输入阻抗模值曲线。这里的V(in)是输入端节点电压,I(V1)是注入源V1的支路电流。因为差模激励是两源各贡献一半,所以总阻抗要乘以2;共模激励两源并联,阻抗读数是单源阻抗的一半。这个换算关系很多人会忘记,实际计算时要留意。
方法二:用一个1A交流电流源作为激励,直接读节点电压。把V1改成电流源,AC Amplitude设为1,那么节点电压在数值上就等于该点的阻抗模值。这个方法后续处理非常简单,适合批量仿真对比不同参数。
仿真指令在原理图里放置一个文本指令:
.ac oct 100 10 100Meg
意思是每十倍频程取100个点,从10Hz扫到100MHz。为什么用oct而不是dec?在宽频带扫描时,oct的点在低频段更密,画阻抗曲线更平滑,特别适合看谐振峰。端点频率可以根据实际关心的范围调整,测电源EMI滤波器关注150kHz到30MHz,测CAN总线关注100kHz到10MHz就够。
3.5 读曲线时要注意的几个关键点
低频段,共模阻抗应该是一条斜率为+20dB/十倍频程的直线,这说明是纯电感特性,阻抗等于2πfL。用这个区间的曲线反推电感量:随便取一个频率点,读阻抗模值,代入L = |Z| / (2πf),算出来和设定值一致就是对的。
中高频段,注意看有没有谐振峰。峰值频率对应电感的自谐振频率(SRF),超过这个频率之后共模电感就是个电容,滤波能力急转直下。如果你的系统噪声正好在这个频段,光换更大电感没用,得换SRF更高的型号。
差模阻抗通常很小,可能只有几欧到几十欧姆。它的形状会显示出漏感特性和绕组的电阻特性。如果差模阻抗在高频也一路升高,说明漏感偏大,这在某些需要同时兼顾差模滤波的场景反而是好事,但对磁芯饱和可能不利。
4. 实操案例二:用AC扫描测量运算放大器的CMRR
4.1 运放共模抑制比的概念再校准
运放的关键指标之一就是CMRR(共模抑制比),定义为差模增益与共模增益之比,通常用dB表示。理想运放对共模信号完全无动于衷,但实际情况是输入级失配、尾电流源有限阻抗都会让共模信号漏到输出端。CMRR越高,说明运放对共模干扰的免疫力越强。
LTSpice的AC扫描是测CMRR最直接的仿真方法。原理上就是把同一个交流激励分别以差模和共模方式加在运放输入端,测输出响应,然后两者做比值。
4.2 差模增益的测试接法
搭一个最基本的同相放大电路:运放正输入端接信号源,负输入端通过电阻分压网络从输出取反馈。设置信号源为AC 1,相位0,运行AC仿真,得到输出V(out)的幅频曲线。这个曲线除以输入幅度1,就是闭环差模增益。
注意增益单位。在LTSpice波形窗口里右键Y轴,把纵轴单位改成dB,可以直接读V(out)以dB为单位的增益。比如10倍增益就是20dB。
4.3 共模增益的测试接法
把两个输入端短接在一起,然后接同一个信号源。信号源AC Amplitude设为1,相位0。反馈网络保持不变。从输出读V(out)的dB值,这个值就是共模增益。因为输入共模激励为1,所以输出数值就是增益本身。
理想情况下这个值应该趋近于负无穷大,但真实模型和实际运放会给出一个有限值。LTSpice自带的运放宏模型如果只包含理想行为,可能测出来CMRR高得离谱,这是模型精度问题,不是仿真出错。如果你用的是厂商提供的精确宏模型,结果就更有参考价值。
4.4 一键得到CMRR曲线
在仿真结束后,不需要开两个单独的仿真。你可以在同一个原理图上做两次AC扫描,也可以用一副图里添加两个不同的测量表达式。
更高效的做法是:把差模测试电路和共模测试电路放在同一个原理图的不同位置,分别设置两组输入源,然后跑一次AC仿真。在波形窗口里,添加表达式:
V(out_diff) / V(out_cm)
再把它转换成dB,就能直接看到CMRR随频率变化的曲线。如果在同一张图里做,两个输出节点要起不同的网络标号,例如out_diff和out_cm,避免短路。
当然,你也会遇到一个问题:差模增益和共模增益的测试电路反馈方式不同,输出节点不能直接短接,所以必须分成两个独立子电路。用LTSpice的“once”符号或者用独立的电源和地就行,不影响同一次AC扫描。
注意:CMRR对频率是敏感的。直流或低频时CMRR很高,高频时因为输入电容不对称、PCB寄生效应,CMRR会明显下降。所以测CMRR曲线时,高频段的滚降是正常现象。如果你的仿真结果CMRR从某个频率开始以20dB/十倍频程的斜率下降,说明模型里考虑了输入失配电容效应,这反而是更接近真实的情况。
5. 新手最容易翻车的地方:AC仿真常见问题排查实录
5.1 波形窗口里什么都没有,或者是一条平坦直线
90%的情况是信号源的AC字段没填。记住,.ac指令只会处理AC Amplitude和AC Phase。如果你在电压源里只设置了SINE参数,没填AC Amplitude,那这个电源在AC分析里就是个理想电压源内部短路,输出永远为零。
解决办法:右键电源,进入高级选项卡,给AC Amplitude填一个非零值。如果你要分析的是滤波器或网络,建议填充1,这样输出节点电压直接等于增益或传输函数,后续处理最简单。
5.2 差模测试时,两个源相位设置反了导致共模被当成差模
如果你把两个源都设置成了0相位,跑出来的是共模响应,不是差模响应。这听起来很简单,但在复杂的原理图里,特别是在两个源离得很远、接线很长的情况下,很容易弄混。建议给测差模的两个源在网络标签上做标记,比如IN_P和IN_N,从一开始就区分极性。
还有一个隐藏很深的问题:相位设置成180和设置成两个不同节点但相对参考地的幅值相反,在结果上等价,但在某些电路里因为直流工作点不同,会带来细微差异。差模分析时最好两个源都设相同直流偏置,避免改变静态工作点。
5.3 阻抗曲线高频出现诡异谐振
如果共模电感测出来的阻抗曲线在某个频率有一个非常尖锐的尖峰,而且这个尖峰在厂家数据手册里根本不存在,大概率是仿真模型里没有加分布电容,导致理想电感的SRF跑到极高频去了。真实电感绕线之间、绕组与磁芯之间存在分布电容,所以在LTSpice里建模时建议在电感两端并联一个电容,典型值几pF到几十pF,具体取决于绕线结构。
同样,如果谐振峰特别高、Q值接近无穷,可以在电感模型里串联一个电阻(Rser)来模拟磁芯损耗和铜损。这样曲线会更接近真实元件的测试结果。
5.4 AC扫描结果和瞬态仿真对不上
AC扫描是线性化小信号分析,它不能反映大信号下的压摆率限制、饱和削波、非线性失真。如果你在瞬态仿真里加了一个5V的大信号方波,看到输出波形有明显失真,而AC扫描看不出任何问题,这不是仿真软件坏了,而是两种分析方法本身适用条件不同。
要理解这一点,可以类比成去医院做体检:AC扫描是空腹抽血查各项指标,反映的是系统在这个状态下的基础健康情况;瞬态仿真是跑了个800米,看的是极限负荷下的表现。两个都不能互相替代。
5.5 扫描频段太宽,低频段点数太多导致仿真慢
如果你设.ac oct 1000 0.001 10G,LTSpice会按每十倍频程1000个点的方式扫描,总数可能上百万个点,仿真耗时会非常夸张。多数情况下只需要看几个十倍频程的频率范围,用100点/十倍频程就足够光滑了。先粗扫,例如50点/十倍频程,确认曲线形状,再针对谐振峰附近细分,这样效率最高。
另外,如果你只关心特定频段的阻抗,比如电源EMI滤波器的150kHz到30MHz,就把扫描范围就设成这个区间,不必每次都从1mHz开始。
5.6 测量电流时忘记串0V电压源
读取流过某个元件的电流,可以直接用I(R1)这类表达式,但这要求元件本身有明确的电流方向。对于电压源来说,I(V1)可以测,但正负方向容易搞混。更稳妥的做法是在被测支路串一个0V电压源,命名为VPROBE,然后用I(VPROBE)来读电流。这个技巧在测阻抗、测环路增益时都可以用,是LTSpice老用户默认的标准操作。
6. 一些补充心得:把AC扫描用好,等于多了一台虚拟网络分析仪
我个人在实际操作中,越来越觉得LTSpice的AC分析不只是拿来交作业或者“验证一下理论”的工具。它其实是一台功能非常完整的虚拟网络分析仪,只是界面朴素了点,很多潜力没有被挖掘出来。
比如,做开关电源设计的时候,测一下输入端的差模/共模阻抗曲线,就能预估辐射和传导干扰的趋势;测输出滤波器在不同共模激励下的响应,就能判断它对地回流噪声的抑制能力;在CAN总线收发器前端搭一个共模电感模型,扫一下共模抑制曲线,就能快速筛选扼流圈的参数。这些场景全部建立在同一套方法论上:搭电路、设激励、跑AC扫描、读曲线。
再多说一个更具扩展性的用法:很多人只在LTSpice里看增益曲线,其实AC扫描也可以在“Probe”窗口里对表达式做数学运算。你可以轻松地画V(out)/V(in)的幅值曲线,也可以画相位、群延迟、实部虚部。测环路增益时,在断开点加一个AC扰动源,用V(a)/V(b)就能读出开环增益和相位裕度。这些操作本质上和你测差模/共模是同一个思路,只是换了节点和表达式。
如果你希望更贴近实际测试,还可以在原理图里加入真实器件的寄生参数模型,例如电容的ESR、电感的DCR和分布电容、PCB走线电感。LTSpice的元件属性面板里都支持这些参数,不需要额外搭复杂的子电路。给元件上多加一个Rser、Cpar,往往比换一个更高阶的宏模型带来的精度提升更明显。
最后再分享一个小技巧:AC扫描结果如果想导出,可以右键波形窗口,选择File -> Export data as text,把曲线数据存成文本文件。配合Python的matplotlib或者Excel,可以做更细致的后处理和报告绘图。仿真与数据处理分离,能让你的分析报告专业不少。
差模和共模的分析是模拟电路里绕不开的基本功,但基本功未必等于简单。真正理解激励差异、读懂阻抗曲线、会排查仿真陷阱,你手里的LTSpice就不再是一个画原理图的玩具,而是一个真正能帮你做工程决策的工具。多搭几个电路试几次,比看一百篇教程都管用。