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.

DMC 3.2库

问题一、Clarke、IPark、svgen_dq这些都是_iq类型,这个是浮点数类型嘛?由于CCS6.2无法打开工程,所以都是看源文件,在IQmathLib里面有定义是浮点数,不知道是不是就这里定义。

问题二、Vb = _IQmpy(_IQ(-0.5),v->Ubeta) + _IQmpy(_IQ(0.8660254),v->Ualpha); 这个计算里面_IQmpy是乘法运算,那么v->Ualpha是浮点数,另外一个是Q格式,在进行_IQmpy运算时,是怎么处理的,浮点数转成Q格式,在进行运算?

问题三、如果问题一上面说的是浮点数,那么Clarke、IPark、计算出来的结果是不是会大于或者超过 1,这样是不是在PID那里会进行限制。还是说Clarke、IPark、这些的输入量就已经限制了,不会出现大于1的。

问题四、clarke1.As = _IQ15toIQ((int32)ilg2_vdc1.ImeasA);这个计算里是不是先将ilg2_vdc1.ImeasA(原本是Q15格式16位的数据)转换成Q0格式,这样就将小数部分转换为整数了,是这样的嘛?那为什么要强制转换成32位呢?

问题比较多,希望TI的工程师能一一解答。

  • 问题一、Clarke、IPark、svgen_dq这些都是_iq类型,这个是浮点数类型嘛?由于CCS6.2无法打开工程,所以都是看源文件,在IQmathLib里面有定义是浮点数,不知道是不是就这里定义。

    ERIC: IQMATH 有两种格式,一种是定点,一般在定点的芯片上,如F28035, 另一种可以设置为浮点形式,在带浮点运算单元的芯片,如F28335, F28069上。之所以有IQMath为浮点的格式,是为了兼容以前一些程序是基于定点的芯片来开发的,而现在程序跑在浮点芯片上,想用浮点去处理。当然,在浮点芯片上也可以直接用定点格式的IQMATH。是在IQmathLib.h头文件中定义到底是浮点还是定点。

    问题二、Vb = _IQmpy(_IQ(-0.5),v->Ubeta) + _IQmpy(_IQ(0.8660254),v->Ualpha); 这个计算里面_IQmpy是乘法运算,那么v->Ualpha是浮点数,另外一个是Q格式,在进行_IQmpy运算时,是怎么处理的,浮点数转成Q格式,在进行运算?

    ERIC: 从你这个函数来看,v->Ubeta 是IQ格式,它要跟一个浮点-0.5相乘,必须将0.5转换成对应的IQ格式。这里不管IQ格式是定点还是浮点,all work.

    问题三、如果问题一上面说的是浮点数,那么Clarke、IPark、计算出来的结果是不是会大于或者超过 1,这样是不是在PID那里会进行限制。还是说Clarke、IPark、这些的输入量就已经限制了,不会出现大于1的。

    ERIC:如果是浮点,为何会出现超过1的情况呢,我不明白。

    问题四、clarke1.As = _IQ15toIQ((int32)ilg2_vdc1.ImeasA);这个计算里是不是先将ilg2_vdc1.ImeasA(原本是Q15格式16位的数据)扩大到32位,然后在转换成Q0格式,这样就将小数部分转换为整数了,是这样的嘛?

    ERIC: 这里的含义是,输入信号被ADC采样后,其实就是一个Q15格式的数据,即信号被放大了2^15, 然后再通过IQ15> IQ格式的方式转换成跟大家统一的运算格式。

    ERIC

  • 问题二:v->Ubeta 是IQ格式,那么在它的前面是IPARK给它幅值的,

    void ipark_calc(IPARK *v)
    {
    float32 Cosine,Sine;
    if (v->Angle+0.25 > 1.0)
    {
    Sine = sin_tab[(int16)(v->Angle*256)];
    Cosine = sin_tab[(int16)(v->Angle*256) - 192];
    }
    else
    {
    Sine = sin_tab[(int16)(v->Angle*256)];
    Cosine = sin_tab[(int16)(v->Angle*256) + 64];
    }
    v->Alpha = v->Ds*Cosine - v->Qs*Sine;
    v->Beta = v->Qs*Cosine + v->Ds*Sine;
    }

    那么上面红色的结果也是IQ格式,可是Cosine、Sine是浮点数,不要处理嘛?

  • matlab DMC SVGenDQ 生成代码存在 _IQ16(-0.5)的数据转换 哪里能设置么
    _IQ16(-0.5)能不能改成_IQ24 或者定义成变量