Floating point 智商数学计算

Floating point 智商数学计算,floating-point,piccolo,Floating Point,Piccolo,有人能解释一下下面的对话是如何进行的吗 clarke1.As =_IQ15toIQ((AdcResult.ADCRESULT0<<3)-_IQ15(0.50))<<1; clarke1.As=\u IQ15toIQ((AdcResult.ADCRESULT0您发布的讨论假设了用户方面的一些事情: 熟悉ADC测量电路 熟悉TI的IQMath格式 我会尽力解释答案,但如果仍有不清楚的地方,请仔细阅读以上两条 假设您正在使用picollo控制器测量+-10A范围。 让我们考虑

有人能解释一下下面的对话是如何进行的吗

clarke1.As =_IQ15toIQ((AdcResult.ADCRESULT0<<3)-_IQ15(0.50))<<1;

clarke1.As=\u IQ15toIQ((AdcResult.ADCRESULT0您发布的讨论假设了用户方面的一些事情:

  • 熟悉ADC测量电路
  • 熟悉TI的IQMath格式
  • 我会尽力解释答案,但如果仍有不清楚的地方,请仔细阅读以上两条

    假设您正在使用picollo控制器测量+-10A范围。 让我们考虑在ADC上通过信号调理电路测量I=+5A。这个信号调理电路将负责抵消-10A到0V和+10A到3.3V。

    i、 e.+-10A在ADC输入端被缩放为0-->3.3V,其中0A值在ADC端被读取为1.65V

    也就是说,i=5A转换为1.65V+(1.65/2)V=2.475V

    等效的12位ADC计数为=(4095*2.475V/3.3V)=3071。 现在,正如您已经提到的,这个12位计数存储在一个16位寄存器中。 此外,正如已经提到的,这是正确的。 i、 e.编号存储如下 AdcResult.ADCRESULT0=0x0BFF

    AdcResult.ADCRESULT0:00111

    现在,为了进一步处理FOC或任何其他算法,您需要将该数字转换为等效的+-1 pu值。这意味着,您需要将ADC结果乘以某个值,并要求结果为浮点值。虽然控制器可以直接实现这一点,但仅乘法运算就需要消耗大量的pr处理时间!为了加速这些运算,特别是分数运算,德州仪器公司的C28x处理器在代码中使用IQMath格式。更多信息,请参阅本文末尾的链接

    首先,16位ADC结果“按原样”复制到32位累加器中

    值:0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 1

    然后,将其转换为IQ15格式,其中最后15位表示小数部分,左对齐。因此,q值为:

    Q值=0 0 1 0 1 1 1 1 1

    这是错误的,因为前三位是零,我们的信息是从第四位开始存储的。因此,编码器将值向左移动了3位以校正Q值。 因此,IQ15值变为:

    ADC值_Q15= 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 1 0 0 0 0 0 0

    减去偏移量=0.5,即2^(-1),因此Q值为:

    偏移量_Q15:0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

    ADC结果_Q15=ADC值_Q15-偏移量_Q15

    ADCResult_Q15= 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0

    这个值仍然是IQ15,它被转换成全局Q值,我猜应该是Q24

    ADCResult_Q24= 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

    因为这只是电流振幅的一半(由于符号位处理+),我们现在应该将其乘以2。 这是由编码器通过代码中的左移智能完成的

    结果(Q24)= 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

    如果我只看Q值,它在Q24格式的上面第9位之后开始,我会在这里得到pu中ADC操作的结果:

    Q值=0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

    转换成等价数,符号=0,int_值=0

    ADC_值_pu=0*(2^(-1))+1*(2^(-2))+1*(2^(-3))+1*(2^(-4))+ 1*(2^(-5)) + 1*(2^(-6)) + 1*(2^(-7)) + 1*(2^(-8)) + 1*(2^(-9)) + 1*(2^(-10))

    ADC_值_pu=0.499

    对于测量+-10A的ADC,它是5A的等效pu表示

    我希望这能解释它。有关更多信息,请通过以下链接花一天时间理解IQMath格式: