-
实时仿真用户案例
Crank-嵌入式GUI设计和开发用户案例
021-64886750
-
实时目标机
Simulink模型库
Demo套件
info@yisuworld.com
Speedgoat FPGA板卡使用系列文章之将Simscape物理模型部署到FPGA中加速实现
前言
Simscape是Mathworks公司提供的支持用户在Simulink环境下快速创建物理系统模型的多域建模工具箱。通过Simscape的基础模块或附加专用工具箱,用户可以创建如电机、整流器、液压等机、电、液物理域模型,快速实现系统设计完成控制策略验证。除了在Simulink环境中离线仿真之外,Simscape还支持代码生成功能,从而支持用户将物理模型部署到CPU或FPGA(R2018b之后,使用Simscape实现的线性和开关线性模型支持HDL 代码生成)中进行实时仿真,快速实现硬件在环测试(HIL: Hardware-In-the-Loop)。
图1
Simscape Electrical(前称 SimPowerSystem和SimElectronics)作为Simscape的专用工具箱之一,涵盖功率半导体与变换器、电机、电阻电容等有源和无源器件,可以用于电力电子、电机驱动、电力系统等应用的仿真实现。本文将主要针对Simscape Electrical工具箱,介绍将物理模型转换为HDL 代码再部署到Speedgoat FPGA板卡中进行实时仿真的完整流程。
本文内容基于Matlab R2019b版本实现,后续版本有更新的功能说明,可参见相应版本的Release Note。
实现流程
将物理模型转换为FPGA位流的完整流程如下:
图2
l 创建:创建simscape模型并做离线仿真分析
l 转换1:通过Simscape HDL Workflow Advisor将物理模型转换为等效的Simulink状态空间模型
l 转换2:通过HDL Coder小工具:HDL Workflow Advisor将FPGA模型转换为HDL代码并调用Xilinx Vivado进行综合实现,最终生成接口模型和FPGA位流文件
l 编译:对接口模型进行编译下载,Speedgoat实时目标机和FPGA板卡对模型进行实时仿真
例程
下面以一个基于Simscape的PMSM闭环控制的例子来具体说明物理模型转换为HDL代码最后再部署到Speedgoat IO334 FPGA板卡的完整流程。
01.Simscape模型创建
这里我们使用Simulink自带的一个PMSM闭环控制的example模型,使用如下指令打开模型:
open_system('ee_pmsm_drive')
此模型主要包含三个部分:使用Simulink基本模块搭建实现的FOC闭环控制算法,使用Simscape搭建实现的三相逆变单元与母线,使用Simscape搭建实现的电机和位置传感器模型。
图3
通过对此模型进行离线仿真,可以初步验证PMSM控制算法的功能。如果需要算法进行实时验证,还需要对模型进行一些转换,转换为实时化模型。
02.转换1
在进行转换1之前,还需要对离线模型进行一些准备:
Ø 将连续时间模型转换为定步长离散模型
实时仿真时,CPU或FPGA只能运行定步长代码,因此需要先对模型的solver进行设置。具体配置如下:
图4
对于Simscape模型,还需要对Solver Configuration模块设置:
图5
这里Ts为2us。需要注意的是,在实时仿真时,Simscape使用local solver即Solver Configuration模块中的设置进行求解,因为local solver相比较模型的全局solver而言,在相同的求解精度下,速度要更快,更有利于实时化计算。
Ø 替代非线性Simscape模块
截止到MATLAB 2020a,HDL Coder只支持线性和开关线性Simscape模块,对于非线性模块如电机、带饱和特性的电感等还不支持(这些模块需要更多的计算资源),因此在对模型进行转换之前,还需要将非线性部分剔除或替代。
图6
这里可以使用指令:simscape.findNonlinearBlocks('ee_pmsm_drive')
执行此指令之后,Simulink会自动分析定位模型中的非线性模块:
图7
如返回值所示,模型中的永磁同步电机模块是非线性模块,需要进行替代。因为在实时仿真时,需要将电机模块下载到FPGA中进行高速高精度仿真,因此替代之后的电机模型必须要能被HDL Coder支持。用户可以从以下三个渠道获取可被HDL Coder支持的电机模块:
1) Simscape的example模型,有些example模型中已经包含了官方自带的使用HDL Coder搭建的电机模型,用户可以直接拿来使用
2) Powertrain Blockset,在MATLAB 2019A及之后版本中,用户可以使用Powertrain Blockset工具箱中的电机模型来替代,HDL Coder支持这些电机模块;
3) 使用HDL Coder基本模块自行搭建电机模型,用户可以自定义电机模型。
这里使用Simscape的example中的电机模型进行替代,替代之后的模型如下:
图8
PMSM电机模型根据永磁同步电机的电气方程和机械方程,采用HDL Coder基本模块搭建,采用单精度浮点数据类型。
图9
由图8可知,电机模型存在两种接口,一种是与电机控制算法之间的接口:三相电流反馈、电机位置反馈。还有一种是与逆变器之间的接口:三相电流与电压。前一种接口做好数据类型匹配(single转为double)即可,后一种接口因为HDL Coder基本模块无法和Simscape物理模型直接连接(物理模型中的连接线能量是双向的)。因此在逆变器模型的输出端添加了一个电气耦合接口,由Simscape中的电压传感器和受控电流源组成,电机估算的电流值作为受控电流源的指令产生逆变器三相电流,电压传感器测量的电压作为电机模型的电压输入:
图10
至此,模型转换之前的准备工作已完成,下一步即可通过Simscape HDL Workflow Advisor将物理模型转换为等效的Simulink状态空间模型。
在MATLAB命名窗口中输入如下指令,打开Simscape HDL Workflow Advisor:sschdladvisor('ee_pmsm_drive')
图11
如上图所示,Simscape HDL Workflow Advisor总共分为三个步骤,经过这三个步骤即可将一个物理模型转换为等效的基于Simulink的状态空间方程,step by step,按钮式操作,十分方便。
1) Code generation compatibility
在此步骤中,主要是检查Simscape模型的设置如solver的设置以及检查模型中是否包含非线性模块。
图12
2) State-space conversion
此步骤主要是对物理模型的底层表达方式即状态空间方程进行提取并离散化处理。
图13
需要注意的是,在提取状态空间方程时,要注意设置Simulation stop time及仿真结束时间。此时间不能太小,因为工具会对Simcape模型中的所有模式进行仿真,提取对应的参数矩阵,如果时间太小,则没有充足的时间仿真完所有可能的模式。同时也不能太大,如果太大,则工具会误以为仍有模式需要仿真,导致方程提取时间过长甚至无法停止(stop time为inf)。
图14
离散化方程到状态空间参数完成之后,工具会统计出Simscape模型中的状态、输入输出以及有效的模式数量。状态包括模型中的有源和无源器件如开关管(包含Diode)、电感和电容,输入输出即为Simscape模型的输入输出,模式即为所有可能的开关组合,如一个开关线性模块,其存在2种可能的模式:开(0)或关(1),其对应模式为2^1,那么n个开关线性模块组成的电路中,可能的模式数则为2^n。有了这些参数之后,状态空间参数矩阵即可获取。
3) Implementation model generation
生成状态空间方程。在此步骤中,需要指定number of solver iteration和floating-point precision。Number of solver iteration是用来指定在每个开关模式内,状态空间方程的计算次数,此例中数值为4,则在每个开关模式中对状态空间仿真的输出进行4次迭代计算。浮点数据精度默认为single,HDL Coder也支持double类型,精度更高但是消耗的FPGA资源也更多,一般而言,single的精度以足够使用。
图15
执行完成之后,点击黄圈中链接即可打开等效的状态空间模型:
图16
需要注意的是,因为设置了迭代次数为4,那么在生成的状态空间模型中,状态空间方程的task rate为整体模型base rate的4倍,即为Ts/4,此速率对应FPGA模型中的最快仿真速率。
如此一个Simscape物理模型即转换为状态空间模型:
图17
03.转换2
将生成的状态空间模型规整如下:
图18
DUT子系统中包含逆变器状态空间模型和永磁同步电机模型,这些模型会被下载到FPGA中进行高速运算。DUT子系统之外的模型都会被下载到CPU中进行计算。
选择DUT组系统,右键打开HDL Workflow Advisor,对FPGA模型进行编译,生成接口模型,此部分的操作请见公众号之前发布的FPGA模型编译相关文章,这里不再累述。
图19
04.编译
将最终生成的接口模型进行编译,并下载到实时目标机中,其中控制算法下载到CPU中,逆变器和电机模型下载到FPGA中,实时仿真时,对力矩指令和力矩反馈进行监测记录:
图20
如图20所示,上面部分显示的是实时仿真情况下的力矩指令和反馈波形,下面部分显示的是离线仿真下的力矩指令和反馈波形,如此利用Simscape物理模型,实现了PMSM的MCU 闭环实时测试。
时间概念
在Simscape转化为真正可以运行到FPGA板卡上的程序过程中,涉及到若干个时间的概念,这里特别说明。
01.Simscape模型采样时间
Solver configuration中配置了simscape模型拓扑的仿真执行周期,这里称之为Ts
图21
02.迭代次数
在Simscape HDL Workflow Advisor中,需要配置迭代次数如下:
图22
该迭代次数代表在模型仿真周期Ts里,状态空间方程会被迭代运行几次,一般设置为3-5或更高,有利于提升模型的仿真精度(下图设置为4次)。状态空间方程运算4次后,才会更新模型的输入和输出。
图23
03.FPGA主频
在HDL Workflow Advisor中需要设置FPGA芯片的工作主频,如下图设置为200MHz,其代表的是FPGA工作时的真正时钟。
图24
04.过采样率
过采样率是比较特殊的设置,其代表的是FPGA主时钟和算法运算周期间的比例关系。比如算法中搭建了一系列的加减乘除运算,同时设置了过采样率为50,FPGA主时钟为100MHz,则这些加减乘除运算的频率即为100/50=2MHz,即0.5us运算一次。该设置有利于解决一些时序问题,比如当搭建了浮点的乘法运算时,其最终会被解析,通过门电路实现,一般需要多个FPGA时钟才能运算完。过采样率为50即意味着该计算有50个FPGA时钟的裕度去处理,算法只要在50个时钟内运算完,就不会出现时序等一系列问题。
图25
那么如何依据模型的仿真周期,去设置这些参数呢,一般有这样的公式:
举例,如果模型仿真周期为1us,则可以通过如下设置,实现FPGA计算周期和模型离线仿真周期的对应:
1us=(50*4)/200MHz
下图可以更好的表示各参数间的关系:
图26
-
电力电子(含控制器和被控对象模型)
凭借多年在电力电子行业累积的经验和能力,我们为用户提供控制器模型和被控对象模型,包括标准库以及定制化服务。¥ 0.00立即购买
-
轨道交通(含控制器和被控对象模型)
凭借多年在轨道交通行业累积的经验和能力,我们为用户提供控制器模型和被控对象模型,包括标准库以及定制化服务。¥ 0.00立即购买
-
信号调理系统
在HIL测试中,硬件在环设备起到模拟被测ECU被控对象的作用。需要根据ECU的PIN脚信息,模拟相应信号。这类设备的核心为实时系统,实时系统会提供相应IO通道,处理信号的产生和采集。但这类IO通道一般为标准规格,比如数字通道为TTL规格,模拟通道只是测电压等;这与被测ECU所需的信号规格有较大差异,故需要一套信号调理系统,负责两者之间信号的转接。¥ 0.00立即购买
-
电机控制Demo套件
使用Simulink和Speedgoat转动无刷直流电机。¥ 0.00立即购买
实时目标机
仿真测试应用场景
学习与支持
关注熠速微信公众号
仿真测试解决方案
I/O接口模块
通讯协议模块
FPGA技术
被控部件仿真
Simulink模型库
Demo套件
测量测试解决方案