在Altium Designer里做电路仿真,是很多从画图转做验证的人绕不开的一个坎。我刚用这个功能时也踩过不少坑:明明原理图看着没问题,一仿真就报错,或者波形出来了却不知道怎么读。后来把SPICE那套逻辑理顺了才发现,Altium里的电路仿真完全可以变成日常设计验证的得力助手。这篇文章不打算把菜单栏逐条念一遍,我会把模型准备、仿真源设置、三种常用仿真类型、波形测量和收敛报错这几个环节一次讲清楚,顺带分享我实际项目里总结出来的排查顺序和参数经验。
1. 先理清思路:Altium Designer里的模拟仿真是怎么跑的
很多朋友以为Altium的仿真只是个附加功能,随便点两下就能出波形,其实它背后是一个完整的SPICE内核。理解这一点,很多报错和奇怪现象都能找到根源。
1.1 内核来自SPICE,但别拿它当猛兽
Altium Designer的混合信号仿真基于SPICE3和XSPICE内核,它的核心思路和所有SPICE类工具一致:把原理图转成网表,把每个元件映射成数学模型,然后对电路节点列方程、解矩阵。XSPICE相对原来的SPICE3多了一部分数字事件仿真能力,所以它号称“混合信号仿真”——也就是说,简单的数字逻辑配合模拟电路,也能在一个环境里跑通。
这里有一个很重要的认知:Altium的仿真器并不是为了替代专业仿真工具而存在的,它的优势在于“原理图和仿真在一个软件里”,不需要把电路图搬来搬去。换句话说,它的定位是原理图级的快速验证,而不是射频、电磁、热分析这类专业仿真战场。你用它验证电源上电时序、滤波器的截止频率、运放电路的增益和饱和范围,这些都是非常顺手的事。可如果你拿它去跑GHz级别的信号完整性,或者复杂的电力电子大功率开关模型,那就有点为难它了。
理解了这一点,后面遇到模型缺失或收敛失败时,就不会钻牛角尖。对于大多数板级电路的预验证,这个内置仿真器已经够用。
1.2 判断哪些电路适合在AD里做验证
我个人的判断标准很简单:凡是我能在两三页原理图里讲清楚的电路,就值得在Altium里先仿真一轮。
常见的适合场景包括:
- 分立元件搭的放大、偏置、整形电路;
- 运放的跟随、放大、有源滤波拓扑;
- 电源上电时序,比如RC延时开启、电压爬升速率;
- 分压网络、基准源、限流电阻取值是否合理;
- 无源滤波器的幅频、相频特性;
- 简单的数字门电路和模拟信号接口的时序验证。
不适合的场景也很明确:GHz级高速信号、天线匹配、变压器漏感等效、功率器件的大信号开关损耗、热稳定分析。这些要么需要电磁场求解器,要么需要厂商提供的精确大模型,Altium内置的仿真器跑不动也没必要跑。有些朋友拿它硬仿真DC-DC的环路稳定性,搞了半天不收敛,然后抱怨软件不行——其实该换工具或者用厂商提供的验证工具。
1.3 仿真在整个流程中的最佳位置
我的建议是把它放在原理图完成之后、PCB布线之前的这个窗口期。
原理图画完,先别急着导网表,花半小时把关键模块的仿真跑一遍。这一步能发现的问题非常多:电阻分压值算错、运放供电方向接反、RC时间常数和需求差了一个数量级、开关管栅极驱动电阻过大导致上升沿太慢。这类问题在仿真里都是几秒钟就能看出来的,可如果直接进了PCB流程,等在实验室里用示波器逐一排查,成本就不是半小时的事了。
当然,不是说仿完就可以完全不做实验验证。仿真模型再完善,也和真实器件有差距,比如寄生参数、温度特性、批次差异。我的做法是:仿真用来验证“设计思路和参数数量级”,实验用来校准“最终精度和极限指标”,两者配合,效率最高。
2. 仿真前的准备:模型、源和探针
很多人第一次点仿真,报错提示完全不认识,其实大多卡在准备工作上。仿真不是把原理图画完就能跑的,有三个东西必须确认:元件有没有仿真模型、仿真源放得对不对、网络节点能不能被正确识别。
2.1 元件不认模型?先学会“看模型有没有”
在Altium里,元件仿真模型不是自动附加到每个原理图符号上的。一个电阻、电容、二极管,如果在库文件里绑定了仿真模型,双击元件后切换到“Models”选项卡,就能看到类似“Resistor”“Capacitor”“Diode”这样的仿真模型条目。如果Models列表是空的,那这个元件在仿真时就会直接报“模型不可用”之类的错误。
很多朋友从公司内部库调元件,画的符号是自建的,没挂模型,仿真自然跑不起来。这时候有两条路:一是从器件厂商官网下载SPICE模型文件,后缀一般是.lib、.cir或者.ckt,把模型文件加载到仿真模型编辑器里,再挂到元件的Models列表上;二是先用Altium软件自带的通用仿真模型凑合验证行为,等后续要精确验证时再换成厂商模型。
这里我特别提醒一句:第一次搞仿真,不要一上来就追求厂家精确模型。很多厂家的模型文件非常庞大,器件模型里包含几十个参数和子电路,导入后仿真速度会明显变慢,而且容易触发收敛问题。先用理想或通用模型把电路行为跑通,再逐步替换关键器件的精密模型,这个顺序能帮你省下大量调试时间。我做过的某信号调理模块项目里,模拟部分一开始就用了通用运放模型,把增益和带宽验证完,最后才换上厂商提供的精密模型做参数校准,整个过程顺利很多。
2.2 仿真源怎么放,参数怎么填
仿真源是激励的来源,Altium的原理图库中有专门的Simulation Sources系列,包括电压源VSRC、电流源ISRC,以及正弦源、脉冲源、分段线性源等。放置之后双击,在Models选项卡里,你需要指定仿真源的工作方式,常用的两种是SINE正弦源和PULSE脉冲源。
以PULSE脉冲源为例,它的关键参数有V1、V2、TD、TR、TF、PW、PER,分别对应起始电压、脉冲电压、延迟时间、上升时间、下降时间、脉冲宽度、周期。比如我想做一个10kHz、幅值0到5V、占空比50%的方波,同时把上升和下降时间设为10纳秒,参数就填:
- V1:0
- V2:5
- TD:0
- TR:10n
- TF:10n
- PW:50u
- PER:100u
有一点非常关键:上升和下降时间不要填0。SPICE求解器处理理想方波这种无限斜率跳变时,数值上很容易出现收敛困难,这就是为什么手册上往往建议TR和TF取一个很小的非零值,这个值最好比仿真最大步长略大或相当。实际填的时候,如果仿真目标是宏观时序,TR和TF取周期的千分之一甚至更小就够了,不需要真的追求10纳秒级别的真实边沿。
2.3 网络标签、探针和地线的基本功
仿真之前,给关键节点放好网络标签,这个习惯比想象中重要。比如输入端命名VIN,输出端命名OUT,电源节点命名VCC_5V。为什么?因为仿真结束后,你要在波形查看器里添加信号,靠的就是这些网络名。如果节点用默认的Auto名,比如_N000001,你可能得费半天劲猜它对应哪里。
模拟地也是一样。SPICE求解要求所有网络都有明确的直流路径,原理图上必须有地线符号GND,否则节点是浮空的,轻则警告,重则直接不收敛。我用过一些自制的原理图符号,模拟地和数字地画成了两个不同的网络名,结果仿真时发现一个模块的回路断了,输出直接飞到电源轨上。这种问题,检查网络名一致性就能发现。
探针的作用其实是“预选信号”,方便仿真后快速查看。Altium里仿真完,理论上你可以把任意网络加到波形面板里,并不一定非要提前放探针。但我的习惯是在输入、输出、关键反馈节点各放一个探针,这样仿真结束后波形面板会自动带上这些信号,省去手动添加的步骤。对于反复修改参数的场合,这个习惯能明显提高效率。
3. 三种最常用的仿真模式与参数设置
Altium的仿真分析类型有好几种,真正每天都会用到的,我认为就三种:瞬态仿真、AC小信号扫描、DC扫描。把它们吃透,绝大部分模拟电路的验证需求都能覆盖。三种仿真的区别,用生活里的话打比方就是:瞬态看“这段电路随时间怎么动”,AC看“不同频率信号进来后衰减和移相多少”,DC扫描看“输入端电压变化时输出怎么跟着变”。
3.1 瞬态仿真的参数组合:从一遍遍试错到一次到位
瞬态仿真是最直观的类型,它求解的是电路在线性时间轴上的响应,适合看上电、看开关过程、看波形振荡、看电容充放电。
参数设置上,Altium的分析设置界面里有Transient Analysis一项,核心参数是Start Time、Stop Time、Step Time和Max Step。我通常这样取初值:
| 参数 | 建议初始值 | 依据来源 |
|---|---|---|
| Start Time | 0 | 从激励开始时刻观察完整过程 |
| Stop Time | 激励周期×10左右 | 至少覆盖多个周期,或覆盖稳定建立过程 |
| Step Time | 周期/1000 | 保证每个周期有足够采样点 |
| Max Step | 周期/10000 | 限制求解器最大步长,防止跳变细节丢失 |
举个例子,我验证过一个一阶RC低通,R取1kΩ,C取100nF,理论时间常数τ=RC=0.1ms,截止频率约1592Hz。用1kHz方波激励,一个周期1ms,我想看几个周期内的充放电过程,就把Stop Time设为5ms,Step Time设为1us。仿真跑完后,波形里看到电容电压在5V方波下来回爬升和泄放,爬升到63%的时间点大约是0.1ms,和手算完全对得上。这一步验证虽然简单,但它证明了器件参数、模型、源设置一整条链路都是通的。
顺带提一句,界面里有个“Use Initial Conditions”选项。勾选它之后,瞬态仿真的起点会使用你设置的初始条件,而不是先计算直流工作点。这对电容初始电压、电感初始电流的仿真很有用。但如果你只想看电路正常工作的稳态响应,我建议先不勾选,让它先算一次直流工作点再起振,这样能避免初始跳变造成波形前段看起来乱七八糟。
3.2 AC扫描的参数设置:用1V激励直接量增益
AC小信号扫描是看频响的利器。它的原理是在某个直流工作点基础上,向电路注入一系列固定幅值的微小正弦信号,然后扫描频率,观察输出幅度和相位的比值。也就是说,AC扫描不需要你在原理图里放一个正弦源,它依赖的是每个仿真源里设置的AC参数。
这里有一个很实用的技巧:电压源的AC幅值设为1、相位设为0。这样做有一个好处,仿真输出的幅度和相位曲线,直接就是电路的增益和相移,不需要再做除法换算。比如一个反相放大器,输入接一个AC幅值1V的电压源,仿真后看到输出在某个频段是5倍,你就知道这个频段的增益是5倍。如果AC幅值填了0.5V,输出波形就得除以0.5才等于增益,多一步换算事小,容易出错事大。
AC扫描的参数设置上,我一般这样安排:
- Sweep Type选Decade,宽频响应用十倍频程扫描最直观;
- Points Per Decade取100,太密会增加仿真时间,太疏则峰值和拐点可能被漏掉;
- Start Frequency从10Hz起步,因为大多数模拟信号和电源电路的关注点不会低于这个频率;
- Stop Frequency设置成感兴趣频率的10倍以上。比如验证一个音频低通滤波器,关心20Hz到20kHz,那我就扫到200kHz,这样还能顺带看到带外滚降特性。
还是拿刚才那个1kΩ+100nF的RC低通举例,AC扫描结果里幅度曲线起点接近0dB(也就是增益为1),到了1.6kHz附近衰减到-3dB,高频段以每十倍频程-20dB的斜率下降。这些都能在波形查看器里用光标直接量出来,非常直观。
3.3 DC扫描:做参数遍历与工作点验证
DC扫描解决的是静态问题。它把某个电压源或电流源作为主扫描变量,从起始值扫到结束值,然后观察各个节点的直流电压、电流变化。最典型的应用是分压网络的传输曲线、三极管的转移特性、比较器的翻转阈值。
设置上,Primary Source选择要扫描的源,Start/Stop/Step按需填写。举个例子,一个电阻分压网络,输入电压从0到12V,分压比是1/3,那我扫描一下,就能看到输出电压始终等于输入电压的1/3,波形是一条斜率1/3的直线。如果中途发现曲线在某段出现拐弯,多半是负载接入后引起的非线性,这时候DC扫描的价值就体现出来了。
DC扫描也可以配合次级从扫描源做“双变量扫描”,比如同时观察温度和电压的影响。不过Altium内置的温度扫描范围有限,实际用下来,我大部分时候只做主变量扫描就够用了。
很多新手容易忽略DC工作点分析。其实每种仿真开始前,求解器都要先算一次直流工作点,所谓“工作点不对,其他都白搭”。单独跑一次DC Operating Point可以快速检查各节点静态电压是否合理,比如运放的正相输入端是否等于反相输入端、三极管集电极电压是否落在合理区间。这些检查比什么都快,一旦发现静态电压不对,后面任何AC或瞬态结果都不值得看了。
4. 波形查看、测量与数据后处理
仿真跑完,波形总算出来了,但怎么把波形里的信息读出来,才是真正拉开差距的地方。波形查看器用得好不好,直接决定你对电路的理解深度。
4.1 波形面板上手:信号怎么加、怎么分组
Altium仿真完成后,会自动弹出波形查看界面,很多时候还带一个“波形数据”侧边栏,里面列出所有可用的仿真波形。这里有个快捷键思路:你在原理图里放的探针信号会优先显示,其他网络名需要在侧边栏里手动勾选。
我习惯在添加信号时做一下分组。比如把电源轨的电压单独放一个窗口,把输入输出信号放另一个窗口,反馈网络再放一个窗口。窗口分开以后,波形之间不会被压扁,读数清晰很多。如果所有信号都堆在一个窗口里,幅度差异大的时候,比如5V电源和20mV纹波同时显示,小信号会被挤成一条直线,根本没法看。
在较新版本的Altium里,波形窗口还支持直接拖拽信号名到绘图区,或者右键添加。不同版本界面略有差异,但整体逻辑是一样的:选信号、加窗口、调坐标。
4.2 光标测量:上升时间、过冲量这样读
光标测量是我用得最多的功能。打开波形窗口后,一般可以启用两个光标T1和T2,窗口里会显示两个光标对应的时间、电压值,以及差值Δ、差值的斜率等参数。
要测量方波的上升时间,我通常这样操作:
- 先把波形缩放到上升沿附近;
- 放一个光标到10%幅值位置;
- 放另一个光标到90%幅值位置;
- 直接读两个光标之间的时间差,就是上升时间。
测量过冲也很简单:先把第一个光标放在波形冲到最高点的位置,第二个光标放在稳定后的平台位置,两者的电压差除以平台电压就是过冲百分比。
这里有个容易犯的错:上升沿如果太快,波形上的斜线几乎垂直,光标稍微偏一点,时间差就会差很多。遇到这种情况,我建议把波形窗口在时间轴方向拉大,让斜线尽量展开成45度角左右再打点,读数才可靠。
4.3 数学运算与FFT:从波形里挤出更多信息
光看一条波形本身,信息量其实有限。Altium的波形查看器支持信号之间的数学运算,比如把两个电压信号相减,就能直接得到电阻两端压差,进而换算成电流;把开关节点电压减去电感后端电压,就能观察电感两端电压波形。
FFT同样非常实用。瞬态仿真结束后,可以直接对某个信号做FFT,查看各次谐波分量的幅度。做FFT之前要有一个意识:时域波形越完整,频域分辨率越高。换句话说,如果你要分析一个1kHz信号的谐波,瞬态仿真至少要跑几十个完整周期,这样FFT才能分辨出相邻频率成分。一次只跑三四个周期做FFT,出来的频谱往往糊成一团,看不出所以然。
在电源电路里,我经常用FFT看开关频率的谐波分布,再配合一个band-pass概念判断滤波是否充分。当然,FFT的绝对精度受仿真模型影响,看相对谐波分布和趋势已经足够。
5. 收敛失败与高频报错的排查实录
仿真报错是绕不开的一关,尤其对新手来说,第一次碰到收敛问题很容易懵。我自己统计下来,Altium里高频出现的仿真报错其实就那么几类,挨个排查很容易解决。
5.1 频率最高的五个仿真报错
| 报错类型 | 典型提示含义 | 最常见的诱因 |
|---|---|---|
| No DC path to ground | 节点没有直流接地回路 | 电容隔直、浮空网络、网络标签错选 |
| Timestep too small | 求解器步长缩到极小仍无法收敛 | 激励边沿过陡、含有强烈非线性元件 |
| Singular matrix | 矩阵奇异无法求解 | 存在短路回路、无源元件连接错误 |
| Model not found | 元件缺少仿真模型 | Models列表为空或模型路径失效 |
| Failed to converge at operating point | 直流工作点迭代不收敛 | 反馈接反、初始电压钳位、参数不合理 |
这五类里,No DC path to ground是我见过最多的。SPICE要求每个节点都有直流路径,如果你在信号路径上串联了一个电容,而这个电容另一端接的节点没有对地直流回路,仿真器就会报这个错。处理办法通常是在这个悬空节点加一个很大的对地电阻,比如1MΩ或10MΩ,它不影响交流特性,却能给SPICE提供一个直流路径。
5.2 处理收敛问题的一般顺序
碰到不收敛,我建议不要慌乱地乱调参数,按顺序排查,多数情况下几步就能定位。
第一步,检查拓扑。先看有没有悬空节点、有没有只有电容连接的部分电路、网络标签是不是拼错了。几乎一半的收敛错误,根源都在这里。我把这步叫“网表级体检”,原理图上花两分钟,比在参数设置里折腾半小时有效。
第二步,检查激励。把脉冲源的上升下降时间改到微秒甚至毫秒量级,看能不能跑通。如果从1纳秒改成1微秒就好了,说明纯粹是边沿过陡造成的数值问题,这时再逐步收紧到满足精度需求的边沿。
第三步,修改求解参数。Altium的分析设置里有一些求解器选项,比如相对误差容限Reltol,默认值通常是0.001或0.01。我遇到顽固不收敛时,会把Reltol放宽到0.01,或者把迭代次数上限加大,很多问题能迎刃而解。代价是精度略微下降,但在验证阶段完全可以接受。
第四步,采用分段仿真。把电路切成几个独立的模块分别仿真,找到到底是哪一级出了数值问题。这个方法在运放多级级联时很好用,哪一级单独仿都不收敛,问题基本就在那一级。
5.3 排查表格与避坑清单
除了上面的排查顺序,我还有一份长期积累的避坑清单:
- 单位拼写要规范。微法不要写“uF”就完事,仿真解析器通常能接受“u”,但有人误写成“mF”,一下子大了1000倍,波形完全不对。
- 网络标签不要用中文、空格和特殊符号。SPICE网表对这些支持不好,老老实实用字母、数字、下划线。
- 原理图里的隐藏引脚要注意。有些运放符号把电源脚隐藏了,如果不小心没接电源或接错极性,仿真结果会非常诡异。
- 电源极性一定不要反。反接一次,仿真虽然能跑,但波形往往是饱和到轨上的直线,看起来好像有结果,其实完全没价值。
这些坑看起来琐碎,每一条我都真实踩过。把它们写下来,就是想让你少走几次弯路。
6. 我的实操心得:让仿真真正落地的几点建议
文章写到最后,我想分享几个长期实践下来让我受益最多的经验。这些不是软件手册里能找到的内容,更多是工作习惯层面的东西。
6.1 模型能简则简,先验证行为再验证性能
我见过太多人一上来就下载厂家最全的模型,结果仿一个最简单的电路都要跑半天,还动不动不收敛。正确的做法是分两级走。第一级用通用模型验证行为,确认拓扑、极性、数量级没有问题;第二级换上厂家模型验证性能,比如带宽、压摆率、漏电流这些精确参数。两级分开,既能保证速度,也能保证最终精度。
6.2 先把仿真跑起来,再去布板
有的同事喜欢原理图画完直接布线,等板子回来再调试。我自己的流程是先花一个下午把关键路径仿真跑通,把阻容参数、驱动能力、响应速度都确认一遍,然后才进PCB。这个习惯帮我避开过不少低级错误,比如前级输出阻抗太大,导致后级输入被拉垮;或者反馈电阻取值偏差太大,导致增益和预期完全不符。这些在实验室里可能要焊好几个版本的板子才能发现,用仿真半小时就能锁定。
6.3 保存分析配置,建立参数速查
不同场景的仿真设置差别挺大,每次重新填参数既浪费时间又容易出错。我的做法是把自己常用场景做成模板:电源上电时序用一套瞬态参数,滤波器验证用一套AC扫描参数,传输曲线扫描用一套DC参数。每次换项目,直接加载配置,只改信号名和频率范围就行。
最后再说一个操作层面的小技巧:刚开始跑仿真时,尽量让原理图上的仿真回路最小化,哪怕暂时断开后续级联,也要先把一个功能块跑通。每次看到波形正常出现,再逐步把下一级接入。这个“最小可仿真单元”的思路,和写代码时先跑通最小可运行程序是一样的道理。等你习惯了这套节奏,Altium里的电路仿真就不再是偶尔拿来“试一下”的功能,而是真正成为你设计流程里不可缺的一环。