本文将重点介绍与传统编程语言的数值方案相比,符号方案在二极管电路仿真方面的优势。
什么是限幅电路?
限幅电路(也称为限幅器或削波器)与简单的半波整流器相似,不同之处在于其输出信号是二极管两端的压降,而不是电阻器两端的压降。第二个特别之处则在于其二极管上串联了一个电池。在分析这样的电路之前,有必要先回想一下在开发仿真软件时遇到的困难。在本期中,我们将向大家展示,传统编程语言需要用多行代码才能实现的一个例程,使用Mathematica软件则只需一行代码就能解决问题。
数值方案
让我们从最简单的电路开始:一个电阻R,输入信号为Vin(t)=VM sin ωt。我们将这个量视为输出信号,而电流按系数R−1缩放。在这种情况下,仿真可以说是完全相同的,因为它再现了输入信号。然后将二极管D与电阻器R串联,如图1所示。
图1:串联电阻和二极管
通过应用基尔霍夫第二定律并考虑电压-电流特性,经过简单的步骤,我们就得出以下方程:
其中VT是以伏特为单位的热当量,在室温下等于26mV。
因此,串联RD中流动的电流就是方程(1)的解。这就是所谓的“函数方程”,因为未知数是函数而不是数字。很明显方程(1)不能以封闭形式求解,因为我们无法获得电路中流动的电流i(t)的解析表达式。之后,我们可以使用Mathematica进行数值计算,对连续变量t在周期区间[0,2π/ω]内进行离散采样,即方程(1)的第二个因素。结果得到一个由N个解耦方程组成的系统:
而这可以通过Mathematica的Solve语句轻松解决。例如,对于:
解列表{x0,x1,…,xN}被绘制为tn的函数,如图2所示。通过连接连续线段,我们获得如图3所示的趋势。
图2:以数值方式找到的解xn=in的趋势
图3:使用ListLinePlot指令获得的解xn=in的趋势
符号方案将函数方程(1)改写为以下形式更为方便:
其中x(t)是反向饱和电流归一化的电流强度,a=Ri0/VT,并且f(t)=vin(t)。在符号模式下,我们强制Wolfram语言内核通过Solve指令找到解x(t)。相应的输出通过Lambert W Function(朗伯W函数)表示,该函数在Wolfram语言中是内置的,并由指令ProductLog调用。对于正弦输入,最好假设电阻R和峰值VM作为参数;对于角频率,我们照常假设ω=20rad/s,因为结果与该参数无关。而R和VM才是决定性的,尤其是峰值对二极管整流效果的影响最大。例如,如果VM=1mV,则无论R的值是多少,二极管都不会进行整流,如图4-5所示。
图4:R=1Ω时以安培为单位的电流趋势
图5:R=1MΩ时以安培为单位的电流趋势
基本上,这种表现是由于输入信号归一化为热当量(以伏特为单位),即VT=26mV。相对于VT,输入信号的峰值必须足够高。图6的图形证实了这一点,从图中我们可以看出,整流器实际上是理想的,但由于R值较低,它几乎在所有情况下都是正向偏置短路。当R=1MΩ并保持输入峰值时,我们就可以得到图7的图形。由于欧姆元件的线性,R上的压降将具有与电流相同的趋势。否则,我们就会发现二极管两端的压降趋势是扭曲的。如果我们使用Mathematica计算数值,就会发现图8的奇怪趋势,即输入信号的负半波的最小峰值被截断。这是Mathematica内核在搜索方程(4)的解时发出警告的结果。为了验证上述内容,只要使用基尔霍夫第二定律计算电压vD并绘制解的图形即可(见图9)。
图6:R=1Ω且VM=10V时的电流强度趋势
图7:R=1MΩ且VM=10V时的电流强度趋势
图8:R=10Ω且VM=1V时二极管两端压降的趋势
图9:R=10Ω且VM=1V时二极管两端压降的正确趋势