[讨论] 求助关于DSP 28335的ECAP的一个问题

PALLEE   2015-12-31 11:25 楼主
用28335的ECAP功能对电机编码器脉冲计数

硬件连接方面CAP1通道接光耦隔离果的电机编码器A输出端,CAP2接B输出端

ECAP功能初始化之后,软件设定在A/B脉冲的上升沿进行捕捉,CEVT4第四个上升沿进入中断

设想正转的时候对A脉冲计数,反转的时候对B脉冲计数,代码如下
  1. interrupt void ISRCap2(void)//在B的上升沿有中断,进入中断判断
  2. {
  3.     if(CAP1_IN == 0)//B脉冲的上升沿,判断A脉冲的状态,如果为低,表明A脉冲晚于B脉冲
  4.     {
  5.         DELAY_US(20);
  6.         if(CAP1_IN == 0)
  7.         {
  8.             COUNT2 += 4;
  9.         }//只对B脉冲计数,COUNT2是B的计数值
  10.     }
  11.     else if(CAP1_IN == 1)
  12.     {
  13.         DELAY_US(20);
  14.         if(CAP1_IN == 1)
  15.         {
  16.             COUNT1 += 4;//对A脉冲计数,COUNT1是A的计数值
  17.         }
  18.     }
  19.     PieCtrlRegs.PIEACK.all = PIEACK_GROUP4;
  20.     ECap2Regs.ECCLR.all=0xFFFF;//clare all flag
  21. }
通过示波器观测,正转和反转输出的脉冲是不同的,相位差90度,编码器输出正常。
在定时器中断中将COUNT1和COUNT2写入SRAM中,并通过VIEW-MEMORY进行观测,理论上来说,电机朝一个方向转动,按照软件写法,应该只有1个脉冲计数,实际发现无论正转还是反转,两个脉冲都有计数值,差别是一个计数多些,一个少些,比如正转时,A脉冲计数为800,B为200,反转则相反。

问题:为什么A和B会都有计数值?有可能是哪里的问题?

由于要用到3个电机,所以没有用28335自带的EQEP模块,而且现在硬件上已不能做改动,只能在软件上更改,通过读编码器脉冲确定正反转,算出角度了。

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复