ZHCAEQ3 November 2024 F29H850TU , F29H859TU-Q1
空间矢量生成 (SVGEN) 是电机控制系统中的常用功能,主要将矢量 (α, β) 映射到 6 段空间矢量,从而生成 3 个 PWM 信号。在普通实现中(如 图 3-5 中所示),使用了 if..else 语句(图左侧),编译器生成包含分支的代码(图右侧)。
图 3-5 普通实现. 在 SVGEN 的优化实现中(如图 3-6 所示),利用了 C29 的 QUADF 指令(通过内嵌函数 __builtin_c29_quadf32 实现)。该指令将二维空间分成 16 个段。通过 switch() 语句将 16 段空间映射到 6 段空间。C 语言代码如图左侧所示,编译器生成的汇编语言如图右侧所示。生成的汇编代码为直线代码,不含分支,并实现了并行化(每个周期并行执行四条指令)。
无论输入如何,在 C29 上,优化实现均需要 24 个周期,而普通实现需要 26-43 个周期,具体取决于输入。在 C28 上,普通实现需要 70-100 个周期。在 Cortex-M7 上,普通实现需要 58-73 个周期,具体取决于输入。
图 3-6 在 C29 上的 SVGEN 优化实现. TI 提供涵盖实时控制和 DSP 的库。在某些情况下,库的优化实现可提升性能,相较于普通实现效果更佳。