This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F280049:使用 TMU 进行 Park 变换

Guru**** 1955440 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/936972/tms320f280049-park-transform-with-tmu

器件型号:TMS320F280049

您好!

在 TMS320F28004x 数据表(PSRS945E)的顶部、1.1特性、其内容为:

–三角函数加速器(TMU)
–常见三角函数与软件库的3×周期到4×周期改进
–13周期帕克变换

我的客户询问;
Q1)“Park 变换”在这里究竟意味着什么?

Q2)哪些 TMU 支持的指令(参见下文)用于执行上述“Park 变换”?


Q3)这13个周期是什么?

谢谢、此致、
田志郎一郎

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    帕克变换由以下公式给出。 您可以看到、与非基于 TMU 的计算相比、TMU 有助于更快地计算正弦和余弦 Theta。 如果 CPU 时钟为100MHz (10ns 时间周期),则13个周期意味着大约需要130nS (13*10ns)来完成 Park 变换。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢 Shamim。 您所附的图片在我的末尾未显示、因此我要输入方程式。

    pOutVec->value[0]=(value_0 * cosTh)+(value_1 * sinTh);
    pOutVec->value[1]=(value_1 * cosTh)-(value_0 * sinTh);

    谢谢、

    Sira

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    假设您的问题得到了准确回答、我将结束本主题。 如果没有、请告知我们。

    Shamim

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Shamim、

    感谢您的回复。
    客户还想知道如何将13个周期分成每条指令。

    例如、这是我的猜测。

    pOutVec->value[0]=(value_0 * cosTh)+(value_1 * sinTh);
    pOutVec->value[1]=(value_1 * cosTh)-(value_0 * sinTh);

    CosTh 为 COSPUF32 Rah、RBH、然后是4周期
    1个 MPY 1周期?
    SinTh 为 SINPUF32 Rah、RBH、然后为4周期
    1个 MPY 1周期?
    一个加1周期?
    1个 MOV 1周期?
    总共12个周期?

    您能否提供上述公式和所需周期的汇编表示?

    谢谢、此致、
    田志郎一郎

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    一郎

    我尝试查看编译器是否会生成最有效的汇编代码、但即使启用了优化、编译器也不会生成最有效的汇编代码。  请参阅我使用的代码段-它需要45个周期。

    例如,我想看看是否可以将 COSPBUF32和 SINPUF32中的 NOP 与不同的寄存器一起使用,但编译器没有这样做。 我将更深入地探讨这一点、包括是否需要手动编写的汇编。

    volatile float32_t value0、value1、theta;
    volatile float32_t value_0、value_1、cosTh、sinTh;
    volatile float32_t temp1、temp2、temp3、temp4;

    cosTh = cosf (theta);
    sinTh = sinf (theta);
    TEMP1 = value_0 * cosTh;
    TEMP2 = value_1 * cosTh;
    temp3 = value_1 * sinTh;
    temp4 = value_1 * cosTh;

    value0 = temp1 + temp2;
    Value1 = temp3 - temp4;

    谢谢、

    Sira

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    假设您的问题得到了准确的回答、我将关闭此主题。

    Shamim

x 出现错误。请重试或与管理员联系。