Saber电源仿真—step by step

2019-07-14 01:11发布

电路仿真作为电路计算的必要补充和论证手段,在工程应用中起着越来越重要的作用。熟练地使用仿真工具,在设计的起始阶段就能够发现方案设计和参数计算的重大错误,在产品开发过程中,辅之以精确的建模和仿真,可以替代大量的实际调试工作,节约可观的人力和物力投入,极大的提高开发效率。 Saber仿真软件是一个功能非常强大的电路仿真软件,尤其适合应用在开关电源领域的时域和频域仿真。但由于国内的学术机构和公司不太重视仿真应用,所以相关的研究较少,没有形成系统化的文档体系,这给想学习仿真软件应用的工程师造成了许多的困扰,始终在门外徘徊而不得入。

实例

下面仅以简单的实例,介绍一下saber的基本应用,供初学者参考。 在saber安装完成之后,点击进入saber sketch,然后选择file—> new—>schematic,进入原理图绘制画面,如下图所示: 在进入原理图绘制界面之后,可以按照我们自己的需要来绘制电路原理图。首先,我们来绘制一个简单的三极管共发射极电路。 第一步,添加元器件,在空白处点击鼠标右键菜单get part—>part gallery    有两个选择器件的方法,上面的左图是search画面,可以在搜索框中键入关键字来检索,右图是borwse画面,可以在相关的文件目录下查找自己需要的器件。 通常情况下,选择search方式更为快捷,根据关键字可以快速定位到自己想要的器件。 如下图所示,输入双极型晶体管的缩写bjt,回车确定,列表中显示所有含有关键字bjt的器件,我们选择第三个选择项,这是一个理想的NPN型三极管,双击之后,在原理图中就添加了该器件。 依照此方法,我们先后输入voltage source查找电压源,并选择voltage source general purpose添加到原理图。输入resistor,选择resistor[I]添加到原理图(添加2个)。输入GND,选择ground(saber node 0)添加到原理图,ground(saber node 0)是必须的,否则saber仿真将因为没有参考地而无法进行。 添加完器件之后,用鼠标左键拖动每个器件,合理布置位置,鼠标左键双击该器件,即可修改必要的参数,在本示例中,仅需要修改电压源的电压,电阻的阻值,其他的都不需修改。 然后按下键盘的W键,光标变成了一个十字星,即表示可绘制wire(连线),将所有的器件连接起来。如下图所示: 其中电压源为12V,基极电阻为10k,集电极电阻为1k,共发射极连接。 选择分析方法,由于这是一个大信号系统,我们寻找的是一个静态直流工作点,因此我们选择下图所示的DC operating point,将basic中的display after analysis项选择Yes,完成后点击OK。 直流工作点仿真结果如下: 三极管的基极电压为0.8422V,集电极电压为0.06869V,即深度饱和时,Vbe约为0.84V,Vce约为0.069V。 还有一种更为直观的方法,如同示波器一样观测每个节点的电压波形,如下图所示: 选择分析图标栏的第五项operating point / transient,弹出窗口,进行参数设定。在上图中的basic栏中,End Time指的是仿真结束的时间,这个时间指的是电路运行的时间跨度,而不是仿真软件工作的时间,在本示例中,由于在系统中没有时变量和电容器,所以选择1us就足够了,默认单位为s,所以输入1u。Time Step指的是仿真软件计算步进,即从这个工作点到下一个工作点的时间跨度,在本示例中,由于没有瞬变量,选择100ns就可以了,输入100n。Monitor Progress采用默认设置,Plot Analysis选择下拉框中的Yes-replace Plot,表示每一次仿真之后,所有的仿真结果都更新为最新值。   在上图中,input/output一栏里,waveform at pins选择下拉框中的Across and Through Variables,表示仿真结果同时含有电压和电流值,这样你既可以看电压波形,也可以看电流波形。在右图的Transient选项栏里,Data File的输入框中输入 _ ,即下划线,表示仿真结果不以文件的形式输出(只保存在虚拟内存中),一旦关闭仿真软件,仿真结果将会丢失。记住,这里一定要输入下划线,否则你的硬盘很容易被仿真结果文件填满,一个小的仿真结果文件都有几百M,稍大一点的都有几个G,还是节省一点吧,不要以文件形式保存在硬盘中了。 还需要设置integration control栏中的Max Time Step和Min Time Step选项,这两个会影响仿真的速度,一个是最大步进,一个是最小步进,仿真的步进将在这两个值之间,这两个值取的越大,仿真软件的运行速度越快,但同样的会降低仿真的精度,导致结果可能失真。同时,有一点必须注意,Min Time Step必须小于Basic中设置的Time Step,否则仿真软件会因为错误而终止仿真进程。在本示例中,我们选择Max Time Step为200ns,Min Time Step为99ns(小于Time Step设定的100ns)。 以上参数设置完成之后,其他参数均保持默认值,点击OK,saber会运行仿真进程。 仿真结束之后,程序会打开cosmoscope界面,让我们可以观察所有节点的电压和电流波形。 如上图所示,在cosmoscope界面里,有两个对话框,第一个是signal manager,其中显示所有可供选择的仿真结果文件,此文件保存在虚拟内存中,软件关闭后即丢失。第二个对话框显示所选中的仿真结果文件中所有可供观察的节点,我们点击三极管q_3p.q_3p1的可选项,选择b和c,即基极b和集电极c的电压,分别双击,其波形显示如下: 选择测量选项,分别测得Vc为0.06869V,Vb为0.8422V,与DC operating point中分析的结果一致。 以上是一个简单的示例,下面我们再仿真一个稍微复杂一点的电路,用TL431和三极管共同构成的一个线性直流稳压电源,如下图所示: 添加TL431的方法与上面添加其他器件的一样,在空白处点击鼠标右键—>get part—>parts gallery,然后输入tl431进行关键字检索,在搜索到的器件列表中选择tl431c,双击添加到原理图中。 这里还有两个简单的原理图绘制技巧,如果想添加某个器件,原理图中已有类似器件,比如说电阻,那么不必再去检索了,鼠标左键单击已有的电阻,这时器件颜 {MOD}为绿 {MOD},表示已选中,然后用ctrl+C复制,鼠标左键再点击空白处,键盘ctrl+V粘贴,器件就添加完成了,修改其参数即可。第二个就是旋转器件的角度,鼠标左键点击选中器件,鼠标右键点击弹出菜单栏,其中的rotate选项可以按照角度旋转器件,flip选项可以上下或左右翻转器件。 在本示例中,我们想做一个10V 0.5A的线性电源。 输入电压12V,用TL431来控制输出电压值,反馈比例为1k/(1k+3k)=1/4,输出电压即为2.5V*4=10V,负载电阻为20Ω,输出电流为10V/20Ω=0.5A,假定三极管的Vbe为0.8V,那么TL431阴极电压为10V+0.8V=10.8V,TL431的工作电流在1mA~100mA之间,这里我们选择三极管集电极和基极之间的跨接电阻为50Ω,则流过该电阻的电流为(12V-10.8V)/50Ω=24mA,假定三极管的放大倍数为100,那么流入三极管基极的电流为5mA,流入TL431阴极的电流为19mA,满足TL431工作电流的取值范围。 首先来看一下DC operating point的分析结果: n_9即为输出电压,其值为9.998V,与我们设计的10V输出电压吻合。 接下来用operating point / transient来看一下各节点的电压波形: 以上波形基本上与设计值一致。通过这个简单的例子,我们用几分钟的时间来仿真,可以替代几个小时的电路板焊接和调试的工作,是不是可以节约很多的时间呢?   接下来,我们的仿真工作要进入开关电源的领域了,先从最简单的BUCK电路开始吧,脑子里面不能立即勾画出BUCK电路的请举手,您可以从大学一年级重新开始学习啦。 仿真之前,先做简单的设定和计算: 输入电压20V,输出电压10V,那么稳态占空比是0.5。 输出电流10A,那么负载电阻是1Ω。 设定电流纹波系数为0.4,纹波电流峰峰值为10A*0.4=4A。 设定开关频率为100kHz,开关周期为10us,那么电感量为: L=(20V-10V)*(10us*0.5)/4A=12.5uH。 电容根据经验值取100uF,电容的大小将决定输出电压纹波的大小,取的大一点,输出电压纹波小一点,大家可以自由选取,观察输出电压纹波的大小。仿真的优点就是你可以随心所欲的选取你的参数,来观察不同的仿真结果,而不用劳心劳力的去焊板子调试,示波器观测。 参数计算完成之后,下面要在saber中添加元器件,绘制原理图了: 首先,我们要添加一个开关管,你可以添加一个真实的MOSFET,也可以用一个模拟开关替代,由于本示例仅仅是验证BUCK电路的原理,所以选择了模拟开关。在search检索栏中输入关键字switch确认,在检索结果中选择switch,analog SPST w/logic Enbl,双击添加到原理图中。   在原理图中双击该器件,打开属性栏,需要设置一些关键参数,ron即开关导通时的阻抗,此处保持默认值0.001Ω,roof即开关管关闭时的阻抗,此处保持默认值1megΩ(1兆欧),如果你想改变导通和关断阻抗也是可以的,还是那句话,随心所欲。ton和toff是两个关键参数,即开关管的开通时间和关断时间,表示开关管的开关速度,理论上我们希望开关速度越快越好,比如你可以设置为1ns(注意,必须大于0,所以不能设置为0),但是这两个值影响到saber仿真的时间步进,即saber仿真参数中的Min Time Step必须小于ron和roff,否则仿真进程会因为错误而无法进行。所以如果ron和roff设置的太小,仿真参数中的Min Time Step也必须设置很小,导致仿真速度很慢,需要等待很长时间才能结束仿真进程,尤其是在大型的系统仿真中,由于电路结构复杂,元器件多,saber的计算量很大,如果时间步进再设置的很小,可能需要几十分钟的时间来仿真一个几十毫秒的仿真进程。当然,您也可以泡一杯咖啡或一杯茶,悠闲的等待。在本示例中,为了节约时间,设置ron和roff为100ns。 添加了开关管之后,还需要添加一个驱动信号,由于我们使用的模拟开关是逻辑使能的,所以需要一个逻辑时钟信号来驱动它。 在器件搜索栏中输入logic clock,双击搜索结果,添加到原理图中。然后再双击原理图中的器件,打开属性栏设置参数,有两个关键参数,一个是freq,即频率,此处输入100k,默认单位是Hz,所以不需要画蛇添足的输入单位。此处再说明一下,saber的参数设置中,所有的参数都是有默认单位的,频率是Hz,时间是s,电压是V,电流是A,功率是W,以此类推,并不需要我们输入单位符号。第二个参数是duty,即占空比,此处输入0.5。 接下来,依次添加电感(关键字inductor搜索),电容(关键字capacitor搜索),二极管(关键字diode搜索)到原理图中,diode检索后选择diode,ideal,即理想二极管。 添加完成之后,修改必要的参数,电感修改参数栏的l值,输入12.5u,电容修改参数栏的c值,输入100u,二极管修改参数栏的Von值,输入0.3V(肖特基二极管的导通压降)。负载电阻的rnom值修改为1。 所有器件参数设置完成,进行仿真参数设置,如下: 为什么要仿真10ms?是因为我们的开环电路,一开始就是0.5的占空比,电感电流为0,电容电压为0,会有一个震荡的过程,直到达到稳态值。 在这里我们希望看到的是稳态值,而不是震荡的过程,所以仿真进程设置10ms,以使时间长度足够观测到稳态值。 仿真结果如上图所示,在经过1ms左右的震荡之后,电压和电流逐渐达到稳态值,输出电压为9.87V,与我们计算的10V有些误差,为何?因为在我们的电路中开关管有导通阻抗,二极管有导通压降,这是在计算时没有考虑的,所以仿真结果与计算值有些出入。 在上图所示的时间轴上,如红 {MOD}标记所示,鼠标左键按住不放,向右移动一段距离后松开,即可把此段时间内的波形展开: 同样的方式继续展开时间轴,直到能够看到完整清晰的电感电流波形和电容电压波形,如下图所示: 测量结果显示,电容电压纹波为0.05V,电感电流纹波为4.06A。如何进行精确的测量? 如上图所示,在Tool中选择measurement tool,弹出菜单,点击measurement右边的可选框,弹出下拉菜单,选择levels中的peak to peak,即可测量峰峰值,同时可以看到菜单中的选项非常丰富,跟示波器的使用方法类似,可测量最大值,最小值,峰峰值,平均值等,在time domain选项中还可以测量各种跟时间相关的量。 至此,一个BUCK电路的开环仿真就完成了,你也可以尝试仿真BOOST,BUCK-BOOST等电路的开环仿真,用几分钟的时间,完成了一个电路的仿真,看到了和示波器中一样的电压或电流波形,效果是多么的美妙啊。 大部分的调试工作都是可以通过仿真来替代的。大部分的设计工作都是可以通过仿真来验证合理性和可行性的,一旦您掌握了仿真的方法,并能够熟练的使用,你将终生受益,你可以摆脱大多数低效的调试工作,可以节约大量的时间和精力,可以直观的看到你的设计结果,而不仅仅是计算书中的计算公式和枯燥的数字。 当你有一个对于电路的新的想法和思路,如果你要验证它,你可能要花费几天甚至几个月的时间去准备器件,焊板子,调试,直到获得结果。可是如果你用仿真的方法,也许几分钟就搞定了,并且通过更改电路和参数,许多灵感就会迸发出来。 对于很多无法通过精确计算来推算的电路,我们通过仿真就可以获得精确的结果,这对于非线性系统的解决方案而言,真是事半功倍啊,为什么要去求解复杂的矩阵方程?我需要的仅仅是结果而已,过程的推导留给大学老师吧。仿真可以让我们从复杂的计算中解脱出来,随心所欲的更改电路参数,然后获得直观的结果,当你掌握诀窍的时候,你可以让自己的开发效率提高十倍!