单片机与增量式旋转编码器的连接
A,B两点对应两个光敏接受管,A,B两点间距为 S2 ,角度码盘的光栅间距分别为S0和S1。
本文引用地址:https://www.eepw.com.cn/article/201611/316215.htm当角度码盘以某个速度匀速转动时,那么可知输出波形图中的S0:S1:S2比值与实际图的S0:S1:S2比值相同,同理角度码盘以其他的速度匀速 转动时,输出波形图中的S0:S1:S2比值与实际图的S0:S1:S2比值仍相同。如果角度码盘做变速运动,把它看成为多个运动周期(在下面定义)的组 合,那么每个运动周期中输出波形图中的S0:S1:S2比值与实际图的S0:S1:S2比值仍相同。
通过输出波形图可知每个运动周期的时序为
顺时针运动 逆时针运动
A B AB
1 1 11
0 110
0 0 00
1 0 01
我们把当前的A,B输出值保存起来,与下一个A,B输出值做比较,就可以轻易的得出角度码盘的运动方向,
如果光栅格S0等于S1时,也就是S0和S1弧度夹角相同,且S2等于S0的1/2,那么可得到此次角度码盘运动位移角度为S0弧度夹角的1/2,除以所消毫的时间,就得到此次角度码盘运动位移角速度。
S0等于S1时,且S2等于S0的1/2时,1/4个运动周期就可以得到运动方向位和位移角度,如果S0不等于S1,S2不等于S0的1/2,那么要1个运动周期才可以得到运动方向位和位移角度了。发一个机械式旋转编码器检测程序用51写的
#defineWA=PX.X
#defineWB=Py.y
voidencoder(void)
{
unsignedchari,j;
staticunsignedcharta,tb;
TR1=0;
i=WA;
j=WB;
if((i^j)&&(ta&tb))
{
if((i==1)&&(j==0))
{
count++;
}
elseif((i==0)&&(j==1))
{
count--;
}
}
评论