[C语言] 光电编码器电机正反转

[复制链接]
3189|5
 楼主| paco_cai 发表于 2014-9-21 16:22 | 显示全部楼层 |阅读模式
ATMEGA48单片机,使用增量式光电编码器测电机转速和转向,LCD1602显示。转速已经测量出来了,但电机的转向,虽然大概知道原理但具体的程序实现不了。正转时B相脉冲超前A相90度,反转则相反是吧,我将AB相分别接入外部中断0和1:

ISR(INT0_vect)//中断服务函数,上升沿触发
{
     flag=PIND;                        //两个外部中断在PD2和PD3口
     flag|=0B11110011;          //这里读入PD口状态,并滤去其他位只观察PD2PD3
     if(flag==0B11110111)      //当PD2为1且PD3为0时,表示正转      
                {表示正转了}
}

ISR(INT1_vect)
{
     flag=PIND;
     flag|=0B11110011;
     if(flag==0B11111011)
        {表示反转了}
}
 楼主| paco_cai 发表于 2014-9-21 19:08 | 显示全部楼层
麻烦大神指教
airwill 发表于 2014-9-21 21:13 | 显示全部楼层
两个中断里都可以判断出正反转。
 楼主| paco_cai 发表于 2014-9-21 22:29 | 显示全部楼层
airwill 发表于 2014-9-21 21:13
两个中断里都可以判断出正反转。

额我还是不懂
longmaodo 发表于 2014-9-24 14:23 | 显示全部楼层
因为你相位相差90度
如果A在上升沿时 B处在低电平 则正转
如果A在上升沿时 B处在低电平 则反转

在B的中断中也是这样的,所以airwill说的对呀
两个中断中都能判断正反转
longmaodo 发表于 2014-9-24 14:23 | 显示全部楼层
你画画A B 的波形图就明白了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

27

主题

62

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部