目录

通过允许创建包括其他参数的非线性函数在内的表达式,函数极大地扩展了参数和表达式的功能。

预定义功能

立创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}

goToTop