Skip to content

功能

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

预定义功能

嘉立创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,反之为0sgn(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否则为ztanh(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}