ZHCABX7A May 2020 – November 2022 TMS320F280048-Q1 , TMS320F280048C-Q1 , TMS320F280049 , TMS320F280049-Q1 , TMS320F280049C , TMS320F280049C-Q1 , TMS320F28033 , TMS320F28033-Q1 , TMS320F28035 , TMS320F28035-EP , TMS320F28035-Q1 , TMS320F28053 , TMS320F28055 , TMS320F2806-Q1 , TMS320F28065 , TMS320F28069 , TMS320F28069-Q1 , TMS320F28069F , TMS320F28069F-Q1 , TMS320F28069M , TMS320F28069M-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
实现超高性能计算和高效处理对于解决当今复杂的实时控制问题至关重要。实时控制系统是闭环控制系统,其中使用一个紧凑的时间窗口来收集数据、处理该数据并更新系统以满足性能目标。TI 的控制律加速器 (CLA) 旨在与 C28x CPU 并行执行实时控制算法,使 C2000 器件的计算性能加倍。本应用报告将讨论 CLA 的一些特性,并使用一些简单的软件示例进行演示。这些独立示例作为 C2000Ware 的一部分提供,可快速用于探索和评估 CLA 的功能。
C2000is a TM ofTI corporate name.
Other TMs
该 CLA 是完全可编程的独立 32 位浮点 CPU,专为优化数学密集型计算而设计,可显著提升控制算法的性能。与执行指令和处理中断的标准传统处理器不同,CLA 实际上是任务驱动状态机,最多可支持 8 个用户定义的任务。除了提供计算能力外,CLA 的独特之处还包括提供最小延迟并轻松访问主要控制外设。因此,CLA 非常适合用于实现快速控制环路,从而释放 C28x 上的带宽以运行额外的控制环路并执行其他与诊断和通信相关的任务。本应用报告的后续各节将详细讨论 CLA 的这些独特功能,并通过 C2000Ware 包 [2] 中提供的一些简单软件示例进行演示。更多有关 CLA 架构和指令集的详细信息,请参阅 [1]、[3]。
本文档中讨论的示例,都可以在安装 C2000Ware v3.01.00.00 或最新版本后在以下目录中找到:
讨论的示例工程包括:
大多数实时控制算法用于对系统执行三个主要任务:激励、采样和控制。对系统进行激励涉及更新 PWM 寄存器,对系统进行采样涉及访问 ADC 结果寄存器,而对系统进行控制涉及控制环路数学计算。CLA 作为独立的数学处理器,还能够访问用于控制应用的所有主要外设(如 EPWM、ADC、ECAP、EQEP、CMPSS 等)的寄存器。因此,CLA 可以执行采样和驱动以及计算控制逻辑,并且能够在没有任何 C28x 参与的情况下独立执行整个控制任务。
“cla_ex4_pwm_control”示例展示了如何通过 CLA 直接控制 PWM 信号输出。此示例的方框图如图 2-1 所示。在此示例中,EPWM1 配置为以 100KHz 的固定频率在两个通道上生成互补信号,而 EPWM4 配置为以 10KHz 的频率触发周期性的 CLA 控制任务。CLA 任务 1 采用一个非常简单的逻辑来改变 EPWM1 输出的占空比,方法是针对每次迭代将其增加 0.1,同时还需要将其保持在 0.1-0.9 的范围内。下面的代码序列说明了如何在 CLA 任务中按原样使用现有的 C28x driverlib API(作为 C2000Ware 的一部分提供)来更新 EPWM 寄存器,从而避免与 CLA 相关的任何额外软件开发工作。CLA 任务也可以采用类似的方式访问其他共享外设的主要寄存器。请注意,无法在 .cla 文件的开头初始化 CLA 全局变量,因此,该示例还说明了在专用 CLA 任务(CLA 任务 8,在初始化时由 C28x 软件触发)内初始化所有 CLA 全局变量的系统方法。
__attribute__((interrupt)) void Cla1Task1 ( void )
{
//
// Uncomment this to debug the CLA while connected to the debugger
//
__mdebugstop();
//
// Write to the COMPA register to realize a particular duty value
//
EPWM_setCounterCompareValue(EPWM1_BASE, EPWM_COUNTER_COMPARE_A,
(uint16_t)(duty * EPWM1_PERIOD + 0.5f));
//
// Update duty value and use the limiter
//
duty += 0.1f;
duty = (duty > 0.9f) ? 0.1f : duty;
//
// Clear EPWM4 interrupt flag so that next interrupt can come in
//
EPWM_clearEventTriggerInterruptFlag(EPWM4_BASE);
}