打印

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

[复制链接]
1099|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
pallee|  楼主 | 2016-1-10 15:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用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模块,而且现在硬件上已不能做改动,只能在软件上更改,通过读编码器脉冲确定正反转,算出角度了。

相关帖子

沙发
wbaoj123| | 2016-1-12 09:24 | 只看该作者
请问电机速度多少

使用特权

评论回复
板凳
pallee|  楼主 | 2016-1-14 19:40 | 只看该作者
用的编码器脉冲约为1圈128个脉冲,速度很低
电机减速比是361

使用特权

评论回复
地板
fanxingxing| | 2016-7-25 18:27 | 只看该作者
DELAY_US(20);你的这个延时时间有什么依据?是随便给的吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

177

帖子

2

粉丝