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 的时间。你想想看,如果用手动拉游标,得拉多少次?

我的习惯:每次新建仿真文件,先把要测的关键节点名写在纸上,然后一次性写完所有 .MEASURE 语句。跑完仿真直接看 .log 文件,省事。

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 参数——它们限定了测量区间。为什么要加?因为很多电路启动阶段有浪涌,你测平均值如果包含启动段,结果会偏大。

我曾经踩过的坑:测一个 LDO 的输出纹波,忘了加 FROM/TO,结果把启动时的过冲也算进去了,峰峰值大了 5 倍。后来养成了习惯——所有瞬态测量都加时间窗口。

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 带宽、相位裕度。相位裕度这个参数,做电源和运放的人应该不陌生。

核心思路:AC 测量中,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

第三行是个小技巧——先测直流分量,再从总有效值里减掉,得到的就是交流有效值。

调试技巧:如果 .MEASURE 报错,先检查节点名有没有拼错。我经常犯的错是 V(OUT) 写成 V(Out)——LTspice 对大小写不敏感,但括号和空格很敏感。

2.8 知识结构图

下面这张图概括了 .MEASURE 的核心体系:

.MEASURE 语句知识体系 .MEASURE 语句 瞬态分析 (TRAN) AC 分析 (AC) 条件测量 电压/电流 时间参数 功率测量 增益/带宽 相位裕度 FIND/WHEN TRIG/TARG 核心函数:AVG / RMS / MAX / MIN / PP / FIND / TRIG / TARG 配合 FROM/TO 限定区间,PARAM 做后处理计算

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,慢慢就熟了。