021-64886750

  • 实时目标机

    Simulink模型库

    Demo套件

info@yisuworld.com

Speedgoat FPGA板卡使用系列文章之将Simscape物理模型部署到FPGA中加速实现

网站首页    技术blog和使用技巧    Speedgoat FPGA板卡使用系列文章之将Simscape物理模型部署到FPGA中加速实现

前言

 

 

SimscapeMathworks公司提供的支持用户在Simulink环境下快速创建物理系统模型的多域建模工具箱。通过Simscape的基础模块或附加专用工具箱,用户可以创建如电机、整流器、液压等机、电、液物理域模型,快速实现系统设计完成控制策略验证。除了在Simulink环境中离线仿真之外,Simscape还支持代码生成功能,从而支持用户将物理模型部署到CPUFPGAR2018b之后,使用Simscape实现的线性和开关线性模型支持HDL 代码生成)中进行实时仿真,快速实现硬件在环测试(HIL: Hardware-In-the-Loop)。

img1

1

 

Simscape Electrical(前称 SimPowerSystemSimElectronics)作为Simscape的专用工具箱之一,涵盖功率半导体与变换器、电机、电阻电容等有源和无源器件,可以用于电力电子、电机驱动、电力系统等应用的仿真实现。本文将主要针对Simscape Electrical工具箱,介绍将物理模型转换为HDL 代码再部署到Speedgoat FPGA板卡中进行实时仿真的完整流程。

 

本文内容基于Matlab R2019b版本实现,后续版本有更新的功能说明,可参见相应版本的Release Note

 

实现流程

将物理模型转换为FPGA位流的完整流程如下:

img2

2

l       创建:创建simscape模型并做离线仿真分析

l       转换1:通过Simscape HDL Workflow Advisor将物理模型转换为等效的Simulink状态空间模型

l       转换2:通过HDL Coder小工具:HDL Workflow AdvisorFPGA模型转换为HDL代码并调用Xilinx Vivado进行综合实现,最终生成接口模型和FPGA位流文件

l       编译:对接口模型进行编译下载,Speedgoat实时目标机和FPGA板卡对模型进行实时仿真

 

例程

下面以一个基于SimscapePMSM闭环控制的例子来具体说明物理模型转换为HDL代码最后再部署到Speedgoat IO334 FPGA板卡的完整流程。

 

01Simscape模型创建

这里我们使用Simulink自带的一个PMSM闭环控制的example模型,使用如下指令打开模型:

open_system('ee_pmsm_drive')

 

此模型主要包含三个部分:使用Simulink基本模块搭建实现的FOC闭环控制算法,使用Simscape搭建实现的三相逆变单元与母线,使用Simscape搭建实现的电机和位置传感器模型。

 

img3

3

 

通过对此模型进行离线仿真,可以初步验证PMSM控制算法的功能。如果需要算法进行实时验证,还需要对模型进行一些转换,转换为实时化模型。

 

02转换1

在进行转换1之前,还需要对离线模型进行一些准备:

Ø                      将连续时间模型转换为定步长离散模型

实时仿真时,CPUFPGA只能运行定步长代码,因此需要先对模型的solver进行设置。具体配置如下:

 

img4

4

 

对于Simscape模型,还需要对Solver Configuration模块设置:

img5

5

 

这里Ts2us。需要注意的是,在实时仿真时,Simscape使用local solverSolver Configuration模块中的设置进行求解,因为local solver相比较模型的全局solver而言,在相同的求解精度下,速度要更快,更有利于实时化计算。

 

Ø                      替代非线性Simscape模块

截止到MATLAB 2020aHDL Coder只支持线性和开关线性Simscape模块,对于非线性模块如电机、带饱和特性的电感等还不支持(这些模块需要更多的计算资源),因此在对模型进行转换之前,还需要将非线性部分剔除或替代。

 

img6

6

 

这里可以使用指令:simscape.findNonlinearBlocks('ee_pmsm_drive')

执行此指令之后,Simulink会自动分析定位模型中的非线性模块:

img7

7

 

如返回值所示,模型中的永磁同步电机模块是非线性模块,需要进行替代。因为在实时仿真时,需要将电机模块下载到FPGA中进行高速高精度仿真,因此替代之后的电机模型必须要能被HDL Coder支持。用户可以从以下三个渠道获取可被HDL Coder支持的电机模块:

1)       Simscapeexample模型,有些example模型中已经包含了官方自带的使用HDL Coder搭建的电机模型,用户可以直接拿来使用

2)       Powertrain Blockset,在MATLAB 2019A及之后版本中,用户可以使用Powertrain Blockset工具箱中的电机模型来替代,HDL Coder支持这些电机模块;

3)       使用HDL Coder基本模块自行搭建电机模型,用户可以自定义电机模型。

 

这里使用Simscapeexample中的电机模型进行替代,替代之后的模型如下:

 

img8

8

 

PMSM电机模型根据永磁同步电机的电气方程和机械方程,采用HDL Coder基本模块搭建,采用单精度浮点数据类型。

img9

9

 

由图8可知,电机模型存在两种接口,一种是与电机控制算法之间的接口:三相电流反馈、电机位置反馈。还有一种是与逆变器之间的接口:三相电流与电压。前一种接口做好数据类型匹配(single转为double)即可,后一种接口因为HDL Coder基本模块无法和Simscape物理模型直接连接(物理模型中的连接线能量是双向的)。因此在逆变器模型的输出端添加了一个电气耦合接口,由Simscape中的电压传感器和受控电流源组成,电机估算的电流值作为受控电流源的指令产生逆变器三相电流,电压传感器测量的电压作为电机模型的电压输入:

img10

10

 

至此,模型转换之前的准备工作已完成,下一步即可通过Simscape HDL Workflow Advisor将物理模型转换为等效的Simulink状态空间模型。

 

MATLAB命名窗口中输入如下指令,打开Simscape HDL Workflow Advisorsschdladvisor('ee_pmsm_drive')

img11

11

 

如上图所示,Simscape HDL Workflow Advisor总共分为三个步骤,经过这三个步骤即可将一个物理模型转换为等效的基于Simulink的状态空间方程,step by step,按钮式操作,十分方便。

1)       Code generation compatibility

在此步骤中,主要是检查Simscape模型的设置如solver的设置以及检查模型中是否包含非线性模块。

img12

12

2)       State-space conversion

此步骤主要是对物理模型的底层表达方式即状态空间方程进行提取并离散化处理。

img13

13

 

需要注意的是,在提取状态空间方程时,要注意设置Simulation stop time及仿真结束时间。此时间不能太小,因为工具会对Simcape模型中的所有模式进行仿真,提取对应的参数矩阵,如果时间太小,则没有充足的时间仿真完所有可能的模式。同时也不能太大,如果太大,则工具会误以为仍有模式需要仿真,导致方程提取时间过长甚至无法停止(stop timeinf)。

img14

14

 

离散化方程到状态空间参数完成之后,工具会统计出Simscape模型中的状态、输入输出以及有效的模式数量。状态包括模型中的有源和无源器件如开关管(包含Diode)、电感和电容,输入输出即为Simscape模型的输入输出,模式即为所有可能的开关组合,如一个开关线性模块,其存在2种可能的模式:开(0)或关(1),其对应模式为2^1,那么n开关线性模块组成的电路中,可能的模式数则为2^n。有了这些参数之后,状态空间参数矩阵即可获取。

3)       Implementation model generation

生成状态空间方程。在此步骤中,需要指定number of solver iterationfloating-point precisionNumber of solver iteration是用来指定在每个开关模式内,状态空间方程的计算次数,此例中数值为4,则在每个开关模式中对状态空间仿真的输出进行4次迭代计算。浮点数据精度默认为singleHDL Coder也支持double类型,精度更高但是消耗的FPGA资源也更多,一般而言,single的精度以足够使用。

img15

15

 

执行完成之后,点击黄圈中链接即可打开等效的状态空间模型:

img16

16

 

需要注意的是,因为设置了迭代次数为4,那么在生成的状态空间模型中,状态空间方程的task rate为整体模型base rate4倍,即为Ts/4,此速率对应FPGA模型中的最快仿真速率。

 

如此一个Simscape物理模型即转换为状态空间模型:

img17

17

 

03转换2

将生成的状态空间模型规整如下:

img18

18

 

DUT子系统中包含逆变器状态空间模型和永磁同步电机模型,这些模型会被下载到FPGA中进行高速运算。DUT子系统之外的模型都会被下载到CPU中进行计算。

 

选择DUT组系统,右键打开HDL Workflow Advisor,对FPGA模型进行编译,生成接口模型,此部分的操作请见公众号之前发布的FPGA模型编译相关文章,这里不再累述。

 

img19

19

 

04编译

将最终生成的接口模型进行编译,并下载到实时目标机中,其中控制算法下载到CPU中,逆变器和电机模型下载到FPGA中,实时仿真时,对力矩指令和力矩反馈进行监测记录:

img20

20

 

如图20所示,上面部分显示的是实时仿真情况下的力矩指令和反馈波形,下面部分显示的是离线仿真下的力矩指令和反馈波形,如此利用Simscape物理模型,实现了PMSMMCU 闭环实时测试。

 

时间概念

Simscape转化为真正可以运行到FPGA板卡上的程序过程中,涉及到若干个时间的概念,这里特别说明。

 

01Simscape模型采样时间

Solver configuration中配置了simscape模型拓扑的仿真执行周期,这里称之为Ts

img21

21

02迭代次数

Simscape HDL Workflow Advisor中,需要配置迭代次数如下:

img22

22

 

该迭代次数代表在模型仿真周期Ts里,状态空间方程会被迭代运行几次,一般设置为3-5或更高,有利于提升模型的仿真精度(下图设置为4次)。状态空间方程运算4次后,才会更新模型的输入和输出。

img23

23

 

03FPGA主频

HDL Workflow Advisor中需要设置FPGA芯片的工作主频,如下图设置为200MHz,其代表的是FPGA工作时的真正时钟。

img24

24

 

04过采样率

过采样率是比较特殊的设置,其代表的是FPGA主时钟和算法运算周期间的比例关系。比如算法中搭建了一系列的加减乘除运算,同时设置了过采样率为50FPGA主时钟为100MHz,则这些加减乘除运算的频率即为100/50=2MHz,即0.5us运算一次。该设置有利于解决一些时序问题,比如当搭建了浮点的乘法运算时,其最终会被解析,通过门电路实现,一般需要多个FPGA时钟才能运算完。过采样率为50即意味着该计算有50FPGA时钟的裕度去处理,算法只要在50个时钟内运算完,就不会出现时序等一系列问题。

img25

25

 

那么如何依据模型的仿真周期,去设置这些参数呢,一般有这样的公式:

img26

 

举例,如果模型仿真周期为1us,则可以通过如下设置,实现FPGA计算周期和模型离线仿真周期的对应:

1us=(50*4)/200MHz

下图可以更好的表示各参数间的关系:

img27

26

 

2020年8月6日 14:52
浏览量:0