第21周: MATLAB和PSpice的联合仿真
MATLAB是使用非常广泛的一种科学计算软件,在系统级设计和仿真方面的强大能力已经获得广泛的认可,拥有大量的数据处理和数据分析的函数,更集成了强大的绘图功能。
而PSpice则在电路级的模拟仿真与优化设计方面具有强大的功能,模拟结果比较准确地反映出实际电路的特性。
本节将介绍如何结合使用MATLAB的强大功能,在PSpice中调用MATLAB的数据和函数;以及利用MATLAB的强大绘图功能,将PSpice的仿真结果在MATLAB中处理显示;最后是介绍利用“PSpice Simulink协同仿真接口”模块,在MATLAB的Simulink中调用PSpice的实际电路,实现与PSpice的联合仿真。
本期看点:
在PSpice中调用Matlab
借助MATLAB处理PSpice的仿真结果
利用“PSpice Simulink协同仿真接口”实现联合仿真
课程福利!
为了让大家能够及时将理论知识转化为实践经验,从第3周内容开始,我们为每期内容配备了实例文件,供大家下载学习。
点击这里即可获取下载链接~
1 在PSpice中调入MATLAB 01 在PSpice中调用MATLAB函数 PSpice允许在行为控制器件中添加各种函数。这些函数可以与数学表达式、拉普拉斯变换或是对数函数等有关。PSpice允许在ABM库中的E和G行为控制器件的表达式中添加MATLAB的函数(E表示电压控制电压的器件,G表示电压控制电流的器件。ABM库器件具体的功能和使用可以查看第十五期的推送文章)。 调用MATLAB函数的语法形式是: MATLABFUNCTION(<MATLAB_function>, <Parameter_1>, <Parameter_2>, <number_of_parameters>) 其中: <MATLAB_function>是指MATLAB中函数名称; <Parameter_1>和<Parameter_2>是指在<MATLAB_function>中使用的参数; <number_of_parameters>是指<MATLAB_function>中使用的参数的数量。 注意 确保MATLAB函数的拼写一定要正确,否则仿真会终止或者探针窗口上不会显示任何波形 正确提及参数的数量,否则也会出现仿真错误。如果使用的<MATLAB_function>有五个参数,那么<number_of_parameters>参数需要设置为5 <MATLAB_function>的参数和返回类型是常数,而不是数组或者矩阵。常数可以是整数(int)、双精度浮点数(double)或浮点数(float)。如果使用常数以外的参数,同样不会运行仿真。 举例说明 在原理图绘制窗口中绘制如图21.1所示的电路,这里使用了两个模拟行为模型的器件,取自ABM库中的ABM1器件。 图21.1 PSpice中调用MATLAB函数 第一个函数: {MATLABFUNCTION("sind",{V(%IN)*90},1)},其中第一个参数“sind”是MATLAB自带函数的名称;第二个参数V(%IN)*90是sind中使用的参数,表示将输入信号V2乘以90后作为sind函数的参数代入;第三个参数表示sind函数中使用的参数数量为1。 第二个函数:{MATLABFUNCTION("Phase_3Q",V(%IN1),V(%IN2),2)}。这是一个在MATLAB中用户自定义的函数,所以在调用前应该先在MATLAB中编写和保存。同时还需要将Phase.m函数的存储路径添加到MATLAB主页选项卡中“设置路径”中。 本例中需要将该函数所在的文件夹路径:E:\cadence PSpice\course example\PSpice phase 21\MATLAB_SCRIPTs 添加到MATLAB的搜索路径中,如图21.2所示。 这个函数需要两个参数,表达式中的V(%IN1)和V(%IN2)是Phase_3Q中使用的参数,最后的2表示Phase_3Q树勇的参数数量是2。 图21.2添加MATLAB的搜索路径 运行仿真,得到图21.3的仿真结果: 图21.3 使用MATLAB函数后的仿真结果 02 在PSpice中使用基于 MATLAB的测量函数 PSpice允许使用各种测量功能来评估仿真完成后生成的波形。本教程在第六期交流扫描分析中有详细介绍过测量函数,并且在之后的很多期中都有使用测量函数。PSpice中自带有很多的测量函数,同时用户可以编辑这些测量函数,也可以自己创建测量函数。SPB 17.4版本增加了基于MATLAB的测量函数,这些函数在PSpice中使用,而MATLAB会在后台运行这些函数,然后在PSpice中显示结果。 默认情况下,我们可以在PSpice的波形显示窗口下,点击 Trace → Evaluate Measurement,得到如图21.4所示的对话框,可以看到PSpice中添加了两个基于MATLAB的通用函数。 图21.4 PSpice中包含的两个MATLAB函数 MATLABFunction1(<trace_name>, <MATLAB_function> ) 其中: <trace_name>表示PSpice中的轨迹线名称; <MATLAB_function>表示在<trace_name >的轨迹线上需要被计算的MATLAB的函数; 使用此函数可以调用任何使用一个参数,并返回常量表达式的MATLAB函数。 MATLABFunction2(<trace_name1>,<trace_name2>,<MATLAB_function>) 其中: <trace_name1>,<trace_name2>表示PSpice中的两个轨迹线名称; <MATLAB_function>表示在这两条轨迹线上需要计算的MATLAB函数的名称; 使用此函数可以调用任何使用两个参数并返回常量表达式的MATLAB函数。 仍以图21.1的电路为例,运行仿真,并得到图21.3的输出波形后,选择Trace→Evaluate Measurement,打开图21.4的对话框,在Trace编辑框中输入:MATLABFunction1(V(A),risetime) 这里V(A)是电路中节点A对地的电压,risetime是MATLAB中求上升时间的函数。图21.4对话框点击确定后,PSpice会调用MATLAB,MATLAB的后台运行后,在PSpice窗口中会显示如图21.5所示的结果: 图21.5 调用MATLAB函数的求解结果 2 借助MATLAB处理PSpice的仿真结果 充分利用MATLAB®的可视化功能,实现不同类型绘图的可视化,PSpice可以完成无缝地访问MATLAB的绘图功能,一键导出仿真结果到MATLAB中,可以在MATLAB中输出所有波形,或是选定地波形;同时还可以对导出的数据进行编写自定义的MALTAB脚本,对波形进行进一步的分析和展示,可以将PSpice的频域分析波特图在MATLAB中用极坐标图表示,也可以将PSpice中的直流扫描分析结果在MATLAB中用三维图显示等等。 01 在MATLAB中显示PSpice的绘图结果 SPB 17.4版本在PSpice输出界面中增加了数据导出到 MATLAB的功能,可以实现直接导出所有或部分选定的仿真结果到MATLAB中。下面以绘制一个变压器的BH回线为例,来展示这一功能。 电路图如图21.6所示,选择磁芯中的GAP(空气隙长度)作为参数,进行瞬态分析下的参数扫描。 图21.6 样例电路 GAP取0~5mm,每隔1mm变化,运行仿真后得到如图21.7所示的磁芯K1的磁感应强度曲线: 图21.7 PSpice的仿真结果 选择菜单Tool → MATLAB,如果是第一次调用MATLAB,需要先设置MATLAB的路径,选择Set MATLAB Path将MATLAB软件的安装路径输入到对应的对话框中(如图21.8中的标注①)。然后选择Start MATLAB Engine(如图21.8中的标注②),将打开MATLAB的命令窗口。最后可以选择输出所有轨迹(选择Export All Traces)输出,也可以选择部分轨迹(选择Export Selected Traces)输出。如图21.8所示: 图21.8 与MATLAB关联的菜单栏 这里选择Export Selected Traces,得到图21.9所示对话框。在变量的复选框中选择需要导出的变量,同时在MATLAB函数中使用默认函数 plotTraces 用于绘制选定的变量的波形。 图21.9 选择输出到MALTLAB的变量 如果仿真文件中有多个模拟,可以从选择中选择一个或几个部分,在图21.9中点击Select Section,得到图21.10的对话框,在最后一列根据需要勾选其中一个或几个,然后单击确定。 图21.10 选择参数分析的部分结果 在图21.9下选择好变量后,单击“Export”按钮。如果原来没有启动 MATLAB,那先会弹出 MATLAB 命令窗口,然后会显示MATLAB的图形面板,并显示刚才选中变量的时域波形。图21.11显示的就是在默认函数plotTraces下得到的波形: 图21.11 显示从PSpice导出的波形 建议关闭MATLAB 命令行窗口之前将数据保存在 MATLAB 中,否则所有波形数据,包括生成的变量,会丢失。 02 使用 MATLAB 脚本生成自定义绘图 PSpice 允许添加自定义的 MATLAB 绘图函数,并使用这些自定义的函数对导出的PSpice波形进行不同的呈现。 注意:这里自定义的 MATLAB 函数必须保存为 MATLAB 脚本 (.m) 文件。 以图21.6电路为例,通过默认的plotTraces函数,在MATLAB的图形面板中显示了磁感应强度B与磁场强度H(图21.11)。现在希望通过MATLAB将导出的六个气隙长度(GAP=0,1mm,2mm,3mm,4mm,5mm)下B(K1)和H(K1)的数据绘制出六条BH回线。 具体步骤如下: 1 在MATLAB中编写如下的代码,存储为.m文件: 2 在PSpice的绘图窗口下,执行Tool→MATLAB→Start MATLAB Engine,打开MATLAB命令行窗口(也就是在图21.8的界面下,选择第二步)。 3 在MATLAB的命令行窗口中输入窗口命令打开MATLAB窗口,如图21.12所示,在选项卡中选择设置路径的按钮: 图21.12 MATLAB中设置路径 然后将MATLAB的脚本文件(.m文件)所在的目录添加到MATLAB的搜索路径中。如图21.13所示,添加后点击保存: 图21.13 添加搜索路径 4 回到PSpice的界面下选择 Tools→MATLAB→Export Selected Traces,导出选中的输出变量。 本例中,选择输出B(K1)和H(K1),注意在指定MATLAB函数处,需要输入前面编写的脚本文件的名称,这里输入BHPLOT(BHDATA), 括号内的BHDATA表示变量名称,它保存着所有导出的变量数据,然后在MATLAB变量框中输入BHDATA。如图21.14所示: 图21.14 选择输出的变量并设置MATLAB函数 5 设置好后,在图21.14对话框下点击“Export”,等待一小会后,得到图21.15所示的MATLAB的图形面板: 图21.15 MATLAB图形板上显示六条BH回线 3 利用“PSpice- Simulink 协同仿真接口”实现联合仿真 PSpice软件从较早版本中就开始推出了PSpice和Matlab的协同仿真分析接口,将MATLAB/Simulink系统仿真器集成在一起,提供了一个可用于设计各种电子系统的仿真流程,使得电路和系统设计人员可以执行集成的系统级和电路级仿真。 01 协同仿真的概述 通常系统设计和电路设计分别采用独立的仿真器进行仿真,电路工程师无法将实际电路数据送回到系统设计中,系统设计师不知道实际电路模块对系统有何影响,反之亦然。PSpice是电路级仿真器,使用元器件模型进行仿真,仿真精度高,能反映出电路的非线性、延时及其他实际因素,但是对于复杂电路存在仿真时间过长的问题;MATLAB中的Simulink系统仿真器主要用于系统级设计,并且仿真时间短,但是不能完全反映实际电路的特性细节。 为了综合利用PSpice和Simulink的优点,取长补短,推出了PSpice-Simulink协同仿真接口模块,用户可以在Simulink模型中,将系统的关键单元用实际电路表示,并且在Simulink模拟时调用PSpice对该单元的实际电路进行模拟。这样就可以将以前分开独立操作的系统模型和电路模型结合起来,综合两种模拟器的优点,可用于设计任何带有电子单元的系统。 在协同仿真中MATLAB/Simulink扮演主控角色,PSpice扮演从属角色。在Simulink环境下对整个电路系统进行仿真,对于系统中的关键模块,比如电路的非线性、延时及其他重要特性影响明显的模块,则通过“协同仿真接口”模块调用PSpice软件对该模块对应的实际电路进行电路级的模拟,并将模拟结果反馈回Simulink,继续完成对整个电路系统的模拟仿真。而两个仿真器都使用自己的时间步长控制算法,从而保证了模拟精度和性能的最佳折中。 02 协同仿真接口的安装需求 为了使用“PSpice-Simulink协同仿真接口”模块,需要首先在电脑上安装MATLAB R2021b或更高版本,以及Cadence OrCAD或Cadence Allegro 产品,并且Cadence产品需要获得使用“协同仿真接口”模块的授权许可。 为了在Simulink中调用“协同仿真接口”模块,可以使用以下两种方法之一进行设置: 方法1 自动设置 首先确保已经在PSpice中设置了MATLAB路径,如果没有,在PSpice窗口中选择Tool→MATLAB→Set MATLAB Path(见上文图21.8)。 然后选择Tool→MATLAB→Co-simulation打开MATLAB。系统会将协同仿真相关文件的路径存入MALTAB中。 方法2 手动设置 如果用户是直接从“开始”菜单启动 MATLAB,而不是从PSpice(Tools→MATLAB →Co-simulation),那就需要手动设置PSpice和Simulink协同仿真的路径。 首先在PSpice中设置MATLAB的路径,在PSpice窗口中选择Tool→MATLAB→Set MATLAB Path,设置下述路径: <matlab_installation_directory>\ tools\ bin 然后在MATLAB中设置“协同仿真接口”模块的路径,在MATLAB窗口下找到“设置路径”的工具栏,添加下述路径: <Cadence_installation_directory>\ tools\ pspice\ pspCosim 这样在MATLAB的命令窗口中输入命令slpslib,就可以调出“协同仿真接口”模块,如图21.16所示,还可以在这目录中找到应用实例文件,包括RC电路、非线性负载、开关电源、直流电动机控制系统等。 图21.16 slpslib界面以及应用实例文件 03 与Simulink协同仿真的基本步骤 以下以软件自带的基本锁相环电路为例介绍使用“协同仿真接口”模块进行联合仿真的具体步骤。 1 在Simulink中完成系统级设计 锁相环是一个使得输出信号与输入信号在频率和相位上同步的电路。基本锁相环电路是由鉴相器、低通滤波器和压控振荡器三部分组成的反馈系统。鉴相器模块是用来检测锁相环的输入参考信号和反馈输出信号间的相位差;低通滤波器是用来去除鉴相器输出信号中的交流分量;压控振荡器是一种输出频率与控制电压成线性关系的电路,通过低通滤波器后的鉴相器输出信号的直流分量可以改变压控振荡器的振荡频率,直到相位对齐,即环路锁定。 下面仅以鉴相器的模型创建为例说明各模块模型创建的过程。 首先在Simulink窗口下,单击Blank Model→Create Model,如图21.17所示。 图21.17 在Simulink中新建模型 然后将模型所需功能模块由模型库窗口复制到模型窗口,比如模型中Sum模块位于Simulink库中的Math Operations子库下;M模块位于Simulink库中Source子库里的Constant常量模块;输入端口In1、In2采用In1模块实现,输出端口Out采用Out1模块实现,这两个模块均位于Simulink库中的Ports&Subsystems子库中。 最后连接模块构成需要的系统模型,如图21.18所示: 图21.18 鉴相器的Simulink模型 低通滤波器是通过采用Transfer Fcn传递函数模块创建的。位于Simulink库的Continuous子库中。 压控振荡器模型是锁相环的核心模块,因此选定通过“PSpice Simulink协同仿真接口”实现该关键模块的电路级设计和仿真。 于是在Simulink的项目窗口中选择Library Browser,找到PSpice Block,如图21.19所示: 图21.19 添加PSpice接口模块到模型中 右键单击右侧窗格中的 PSpice Block,并选择 Add block to model untitled,或者直接将此图标拖到 Simulink 项目窗口中。 主要模块放置好后,还需要放置输入参考信号模块、参考信号和合成信号波形现实模块等。最终的总体锁相环模型如图21.20所示: 图21.20 锁相环的Simulink系统模型 2 在PSpice中设计使用协同仿真接口模块的电路 打开原理图绘制工具OrCAD Capture 或 Allegro Design Entry HDL,新建用于PSpice仿真的工程,绘制图21.21的电路图,该电路由可控开关、积分器和迟滞比较器电路构成。 图21.21 压控振荡器的电路图 为了验证设计的电路是否可以满足压控振荡器的功能和特性要求,对该电路进行瞬态分析,新建名为tran的仿真文件,设置时间从1ms到10ms,运行后得到图21.22的输出波形。另外PSpice软件也将PSpice新建的瞬态分析的仿真文件和仿真设置保存在tran.sim中,协同仿真中将调用该文件。 图21.22 PSpice 瞬态分析的结果 瞬态特性分析的同时,对VCO输入电压源Vin以线性的方式进行参数扫描,重新新建一个Parametric的仿真文件,取参数Vin开始值为0.25,结束值为5,步长设为0.25。模拟得到输出频率与输入电压的关系曲线为线性关系,如图21.23所示,计算可得,其斜率为1800Hz/V,截距为150Hz。 图21.23 输出信号的频率与输入电压Vin的关系 通过仿真结果,表明设计的电路能实现系统中关键模块压控振荡器的功能和特性。 3 “协同仿真接口”模块的参数设置 为了用设计的压控振荡器电路代替系统模型中的压控振荡器关键模块,在Simulink环境中采用“PSpice Block”代替系统模型中的压控振荡器模块以后,必须设置好该模块的相关参数,这是实现协同仿真的关键一步。 回到图21.20的Simulink的窗口,双击“PSpice Block”模块符号,即图21.20中的标有PSpice Systems字样的模块。打开“协同仿真接口”模块设置对话框,如图21.24所示: 图21.24 锁相环模型中协同仿真参数设置对话框 下面说明对话框中各参数的含义及设置方法: Project file:该文本框的设置用于确定通过“PSpice Block”取代系统中关键模块的PSpice电路所在的Capture项目文件名。 PSpice Simulation file:其右侧列表框中列出当前项目文件中的所有仿真文件,用户从中选择之前在PSpice中创建的仿真文件。对于压控振荡器共设置了两个仿真文件,一个是瞬态分析,一个是参数扫描分析。用户可以根据需要使用该栏右侧的两个按钮:点击“Reload”按钮可以更新对原理图所作的改变;点击Clear All按钮,可以清除PSpice Simulation file列表框中的信息。 对于PSpice的仿真设置,可以选择使用原有的仿真设置,在下面的单选框“use PSpice Simulation file”,这时右侧的Simulation Options按钮就显示成灰色;如果希望重新设置仿真参数,选择“Customize Simulation Profile”,那么这时就可以点击右侧的“Simulation Options”按钮进行重新设置仿真文件。 Input Sources:指定从Simulink通过接口模块进入PSpice电路的输入电压源或电流源信号。在调用PSpice对接口模块所代表的电路进行模拟仿真时,电路中的这个信号源将采用由Simulink传递过来的激励信号源。如果选择电压源,通过接口模块进入PSpice电路的输入数据是电压值,如果选择电流源,通过接口模块进入PSpice电路的输入数据是电流值。如果电路中有多个输入激励信号源,在Input Source列表框中的上下排列顺序应该与接口模块输入端的信号序列相同。 设置过程中,用户可以通过该栏右侧的按钮“Select”进行选择,通过“Add”进行添加,通过“up”和“down”调整激励源的排列顺序。 Output:指定将PSpice电路中哪个节点电压、支路电流或是功耗等作为输出信号通过协同仿真接口模块输出端馈送到Simulink。右侧的按钮和Input Source的设置类似。 Global Parameters:单击此按钮可指定是否在设计中定义了任何全局参数。 4 协同仿真 完成前面的步骤后,在Simulink模型窗口下选择选择“Simulation”,在配置参数中设置“Stop time”为100e-3s,然后点击“Run”按钮,开始协同仿真。 5 验证初始系统设计 利用接口模块设计的锁相环系统协同仿真结果如图21.25所示,根据VCO控制信号可以看出锁相环的振荡频率在70ms后锁定。从波形可以看出VCO控制信号的波形很小,且合成信号波形也很理想,满足设计要求。 图21.25利用协同仿真得到的基本锁相环系统模型仿真结果 04 协同仿真的优点和适用范围 协同仿真结合了PSpice仿真精度高和Simulink仿真速度快的特点,为我们提供了新的仿真思路,特别适合用在含有控制单元的电力电子系统、A/D或D/A转换器等电路系统中。比如电力电子中处理大电流高电压的功率器件电路或是控制电路,如果使用PSpice完成整个电路系统的仿真,必须对所有控制单元的实际电路结果进行器件级描述,整个电路将变得非常复杂,电路级的模块仿真时间也会非常长,甚至很可能会发生不收敛问题,导致分析过程终止。如果整个电路都是用Simulink模拟,其中控制单元直接采用Simulink模型描述,包括采用数学公式表达的控制算法,就很难描述开关器件的上升/下降特性,以及电感、变压器的电特性。如果这些通过“协同仿真接口”模块代替,用PSpice实现这些物理过程的电路,然后在Simulink下协同仿真,就可以在保证仿真精度的前提下兼顾仿真速度,从而吸取了两个软件的优势。