28335的ECAP功能的问题,求思路

2019-07-21 19:35发布

用28335的ECAP功能对电机编码器脉冲计数

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

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

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

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

由于要用到3个电机,所以没有用28335自带的EQEP模块,而且现在硬件上已不能做改动,只能在软件上更改,通过读编码器脉冲确定正反转,算出角度了。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。