p->QepCountIndex = EvaRegs.T2CNT; // Get the timer 2 counter for one mechanical
revolution
EvaRegs.T2CNT = 0; // Reset the timer 2 counter
p->IndexSyncFlag = 0x00F0; // Set the index flag // p->IndexSyncFlag是个什么信号,
}
按照道理,PMSM应该有个初始定位的过程,采用最简单的6个区的定位,也就是针对编
码器发出的UVW信号判断在哪个60度的区,然后再给定角度完事,这段程序应该放在主
程序里系统初始化之后吧,假设此时UVW信号为101,这时候转子在第一个区,也就是0-60
度范围之内,那么就设定转子在相对于定子A相30度的地方,这样做有最大30度的误差,
会导致电机可能不会以最大转矩启动,但启动是没问题。
此时是不是应该把这些角度转换为脉冲个数,送给EvaRegs.T2CNT做为初始角度去计算,
//转子初始定位
if(GpioDataRegs.GPADAT.bit.GPIOA8==1&&GpioDataRegs.GPADAT.bit.GPIOA9==0&&GpioDataRegs.GPADAT.bit.GPIOA10==1)
InitAngle=30度;
if(GpioDataRegs.GPADAT.bit.GPIOA8==1&&GpioDataRegs.GPADAT.bit.GPIOA9==0&&GpioDataRegs.GPADAT.bit.GPIOA10==0)
InitAngle=90;
if(GpioDataRegs.GPADAT.bit.GPIOA8==1&&GpioDataRegs.GPADAT.bit.GPIOA9==1&&GpioDataRegs.GPADAT.bit.GPIOA10==0)
InitAngle=150;
if(GpioDataRegs.GPADAT.bit.GPIOA8==0&&GpioDataRegs.GPADAT.bit.GPIOA9==1&&GpioDataRegs.GPADAT.bit.GPIOA10==0)
InitAngle=210;
if(GpioDataRegs.GPADAT.bit.GPIOA8==0&&GpioDataRegs.GPADAT.bit.GPIOA9==1&&GpioDataRegs.GPADAT.bit.GPIOA10==1)
InitAngle=270;
if(GpioDataRegs.GPADAT.bit.GPIOA8==0&&GpioDataRegs.GPADAT.bit.GPIOA9==0&&Gpio
DataRegs.GPADAT.bit.GPIOA10==1) InitAngle=330;