0

谁能解释下面的对话是如何工作的?

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

Piccolo 设备具有 12 位 ADC 和 16 位 ADC 寄存器。对于AdcResult.ADCRESULTPiccolo 设备,寄存器是正确的;因此,测得的相电流值先左移 3 位,转换为 Q15 格式(0 到 1.0),然后通过偏移减法转换为交流量(±0.5)。最后,将其左移 1(乘以 2)以将测量的相电流标准化为 ± 1.0 pu。

我不明白这一点。

4

1 回答 1

1

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

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

我会尝试解释答案,但如果仍有不清楚的地方,请更详细地阅读上述两个。

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

即 +-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 位寄存器中。此外,正如已经提到的,这是正确的。即数字存储如下 AdcResult.ADCRESULT0 = 0x0BFF;

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

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

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

值:0 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

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

Q 值 = 0 0 0 1 0 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 值将是:

偏移量_Q15:0 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 0

ADCResult_Q15 = ADCValue_Q15 - Offset_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。这是由编码器通过代码中的左移智能完成的!

结果_Q24 = 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 0

如果我只看 Q24 格式的 Q 值,它在上面的第 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

转换成等值数,sign = 0, int_value = 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

于 2018-07-22T13:01:42.373 回答