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.

[参考译文] TMS320F2808:关于 IQmath 的问题

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1085929/tms320f2808-question-about-iqmath

部件号:TMS320F2808

尊敬的团队:

在使用以下代码测试项目时,我的客户发现,当为参数 lBalanceBRFXn 提供浮点数据时,程序的运行结果是正确的。

当为参数 lbalancebrfxn 提供定点数据时,程序运行后的输出结果为0。

下面是代码:

#define lB0 16560587
#define lB1 -33075803
#define lB2 16560587
#define lA1 -33075803
#define lA2 16343958

long long lBalanceBRFXn;
long long lBalanceBRFYn;
long long lBalanceBRFXn_1;
long long lBalanceBRFXn_2;
long long lBalanceBRFYn_1;
long long lBalanceBRFYn_2;

lBalanceBRFYn = (lBalanceBRFXn * lB0)>>24 + (lBalanceBRFXn_1 * lB1)>>24 + (lBalanceBRFXn_2 * lB2)>>24
- (lBalanceBRFYn_1 *lA1)>>24 - (lBalanceBRFYn_2 * lA2)>>24;
//
lBalanceBRFYn_2 = lBalanceBRFYn_1;
lBalanceBRFYn_1 = lBalanceBRFYn;
lBalanceBRFXn_2 = lBalanceBRFXn_1;
lBalanceBRFXn_1 = lBalanceBRFXn;

此致

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

    您好,

    您共享的代码看起来是固定点。 您是否确保适当地更改数据类型以浮动以及#define 值?
    Q 值的固定点格式是什么? 输入的值是否相同? 您是否考虑过溢流/下溢?

    山塔努

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

    您好,尚塔努:

    [引用 userid="419856" url="~/support/icros/c2000微控制器-组/CC2000 /f/c2000微控制器-论坛/1085929 /TMS320F2808 -关于 IQMate/4022763#4022763"] Q 值的定点格式是什么?

    格式为 Q24。

    [引用 userid="419856" url="~/support/icros/C2000 -微控制器-组/CC2000 /f/C2000 -微控制器-论坛/1085929 /TMS320F2808-关于 IQMate/4022763#4022763"]的值是否相同?

    客户 的原始价值是:

    LB0 = 0.987087899425535
    LB1 = -1.97147149483059
    lB2 = 0.987087899425535
     LA1 = -1.97147149483059
     LA2 = 0.974175798851069

    转换为 Q16后:

    LB0 = 16560587
    LB1 =-33075803
    LB2 = 16560587
     LA1 =-33075803
     LA2 = 16343958

    [引用 userid="419856" url="~/support/icros/c2000微控制器-组/CC2000 /f/c2000微控制器-论坛/1085929 /TMS320F2808 -关于 IQMath 的问题/4022763#4022763"]您是否考虑了溢出/下溢?

    客户确认计算后不会出现溢流/下溢。  即使客户使用更长的“长”整数,也不会出现溢出。

    以下代码是一个缺口过滤器,可以过滤出150Hz。 如果客户使用浮点运算,则可以正常输出。

    lBalanceBRFXn = 100+50*sin(2*pi*150*iCnt/18000);
    
     lBalanceBRFYn = lBalanceBRFXn * lB0 + lBalanceBRFXn_1 * lB1 + lBalanceBRFXn_2 * lB2
    - lBalanceBRFYn_1 * lA1- lBalanceBRFYn_2 * lA2;
    
    lBalanceBRFYn_2 = lBalanceBRFYn_1;
    lBalanceBRFYn_1 = lBalanceBRFYn;
    lBalanceBRFXn_2 = lBalanceBRFXn_1;
    lBalanceBRFXn_1 = lBalanceBRFXn;

    如果使用定点,则输出为0。 代码如下:

    lBalanceBRFXn = 100+50*sin(2*pi*150*iCnt/18000);
    
    lBalanceBRFYn = (lBalanceBRFXn * lB0)>>24 + (lBalanceBRFXn_1 * lB1)>>24 + (lBalanceBRFXn_2 * lB2)>>24
    - (lBalanceBRFYn_1 *lA1)>>24 - (lBalanceBRFYn_2 * lA2)>>24;
    /
    lBalanceBRFYn_2 = lBalanceBRFYn_1;
    lBalanceBRFYn_1 = lBalanceBRFYn;
    lBalanceBRFXn_2 = lBalanceBRFXn_1;
    lBalanceBRFXn_1 = lBalanceBRFXn;

    此致

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

    此外,在 iir32过滤器用户指南中,表中的输出是否需要进行 Q30校准?

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

    您好,

    对延误表示歉意。 如果使用的是库筛选方法,则输出格式是固定的。 但是,在该代码中,您似乎是自己实施筛选器。  

    您是否使用定点/IQMath 库? 如果是,请确认是否使用了正确的库和正确的处理器选项(fpu32等)。  

    在编译代码时是否使用了任何优化? 如果是,请关闭并尝试。  

    如果上述答案为否,请分享两种情况(定点和浮点)的反汇编屏幕截图,以便我们进一步调试。  

    山塔努