模拟运算放大器饱和

2020-07-11 10:01:58

在数字世界中模拟真实电路时,重要的是要考虑硬件组件中存在的怪癖和约束。本文将研究当运算放大器达到饱和时,软件应用程序如何模拟其对信号的影响。

多功能运算放大器(Op-Amp)有许多缺陷和注意事项,在电路设计中必须加以考虑。当软件旨在模仿硬件设计时,应该考虑这些缺陷,并根据需要进行复制。

在理想情况下,运算放大器可以输出任意电压,但实际上它们受到电源的限制。输出信号的峰间电压不能高于电源线的电压;这称为饱和。在较老的运算放大器中,输出信号的峰间电压将比电源的峰间电压低几伏,尽管较新的运算放大器可以更接近电源。

查看运算放大器的数据表时,您通常会看到类似以下内容的图表:

$$f(X)=\Begin{Cases}n&;:x\倍g\leq n&;\text{(负饱和度)}\\x\次g&;:n<;x\次g<;p&;\text{(活动/线性区域)}\\p&;:x\倍g\geq p&;\text{(正饱和度)}\end{case}$$。

其中\(\;n=\text{负饱和电压}\),\(\;p=\text{正饱和电压}\),\(\;x=\text{输入信号}\),\(\;g=\text{增益}\)。

换言之,运算放大器的输出在两个饱和阈值之间时相对于输入是线性的,但一旦高于或低于正饱和水平或负饱和水平,输出就与饱和水平匹配。

这是非理想运算放大器的理想化版本,这是一个奇怪的概念。真正的运算放大器饱和度看起来不是这样的,理想的运算放大器也不是这样的(它根本不会饱和)。这个理想化的版本对我们来说很容易模拟,不需要做任何复杂的计算;只需在饱和阈值处修剪即可。

实际上,运算放大器在接近饱和时会有一条轻微的曲线,并且会变成非线性,类似于下图(有点夸张):

我们可以通过观察它来判断它是Sigmoid函数(也就是任何具有“S”形状的函数)。

我不是一个专业的数学家,所以我会经常用Wolfram Alpha做一些试错,看看我是否能把一个等式推得更接近我正在寻找的东西。

在编写时,它的性能特征相当平淡;几乎没有线性区域。然而,我注意到,如果我推广公式(即下面的公式),那么随着n的增加,特性变得更像理想的运算放大器饱和特性。

上图为\(n=100\)。当我区分这个函数时,我发现是的,‘线性区域’实际上是线性的(而不是一些难以察觉的曲线):

我玩了玩数字,最后以\(n=100\)结算。这似乎是介于“什么都不做”和“做得太多”之间的一个很好的中介。如果我真的想,我可以在示波器上测量它,然后试着精确地匹配它,但对我来说,这已经足够好了。

要在代码中使用这一点,只需重新调整输入信号的比例,使阈值降至-1和1,通过函数传递重新调整比例的信号(如\(x\)),然后重新调整比例。

FLOAT SANTURATE(浮点输入,浮点阈值){FLOAT SCALE=输入/阈值;RETURN(THRESHOLD*SCALE)/(STD::POW(1.f+STD::POW(Scale,20.f),1.f/20.f));}

另外,我参加聚会迟到了,不过我最近有一个推特账号,你可以在这里关注。