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.

[参考译文] TMS320F28069:为什么在使用 IQmath 时不需要将 ADC 结果除以满量程?

Guru**** 2585275 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/935677/tms320f28069-why-does-we-don-t-need-to-divide-the-adc-result-by-full-range-while-using-iqmath

器件型号:TMS320F28069

_IQ 结果;
void main (void)
{
//将 ADC 结果转换为全局 IQ 格式,值介于0.0和1.0
之间结果=_IQ12toIQ ((_IQ) AdcResult.ADCRESULT0);

//可选: 按 ADC 满量程范围进行缩放以获得0.0至3.3
//(如果您更喜欢从电压角度进行思考/缩放)
结果=_IQmpy (_IQ (3.3)、结果);
}

在浮点数学中、我们将获得的 ADCresult 乘以3.3、然后除以4096。 为什么在使用 IQmath 时这不适用?

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

    马约里

    以这种方式思考-假设 ADC 值介于0.0和1.0之间。 然后、12位 ADC 提供的值(0-4095)表示该浮点值、这使 ADC 提供的值成为 IQ12类型的值。

    现在、您需要将该 IQ12值转换为全局 Q 值(例如24)。 因此使用_IQ12toIQ()转换该值。 假设全局 Q 为12、则该值保持不变。

    现在、代码的下一行显示了您所评论的内容-如果表示的值不是0.0 - 1.0、而是0.0 - 3.3、那么我们需要相应地进行缩放、这就是乘法所完成的操作。

    以上代码中未显示的是最后一步-现在假设您要将 IQ12值转换回浮点值。 这可以使用 IQNint 和 IQNfrac 来完成(请参阅 IQMath_quickstart.pdf 用户指南)。 这是"division (除法)" 4096完成的地方。

    谢谢、

    Sira