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.

[参考译文] TMS320F28069F:需要更改 Ctrl_angleDelayComp ()以使用 FPU

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/586212/tms320f28069f-ctrl_angledelaycomp-need-to-be-changed-for-using-fpu

器件型号:TMS320F28069F
主题中讨论的其他器件:MOTORWAREcontrolSUITE

大家好、  

我对以下代码段有疑问、它似乎是针对 IQmath 而不是 FPU 实现的。

ctrl.h 中的 Ctrl_angleDelayComp ()

uint32_t angleMask =((uint32_t) 0xFFFFFFFF >>(32 - global_Q);
_IQ angleTmp_pu;
_IQ angleComp_pu;

//使角度
angleTmp_pu 递增= angleUncomp_pu + angleDeltaComp_pu;

//屏蔽绕
帐户的角度
;注意:_anglepu = angleChu + angleDeltpu = angleComp_pu + angleComp_pu;//必须屏蔽 anglepu 

当我启用 IQmath_fpu32时、遇到以下错误。

"C:/ti/motorware/motorware_1_01_00_17/sw/modules/ctrl/src/32b/ctrl.h "、第2142行:错误#31:表达式必须具有整型

我认为 angleMask 用于删除 MSB 的8位、但它适用于整数、而不是浮点值。

您是否想告诉我如何更改浮点代码?

此致、

Hae Ryong

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

    请您看看我的问题吗?
    如果我的分析有问题、请告诉我。

    提前感谢。

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

    此函数不具有 FPU32的本机支持、您必须更改代码。 您可以尝试为 FPU32添加#ifdef 指令、如果定义了该指令、则不要执行 angleMask 赋值。 此外、您不会执行"& angleMask"操作。 相反、您需要添加一条条件语句、以确保 angleTmp_pu 介于_IQ (-1.0)和_IQ (1.0)之间、这正是 angleMask 的函数。

    您可以尝试类似这样的操作。

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

    感谢您的反馈。

    您是否可以查看以下代码片段的目的?

    #if MATH_TYPE = FLOAT_MATH
    if (angleComp_pu >_IQ (1.0)) angleComp_pu =_IQ (1.0);
    否则、如果(angleComp_pu <_IQ (-1.0)) angleComp_pu =_IQ (-1.0);
    其他
    //屏蔽环绕的角度
    //注意:必须考虑角度的符号
    angleComp_pu =_IQabs (angleTmp_pu)& angleMask;
    #endif


    还有一件事要问。
    要启用 FPU32,是否需要在 IQmathLib.h 中添加以下定义?
    #define MATH_TYPE FLOAT_MATH

    FPU32的 Motorware 实验示例似乎不使用它。
    因为在实验示例中没有我在前面提到的编译错误

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

    我相信、您对 if/else 语句有正确的想法来限制 angleComp_pu 值。

    第二点、是的、定义 float_Math 是正确的。 请参阅一些支持文档、例如 IQMath 快速入门指南的第25页、该指南位于:C:\ti\controlSUITE\libs\math\IQmath\v160\doc\IQMath_Quickstart.pdf

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

    我已经测试了我的修改后的代码、但它不起作用。
    我发现 angleComp_pu 未初始化。

    您想告诉我应该使用什么初始值吗?

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

    请您看看我的查询吗?
    很难理解代码的意图、因此我无法将其转换为使用 FPU32。

    此致、
    Hae Ryong