功能
通过允许创建包括其他参数的非线性函数在内的表达式,函数极大地扩展了参数和表达式的功能。
预定义功能
嘉立创EDA具有许多预定义的功能。除了必须手动复制和粘贴的softlim(ip,lo,hi,sharp)函数外,所有这些函数都立即可用在表达式中,因为它们是LTspice内置的。
有关功能的完整列表以及有关其用法的信息,请查阅LTspice软件中的“帮助”说明或者以下说明:
下表列出了一些最常用的函数及介绍:
说明 | 描述 | 说明 | 描述 | |
---|---|---|---|---|
abs(x) | 绝对值 | limit(x, L, U) | 以L和U范围内x的值 | |
acos(x)arccos(x) | 反余弦 | ln(x)log(x) | 自然对数 | |
acosh(x) | 弧双曲余弦的实部 | log10(x) | 以10为底的对数函数 | |
asin(x)arcsin(x) | 反正弦 | max(x,y) | 最大值 | |
asinh(x) | 弧双曲正弦 | min(x,y) | 最小值 | |
atan(x)arctan(x) | 反正切 | pow(x,a) | x的实数部分升为a的幂。零表示负x,小数a | |
atan2(y,x) | 给定X 、 Y 坐标的反正切值 | pwr(x,a) | x的绝对值升为a的幂 | |
atanh(x) | 反双曲正切 | pwrs(x,a) | pwr(x)乘以x的符号 | |
buf(x) | 如果x> 0.5,为1,反之为0 | sgn(x) | x的符号。x <0时返回-1,x == 0时返回0(其中==表示'完全等于'),x> 0时返回1 | |
ceil(x) | 等于或大于x的整数 | sin(x) | x的正弦 | |
cos(x) | 余弦 | sinh(x) | x的双曲正弦 | |
cosh(x) | 双曲余弦 | softlim(ip, lo, hi, sharp) | ip的值,由lo和hi界定,线性和受限区域之间的过渡锐度由'sharp'定义。 | |
exp(x) | 幂函数 | sqrt(x) | x平方根的实部。零代表负数x | |
floor(x) | 等于或小于x的整数 | tan(x) | x的切线 | |
if(x,y,z) | 如果x> 0.5,则y否则为z | tanh(x) | x的双曲正切 | |
placeholder | 占位符 | u(x) | 单位步长,即如果x> 0,则为1,否则为0 | |
int(x) | 向下取整 | uramp(x) | x如果x> 0,否则为0 | |
inv(x) | 如果x> 0.5为0反之为1 |
请注意,此列表中的所有功能均可在嘉立创EDA中使用。参考以下工程例程:
13.2 用户定义的功能
在某些情况下,可能需要在原理图中的多个位置使用某个功能,或者在几个不同的原理图中有用的功能。为了避免在每次需要时都将复杂的表达式复制并粘贴为文本块,.func语句使创建用户定义的函数成为可能。
.func语句的语法非常简单:
.func myfunctionname(a,b,c, ...n) {expression of functions of a, b, c ... n}
例如:.func hypotenuse(x,y) {sqrt(x^2+y^2)}定义一个函数,该函数计算边长为x和y的直角三角形的斜边的长度。
以这种方式在原理图中定义了功能之后,就可以在该原理图中该功能的任何位置使用该功能。但是,必须在使用它的每个项目的每个工作表中都定义它,如果在使用过程中发觉得该函数非常好用,欢迎联系我们加入系统函数中。
要使用该功能,只需将其粘贴hypotenuse(x,y)到所需的位置,然后用所需的变量替换“ x”和“ y”即可。因此,例如在参数表达式中使用该函数:
.param a=3 b=4 hypot=hypotenuse(a,b)
或在电流输出B源中,由两个电压V(一侧)和V(另一侧)驱动:
I=hypotenuse(V(oneside), V(otherside))
在上表中链接到的模拟中,以及自动附加的预定义功能的所有嘉立创EDA仿真网表中,都有许多由.func语句定义的功能示例。请注意,当在.func语句中使用时,表达式可以使用'+'延续字符来换行。
上表中的softlim(ip,lo,hi,sharp)函数是一个示例:
.func softlim(ip,lo,hi,sharp)
+ {uramp(((u(ip / 2 + 0.125 /(max(abs(sharp),1)* 0.5 /(hi-lo))-hi / 2) )*(max(abs (sharp),1)* 0.5 /(hi-lo))*
-1 *(uramp(0.25 /(max(abs(sharp),1)* 0.5 /(hi-lo)) + hi-ip)** 2)+
(1-u(ip / 2 + 0.125 /(max(abs(sharp),1)* 0.5 /(hi-lo))-hi / 2))*(ip -hi)+ hi)-(hi + lo)/ 2)-
+ uramp(-1 *((1-u(ip / 2-0.125 /(max(abs(sharp),1)* 0.5 /(hi- lo))-lo / 2))*(max(abs(sharp),1)* 0.5 /(hi-lo))*
+ uramp(ip + 0.25 /(max(abs(sharp),1)* 0.5 / (hi-lo))-lo)** 2 +
+ u(ip / 2-0.125 /(max(abs(sharp),1)* 0.5 /(hi-lo))-lo / 2)*(ip- lo)+ lo)+(hi + lo)/ 2)+(hi + lo)/ 2}
2
3
4
5
6
7