主要内容

面向磁体同步机的导向控制

此示例显示了用于从电机控制算法生成C代码的基本工作流程和密钥API,并验证其编译的行为和执行时间。您将使用处理器 - 循环(PIL)模拟来获得信心,即将其与电机硬件接口的嵌入式软件集成时,C代码将按预期执行。虽然此工作流使用用于特定处理器的电机控制应用程序,但您可以将此工作流应用于几乎任何应用程序或处理器。

我们用一种永磁同步电机的磁场定向控制算法来展示这一工作流程。这种控制技术在混合动力汽车、制造机械和工业自动化的电机驱动系统中很常见。

概述

在此示例中,从控制算法模型生成和验证C代码,您可以与额外的嵌入式软件集成到电机硬件所需的附加嵌入式软件。

您将使用模拟环境来模拟并验证闭环电机控制系统的行为。一旦控制系统行为在规范内,您将从控制器模型生成C代码。检查代码后,您将使用循环(PIL)测试来评估其功能行为和执行时间。

为了便于PIL测试,您将选择测试信号以锻炼控制器模型并建立参考输出。您将查看一个示例PIL实施的PIL™F28335处理器,该处理器通过串行连接在主机上与Simulink®通信。金宝app您可以将此示例用作创建自己的处理器的PIL实现的起点。您将在PIL模式下运行Controller模型以测量执行时间,并验证嵌入式处理器上运行的代码的执行行为,针对模拟参考输出。

在嵌入式处理器的最终实现中,您将生成的控制器C代码与其他嵌入式软件(例如外设和中断)集成,要求与电机硬件接口。

笔记

  • Simscape™电气是系统仿真所必需的“通过系统仿真验证行为”。其他任务是不需要的。

  • 德州仪器F28335太平(PIL)实现是一个参考方法,您可以应用于几乎任何处理器。但是,如果您希望直接使用此实现,则需要来自Texas Instruments™的额外支持文件、编译器和工具。金宝app你可以在这个例子的“创建PIL实现和用Simulink®注册”一节中找到更多的信息。金宝app此参考PIL实现不需要Embedded Coder®的Texas Instruments C2000™Embedded Target特性,但鼓励C2000™用户使用该软件安装Texas Instruments C2000支持包金宝app附加资源管理器

通过系统仿真验证行为

在本节中,您将在闭环系统仿真中验证控制器。

系统模型试验台由测试输入、嵌入式处理器、电力电子和电机硬件以及可视化组成。您可以使用系统模型来测试控制器并探索其预期行为。您可以使用以下命令来执行模型并绘制记录的信号。

Open_System(“rtwdemo_pmsmfoc_system”)OUT_SYSTEM = SIM(“rtwdemo_pmsmfoc_system”)RTWDEMO_PMSMFOC_PLOTSIGNALS(OUT_SYSTEM.LOGSOUT)
Out_System = 金宝appSimulink.simulationOutput:logsout:[1x1 simulink.simulationdata.dataset] simulationmetadata:[1x1 simulink.simulationmetadata] errormessage:[0x0 char]

图中显示电机是静止的,直到motor_on.信号是真的。然后,电动机在开环中旋转,直到检测到已知位置,由编码器索引脉冲表示。然后,控制器转换到闭环操作,电机达到稳态速度。

探索模型架构

在本节中,您将探索模型体系结构,包括如何指定数据、如何将控制器从测试台中分区以及如何调度控制器。这种架构促进了系统仿真、算法代码生成和PIL测试。

数据定义文件创建仿真和代码生成所需的MATLAB®数据。中自动运行该数据文件PreLoadFcn系统测试台模型的回调。

编辑(“rtwdemo_pmsmfoc_data.m”

在系统测试台模型中,嵌入式处理器被建模为外围设备和控制器软件的组合。

Open_System('RTWDEMO_PMSMFOC_SYSTEM /嵌入式处理器'

控制器软件在单独的模型中指定。在此模型中,Mode_scheduler子系统使用StateFlow®来调度电机_Control算法的不同操作模式。

Open_System(“rtwdemo_pmsmfoc”

在Motor_Control子系统中,传感器信号被转换为工程单元,并传递给核心控制器算法。控制器算法计算电压。然后将电压转换为驱动器信号。

Open_System('rtwdemo_pmsmfoc / motor_control'

主要的控制律是面向领域的控制器。该控制器具有控制速度的低速率外环和控制电流的高速率内环。

Open_System(“rtwdemo_pmsmfoc / Motor_Control / Field_Oriented_Controller”

速度控制器外环被执行为当前控制回路时间的倍数。您可以查看Matlab®变量,该变量指定这些示例时间:

流('高速率采样时间= %f秒\n',ctrlconst.tshi)fprintf('低速采样时间=%f秒\ n',ctrlconst.tslo)
高速采样时间= 0.000040秒低速率采样时间= 0.005000秒

注意,控制器算法中的最高速率是25khz。

流('高速频率=%5.0f Hz \ n',1 / ctrlconst.tshi)
高速频率= 25000 Hz

生成控制器C代码以集成到嵌入式应用程序中

在本节中,您将生成并直观地检查控制器的C代码功能。

为了简化集成,控制器模型以单任务模式配置,以便可以使用一个函数调用来调用生成的代码。此功能处理较低且较高的速率。必须在高速采样时间执行生成的控制器函数。

函数原型在模型配置参数中指定,并且输入和输出端口被传递为参数。您可以查看控制器算法的功能规范。

mdlFcn = RTW.getFunctionSpecification (“rtwdemo_pmsmfoc”);disp(mdlfcn.getpreview('在里面'))disp(mdlfcn.getpreview('步'))
controller_init()错误= controller(motor_on,command_type,current_request,*传感器,* pwm_compare)

通过在生成的代码中使用全局结构,您可以访问面向现场的控制器比例和积分增益。此全局结构在数据定义文件中指定。

disp (ctrlParams.Value) disp (ctrlParams.CoderInfo)
Current_p:10 Current_i:10000 Velocity_P:0.0150 Position_P:0.0150 Position_P:0.1000 Place_I:0.6000 STARTUPACCERERATION:0.2000 RAMPTUPVELOCITY:20 ADCzeroOffsopveliverUNITS:0.2523E + 03 ADCDriverUNITSTOAMPS:0.0049 EncoDertomecharicalZeroOffsetrads:0 PMSMPolepair:4 Simulink.CoderInfo StorageClass:'E金宝appxportedGlobal'标识符:''对齐:-1

您从型号生成C代码,如下所示。

SLBUILD(“rtwdemo_pmsmfoc”
###启动构建过程:RTWDEMO_PMSMFOC ###成功完成构建过程:RTWDEMO_PMSMFOC构建摘要顶部模型目标构建:模型动作重建原因================================================================================================ RTWDEMO_PMSMFOC代码生成和编译的代码生成信息文件不存在。1个型号中的1个(0型号已达到迄今为止)构建持续时间:0H 0M 59.217S

使用生成的报告检查生成的C代码文件,并验证是否生成了正确的步骤和初始化函数。还验证参数结构是否创建为全局变量。

建立控制器模型的参考行为

在本节中,您将建立测试输入和参考输出,以帮助验证PIL测试期间的行为和配置文件执行时间。您将创建控制器模型的本地副本,然后加载一组测试输入信号,这些信号在控制器中执行不同的模式。然后,您将配置控制器模型,将这些记录的信号附加到输入端口,执行控制器模型,并将输出端口信号记录到工作区。

用于建立参考行为和测试环境的控制器模型的配置参数将如下所述更改。用于指定控制器模型的设计和生成生产代码的块和参数不会改变。但是,为避免修改安装的控制器模型的任何部分,请保存模型并将其名称更改为RTWDEMO_PMSMFOC_LOCAL.SLX.

save_system (“rtwdemo_pmsmfoc”'rtwdemo_pmsmfoc_local.slx')close_system(“rtwdemo_pmsmfoc_system”, 0);close_system(“rtwdemo_pmsmfoc”, 0);
omCallMethod在slmsgviewer.renameTab上失败

要配置文件执行时间,请选择一组将执行控制器内关注的路径的测试输入。获取这些测试输入和参考输出的一种方法是从系统仿真模型记录它们。

在。motor_on = out_system.logsout.getElement (“motor_on”) . values;in.command_type = out_system.logsout.getElement ('command_type') . values;In.command_value = out_system.logsout.getElement('command_value') . values;in.sensors = out_system.logsout.getElement('传感器') . values;显示(in)
[1×1 timeseries] command_type: [1×1 timeseries] command_value: [1×1 timeseries]传感器:[1×1 struct]

这些信号现在可以附加到输入端口并导入到控制器模型中,这样它就可以直接独立于系统模型执行。这种方法的一个优点是,控制器模型可以作为独立组件进行测试和验证,促进与其他系统模型或闭环测试平台的重用和集成。要详细说明或准备用于测试的控制器模型,请更改其配置参数,以在MATLAB®工作空间中附加输入信号和日志信号。这些更改可以在模型的配置参数对话框中以图形方式进行,也可以通过编程方式进行,如下所示。

set_param('rtwdemo_pmsmfoc_local'......'loadexternalinput'“上”......'ExtenteInpul''inmotor_on,In.command_type,In.command_value,In.Sensors'......“StopTime”“0.06”......'zerointerernalmemoryatstarttup'“上”......'simulationMode'“正常”)save_system('rtwdemo_pmsmfoc_local.slx'

您现在可以执行控制器模型并绘制与PWM比较输出端口相关联的信号。

出= SIM('rtwdemo_pmsmfoc_local')controller_mode = out.logsout.getElement(“controller_mode”) . values;pwm_compare_ref = out.logsout.getElement(“pwm_compare”) . values;rtwdemo_pmsmfoc_plotpwmcompare (controller_mode pwm_compare_ref)
out = 金宝appsimulink.simulationOutput:logsout:[1x1 simulink.simulationdata.dataset] simulation metaData:[1x1 simulink.simulation metadata] errormessage:[0x0 char]

记录的输出将被用作PIL测试的参考行为。

请注意,在每个时间步骤中,图中都注释了关于控制器模式的信息。此模式信息在解释执行分析信息时非常有用。

创建PIL实施

在本节中,您将研究和使用示例PIL实现。您将首先审查从嵌入式码头®的先决条件帮助文档。然后,您将把示例PIL实现复制到本地目录中,并使用Simulink®注册。金宝app您将查看用于开发PIL实施的方法,可以探索相关文件以获得额外的洞察力。如果您使用的是具有代码Composer V4和串行连接的SpectRum Digital Inc. EZDSP F28335板,您将能够配置此PIL实现以直接使用控制器模型。如果您使用的是不同的处理器,则可以使用此PIL实现作为创建自己实现的起点。

创建自定义的基础是描述的为Simulink创建PIL目标连接配置金宝app.您应该熟悉使用RTIOSTREAM API的基本概念,以便在PIL测试期间促进Simulink®(主机端)和嵌入式处理器(目标侧)之间的通信。金宝app请注意,嵌入式编译器®为默认TCP / IP实现提供主机端驱动程序(对于Simulink®支持的所有平台)以及用于串行通信的Windows®仅版本。金宝app金宝app构建生成的代码是使用makefile完成的,如上所述自定义模板makefiles..要创建PIL实现,您需要在嵌入式环境中执行几个任务,包括编写目标端通信驱动程序,编写makefile来构建生成的代码,以及自动下载和执行构建的可执行文件。

使用上述方法,为Spectrum Digital Inc. eZdsp F28335板创建PIL实现。下面是此实现中使用的目标连接性API组件的摘要。

  • 主机侧通信- 主机侧连接驱动程序配置为使用串行通信。

  • 目标端通信-目标端通信是通过rtiostream函数以及定时器访问函数的手写串行实现实现的。

  • 构建过程- 基于Makefile的方法用于构建可执行应用程序。

  • 发射器下载和运行可执行文件是使用Code Composer Studio™v4 (CCSv4)的调试服务器脚本(DSS)工具来完成的。

PIL的实施分三个阶段迭代发展。下面是这些阶段的描述以及在这些阶段中执行的任务。在开发自己的PIL实现时,您可能会发现遵循类似的方法是有帮助的

阶段1:用CCSv4创建串行通信应用程序

  • 安装CCSv4并验证它是否可以与F28335 EZDSP板连接。

  • 编写发送和接收串行数据的嵌入式应用程序。

  • 测试主机和嵌入式应用程序之间的串行通信。

  • 识别编译器,链接器和档案的命令和选项,以使用makefile构建应用程序。

  • 使用DSS实用程序从Windows®命令提示符下载并运行应用程序。

第二阶段:用MATLAB®实现和测试嵌入式串行流并启动自动化

  • 扩展串行应用程序以实现用于回音数据的RTIOSTREAM API函数。编写RTIOSTREADOPEN执行常规板初始化,包括配置串行端口。

  • 使用rtiostream_wrapper函数验证MATLAB®的嵌入式处理器发送和接收串行数据。

  • 使用system命令从Matlab®下载并运行应用程序来调用DSS实用程序。

第3阶段:使用Simulink®实现和测试连接配置金宝app

  • 创建连接配置类以配置主机端串行通信,指定来自RTIOStream应用程序的哪些目标侧代码文件应包含在构建过​​程中,指定如何访问将用于收集分析数据的计时器,并集成调用DSS实用程序来启动嵌入式应用程序。

  • 创建工具规范makefile(target_tools.mk)该命令和选项指定编译器,链接器和归档程序的命令和选项。模板makefile包含此makefile(target_tools.mk).

  • 创建一个模板makefile (ec_target.tmf) 包括target_tools.mk

  • 识别可能与安装相关的参数,并将其存储为MATLAB®首选项。

  • 创建一个Simul金宝appink®定制文件,指定PIL实现何时有效

与此PIL实现关联的文件包含在嵌入式码器中,但不在MATLAB®路径上。要浏览这些文件,可以将它们复制到本地目录中。您可以通过将此目录添加到MATLAB®PART并刷新SIMULINK®自定义项来注册此PIL实现。金宝app

%COPYFILE(全文件(MATLABROOT,'工具箱','RTW','RTWDEMOS','examplepilf28335'),'examplepilf28335','f')AddPath(GenPath(FullFile(MatlaBroot),“工具箱”'RTW''RTWDEMOS''examplepilf28335'))) sl_refresh_customizations

MATLAB®首选项是用来指定路径信息和主机串口COM端口号的。如果你直接使用这个PIL实现,你必须根据你的配置指定这些首选项。

请注意,ti_f28xxx_sysswdir.首选项指向Texas Instruments™提供的目录C2000™实验员工具包应用软件sprc675.zip).这些文件不包括在Embedded Coder®中。

setpref ('examplepilf28335''examplepilf28335dir',fullfile(matlabroot,“工具箱”'RTW''RTWDEMOS''examplepilf28335'));setpref ('examplepilf28335'“CCSRootDir”“C: \ Program Files \德州仪器\ ccsv4”);setpref ('examplepilf28335''ti_f28xxx_sysswdir'“C: \ Program Files \德州仪器\ TI_F28xxx_SysSW”);setpref ('examplepilf28335'“targetConfigFile”,fullfile(matlabroot,“工具箱”'RTW''RTWDEMOS''examplepilf28335''f28335_ezdsp.ccxml'));setpref ('examplepilf28335''波特率',115200);setpref ('examplepilf28335''cpuclockratemhz',150);setpref ('examplepilf28335''boardconfigpll'10);setpref ('examplepilf28335'“相称”“COM4为”);

PIL实施现已准备好使用。

为PIL测试准备控制器模型

在本节中,您将配置控制器模型以使用PIL实现。您将查看用于注册太平实现的定制文件,设置模型的配置参数以使用太平实现,并启用记录控制器输出和执行概要分析数据。

当你开始在PIL模式下进行模拟时,Simulink®将检查是否有任何注册的PIL实金宝app现是有效的。定制文件指定哪些配置参数对应于有效的PIL实现。您可以通过调用以下命令来研究此实现的定制文件。

编辑(FullFile(MatlaBroot,“工具箱”'RTW''RTWDEMOS''examplepilf28335''sl_customization.m'));

请注意,此文件指定硬件设备和模板Makefile的设置,这是使用此PIL实现所需的。您可以修改控制器模型中的配置参数以匹配这些设置。这些更改可以在模型的配置参数对话框中以图形方式进行,也可以通过编程方式进行,如下所示。

set_param('rtwdemo_pmsmfoc_local'......'prodhwdeviceType''Texas Instruments-> C2000'......“TemplateMakefile”“ec_target.tmf”......“GenCodeOnly”'离开'......'simulationMode''处理器 - 循环(PIL)''

通过将模拟输出值作为变量记录下来,您可以指定在PIL测试期间收集执行分析信息pilOut并将执行分析信息记录为变量executionProfile..这些更改可以在模型的配置参数对话框中以图形方式进行,也可以通过编程方式进行,如下所示。

set_param('rtwdemo_pmsmfoc_local'......“CodeExecutionProfiling”“上”......'codeexecutionprofilevariable''executionprofile'......“CodeProfilingSaveOptions”'alldata');save_system ('rtwdemo_pmsmfoc_local.slx'

控制器模型现在可以在PIL模式下运行。

生成代码的测试行为和执行时间

在本节中,您将在PIL模式下运行控制器模型,并探索行为和执行分析结果。您将验证编译的控制器代码的行为是否与参考仿真行为匹配,然后验证代码的执行是否满足时间要求。

您可以运行模型并绘制PIL仿真结果。当您第一次启动模型时,嵌入式码码将生成算法的代码,将算法代码与串行通信接口代码联系起来,构建嵌入式应用程序,将应用程序下载到电路板,然后开始目标仿真.请注意,在随后的PIL模拟期间,如果模型更改,则代码仅重新生成。由于与串行通信接口相关的开销,PIL模拟可能比正常模式下模型更慢。

下面的MATLAB®命令是有意地评论的,因为它们需要连接到硬件和使用先前描述的嵌入式开发工具。如果安装了硬件连接和嵌入式开发工具,取消注释并执行这些行以运行模型,请绘制结果,并验证行为是否在数字上等同于正常模式下运行的模拟。否则,继续审查本节以了解PIL执行分析选项。

%取消了以下行运行模拟并绘制结果%如果存在('slprj','dir'),rmdir('slprj','s');结尾% out = sim('rtwdemo_pmsmfoc_local')%pwm_compare_pil = out.logsout.getElement('pwm_compare')。值;%rtwdemo_pmsmfoc_plotpwmcompare_pil(controller_mode,pwm_compare_pil,executionprofile)

上面的图是控制器的输出,PWM比较。请注意,太平模式下的输出与“为控制器模型建立参考行为”一节中所示的正常模式下的模拟输出相同。你可以从太平模式模拟输出中减去正常模式模拟的输出,以验证它们在数值上是等价的:

%取消下面一行的注释,以验证输出的数字等价性%parerrorwithreprectttoreference = sum(abs(pwm_compare_pil.data  -  pwm_compare_pil.data))
pilErrorWithRespectToReference =
0 0 0.

较低曲线是在每个模拟时间步骤执行控制器模型的时间量。“支持”状态需要最少的时间。执行时间内的小定期尖峰由于控制器是多速率和单个任务。周期性尖峰对应于在同一任务中运行基本速率和5毫秒速率代码所需的时间。

由于控制器必须在嵌入式处理器上以25 kHz执行,因此算法必须在40微秒内完成其执行(其他代码减去其他余量要求,也可能在最终应用程序上执行。)分析结果表明该算法表明该算法将在分配嵌入式环境的此配置的时间内执行。

现在验证生成的代码以提供数字等效结果,并满足该测试用例的执行时间要求。

close_system('rtwdemo_pmsmfoc_local', 0);close_system('power_utile', 0);

在这个PIL实现中使用的MATLAB®首选项在MATLAB®会话之间是持久的。如果要删除这些首选项,请运行以下命令。

Rmpref('examplepilf28335');rmexamplepilf28335hooks();

结论

该示例显示了使用用于永磁同步机的现场导向控制算法的系统级仿真和算法代码,以探索控制器算法的功能性行为。它还显示了用于任何嵌入式处理器的目标集成,功能测试和执行分析的一般方法。一旦算法正确正确,代码是从控制器模型生成的,在目标处理器上测试并分析。算法代码现已验证,可以与嵌入式软件集成,该软件与电机硬件接口以进行进一步测试。

相关话题