`PM metric not found` 弹出来的时候,stb仿真跑完了,结果浏览器里loopGain的幅频相频曲线都正常,就是相位裕度那一栏显示nan。这个现象在新手第一次用stb分析的时候几乎必踩,具体原因后面再说。
`ac` 分析拿来测GBW和PM,对ClassAB输出级的运放特别不友好。AC小信号分析把所有MOS管当理想线性器件处理,而ClassAB输出级里那对推挽管在零交越附近有明显的跨导非线性区,AC分析根本捕捉不到这种局部增益塌陷。STB分析不用物理断开环路,也不用担心断点选错把直流工作点搞乱,测出来的环路增益才是真实的。STB仿真和AC仿真都测完对比过,同一个两级运放,AC仿出来的PM是58°,stb仿出来是62°,差的那几度正好是AC小信号模型忽略掉的那部分。
电路配置,运放接成单位增益缓冲器,正输入端接VCM直流偏置,输出端和负输入端之间插入iprobe,从analogLib库调出来。iprobe在直流状态下表现为短路,不改变工作点,交流小信号分析时表现为激励源和测量点。iprobe的方向要注意,电流从+端流入、-端流出,连反了相位曲线整体偏180°,PM算出来是负值还浑然不觉。测试电路搭建的时候先把运放封装成Cellview,Create→Cellview→From Cellview,省得每次搭测试环境。

ADE L窗口里选择stb分析,频率范围从1Hz到1GHz,对数扫描,每十倍频程给10个点。Probe Instance选iprobe0,Stimulus设置里把iprobe作为激励源。跑完之后在Results→Direct Plot→Main Form→stb里面点Stability Summary,相位裕度和增益裕度直接打印出来。想自己用Calculate算的话,cross函数找增益曲线穿过0dB的频率点就是GBW,然后用value函数加interpolate提取该频率处的相位值,PM = 180° + 相位值。
之前调一个带米勒补偿的两级运放,第一次跑stb,结果浏览器里PM显示nan,loopGain的相位曲线从180°开始一路往下掉,到0dB点的时候相位已经是-10°了。查了半天以为是iprobe放错了位置,换了好几个节点结果都一样。后来在spectre.out日志文件里搜了一下,看到一行 `Spectre believes that the system is unstable`。原因是没有加补偿电容,相位裕度是负的,stb分析直接判定系统不稳定,不输出PM值。加上2pF的米勒补偿电容之后重新跑,相位曲线在0dB点对应-120°,PM=60°,结果正常了。那天下午在等同事用完服务器跑另一个仿真,我开着ADE窗口一遍一遍试,补偿电容从1pF试到5pF,试到第三遍才发现不是电容大小的问题,是根本没有电容。后来那个同事说他以前也遇到过同样的情况,以为是软件bug,换了台机器跑还是一样的结果。
Stb分析只算正相位裕度,负的PM它会认为“PM metric not found”。想知道负的PM是多少,把stb的loopGain波形送到Calculator里,用phaseMargin()函数自己算。
相位裕度60°是基本要求,45°勉强能用,低于45°的电路在实际测试中很容易振荡。增益裕度一般要求大于10dB。stb仿真和tran瞬态仿真的结果要对得上,瞬态响应里如果看到明显的过冲和振铃,说明PM不够,跟stb分析预测的应该一致。两者对不上的时候以stb为准,瞬态仿真的过冲程度还跟输入信号的上升时间有关,不是纯粹的PM指标。
路径汇总:原理图放iprobe,ADE L选stb分析,频率1Hz到1GHz,Probe Instance选iprobe0。结果查看Results→Direct Plot→stb→Stability Summary。计算GBW用cross函数,PM用value加interpolate。PM显示nan先去spectre.out搜“unstable”,多半是没加补偿电容。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删