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.

c280xx电机控制程序中关于电流电压采样的疑惑(_IQ12toIQ(AdcResult.ADCRESULT1x)



各位大神:

谁能帮忙解读一下,如下:

 clarke1.As = _IQmpy2(_IQ12toIQ(AdcResult.ADCRESULT1)-offsetA); // Phase A curr.
 clarke1.Bs = _IQmpy2(_IQ12toIQ(AdcResult.ADCRESULT2)-offsetB); // Phase B curr.
 CLARKE_MACRO(clarke1)

其中_IQ12toIQ(AdcResult.ADCRESULT1)是怎么来的,为什么是_IQ12toIQ而不是_IQ14toIQ或者_IQ16toIQ,

想不通啊,这个数据类型是 UINT16  AdcResult.ADCRESULT1 范围是0~65536,而实际取值时只能取到0~4096,这是什么意思呢?

请高手帮忙解读!

  • 你说的没错,ADC的结果范围为0~4095,12位有效数字。

    根据Q格式表示浮点的规则,把(AdcResult.ADCRESULT1)-offsetA按Q12格式来理解,其数值范围正好是-0.5~0.5。

    clark1.As是Global Q格式,所以需要用_IQ12toIQ把Q12格式转换成Global Q。

    然后,_IQmpy2把数值范围转换成-1~1,即完成了ADC值到标么值的转换。

  • 谢谢Jay的解答,_IQ12toIQ(N)可以理解为先把N变成Q12格式,然后再从Q12变换成Q24,包含了两步运算!

    另外,问个问题,IQMATH的这些函数比如,_IQ12toIQ(N),_IQmpy2等可以看到他们的源代码么?

  • _IQ12toIQ(N)在头文件里就可以找到对应的源代码,因为这个很简单。

    _IQmyp2没有Release源代码出来。