Quantcast
Channel: C2000™︎ 微控制器论坛 - 最近的话题
Viewing all articles
Browse latest Browse all 12291

Sensorless FOC of ACI_2833x例程如何实现电机自动正反转

$
0
0

各位老师好,我有几个问题想不通,还望不吝赐教。我用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函数直接补偿?

谢谢各位老师!


Viewing all articles
Browse latest Browse all 12291

Latest Images

Trending Articles

<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>