初始启动条件
该小节中主要介绍一些背景知识和基本启动技巧,要了解有关仿真启动开始时发生的情况,有以下几点要点:
背景
- 启动时间 t=0
当 t < 0 时,电路中的电压都将被设置为直流稳态值,所以,即使该电路是振荡器,在 t = 0 之前,也将假定它处于稳定的非振荡状态。当t = 0时,电路从初始状态开始工作。
基于诸如相移电路、维恩桥电路或晶体振荡器之类的调谐电路的振荡器的初始状态将由其直流偏置条件来定义。如果电路中没有噪声源那么电路将保持平衡,它可能永远不会开始振荡。
尽管在大多数情况下,可能由于有限的分辨率产生的数学模型噪声及模型运算时产生的误差噪声而打破平衡,但这可能需要很长时间才能使电路正常工作。特别是晶体振荡器可能会花费数十万倍的振荡器周期才能启动并达到稳定状态。为了使仿真器等待振荡器启动所等待的时间最小化,可以引入一些初始启动条件来使电路“启动”进入振荡。
在LTspice中启动大多数电路的最简单方法是运行瞬态(.tran)分析,并将启动修饰符附加到.tran指令的末尾。例如:
.tran 1m ; 从初始DC条件开始运行1ms的时域仿真
.tran 1m startup ; 首先将独立的源都设置为零,然后进行1ms的时域仿真,然后在仿真的前20us内将其逐渐增大。
另外启动调谐电路振荡器的另一种简单方法是:将PULSE电源替换为设置为所需电源电压初始电平的PULSE电源。
举例来说,如果一个9V电源的电路要以1us的时间步长运行1ms,则可以将PULSE源设置为9V的初始电平,并以100ns的上升和下降时间在1us的时间内降至8.5V。或8.5V的初始电平,在100ns上升时间上升到9V的脉冲电平之前有1us的延迟。
可以使用几乎插入电路中任何位置的电压源来执行相同的技巧,只需向偏置电压注入一小步或一个脉冲即可,但是必须记住,如果在突跳后电压阶跃或脉冲未恢复为零,则它代表了电路那部分的失调电压。
举个晶体振荡器启动的例子:
由于晶体管的Q值极高,晶体振荡器需要很长时间才能启动。仿真也是如此,为避免仿真花费太长时间来运行并生成大量数据文件,它们可能需要分阶段运行,且启动和停止时间会增加,但值较小(Tstop-Tstart)。
- EXP和PWL源作为启动电源
对于大多数驰豫振荡器,例如经典的互补晶体管构成的多谐振荡器或555定时器,都有两个稳定状态,在这两种状态之间进行电路切换来保持振荡。
但是,在 t = 0 之前的直流偏置下,这些电路通常会稳定进入这些稳定状态中的一个,因此停留在 t = 0 处。这意味着它们永远不会开始振荡。
以下是一个不能自行启动的简单RC弛豫振荡器的示例:
可以使用PULSE源完成此操作,将电源从0斜升到所需的电源电压。因此,例如,通过将初始电平设置为0并将脉冲电平设置为9且延迟为零时间,上升时间为200us,电路从所有内部节点均为零开始启动。该示例还演示了仅通过简单的DC来启动同一电路的方法,只需将启动修饰符添加到.tran语句即可运行:
另一种可能性-稍后将对其进行详细说明-是在行为源代码中使用作为时间函数的表达式。
例如,此表达式在行为源中:
V = 9 *(1-exp(-time / 100u))
该表达式的意思是:该电压从零开始,并以100us的时间常数以指数方式上升到最终值9V:
一些复杂的电路(或具有复杂模型的简单电路)可能无法仿真,因为仿真器无法在 t = 0 之前找到直流工作点。
如果电源(或多个电源)从0斜升,则此类电路通常会模拟良好。以与稍微平衡对称组件可以帮助启动,略微平衡电压,电源电压斜升的延迟或上升时间相同的方式,帮助启动更多“复杂”的模拟电路。
但是,从零电源斜坡开始使用启动存在一个缺点。如前所述,在瞬态仿真开始时,在仿真开始于t = 0之前,所有电容器两端的电压和流经电路中所有电感器的电流都将达到其直流稳态值。
如果仿真开始于在t = 0时将电源电压设置为零,那么显然所有内部电压和电流也必须为零(由于任何信号源的初始电平以及某些内部设计不当的电源所造成的一些小的偏移量除外)电源电压为零时不会崩溃为零的模型)。
如果所有内部电压和电流在t = 0时均为零,则所有内部节点达到其直流稳态所需的仿真停止时间可能要长得多。一个简单的解决方案是将仿真运行足够长的时间以使所有问题都得以解决,但仅在停止时间之前绘制结果足够长的时间以显示感兴趣的信号。
因此,例如,通过将瞬态分析设置为具有100ms的停止时间和98ms的启动时间,可以观察到一个由1kHz源驱动但需要95ms稳定时间的电路从t = 98ms到t = 100ms观察到,像这样:.tran 0 100m 98m
该解决方案效果很好,但是在此示例中,超过95%的仿真时间仅用于使电路达到稳定状态,然后再生成任何有用的结果。这非常浪费仿真时间,并且对于复杂的仿真(例如开关模式电源(SMPS)仿真)可能会花费大量的实时时间,而在这些仿真中,很可能会出现这种情况。
设置通过器件的初始电压和电流
在某些情况下,需要在某些预定状态下开始仿真。例如,可能需要电容器在时间t = 0时开始瞬态仿真,并预充电到某个给定电压。
类似地,可能需要在时间t = 0时指定电感器中的电流。在较大的仿真中,将电源的输出平滑电容器预充电至近似正确的电压可能会有所帮助,以节省将其从零充电所需的时间。如果电容器位于SMPS的输出端,则将SMPS中的电感器充电至其平均工作电流也可能很有用。
- 使用.icspice指令设置初始电压条件
以下两个示例说明了.ic指令的用法:
该方法虽然可行,但是不建议使用这种方法。在下面的示例中显示了使用.ic语句的替代方法,这些示例显示了两种将'uic'选项附加到瞬态分析中的方法,但是由于'uic'描述中已经给出了原因如果在“设置分析”中“ IC:设置初始条件”部分中选择了“选项”,则应谨慎使用此选项。
- 使用电流源设置通过电感的初始电流
在LTspice中,.ic spice指令可用于设置通过一个或多个电感器的初始电流条件。在以下示例中对此进行了说明:
- 设置电容器的初始电压
不建议使用这种方法,但是使用'.ic'语句设置电容器两端的初始电压可以在ic =后面加上 电容值和uic .tran语句:
- 设置通过电感的初始电流
不建议采用这种方法,但是使用'.ic'语句设置通过电感器的初始电流可以在ic =后面附加 电感值和uic .tran语句:
某些电路可能会自行启动,但仅更改器件模型可能会导致其无法启动。在花很多时间尝试解决这些问题之前,希望大家不要害怕去尝试和解决问题。
使用1V电源帮助启动
这是一项高级技术,应用范围有限,但在适当的情况下可能非常有用。
通过在原理图中放置一个1V电压源,将其输出命名为“ unity”,然后使用B Sources中的表达式乘以V(unity),可以强制模拟中的所有B Source从零开始在早期DC工作点部分进行瞬态仿真。
有时这可以帮助从零内部初始状态产生干净的启动。但是必须牢记,与其他将模拟从零调高的技术一样,任何运行OP,TF或AC模拟的尝试通常都会返回零结果,因为所有内部状态以及许多情况下的增益B源将被强制设为零初始值。用带宽受限的诺顿电源代替理想电压源和戴维南电压源,以帮助启动由于这项技术有助于提高仿真的整体收敛性,而不仅仅是启动行为,因此它是一种非常广泛的应用技术。
仿真中的理想电压源能够产生无限大的电流,因此,在仿真过程中的任何时候看起来都是电容性的负载都有可能引起瞬时无限大的电流。这可能导致仿真陷入溢出状态,或者无法找到继续执行的有效下一步。无论哪种情况,仿真都无法收敛。为避免这种情况,比较好的做法是始终在每个电压源上串联一些电阻。这会将所有理想电压源转换为具有有限源电阻的电压源,这通常可以提高大多数模拟的仿真速度,也可以显着改善许多模拟的启动和收敛。
使用“关闭”选项来帮助启动
一些组件(例如开关,bjts,jfet,MOSFET和MESFET)具有“ OFF”选项,以指定器件处于初始OFF状态。开关还具有“ ON”选项,以指定设备处于初始“ ON”状态。
该选项对于确保例如两个晶体管的双稳态或单稳态电路或一个不稳定的多谐振荡器的一侧关闭是非常有用的,因此可以避免上述情况,即两个晶体管都处于初始状态。尽管这本身并不能保证电路将从t = 0开始启动,但是可以简化为确保电路正常运行而必须采取的任何其他措施。
通过在设备名称后附加关键字OFF(或仅对于开关为ON)来简单地调用这些状态。可以通过直接编辑原理图中的名称或通过右侧面板的“属性”对话框来完成。例如,要将名称为MYSWITCH的开关设置为最初打开,则名称应编辑为:MYSWITCH ON;要将名称为2N2222的bjt设置为初始OFF,则名称应编辑为:2N2222 OFF。