各位老师好,我有几个问题想不通,还望不吝赐教。我用TI的controlSUITE 调试Sensorless FOC of ACI_2833x例程,LEVEL从1到6都调试通过了。电机的速度只能手动设置SpeedRef的值来更改,现在我想实现电机自动在一段时间正转然后另一段时间反转的功能。
1、我在程序的开头只定义了_iq SpeedRef;但去掉了赋值,然后在MainISR函数里加了一段程序,自定义了int 32 cnt1变量,想在一段时间内给SpeedRef赋正值,一段时间赋负值,实现电机自动正反转的功能。但是编译之后warning显示variable "SpeedRef" was declared but never referenced,下载运行之后也没有实现想要的功能。程序如下:
interruptvoidMainISR(void)
{
IsrTicker++;
cnt1++;
if (0<cnt1<3000000)
{
_iq SpeedRef = _IQ(0.3);
}
elseif (3000000<=cnt1<6000000)
{_iq SpeedRef = _IQ(-0.3);
}
else if(cnt1>=6000000)
{cnt1=1;
_iq SpeedRef = _IQ(0);
}
但是如果我直接在MainISR里赋定值的话电机可以按照给定的速度来运转。我想请问既然这里的SpeedRef没有被引用那么值是从哪里给出的?怎么样才能实现电机自动正反转的功能?
2、通过设置变量我了解到,先是执行main函数初始化部分然后进入for循环等待,中断先执行offsetISR然后在IsrTicker大于20000时跳到MainISR中断函数执行。直接在状态机函数里对SpeedRef赋值也显示warning为variable "SpeedRef" was declared but never referenced,实际运行对电机也是没有影响。那么我想请教这几个问题:for循环里的状态机函数起了什么作用?offsetISR应该是用来补偿ADC的偏移量,既然IsrTicker大于20000后就只执行MainISR函数,为什么不在main函数直接补偿?
谢谢各位老师!