ZHCAAB0A April 2021 – December 2021 TMS320F2800132 , TMS320F2800133 , TMS320F2800135 , TMS320F2800137 , TMS320F280021 , TMS320F280021-Q1 , TMS320F280023 , TMS320F280023-Q1 , TMS320F280023C , TMS320F280025 , TMS320F280025-Q1 , TMS320F280025C , TMS320F280025C-Q1 , TMS320F280033 , TMS320F280034 , TMS320F280034-Q1 , TMS320F280036-Q1 , TMS320F280036C-Q1 , TMS320F280037 , TMS320F280037-Q1 , TMS320F280037C , TMS320F280037C-Q1 , TMS320F280038-Q1 , TMS320F280038C-Q1 , TMS320F280039 , TMS320F280039-Q1 , TMS320F280039C , TMS320F280039C-Q1 , TMS320F280040-Q1 , TMS320F280040C-Q1 , TMS320F280041 , TMS320F280041-Q1 , TMS320F280041C , TMS320F280041C-Q1 , TMS320F280045 , TMS320F280048-Q1 , TMS320F280048C-Q1 , TMS320F280049 , TMS320F280049-Q1 , TMS320F280049C , TMS320F280049C-Q1 , TMS320F28075 , TMS320F28075-Q1 , TMS320F28076 , TMS320F28374D , TMS320F28374S , TMS320F28375D , TMS320F28375S , TMS320F28375S-Q1 , TMS320F28376D , TMS320F28376S , TMS320F28377D , TMS320F28377D-EP , TMS320F28377D-Q1 , TMS320F28377S , TMS320F28377S-Q1 , TMS320F28378D , TMS320F28378S , TMS320F28379D , TMS320F28379D-Q1 , TMS320F28379S , TMS320F28384D , TMS320F28384D-Q1 , TMS320F28384S , TMS320F28384S-Q1 , TMS320F28386D , TMS320F28386D-Q1 , TMS320F28386S , TMS320F28386S-Q1 , TMS320F28388D , TMS320F28388S , TMS320F28P650DH , TMS320F28P650DK , TMS320F28P650SH , TMS320F28P650SK , TMS320F28P659DH-Q1 , TMS320F28P659DK-Q1 , TMS320F28P659SH-Q1
C2000 and Code Composer Studioare TMs ofTI corporate name.
Other TMs
通过实时基准测试可全盘了解信号链性能情况。如图 1-1 所示,这包括中断响应时间、上下文保存开销、外设读写以及控制算法,所有这些共同构成了实时控制操作。
C2000 架构具有独特的功能,通过最小化采样到输出的时间,使得其成为适用于实时控制的微控制器。本文档中的基准测试演示了这些 C2000 特性。
ACI 电机控制基准测试模拟无传感器交流感应电机控制应用程序。该应用程序执行所有典型操作:模数转换器 (ADC) 读取操作(以感应相电流)、作用于感测电流的转换模块操作、PWM 写入操作(以控制相电压)。无需特殊的外部硬件即可提供激励,因为该应用程序具有可对感应电机的行为进行建模的代码块。为了模拟闭环行为,电机模型的预期电流通过 DAC 模块馈入 ADC 中。单个 ADC 配置为通过两个通道依次感应 A 相电流和 B 相电流。未感应 C 相电流,因为可以从 A 相电流和 B 相电流得出该值。三个 PWM 写入操作模拟控制三相 A 、B 和 C 电压的占空比。图 2-1 表示基准测试应用程序的控制循环中断例程中的执行块。控制循环中断以 2KHz 的速率触发,并在应用程序终止之前执行 1024 次控制循环中断例程的迭代。
在此框图中,深灰色框表示外设访问,浅灰色框表示控制算法,白色框表示代码块,代码块不是真正的 ACI 电机控制应用程序的一部分,而是在基准测试中用于模拟电机的行为。
C2000Ware 中提供了软件基准测试示例。
C2000Ware 3.04.00.00 及更高版本中提供的 C28x CPU 基准测试
C2000Ware 4.00.00.00 及更高版本中提供的 CLA 加速器基准测试。
可在 C2000Ware 安装程序中的以下位置找到该示例。
<C2000Ware>\examples\demos\benchmark\aci_motor_benchmark
顶层文件夹为:
源代码位于“common”和“device_support”文件夹中。“常用”文件夹包含器件独立代码,例如变换算法、电机建模代码等。“device_support”文件夹在为器件命令的子文件夹中包含专用于特殊器件的代码,例如器件配置、外设读取/写入等等。
该应用程序在在Code Composer Studio™ (CCS) 中支持TMS320F28004x and TMS320F2837x器件 ,并且可以在 TMS320F28004x Launchpad 以及 TMS320F2837x Launchpad 上执行。相应的CCS 项目位于“f28004x”和“f2837x”顶层文件夹内的子文件夹“ccs”中。
该应用程序有多个实现变体:一个变体使用数学引擎三角函数加速器 (TMU) 来执行 Park、逆向 Park 和通量估算器控制算法所需的三角计算,另一个变体使用称为 FastRTS 的软件库来执行三角计算。FastRTS 库包含在 C2000Ware 中,该库和文档可在 <C2000Ware>\libraries\math\FPUfastRTS\c28\ 中找到。与基于软件库的实现方案相比,这两个变体的目标是展示 TMU可以提供的数学引擎性能提升程度。
另一组实现变体涉及 CLA。一种变体是 C28x CPU 将部分计算转移载到 CLA,另一种变体是基准测试控制代码完全仅从 CLA 执行。这两个变体的目标是展示如何使用 CLA 来帮助实现实时目标。
可以使用“导入项目”选项将项目导入CCS,并选择位于“f28004x\ccs”中的项目。该项目带有几个预定义的构建配置。项目导入后,可以用于构建不同的构建配置同,如下所述:
构建应用程序后,将应用程序加载到目标并在 CCS 中选择 运行选项以执行该应用程序。
本应用报告中使用了七个 信号链构建配置中的数据来比较 TMU 与 FastRTS 执行情况、RAM 与闪存执行情况以及 CLA 执行情况。
通过使用“导入项目”选项并选择位于“f287x\ccs”中的项目将项目导入CCS中。该项目带有几个预定义的构建配置。项目导入后,可以为不同的构建配置来构建项目,描述如下:
构建应用程序后,进入 CCS 菜单选项“Tools->Debugger Options->Auto Run and Launch Options”,并取消选中“On program load or restart”选项,以自动运行到主符号。之所以需要进行此设置,是因为此器件上的断点有限,并且应用程序中的 printf 消息会使用需要使用断点资源的 CIO。因此,需要禁用“Auto run to main”选项才能让应用程序正常运行。加载应用程序并选择运行选项以执行该应用程序。
本应用报告中使用了五种构建配置中的数据来比较 RAM 与闪存执行情况(因为 F2837x 具有与 F28004x 不同且性能更高的闪存),并了解 CLA 执行情况。
该应用程序在终止之前执行控制循环 1024 次迭代。应用程序将每次执行迭代获得的 α 相电流以及单位电机转速保存在缓冲区 DLogCh1 和 DLogCh2 中。这些保存的值可以绘制在 CCS视图中。这些图形的与在实际的无传感器交流感应电机应用中生成的曲线相似。要检查该应用程序是否已正确执行,请在测试完成后暂停目标,然后打开“Tools->Graph->Dual Time”来绘制保存的值,点击“Import”,并选择位于顶层文件夹“f28004x”中的图形属性文件“aci.graphProp”。相同的图形属性文件也可以用于在 TMS320F28004x 或 TMS32F2337x 目标上执行的任何构建配置应用程序。α 相电流在 DualTimeA 图中绘制,单位电机转速在 DualTimeB 图中绘制。X 轴具有 1024 个样本中每个样本的数据点,Y 轴具有每个数据点相应的值。图形曲线应类似于图 2-2,其中 α 电流呈正弦曲线状,而电机速度收敛至 0.5 个单位的期望值。
应用程序使用定时计数器和 PWM 计数器在周期计数中对应用程序的各个部分进行基准测试。因此,不需要像示波器之类的外部硬件来测量基准测试结果。为1024 个控制循环执行迭代中的每个迭代收集基准测试数据,并通过应用程序中的 printf 消息在控制台窗口上输出这些数据。器件类型、CPU 时钟频率和 RAM 或闪存(具有等待状态)执行信息与每个应用程序执行块的周期计数(平均值、最大值、最小值)一起输出。图 2-3 显示了使用 TMU 时从 RAM 在 F28004x上执行的示例输出。
实时基准测试需要测量信号链不同阶段的性能。如图 2-4 所示,此过程大致可以分为三部分:硬件响应、编译器生成的上下文保存以及中断服务例程 (ISR) 内的用户代码。
衡量 ISR 内部的执行情况是一项简单的任务。通过在代码块前后插入用于读取定时计数器的代码段并计算差值,可使定时器外设对 ISR 内部的代码进行基准测试。应用程序使用这种方法测量控制代码以及 ADC 读取和 PWM 写入。然而,这种方法无法保存编译器生成的上下文和测量硬件响应。
在此特定应用程序中,当 PWM 计数器达到某个值(时基周期)时使用 PWM 来触发 ADC 采样,并在采样完成时, ADC反过来产生中断。虽然无法单独测量硬件响应和保存编译器生成的上下文,但可以通过在 ISR 代码首次运行时读取 PWM 计数器并计算读取的 PWM 值与触发 ADC 采样时的 PWM 值之间的差值,来一起测量这两者。这就是应用程序测量 INT 响应(硬件响应 + 编译器上下文保存)的方法。
F28004x 器件具有一个称为 ERAD(嵌入式实时分析和诊断)的硬件模块,该模块具有可用于分析应用程序的比较器和计数器。“f28004x”目录包含一个名为“aci_stats_using_erad.js”的脚本,该脚本演示了如何在不修改应用程序的情况下以非侵入方式使用 ERAD 来测量和分析应用程序的执行情况。该脚本可用于验证发生中断的次数(应为 1024),还可以作为示例来说明如何使用 ERAD 测量从 ADC 中断产生到 ISR 进入以及 ISR 用户代码执行的执行周期。该脚本仅用于 ERAD 演示和应用程序验证。此脚本生成的测量数据不用于本文档的实时基准测试分析中。
按如下步骤使用该脚本:
loadJSFile "C:\TI\c2000\C2000Ware_3_04_00_00\examples\demos\benchmark\aci_motor_benchmark\f28004x\aci_stats_using_erad.js"
图 2-5 显示了脚本输出。
如前几节所述,该应用程序的代码分析信号链的不同部分,并将测得的执行情况以周期计数的形式输出到控制台。对这些数字的分析将展现 C2000 架构的特性,以便对其进行优化用于实时控制。这一分析还将揭示实时基准测试方法对于真实评估系统实时性能的重要性。
中断延迟是了解实时系统响应时间的重要因素。评估系统中断延迟的典型方法是计算硬件响应中断并跳转到中断矢量(硬件锁存和响应)所需的周期数。但是,在实时应用中,此时间只是响应延迟的一部分。
考虑到无传感器 ACI 电机基准测试应用程序,PWM 促使 ADC 开始采样。ADC 需要一定数量的周期才能完成采样或转换,具体数量取决于系统配置以及 ADC 功能。ADC 准备就绪后,将产生中断。在 ACI 电机基准测试中, ADC 配置为产生早期中断,即在采样完成之后以及转换开始时(而不是转换结束时)产生中断。ADC 产生中断后,硬件对中断做出响应,并跳转到中断矢量。然而,中断服务例程不会立即开始执行用户代码,而是在此之前必须执行一些编译器生成的上下文保存,然后再执行用户代码。
实际上,如图 3-1 所示,实际中断延迟包含四个部分:触发延迟 + ADC 采样持续时间 + 硬件锁存和响应 + 编译器生成的上下文保存。
ACI 实时基准测试将此值输出为“INT Response (trigger to ISR entry)”。从图 3-2 中可以看出,C28x INT 响应时间平均为 49 个周期,表示在无传感器 ACI 电机示例中,应用程序开始响应感测事件的实际延迟。传统基准测试不会以此方式测量系统。INT 响应周期在最小值和最大值之间的差异是可以预期的,因为在 CPU 接收异步中断事件之前,可能还需要额外的周期来完成正在进行的后台指令。
表 3-1 列出了每个单独元素的理论估计影响值,并且可以看出总周期数与应用程序基准测试获得的最小周期数一致。
触发延迟 (1) | ADC 采样持续时间 (2) | 硬件锁存和响应(3) | 编译器上下文保存(4) | 总计(周期数) |
---|---|---|---|---|
2 | 8 | 14 | 23 | 47 |
查看影响总周期数的各个组件,可以看出 PWM 和 ADC 紧密集成,并且触发延迟也带来了几个额外的周期。ADC 早期中断产生特性允许系统响应中断时并行进行 ADC 转换。这样允许转换周期与中断产生和编译器上下文保存周期重叠,从而减少响应 ADC 采样事件所需的总时间。相比之下,对于任何其他不具有 ADC 早期中断产生特性的系统,中断响应将包括转换周期,因此会增加总响应时间。此特性的另一个优点是,ADC 结果可在时间更接近采样时间时应用于系统,从而实现更精确的系统控制。
ACI 实时基准测试有两个外设访问响应:ADC 读取并转换为浮点以及 PWM 写入。有关每种操作的响应时间,请参阅图 3-3。
在此特定实现方案中,仅读取两个 ADC 输入,且写入三个 PWM 输出。从表 3-2中可以看出,在涉及电机控制或数字电源的其他实际应用中,这些操作的数量可能更大,并且可能对控制应用程序的执行持续时间产生更大的影响。
在 C2000 架构中,CPU 与外设紧密集成,并且对指令集架构进行优化以用于浮点运算。从表 3-3 中的基准测试数据可以看出,读取一个 ADC 输入并将其转换为浮点仅需约 2 个周期,而写入一个 PWM 输出却需要约 3 个周期。因此,C2000 架构可以有效地扩展到需要大量访问外设的应用中。
表 3-2 根据基准数据获取一些实际控制应用的估计周期。
许多 C2000 目标都具有称为三角函数加速器 (TMU) 的数学扩展,这是一种浮点单元 (FPU) 扩展,通过高效执行控制系统应用中常用的三角和算术运算来增强 C28x+FPU 的指令集。
ACI 电机控制应用具有以下控制算法:涉及三角函数的 Park、逆向 Park 和通量估算器。为了演示 TMU 可能产生的影响,F28004x 具有两个构建配置 SignalChain_RAM_TMU 和 SignalChain_RAM_FastRTS。
在下图中,针对两种配置中的每种配置,图 3-4 显示了从基准周期数据得出的执行时间,图 3-5 显示了编译器工具生成的链接器映射文件中指示的控制代码(不包括驱动程序库和运行时)的应用程序大小(代码和数据)。
图中的数据表明,TMU 具有两个方面的影响:
许多应用程序都配置为在闪存外执行。因此,闪存性能是衡量实时系统功能的关键标准。典型的基准测试通过执行合成代码来计算闪存效率,但在执行包含非线性代码流、数据表和外设访问的应用程序时,合成代码可能无法显示出性能。
F28004x 和 F2837x 具有两种构建配置:“SignalChain_RAM_TMU”和“SignalChain_FLASH_TMU”。这些配置的执行时间如图 3-6 和图 3-7 所示。
表 3-3 列出了根据总平均执行周期基准测试数据得出的闪存性能。
RAM 执行(周期数) | 闪存执行(周期数) | 闪存相对性能 (RAM_cycles * 100 / Flash_cycles) |
闪存技术 | |
---|---|---|---|---|
TMS320F28004x | 529 | 648 | 82% |
|
TMS320F2837x | 537 | 582 | 92% |
|
从表中的数据可以看出,与 RAM 性能相比,C2000器件在ACI 电机控制等实际应用中的闪存性能非常好(大约为 80-90%)。
CLA 是一个任务驱动型完全可编程的独立 32 位浮点硬件加速器,专用于数学密集型计算。CLA 还可访问 ADC 和 PWM 等外设。CLA 支持八个硬件任务。硬件任务可以由 C28x CPU 或控制外设发起。有关 CLA 的更多详细信息,请参阅“参考文献”部分中链接的文档。这些功能使 CLA 成为一个强大工具,通过两种方式即可实现实时系统性能目标:
ACI 实时基准测试已导入,以展示 CLA 的这两种用途。
CLA 是一种任务驱动型架构,与控制外设紧密集成。器件专用 TRM 和数据表包含有关 CLA 可访问的外设的信息。
ADC 可以触发 CLA 上的任务,就像触发C28x CPU 上的中断一样。CLA 还可以写入 PWM。这些功能允许在CLA上执行整个 ACI 信号链,即 ADC 触发 CLA 任务,CLA 任务执行整个控制循环。当 CLA 执行信号链时,C28x CPU 处于空闲状态。这表明,在一个更全面的示例中,可以对应用程序进行分区以从 CLA 中运行控制循环,并让 C28x CPU 运行其他操作(如通信协议栈)。
有关实现方案,请参阅“SignalChain_RAM_CLAmath_CLA”构建配置。
对基准测试的见解详见如下。
CLA 是一种任务驱动型架构,因此没有传统中断架构上下文保存和恢复开销。因此,CLA 具有较低的中断延迟,允许其能“及时”读取 ADC 样本。更多有关此主题的信息,请参阅器件专用TRM 的 CLA 部分。
在此应用中,用于触发 CLA 任务的 ADC 设置与 ADC 触发 C28x 中断的配置相同。表 3-4 显示了 CLA 与 C28x 相比较的情况,并展示了在没有任何上下文保存开销情况下的低延迟。
计算内核 | ADC 中断响应(周期数) |
---|---|
CLA | 17 |
C28x | 47 |