硬件平台:灯哥FOC学习套件
例程代码:
void Check_Sensor(void)
{
SetPhaseVoltage(3, 0, _3PI_2);
delay_ms(3000);
zero_electric_Angle = electricAngle();
SetPhaseVoltage(0, 0, _3PI_2);
delay_ms(500);
}
主要问题:
在进行编码器初始化时,设定角度为270°,iq为3,id为0。而不是使用设定角度为0°,iq为3,id为0。
解答如下:
在进行电机控制的时候一般将转子位置和0度重合,进行转子定位。
为什么需要定位?由于无刷电机起始位置未知,如果直接使用FOC算法进行控制,例如当转子位置位于125°的时候,程序认为此时为0度,从而会产生一个90°的电流,让电机逆时针进行旋转,此时电机就会一直反转下去。
定位方式,主要就是实现将转子定位到0度上,产生一个0°的电流。根据foc的算法主要就是生成一个Ualpha=a,Ubeta=0的一个电流,通过反clack变换就可以得到对应Uq,Ud,角度。也就是这个设定的值其实是可以变化的,但是一般常用的都是角度为270°,Iq=a,id=0。
本问题出现的原因是由于将FOC中clack变换使用的角度和最后实际电机角度混为一谈,导致的问题。