在使用SPICE仿真电子电路时,通过.PARAM指令使用用户定义参数是提高仿真模型灵活性和理解力的基本工具。用户定义参数使SPICE代码更具可读性、更模块化、更易于修改,尤其是在处理可能频繁更改或必须在电路的多个部分中使用的值时。此外,使用此系统,设计电子电路的速度要快得多。
SPICE中的.PARAM指令允许用户定义变量或参数,这些变量或参数可用于电路的各个部分以表示数值。用户无需将数值作为常数直接插入电路的组件中,而是可以使用.PARAM指令定义参数,然后轻松地在所有地方使用它。例如,必须多次仿真根据不同条件而变化的电阻器,您可以将电阻器的值定义为参数,而不是固定的固有值,这样将来修改它就更容易、更快捷。这种能力对于将名称与值关联起来以提高清晰度和参数化电路非常有用,这样甚至可以将解决方案模型保存在其库中。要执行参数替换和电子元件或电路图中其他表达式中的表达式评估,必须用大括号将其括起来,它就会被替换为浮点值。
如图1所示,第一个电路图是由7个电阻器组成的电路,这些电阻器以混合配置连接,并且元件值固定。V1是电压源,提供48V电压,这是为电路供电的电压。电路中有七个电阻器,阻值均为47欧姆,标记为R1、R2、R3、R4、R5、R6、R7。所有电阻器都以串联和并联方式连接,电压和电流根据这些不同的配置进行分配,V1提供的48V电压分布在各个电阻器上。通过电阻器的串联和并联,电流根据欧姆定律和基尔霍夫定律分配,电路输出(“out”)的电压为6.857V,电池产生的功率为17.5W。
图1:由七个电阻组成的电路,这些电阻以混合配置连接,元件值固定
现在,假如设计人员可能需要更改电路中所有电阻器的值。如果电路相对简单,只有几个电阻器,这可能还可以应付。然而,当电阻的数量变多时,比如说,几十甚至几百个,手动更改每个值的任务就变成了一个漫长而繁琐的过程。这不仅需要大量时间,而且还增加了出错的可能性,尤其是在设计或仿真过程中多次更改值时。例如,想象一个包含一千个电阻的电路,手动更改每个电阻的值不仅需要数小时甚至数天的时间,而且还可能引入一系列难以追踪的错误。
对设计的任何小改动都可能需要重复整个过程,这使得电路设计极其低效。面对如此大量的工作,即使是经验丰富的设计师也会发现自己不得不投入大量时间,更不用说由此产生的挫败感了。幸运的是,在这些情况下,SPICE中的.PARAM指令可以解决问题。借助此指令,设计人员可以定义一个代表电阻值的参数,并在网表中使用它,因此,无需手动更改每个电阻的值,只需更改一次参数即可。此更新会自动反映在使用该参数的所有电阻上,从而实现快速且无错误的更正。.PARAM指令不仅简化了流程,而且使其更加安全、高效,节省了时间和精力,同时大大降低了出错的风险。这样,即使在电路中元件数量非常多的最复杂情况下,设计人员也可以以更舒适、更优化的方式管理每个方面。
假设您想更改电阻的值,将它们全部改为56欧姆、100欧姆或220欧姆。更改所有电阻的这个值(现在只有七个,但如前所述,它们也可能是一百个)可能会花费大量时间。SPICE语言允许在网表中定义参数属性,.PARAM指令在解决这种可能的问题方面提供了很大的帮助。在图2中,您可以看到电路图与前一个完全等效,但使用了参数,在这种情况下,电阻没有恒定值,而是由特定指令定义的参数值来表征。
图2:与上例相同的电路,其中电阻值参数化
使用.PARAM指令定义参数的主要语法如下:
PARAM parameter_name=value
其中:
为了使用这种非常方便的功能,设计人员应按照下面列出的步骤操作,根据我们的示例:
现在,电路的仿真与前一个相同。要修改所有电阻的值,只需更改上一个指令即可:
.param VAL_RES=47
根据新指令:
.param VAL_RES=220
这些行将数值分配给标识符。可以使用空格分隔符在每行中进行多次分配。参数标识符的名称必须以字母开头。其他字符必须是字母、数字或某些特殊字符,仿真器会自动使用此新值进行仿真。在这种情况下,更换电阻值后,电路输出(“out”)的电压仍为6.857V,但此时电池产生的功率仅为3.7W,因为电阻值越大,流过的电流就越小。LTspice生成的SPICE网表如下:
* Resistors
V1 N001 N004 48V
R1 N002 N001 {VAL_RES}
R2 0 N004 {VAL_RES}
R3 N002 0 {VAL_RES}
R4 N003 N002 {VAL_RES}
R5 out N003 {VAL_RES}
R6 N005 0 {VAL_RES}
R7 out N005 {VAL_RES}
.tran 1
.param VAL_RES=220
.backanno
.end
一旦定义了参数,就可以在电路中任何可以接受数值的地方使用。现在,代入数值是一项相当简单快捷的操作,可以大大节省电路设计的时间,并大大降低输入错误的概率。
.PARAM指令的另一个强大用途是能够通过数学表达式定义参数。在SPICE中,可以定义依赖于其他参数或使用算术运算的参数。SPICE支持基本算术运算,例如加法、减法、乘法、除法和指数,以及对数、平方根等通用函数。图3中的示例很有用且具有一定说明性。其中,RC网络连接到正弦交流发电机,但电路的所有参数都取决于频率。换句话说,通过改变发电机的工作频率,其他组件的值会发生变化,如下所示:
下表提供了设计人员设置的频率相关各种参数调整的一些示例。
图3:.PARAM指令允许对任何参数进行参数化
SPICE中的.PARAM指令是一个功能强大的工具,可提高仿真电路图的可读性和可维护性。使用用户定义参数可实现更高效、更快速的仿真,使修改元件值更加容易,并支持高级参数分析。参数允许用户轻松更改元件值,而无需直接更改电路图。通过使用单个参数来表示电路中多个元件中电阻的值,您只需更改一次参数即可更新使用它的所有元件。使用用户定义参数可让您重用网表的部分内容,而无需每次重写元件值,例如,可以使用相同的网表,同时仅更改必要的参数。使用参数使SPICE代码更具可读性和直观性,尤其是在复杂电路中,可以选择参数名称来表达元件的功能,从而更容易理解电路中每个元件的作用。
(原文刊登于EDN姊妹网站Power Electronics News,参考链接:SPICE Course for Electronic Simulation – Part15: User-Defined Parameters and the .PARAM Directive,由Ricardo Xie编译。)