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.

F28335-Q格式问题

程序中有一句  _iq   SpeedRef   =_IQ(0.15),其中全局的Q格式是24,可不可以这样理解,speedref的十进制的数值就是0.15*2^24的值?

求助ti人,1.怎样理解IQ的计算?

               2,程序中的iq值可以看作是标幺值吗

  • 你好。

    1. 你的计算方法没有问题。_iq实际的数据类型是有符号32位整型,所以比如说Q24, 第31位是符号位,30~24位是整数部分,23~0位是小数部分。

    2. 程序中FOC算法中的一些变量,基本上都是标么值。

  • 补充下,IQ格式和标幺值不是同一个概念,IQ格式主要为了使定点的芯片能执行浮点的计算;标幺值是将一个实际值转换为一个无量纲的量,这样可以简化计算。

  • 您好,还是有点疑惑,比如说我想将一个数2516582转化成_IQ24格式,应该怎样计算。

    还有就是怎样实现将一个变量转化成IQ格式,比如说iq i= iq(x*y),其中x,y都是变量,我在程序中写,总是报错,说expression  must has a constant value.

  • 恩,那您觉得

    1、我想在程序中将浮点型转换为Iq格式,是不是应该这样_iq i = x / 2^24,

    2、_IQ12toIQ(x)这种语句又是什么意思

  • ZengZhen,

    两种方法:

    1. 先将x和y分别先转换成IQ格式的,再相乘:i =  _IQmpy(_IQmtoIQ(x), _IQmtoIQ(y)),其中m指你的x和y的IQ格式,如IQ15或IQ0等;

    2. 先计算x*y的值,然后再转换为IQ格式:i = _IQmtoIQ(_IQmpy(x*y)); 前提是x和y都是同样IQ格式的,m的含义如上;

    注意几点:

    1. IQ格式的数据相乘需要调用_IQmpy(A,B)函数;

    2. IQ相乘的结果是两个IQ数的叠加,如两个IQ15的数相乘的结果是IQ30格式的,需要后面转换成你想要的IQ格式。

    具体的细节可以去查下TI的IQ manth库的文档

  • ZengZhen,


    _IQ12toIQ(x)的含义是将IQ12格式的x转换成你软件系统中定义的IQ格式,

    你查下你的 GLOBAL_Q是多少,如TI的很多例程中在

    <IQmathLib.h> 定义:#define   GLOBAL_Q       24

    因此针对你的语句就成x转换成IQ24格式的,即x左移12位。