主要内容

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

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

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

概述

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

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

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

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

笔记

  • 在“通过系统模拟验证行为”一节中,系统模拟需要Simscape™Electrical。其他任务不需要。

  • Texas Instruments™F28335 PIL实施是您可以应用于几乎任何处理器的参考方法。但是,如果要直接使用此实现,则需要来自Texas Instruments™的其他支持文件,编译器和工具。万博1manbetx您可以在此示例的“创建PIL实现和使用Simulink®”部分中找到更多信息。万博1manbetx此参考PIL实施不需要嵌入式码头的Texas Instrument C2000™嵌入式目标功能,但鼓励C2000™用户安装C2000支持包使用万博1manbetx附加资源管理器

通过系统仿真验证行为

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

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

open_system (“rtwdemo_pmsmfoc_system”)OUT_SYSTEM = SIM(“rtwdemo_pmsmfoc_system”) rtwdemo_pmsmfoc_plotsignals (out_system.logsout)
Out_System = 万博1manbetxSimulink.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秒

请注意,控制器算法中的最高速率为25 kHz。

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

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

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

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

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

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

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

DISP(CTRLPAMS.VALUE)DISP(CTRLPPAMS.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万博1manbetxxportedGlobal'标识符:''对齐:-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);
在slmsgviewer.renameTab上omCallMethod失败

要分析执行时间,选择一组测试输入,它们将在控制器中执行感兴趣的路径。获取这些测试输入和参考输出的一种方法是将它们从系统仿真模型中记录下来。

在。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)
In = struct with fields: motor_on: [1×1 timeseries] command_type: [1×1 timeseries] command_value: [1×1 timeseries] sensors: [1×1结构]

现在可以将这些信号连接到输入端口并导入到控制器模型中,使其可以直接和独立地从系统模型执行。这种方法的一个优点是控制器模型可以被测试和验证为独立组件,促进与其他系统模型或闭环测试台的重用和集成。要详细说明或准备控制器模型进行测试,请更改其配置参数以在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 = 万博1manbetxsimulink.simulationOutput:logsout:[1x1 simulink.simulationdata.dataset] simulation metaData:[1x1 simulink.simulation metadata] errormessage:[0x0 char]

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

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

创建PIL实施

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

创建自定义的基础是描述的为Simulink创建PIL目标连接配置万博1manbetx.您应该熟悉使用RTIOSTREAM API的基本概念,以便在PIL测试期间促进Simulink®(主机端)和嵌入式处理器(目标侧)之间的通信。万博1manbetx请注意,嵌入式编译器®为默认TCP / IP实现提供主机端驱动程序(对于Simulink®支持的所有平台)以及用于串行通信的Windows®仅版本。万博1manbetx万博1manbetx构建生成的代码是使用makefile完成的,如上所述自定义模板makefile.要创建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®实现和测试连接配置万博1manbetx

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

  • 创建一个工具规范makefile (target_tools.mk),指定编译器、连接器和归档器的命令和选项。该makefile包含在模板makefile (target_tools.mk).

  • 创建一个模板生成文件(ec_target.tmf) 包括了target_tools.mk

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

  • 创建一个Simul万博1manbetxink®自定义文件,该文件指定PIL实现有效期

与此PIL实现相关的文件包含在Embedded Coder®中,但不在MATLAB®路径上。要研究这些文件,可以将它们复制到本地目录中。您可以通过将此目录添加到MATLAB®路径并刷新Simulink®自定义来注册此PIL实现。万博1manbetx

%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).这些文件不包括在嵌入式编码器®。

setpref ('examplepilf28335'“examplePilF28335Dir”fullfile (matlabroot'工具箱''RTW''RTWDEMOS''examplepilf28335'));setpref ('examplepilf28335''ccsrootdir''C:\ Program Files \ Texas Instruments \ 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''comport''com4');

PIL实施现已准备好使用。

准备PIL测试控制器模型

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

当您在PIL模式下开始模拟时,Simulink®将检查是否有任何已注册的PIL实现万博1manbetx有效。自定义文件指定哪个配置参数对应于有效的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'“processor-in-the-loop(公益诉讼)

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

set_param ('RTWDEMO_PMSMFOC_LOCAL'......“CodeExecutionProfiling”“上”......“CodeExecutionProfileVariable”'executionprofile'......'codeprofilingsaveOptions''alldata');save_system (“rtwdemo_pmsmfoc_local.slx”

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

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

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

您可以运行模型并绘制PIL模拟结果。当您第一次启动模型时,Embedded Coder®将生成算法代码,将算法代码与串口通信接口代码链接,构建嵌入式应用程序,将应用程序下载到板上,开始对靶模拟。注意,在随后的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比较。请注意,PIL模式中的输出看起来与正常模式下的模拟输出相同,“控制器模型的”建立参考行为“部分中所示的正常模式。您可以从Pil Mode仿真输出中减去正常模式仿真的输出,以验证它们是否在数字上等效:

%取消下面一行的注释,以验证输出的数值等效性% pilerrorwithrespttoreference = sum(abs(pwm_compare_pil. py))数据- 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();

结论

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

相关话题