TI中文支持网
TI专业的中文技术问题搜集分享网站

求助CCS5.5环境下定时器0中断问题

     在CCS5.5环境下调试有感无刷电机开环控制程序,遇到转速计算不正确的问题。我用ccs5.5观察有关变量,发现是定时器0的中断次数有问题,定时周期1us,在定时器0中断子程序里面对中断次数time计数,然后在捕获中断ISRCAP里面调用time。但是发现time值一直在0到2范围变化,转速慢的情况下也是。这样计算的转速是每分钟几万转。电机额定4000rmp,cap中断间隔应该是毫秒级的,time至少是三位数吧。会是CCS5.5的问题吗?有没有可能CMD文件的问题?程序已经检查了,没发现错误,电机也能转。

Eric Ma:

Time 变量有被清除吗?还有先看看定时中断1us是ok的。

Eric

     在CCS5.5环境下调试有感无刷电机开环控制程序,遇到转速计算不正确的问题。我用ccs5.5观察有关变量,发现是定时器0的中断次数有问题,定时周期1us,在定时器0中断子程序里面对中断次数time计数,然后在捕获中断ISRCAP里面调用time。但是发现time值一直在0到2范围变化,转速慢的情况下也是。这样计算的转速是每分钟几万转。电机额定4000rmp,cap中断间隔应该是毫秒级的,time至少是三位数吧。会是CCS5.5的问题吗?有没有可能CMD文件的问题?程序已经检查了,没发现错误,电机也能转。

RONGJIN YANG:

回复 Eric Ma:

如果不在CAP中断里调用time,中断计数是正常,定时点亮led也是正常的。但是一旦在CAP中断里面调用了time,计数就不正常了。下面是调用time的程序段,麻烦您帮我看一下是不是有问题。这里面的count就是前面提到的中断次数变量time。

Time=count; //每换向一次,取定时器0的中断次数count SumTime+=Time; //计算定时中断总次数 l++; if(l==24) //4对磁极,转一圈有24个换向 { l=0; speed[nn]=(1000000*60)/SumTime; //计算转速 nn++; SumTime=0; if(nn==20) //每存储20个速度值更新一次数组 { nn=0; } }

count=0; StopCpuTimer0(); CpuTimer0Regs.TIM.all=0x0000; // StartCpuTimer0();

     在CCS5.5环境下调试有感无刷电机开环控制程序,遇到转速计算不正确的问题。我用ccs5.5观察有关变量,发现是定时器0的中断次数有问题,定时周期1us,在定时器0中断子程序里面对中断次数time计数,然后在捕获中断ISRCAP里面调用time。但是发现time值一直在0到2范围变化,转速慢的情况下也是。这样计算的转速是每分钟几万转。电机额定4000rmp,cap中断间隔应该是毫秒级的,time至少是三位数吧。会是CCS5.5的问题吗?有没有可能CMD文件的问题?程序已经检查了,没发现错误,电机也能转。

RONGJIN YANG:

回复 RONGJIN YANG:

找到了错误的地方,之前我在CAP中断程序里面对GPIO24-26的寄存器进行操作时,使用了EALLOW和EDIS,因为GPIO功能选择的初始化程序里面就这么用的。现在去掉了CAP中断里的这两句代码,定时器中断次数显示正常了。这两句话影响了CAP中断 对定时器中断内部变量的调用?

赞(0)
未经允许不得转载:TI中文支持网 » 求助CCS5.5环境下定时器0中断问题
分享到: 更多 (0)