2. MEASURE语句详解
说到 LTspice 的 .MEASURE 语句,我刚开始用的时候也觉得它有点「玄学」。明明仿真跑完了,波形也看到了,为什么还要写一行命令去测?
后来项目多了才明白——手动拉游标测数据,十个点还行,一百个点你试试?而且每次改参数重跑,又得重新拉一遍。说白了,.MEASURE 就是帮你自动干这活的。
2.1 .MEASURE 的基本语法
先看最基础的结构:
.MEASURE <类型> <名称> <表达式>
举个例子:
.MEASURE TRAN Vout_max MAX V(out)
.MEASURE TRAN Vout_avg AVG V(out)
.MEASURE TRAN Trise TRIG V(out)=1.0 RISE=1 TARG V(out)=3.0 RISE=1
这三行分别做了三件事:测 V(out) 最大值、平均值、以及从 1V 上升到 3V 的时间。你想想看,如果用手动拉游标,得拉多少次?
2.2 测量类型详解
.MEASURE 支持多种测量类型,我按使用频率排了个表:
| 类型 | 用途 | 示例 |
|---|---|---|
| AVG | 平均值 | .MEASURE TRAN Iavg AVG I(R1) |
| RMS | 有效值 | .MEASURE TRAN Irms RMS I(R1) |
| MAX | 最大值 | .MEASURE TRAN Vpk MAX V(out) |
| MIN | 最小值 | .MEASURE TRAN Vbot MIN V(out) |
| PP | 峰峰值 | .MEASURE TRAN Vpp PP V(out) |
| FIND | 查找特定值 | .MEASURE TRAN Vx FIND V(out) AT=5u |
| TRIG/TARG | 时间测量 | .MEASURE TRAN Td TRIG V(in)=1.5 TARG V(out)=1.5 |
这里有个坑——AVG 和 RMS 的区别。我在项目中遇到过有人用 AVG 去算交流信号的有效值,结果差了 30% 以上。AVG 是算术平均,RMS 才是有效值,千万别搞混。
2.3 瞬态分析中的测量
瞬态分析是 .MEASURE 用得最多的场景。我一般把它分成三类:
2.3.1 电压/电流测量
.MEASURE TRAN Vcc_avg AVG V(Vcc) FROM=1m TO=10m
.MEASURE TRAN I_load_rms RMS I(R_load) FROM=1m TO=10m
.MEASURE TRAN Vripple PP V(Vcc) FROM=1m TO=10m
注意 FROM 和 TO 参数——它们限定了测量区间。为什么要加?因为很多电路启动阶段有浪涌,你测平均值如果包含启动段,结果会偏大。
2.3.2 时间参数测量
上升时间、下降时间、延迟——这些是数字电路和开关电源的硬指标。
.MEASURE TRAN Trise TRIG V(out)=0.1*Vfinal RISE=1 TARG V(out)=0.9*Vfinal RISE=1
.MEASURE TRAN Tfall TRIG V(out)=0.9*Vfinal FALL=1 TARG V(out)=0.1*Vfinal FALL=1
.MEASURE TRAN Tdelay TRIG V(in)=0.5*Vfinal RISE=1 TARG V(out)=0.5*Vfinal RISE=1
这里有个技巧——用 0.1*Vfinal 代替固定电压值。为什么?因为不同工艺角下 Vfinal 会变,写死了反而容易出错。
2.3.3 功率测量
功率测量其实是个「组合拳」:
.MEASURE TRAN P_load AVG V(out)*I(R_load)
.MEASURE TRAN P_loss AVG V(Vcc)*I(Vcc) - V(out)*I(R_load)
第一行测负载功率,第二行测损耗功率。注意第二行——它直接算差值,省得你手动减。
2.4 AC 分析中的测量
AC 分析和瞬态分析不太一样。瞬态看时域,AC 看频域。测量对象也变了:
.MEASURE AC Gain_max MAX mag(V(out)/V(in))
.MEASURE AC F_3dB TRIG mag(V(out)/V(in))=Gain_max/sqrt(2) FALL=1
.MEASURE AC Phase_margin FIND ph(V(out)) WHEN mag(V(out)/V(in))=1
这三行分别测:最大增益、-3dB 带宽、相位裕度。相位裕度这个参数,做电源和运放的人应该不陌生。
mag() 和 ph() 是最常用的两个函数。mag 取幅值,ph 取相位。配合 FIND/WHEN 或 TRIG/TARG,可以精确找到交叉点。
2.5 频率测量
频率测量在瞬态分析中也能做,原理是测周期:
.MEASURE TRAN T_period TRIG V(out)=1.5 RISE=1 TARG V(out)=1.5 RISE=2
.MEASURE TRAN F_out PARAM 1/T_period
第一行测两个上升沿之间的时间(即一个周期),第二行用 PARAM 计算频率。注意第二行没有指定分析类型——它是个纯数学计算。
为什么要用 RISE=2?因为 TRIG 和 TARG 都取第一个上升沿的话,时间差是 0。TRIG 取第一个,TARG 取第二个,差值才是一个周期。
2.6 条件测量与高级用法
有时候你只想测某个特定条件下的值。比如:
.MEASURE TRAN Vout_at_peak FIND V(out) WHEN I(R1)=0 CROSS=1
.MEASURE TRAN I_peak WHEN V(out)=MAX_Vout
第一行:当 I(R1) 过零时,记录 V(out) 的值。第二行:当 V(out) 达到最大值时,记录此时的电流。
这种条件测量在分析谐振电路、开关管切换时刻特别有用。
2.7 测量结果输出与调试
.MEASURE 的结果默认输出到 SPICE Error Log(快捷键 Ctrl+L)。但如果你想要更清晰的输出,可以用:
.MEASURE TRAN Vout_rms RMS V(out)
.MEASURE TRAN Vout_dc AVG V(out)
.MEASURE TRAN Vout_ac RMS V(out)-Vout_dc
第三行是个小技巧——先测直流分量,再从总有效值里减掉,得到的就是交流有效值。
2.8 知识结构图
下面这张图概括了 .MEASURE 的核心体系:
2.9 常见错误与避坑
最后总结几个我踩过的坑:
- 节点名写错:V(OUT) 和 V(VOUT) 是两个东西,少写一个字母结果就是 0。
- 忘记加 FROM/TO:瞬态测量如果不限定区间,会把启动瞬态也算进去。
- AC 分析用 AVG:AC 分析是频域,AVG 没意义。用 mag() 和 ph()。
- TRIG/TARG 的 RISE 计数:RISE=1 是第一个上升沿,RISE=2 是第二个。搞错了周期就翻倍。
- 功率测量没乘电压:V(out)*I(R_load) 才是功率,只写 I(R_load) 测的是电流。
嗯,.MEASURE 的内容差不多就这些。你只要把基础语法和常用类型记住,再配合 FROM/TO 和 TRIG/TARG,大部分测量需求都能搞定。剩下的就是多写多练——跑一次仿真,看一次 .log,慢慢就熟了。