打印

脉冲计数原理求解

[复制链接]
1204|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
damoyeren|  楼主 | 2014-12-15 18:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
小弟想对光电编码器输出的脉冲进行计数,从而来确定小车走过的距离,前进还是后退,前进距离前加+号,后退距离前加-号显示。

光电编码器原理:它输出有两路,分为A B相,通过A B两路脉冲的相位来确定,正转还是反转;通过脉冲计数来确定走过的距离。

我的思路:把光电编码器输出的脉冲接到INT0,有IT0=0这条语句设置中断由下降沿触发,然后在中断内对脉冲进行计数从而来确定距离。在硬件上由鉴相器来确定前进和后退。

有个问题:看了别人的程序有几个问题没搞懂

1.别人只用了编码器输出的一相脉冲,通过对数据求模,知道了正反转(见下面caiji程序)。数据求模不就是求绝对值吗?怎么能知道正反转?
2.程序如果相应中断,肯定是来了个下降沿,A1应该为低电平,中断程序里怎么判断A1==1了?
void caiji() interrupt 0      
{   
if(A1==0)
pulse++;
else if(A1==1)
pulse--;
}
3.下边这个就能求出正负号?
/***************发送数据求模******************************/
uchar tab1[]={0,0,0,0,0,0,0,0};
void qiumo(long int i)
{
if (i>=0)
{tab1[1]=10;}
else
{
  tab1[1]=11;       //负数符号位
  i=~i+1;        //负数数字位
}
tab1[2]=i/100000;
tab1[3]=i%100000/10000;
tab1[4]=i%10000/1000;
tab1[5]=i%1000/100;
tab1[6]=i%100/10;
tab1[7]=i%10;
}

相关帖子

沙发
cauhorse| | 2014-12-15 18:47 | 只看该作者
建议不要用中断来处理正交编码信号,如果速度高,容易丢数或者抖动。
“在硬件上由鉴相器来确定前进和后退”,这样你是已经获得了鉴相后的方向和脉冲信号了对吧?
那一路接计数,同时判断一下方向线确认计数方向是没有问题的。

使用特权

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

本版积分规则

126

主题

393

帖子

2

粉丝