智商数学计算

时间:2017-11-24 04:15:30

标签: floating-point piccolo

任何人都可以解释下面的对话如何运作?

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

Piccolo器件具有12位ADC和16位ADC寄存器。对于Piccolo设备,AdcResult.ADCRESULT寄存器是正确的;因此,测得的相电流值首先左移3,转换成Q15格式(0到1.0),然后在偏移减法后转换成交流量(±0.5)。最后,它被移动一个(乘以2)以将测得的相电流归一化到±1.0 pu。

我不明白这一点。

1 个答案:

答案 0 :(得分:1)

您发布的讨论在用户端假设了几件事:

  1. 熟悉ADC测量电路。
  2. 熟悉TI的IQMath格式。

我会尽力解释答案,但是如果仍然不清楚,请仔细阅读以上两个内容。

让我们假设您正在使用picollo控制器测量+ ​​-10A量程。 让我们考虑一下,您正在通过ADC的信号调理电路测量i = + 5A。该信号调理电路可将-10A偏移至0V,将+ 10A偏移至3.3V。

即在ADC输入端+ -10A缩放至0-> 3.3V,在ADC处0A值读为1.65V。

这意味着i = 5A转换为1.65V +(1.65 / 2)V = 2.475V

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

  

AdcResult.ADCRESULT0:0 0 0 0 1 0 1 1 1 1 1 1 1 1 1 1 1

现在,您需要将此数字转换为等效的+ -1 pu值,以便进一步处理FOC或任何其他算法。这意味着,您需要将ADC结果乘以某个值,并且结果需要浮点数。虽然这可以由控制器直接实现,但仅乘法运算确实会消耗大量的处理时间!为了加速此类操作,特别是对于小数,德州仪器(TI)的C28x处理器在代码内部使用IQMath格式。有关更多信息,请参见本文末尾的链接。

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

  

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

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

  

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

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

  

ADCValue_Q15 =   0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 1 1 1 1 1 1 1 0 0 0

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

  

Offset_Q15:0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0

ADCResult_Q15 = ADCValue_Q15-偏移量Q15

  

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

该值仍然是IQ15,已转换为全局Q值,我想应该是Q24。

  

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

由于这仅代表电流的一半振幅(由于用符号位+-引起了注意),因此我们现在应将其乘以2。 这是由编码器通过在代码中左移来智能地完成的!

  

Result_Q24 =   0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 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 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0

转换为等效数字,符号= 0,整数值= 0;

  

ADC_Value_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_Value_pu = 0.499;

对于+ -10A的ADC,这是5A的等效pu表示。

我希望能对此进行解释。有关更多信息,请通过以下链接花一天的时间了解IQMath格式: http://processors.wiki.ti.com/images/8/8c/IQMath_fixed_vs_floating.pdf