任何人都可以解释以下对话的工作方式吗?
clarke1.As =_IQ15toIQ((AdcResult.ADCRESULT0<<3)-_IQ15(0.50))<<1;
Piccolo设备具有12位ADC和16位ADC寄存器。AdcResult.ADCRESULT
寄存器是Piccolo设备的合理合理的;因此,首先将测量的相电流值换成三个转换为Q15格式(0至1.0),然后在偏移减法后转换为AC数量(±0.5)。最后,将其偏移一个(乘以两个),以将测得的相电流归一化为±1.0 pu。
我不明白。
您发布的讨论在用户方面假定了几件事:
- 熟悉ADC测量电路。
- 熟悉Ti的IQMATH格式。
我会尝试解释答案,但是如果仍然不清楚某些内容,请在以上两个详细信息中浏览以上两个。
让我们假设您使用Picollo控制器测量 -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 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1
现在,您需要将此数字转换为等效 -1 PU值,以进行进一步的处理foc或任何其他算法。这意味着,您需要将ADC结果乘以某个值,并且需要在浮点处的结果。虽然控制器可以直接可以使用,但是仅乘法操作确实会消耗很多处理时间!为了加速此类操作,尤其是对于分数数字,Texas Instruments的C28X处理器在代码中使用IQMATH格式。有关此帖子末尾的链接,有关此信息的更多信息。
首先,将16位ADC结果复制到32位蓄能器" AS-IS"中。
值: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 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
然后,它被转换为IQ15格式,其中最后15位代表左侧的分数部分。因此,Q值是:
q-value = 0 0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1
是错误的,因为前三位为零,并且我们的信息是从forth bit on-thard中存储的。因此,编码器将值转移到3位以纠正Q值。IQ15值因此,变为:
adcvalue_q15 = 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 1 1 0 0 0 0 0 0
offset = 0.5被减去2^( - 1)因此,q值为:
offset_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 0 0 0 0 0 0 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 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0
此值仍然是IQ15,它已转换为全局Q值,我想应该是Q24。
adcresult_q24 = 0 0 0 0 0 0 0 0 0 0 0 1 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 0 0 0 0
由于,这仅表示电流的一半幅度(由于 - 通过标志位照顾),我们现在应该将其乘以2。这是由代码中的左移来智能地完成的!
result_q24 = 0 0 0 0 0 0 0 0 0 0 1 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 0 0 0 0 0
如果我只看Q值,该Q值以Q24格式以上Bit-9开始,我会在此处获得ADC操作的结果:
q-value = 0 1 1 1 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 0 0 0 0 0 0
转换为等效数,符号= 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^(2^)(-9)) 1*(2^(-10))
adc_value_pu = 0.499;
是5a的等效PU表示,用于测量ADC -10a。
我希望这可以解释。有关更多信息,请通过以下链接花一天时间来了解iqmath格式:http://processors.wiki.ti.com/images/8/8c/iqmath_fixed_vs_floating.pdf