// ——————————————————————————
// Measure phase currents, subtract the offset and normalize from (-0.5,+0.5) to (-1,+1).// Connect inputs of the CLARKE module and call the clarke transformation macro
// ——————————————————————————
clarke1.As = _IQmpy2(_IQ12toIQ(AdcResult.ADCRESULT1)-offsetA); // Phase A curr.
clarke1.Bs = _IQmpy2(_IQ12toIQ(AdcResult.ADCRESULT2)-offsetB); // Phase B curr.
这是代码中clarke变换部分
请问减去偏差值之后为什么还要乘以2呢
如果乘以2,clarke模块的输入不就变成clarke1.As = 2xIa;clarke1.Bs = 2xIb了吗
难道不应该是clarke1.As = Ia;clarke1.Bs = Ibma
Young Hu:注释里写了,As和Bs是归一化的值。
// ——————————————————————————
// Measure phase currents, subtract the offset and normalize from (-0.5,+0.5) to (-1,+1).// Connect inputs of the CLARKE module and call the clarke transformation macro
// ——————————————————————————
clarke1.As = _IQmpy2(_IQ12toIQ(AdcResult.ADCRESULT1)-offsetA); // Phase A curr.
clarke1.Bs = _IQmpy2(_IQ12toIQ(AdcResult.ADCRESULT2)-offsetB); // Phase B curr.
这是代码中clarke变换部分
请问减去偏差值之后为什么还要乘以2呢
如果乘以2,clarke模块的输入不就变成clarke1.As = 2xIa;clarke1.Bs = 2xIb了吗
难道不应该是clarke1.As = Ia;clarke1.Bs = Ibma
user78960159:
回复 Young Hu:
您好 感谢您的帮助
对这里的归一化处理还是不太理解
定义一个基值,变化的数值在0到基值之间,这样的变化的数值除以基值就能到0到1的数值范围,这是一个归一化过程吧,您看对吗?
clarke变换里的处理,采集近来的两相电流是0到1的范围,减去偏差值0.5,得到正负0.5的数值,
代码里又将正负0.5的数值乘以2
注释里写的归一化处理,在这里看起来更像是扩倍,这样的扩倍有什么理论依据吗?
// ——————————————————————————
// Measure phase currents, subtract the offset and normalize from (-0.5,+0.5) to (-1,+1).// Connect inputs of the CLARKE module and call the clarke transformation macro
// ——————————————————————————
clarke1.As = _IQmpy2(_IQ12toIQ(AdcResult.ADCRESULT1)-offsetA); // Phase A curr.
clarke1.Bs = _IQmpy2(_IQ12toIQ(AdcResult.ADCRESULT2)-offsetB); // Phase B curr.
这是代码中clarke变换部分
请问减去偏差值之后为什么还要乘以2呢
如果乘以2,clarke模块的输入不就变成clarke1.As = 2xIa;clarke1.Bs = 2xIb了吗
难道不应该是clarke1.As = Ia;clarke1.Bs = Ibma
Eric Ma:“clarke1.As = _IQmpy2(_IQ12toIQ(AdcResult.ADCRESULT1)-offsetA); // Phase A curr.
clarke1.Bs = _IQmpy2(_IQ12toIQ(AdcResult.ADCRESULT2)-offsetB); // Phase B curr.
这是代码中clarke变换部分
请问减去偏差值之后为什么还要乘以2呢
如果乘以2,clarke模块的输入不就变成clarke1.As = 2xIa;clarke1.Bs = 2xIb了吗
难道不应该是clarke1.As = Ia;clarke1.Bs = Ibma”
ERIC:
TI的电机控制算法,采用的是归一化的写法,也叫标幺化,你可以百度一下。
标幺化,就是把信号或过程量最大值都转换成1.
clarke1.As = _IQmpy2(_IQ12toIQ(AdcResult.ADCRESULT1)-offsetA);
这个写法的含义是,_IQ12toIQ(AdcResult.ADCRESULT1) 将ADC的采样值转换成Q24的结构,ADC采样就是12位的,标幺的基值是实际的采样电流值,即这里的1,表示的是4095对应的采样电流值。
然后减去Q24格式的偏置。
至于乘以2,是因为减去偏置后,就变成-0.5~0.5, 它再乘以2,变成-1~1,也是为了过程计算的方便吧。然后在输出PWM占空比的时候,会考虑到这里的乘以2的。
当然,你不乘以2也可以,输出PWM占空比的时候,一致就好。