主要内容

磁场定向控制的永磁同步机

这个例子显示了基本的工作流程和关键api生成C代码从一个电机控制算法,并验证其编译行为和执行时间。您将使用processor-in-the-loop(公益诉讼)模拟获得信心,C代码将执行如预期当你和嵌入式软件集成与电机的硬件接口。虽然这个工作流使用运动控制应用程序特定的处理器,可以将此工作流应用到几乎任何应用程序或处理器。

我们用永磁同步电机的磁场定向控制算法来展示此工作流。这种控制技术是常见的混合动力电动汽车电机驱动系统的生产机械,工业自动化。

概述

在本例中,生成和验证从控制算法模型C代码,你可以与其他嵌入式软件集成接口所需电机的硬件。

您将使用一个模拟环境模型和验证闭环运动控制系统的行为。一旦内部控制系统行为规范,您将生成C代码从控制器模型。检查代码之后,您将使用processor-in-the-loop评估其功能行为和执行时间(公益诉讼)测试。

促进公益诉讼测试,您将选择测试信号运动控制器模型,建立参考输出。你将回顾一个德州仪器公益诉讼实现例子™F28335处理器,与仿真软件®主机通过串行连接。金宝app您可以使用该示例作为起点来创建一个公益诉讼实现自己的处理器。你将在公益诉讼模式下运行控制器模型计算执行时间及核实执行行为的代码运行在嵌入式处理器对仿真参考输出。

最后实现的嵌入式处理器,您将集成控制器生成C代码与额外的嵌入式软件,外围设备和中断等,要求与电机的硬件接口。

笔记

  • Simscape™电气™系统仿真所需的部分通过系统仿真验证行为。”It is not required for other tasks.

  • 德州仪器F28335公益诉讼实现是一个参考的方法,可以适用于任何处理器。然而,如果你希望直接使用此实现,您将需要额外的支持文件,编译器和工具从德州仪器。金宝app你可以找到更多的信息关于这些在“创建公益诉讼实现与仿真软件并注册”一节的例子。金宝app这个引用公益诉讼实现不需要德州仪器的C2000™嵌入式目标功能的嵌入式编码®,但是C2000鼓励用户安装使用德州仪器C2000支持包金宝app扩展浏览器

通过系统仿真验证行为

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

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

open_system (“rtwdemo_pmsmfoc_system”)out_system = sim卡(“rtwdemo_pmsmfoc_system”)rtwdemo_pmsmfoc_plotsignals (out_system.logsout)
out_system =仿金宝app真软件。SimulationOutput: logsout: [1 x1金宝app Simulink.SimulationData。数据集]SimulationMetadata: [1 x1仿真软件。金宝appSimulationMetadata] ErrorMessage (0 x0 char):

故事情节表明汽车是静止的,直到motor_on信号是正确的。然后电动机旋转在一个开放的循环,直到检测到一个已知的位置,这是由脉冲编码器指数表示。控制器闭环操作转换和运动速度达到一个稳定状态。

探索模型架构

在本节中,您将探索模型体系结构包括如何指定数据,控制器是如何分区的试验台,和控制器是如何安排的。此体系结构促进了系统仿真,算法代码生成和公益诉讼的测试。

数据定义文件创建所需的MATLAB®数据模拟和代码生成。这个数据文件是自动运行的PreLoadFcn调系统的试验台模型。

编辑(“rtwdemo_pmsmfoc_data.m”)

在系统试验台模型,建模为嵌入式处理器外设和控制器软件的结合。

open_system (rtwdemo_pmsmfoc_system /嵌入式处理器的)

控制器软件被指定在一个单独的模型。在这个模型中,Mode_Scheduler子系统使用Stateflow®的安排不同的操作模式,Motor_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)流(“低速度样本时间= % f秒\ n 'ctrlConst.TsLo)
高速率时间= 0.000040秒低样品时间= 0.005000秒

注意到最高的速度控制器算法25 kHz。

流(“高频率f = % 5.0 Hz \ n”1 / ctrlConst.TsHi)
高频率= 25000 Hz

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

在本节中,您将生成和视觉检查C代码功能的控制器。

缓解集成控制器模型在单一任务模式下配置,这样生成的代码可以调用使用一个函数调用。这个函数处理较低和较高的利率。生成控制器函数在高速率样本时必须执行。

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

mdlFcn = RTW.getFunctionSpecification (“rtwdemo_pmsmfoc”);disp (mdlFcn.getPreview (“init”)disp (mdlFcn.getPreview (“步骤”))
Controller_Init()错误=控制器(motor_on、command_type current_request, *传感器、* pwm_compare)

通过使用一个全球结构在生成的代码中,您可以访问定向控制器比例和积分收益。这个全球结构中指定数据定义文件。

disp (ctrlParams.Value) disp (ctrlParams.CoderInfo)
Current_P: 10 Current_I: 10000 Velocity_P: 0.0050 Velocity_I: 0.0150 Position_P: 0.1000 Position_I: 0.6000 StartupAcceleration: 1 StartupCurrent: 0.2000 RampToStopVelocity: 20 AdcZeroOffsetDriverUnits: 2.2522 e + 03 AdcDriverUnitsToAmps: 0.0049 EncoderToMechanicalZeroOffsetRads: 0 PmsmPolePairs:金宝app 4仿真软件。CoderInfo StorageClass:“ExportedGlobal”标识符:“对齐:1

从模型中生成C代码如下。

slbuild (“rtwdemo_pmsmfoc”)
# # #开始构建过程:rtwdemo_pmsmfoc # # #成功完成构建过程:rtwdemo_pmsmfoc模型建立目标:总结构建模型重建行动的原因= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = rtwdemo_pmsmfoc代码生成和编译代码生成信息文件不存在。1 1模型的建立(0模型已经更新)构建持续时间:0 h 0米51.795秒

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

建立参考行为控制器模型

在本节中,您将建立测试输入和输出的引用来帮助验证行为和概要文件在公益诉讼测试期间执行时间。你会让一个本地副本的控制器模型然后负载的一组测试输入信号运动控制器内的不同模式。然后,您将配置控制器模型把这些记录信号输入端口,执行控制器模型,和日志输出端口信号工作区。

配置参数的控制器模型用于建立参考行为和测试环境将会改变如下所述。块和参数用于指定控制器模型的设计和生成生产代码不会改变。然而,为了避免修改的任何部分安装控制器模型,保存模型,改变它的名字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;在。传感器= out_system.logsout.getElement (“传感器”). values;显示(在)
=结构与领域:motor_on: [1×1 timeseries] command_type: [1×1 timeseries] command_value: [1×1 timeseries]传感器:[1×1 struct]

现在可以连接到这些信号输入端口和导入到控制器模型,这样它可以直接执行和独立于系统模型。这种方法的一个优势是,可以测试和验证控制器模型作为一个独立的组件,促进重用和与其他系统的集成模型或闭环测试长椅。精心设计的,或者准备、测试的控制器模型,改变其配置参数把输入信号和记录信号的MATLAB工作区。这些变化可以图形化的模型配置参数对话框,或以编程方式如下所示。

set_param (“rtwdemo_pmsmfoc_local”,“LoadExternalInput”,“上”,“ExternalInput”,”。motor_on、in.command_type in.command_value in.sensors’,“StopTime”,“0.06”,“ZeroInternalMemoryAtStartup”,“上”,“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)
=仿真软件。金宝appSimulationOutput: logsout: [1 x1金宝app Simulink.SimulationData。数据集]SimulationMetadata: [1 x1仿真软件。金宝appSimulationMetadata] ErrorMessage (0 x0 char):

记录输出将被用作参考行为公益诉讼测试。

注意,情节是注释信息在每个时间步控制器的模式。这种模式信息解释执行分析时将有用信息。

创建公益诉讼实现

在本节中,您将学习和使用一个例子实现公益诉讼。你会从嵌入式程序员检查先决条件帮助文档。你将公益诉讼实现示例复制到本地目录用仿真软件并注册它。金宝app你将审查的方法用于开发公益诉讼实现,可以探索相关文件来获得额外的洞察力。如果您使用的是光谱数字公司eZdsp F28335与代码作曲家v4和串行连接,您可以配置这个公益诉讼实现直接使用控制器模型。如果您正在使用一个不同的处理器,可以使用这个公益诉讼实现作为起点来创建您自己的实现。

创建一个定制的公益诉讼的基本原理实现了为模型创建公益诉讼目标连接配置金宝app。你应该熟悉使用rtiostream API的基本概念,以促进仿真软件之间的通信)问题吗?看看交换机(日志和嵌入式处理器在公益诉讼测试期间(端)。金宝app注意,嵌入式驱动程序默认问题吗?看看交换机编码器提供了日志TCP / IP实现(仿真软件支持的所有平台)以及一个Windows®只对串行通信版本。金宝app金宝app建筑生成的代码是使用makefile中描述来完成的自定义模板makefile。创建一个公益诉讼实现需要执行多个任务在嵌入式环境中包括写端通信驱动程序,编写makefile构建生成的代码,并自动下载和执行的可执行。

使用上面的方法,创建了一个公益诉讼实现光谱数字公司eZdsp F28335董事会。下面是一个总结的目标连接在这个实现中使用的API组件。

  • Host-Side沟通连接驱动问题吗?看看交换机——日志配置为使用串行通信。

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

  • 构建过程——基于makefile的方法是用于构建可执行应用程序。

  • 发射器——下载和运行可执行完成使用代码的调试服务器脚本(DSS)效用作曲家工作室™v4 (CCSv4)。

公益诉讼的实现是迭代开发的三个阶段。下面是描述这些阶段,在这些阶段执行的任务。你会发现它有助于开发自己的公益诉讼时遵循类似的方法实现

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

  • 安装CCSv4和验证它可以连接F28335 eZdsp董事会。

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

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

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

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

第二阶段:实现和测试嵌入式串行rtiostream与MATLAB和启动自动化

  • 扩展串口应用程序实现rtiostream重复数据的API函数。写rtIOStreamOpen执行通用板初始化,包括配置串行端口。

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

  • 从MATLAB下载并运行该应用程序使用系统命令调用DSS效用。

阶段3:配置仿真软件的实现和测试连接金宝app

  • 创建一个连接配置串行通信问题吗?看看交换机配置日志类,指定目标端代码文件从rtiostream应用程序应该包括在构建过程中,指定如何访问一个定时器,用于收集分析数据,调用DSS和集成工具启动嵌入式应用程序。

  • 创建一个makefile工具规范(target_tools.mk),指定的命令和选项编译器、链接器和文档。这个makefile由模板makefile(包括target_tools.mk)。

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

  • 确定参数可能是安装依赖并将其存储为MATLAB的偏好。

  • 创建一个模型定制文金宝app件时指定公益诉讼实现是有效的。

与这个公益诉讼实现相关的文件都包含在嵌入式编码器,但并不在MATLAB的路径。探索这些文件,你可以将它们复制到一个本地目录中。你可以注册这个公益诉讼实现将该目录添加到MATLAB路径和刷新仿真软件定制。金宝app

%拷贝文件(fullfile (matlabroot,“工具箱”,“环球套票”、“rtwdemos”,“examplePilF28335”),“examplePilF28335”,“f”)目录(genpath (fullfile (matlabroot,“工具箱”,“环球套票”,“rtwdemos”,“examplePilF28335”)))sl_refresh_customizations

用于指定MATLAB偏好路径信息和主机串行COM端口号码。如果您正在使用这个公益诉讼直接实现,您必须指定这些首选项是适合您的配置。

请注意,TI_F28xxx_SysSWDir偏好指向一个目录由德州仪器在他们提供的C2000实验者配套应用软件(sprc675.zip)。这些文件不包括嵌入式编码器。

setpref (“examplePilF28335”,“examplePilF28335Dir”fullfile (matlabroot“工具箱”,“环球套票”,“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“工具箱”,“环球套票”,“rtwdemos”,“examplePilF28335”,“f28335_ezdsp.ccxml”));setpref (“examplePilF28335”,“波特率”,115200);setpref (“examplePilF28335”,“cpuClockRateMHz”,150);setpref (“examplePilF28335”,“boardConfigPLL”10);setpref (“examplePilF28335”,“相称”,“COM4为”);

公益诉讼实现现在已经准备好被使用。

准备为公益诉讼测试控制器模型

在本节中,您将配置控制器模型使用公益诉讼实现。你将审查用于注册公益诉讼实现自定义文件,设置配置参数模型的使用公益诉讼实现,并启用日志记录控制器输出和执行分析数据。

当你开始一个模拟在公益诉讼模式下,仿真软件将检查如果任何注册公益诉讼实现是有效的。金宝app一个定制文件指定配置参数对应于一个有效的公益诉讼实现。你可以探索这个实现的定制文件通过调用下面的命令。

编辑(fullfile (matlabroot,“工具箱”,“环球套票”,“rtwdemos”,“examplePilF28335”,“sl_customization.m”));

注意,这个文件指定设置所需的硬件设备和模板makefile来使用这个公益诉讼实现。您可以修改控制器的配置参数模型来匹配这些设置。这些变化可以图形化的模型配置参数对话框,或以编程方式如下所示。

set_param (“rtwdemo_pmsmfoc_local”,“ProdHWDeviceType”,“德州仪器- > C2000”,“TemplateMakefile”,“ec_target.tmf”,“GenCodeOnly”,“关闭”,“SimulationMode”,“processor-in-the-loop(公益诉讼))

您可以指定在公益诉讼测试期间收集的执行概要信息通过记录仿真输出值的变量pilOut和日志记录执行概要信息作为变量executionProfile。这些变化可以图形化的模型配置参数对话框,或以编程方式如下所示。

set_param (“rtwdemo_pmsmfoc_local”,“CodeExecutionProfiling”,“上”,“CodeExecutionProfileVariable”,“executionProfile”,“CodeProfilingSaveOptions”,“AllData”);save_system (“rtwdemo_pmsmfoc_local.slx”)

控制器模型现在已经准备好被在公益诉讼模式下运行。

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

在本节中,您将运行控制器模型在公益诉讼模式和探索行为和执行分析结果。你会确认控制器代码编译的行为匹配参考模拟行为,然后验证的执行代码满足时间要求。

您可以运行模型和情节公益诉讼的模拟结果。当你开始第一次的模型,嵌入式编码算法,将生成代码链接算法代码与串行通信接口代码,构建嵌入式应用程序,下载应用程序,并开始目标仿真。注意,在随后的公益诉讼模拟,代码只是再生如果模型的变化。由于串行通信接口的相关开销,公益诉讼仿真可能低于模型在正常模式下运行。

MATLAB命令下面是故意注释掉了,因为他们需要连接硬件和嵌入式开发工具的使用前面描述的那样。如果你安装了硬件连接和嵌入式开发工具,取消和执行这些线运行模型,绘制结果,并验证行为数值相当于模拟在正常模式下运行。否则,继续复习本节学习公益诉讼执行分析选项。

%取消注释以下行运行模拟和阴谋的结果%如果存在(“slprj”、“dir”),删除目录(“slprj”、“s”);结束% = sim (“rtwdemo_pmsmfoc_local”)% pwm_compare_pil = out.logsout.getElement (pwm_compare) . values;% rtwdemo_pmsmfoc_plotpwmcompare_pil (controller_mode pwm_compare_pil executionProfile)

上面的情节是控制器的输出,PWM比较。注意,在公益诉讼模式下输出看起来一样的输出模拟正常模式显示在节中“建立控制器模型参考行为”。你可以减去正常模式模拟的输出公益诉讼模式模拟输出验证,数值相当于:

%取消注释以下行来验证数值等效的输出% pilErrorWithRespectToReference = (abs (pwm_compare_pil求和。数据- pwm_compare_pil.Data))
pilErrorWithRespectToReference =
0 0 0

较低的情节的时间执行控制器模型在每个仿真时间步。“站在”状态需要的时间最少。小周期的执行时间发生,因为控制器多速率峰值和单个任务。周期峰值对应于运行所需的时间基准利率和5毫秒的速度代码相同的任务。

控制器必须执行以来25 kHz嵌入式处理器,该算法必须完成其执行在40微秒(-额外的空间需求的其他代码,也可能是执行最终的应用程序。)分析结果表明,该算法将执行的时间内分配给这个配置的嵌入式环境。

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

close_system (“rtwdemo_pmsmfoc_local”,0);close_system (“power_utile”,0);

本公益诉讼中使用MATLAB偏好实现MATLAB之间持久会话。如果你想删除这些首选项,运行以下命令。

rmpref (“examplePilF28335”);rmexamplePilF28335hooks ();

结论

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

相关的话题