This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于clarke变换的疑问



// ------------------------------------------------------------------------------
// 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

  • 注释里写了,As和Bs是归一化的值。
  • 您好 感谢您的帮助
    对这里的归一化处理还是不太理解
    定义一个基值,变化的数值在0到基值之间,这样的变化的数值除以基值就能到0到1的数值范围,这是一个归一化过程吧,您看对吗?

    clarke变换里的处理,采集近来的两相电流是0到1的范围,减去偏差值0.5,得到正负0.5的数值,
    代码里又将正负0.5的数值乘以2

    注释里写的归一化处理,在这里看起来更像是扩倍,这样的扩倍有什么理论依据吗?
  • “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占空比的时候,一致就好。